Beiträge von JustMe.77

    Eben mal per Handy geschrieben, hoffe sind keine Fehler drin und sorry wenn's scheiße eingedrückt ist :)




    public OnPlayerDeath(playerid, killerid, reason)
    {
    if (gTeam[playerid] == 2)
    {
    WantedPoints[killerid] += 10
    }
    else
    {
    WantedPoints[killerid] += 5
    }
    return 1;
    }


    So würde Ich das machen, gegenfalls nochmal anpassen.

    Das ganze machst du unter OnPlayerDeath.
    Du musst abfragen ob der Spieler den killerid getötet hat ein Cop war, ist das der Fall gibst du killerid 10 Wanteds, ansonsten nur 5 :)


    Falls du nicht genau weißt wie das geht, benötigen wir einmal deine Wanted Funktion und die Variablen wenn ein Spieler ein Cop ist :)

    Ist es möglich eine Rundung als TextDraw zu machen?

    Ja, ist möglich mit Sprites zum Beispiel :)


    Edit2:


    Hi, erstelle 2 Labels pro Spieler und update sie und zeige eine Zeit an. Davon geht aber immer ein Timer in den negativen Bereich, wenn ID 1 zuerst die Labels erstellt.
    Woran kann das liegen, Fehler im Timer oder beim updaten von den Labels?


    Label (nur eins davon)


    new Text3D:bikelabel[MAX_PLAYERS];



    bikelabel[playerid] = CreateDynamic3DTextLabel(""#BikeTime"{FFFFFF}s\nleft", COLOR_RED, x, y, z, 50.0, INVALID_PLAYER_ID, createdBike[playerid], 0,-1,-1,-1,50.0);



    Timer:



    forward BikeCountDown(playerid);
    public BikeCountDown(playerid)
    {
    new str[144];
    if(BikeCD[playerid] <= BikeTime)
    {
    BikeCD[playerid]--;
    format(str, sizeof(str),"%d{FFFFFF}s\nleft", BikeCD[playerid]);
    UpdateDynamic3DTextLabelText(bikelabel[playerid], COLOR_RED, str);



    }



    if(BikeCD[playerid] == 0)
    {
    BikeCD[playerid] = BikeTime;
    //KillTimer(DestroyBikeTimer[playerid]);
    KillTimer(BikeLabelUpdate[playerid]);
    DestroyDynamic3DTextLabel(bikelabel[playerid]);
    return 1;
    }



    return 1;
    }

    Hi, speichere aktuell alle Spieler Daten nur per OnPlayerDisconnect, was ziemlich ungünstig ist wenn mal der Server abstürzt.


    Meine Frage:


    Was wäre die beste Methode von jedem Spieler die Daten zu speichern?


    Alle aufeinmal - per Timer?
    Für jeden Spieler einzeln - per Timer?
    Gibt's noch andere Methoden?


    Falls ich es per Timer machen soll, was würdet ihr für eine Zeit empfehlen?


    @Y3tti


    Du kannst die Ausdauer wiederherstellen indem du den Spieler einmal spawnst und dann ggf. zu seiner alten Position setzt.



    CMD:ausdauer(playerid)
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    SpawnPlayer(playerid);
    SetPlayerPos(playerid, x, y, z);
    SendClientMessage(playerid, -1, "Ausdauer wiederhergestellt");
    return 1;
    }

    @DogZone


    Danke, habe das jetzt so gelöst und es klappt wunderbar :)


    Befehl:



    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    box[playerid] = CreateDynamicObject(3798, x, y+3, z-1.0, 0.0, 0.0, 0.0, -1, -1, -1, 200.0, 200.0);
    boxlabel[playerid] = Create3DTextLabel("0:30", 0x00FFFFFF, x,y+3,z, 25, 0, 0);
    SendClientMessage(playerid, -1, "Box {00FF00}created");
    PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0);
    blockboxspawn[playerid] = true;



    deleteboxes[playerid] = SetTimerEx("deletebox", 30*1000, 0, "i", playerid);
    bUpdate[playerid] = SetTimerEx("boxcountdown", 1000, true, "i", playerid);
    boxamount[playerid]--;
    return 1;


    Label Updaten:



    forward boxcountdown(playerid);
    public boxcountdown(playerid)
    {
    new str[144];
    countdown[playerid]--;
    format(str, sizeof(str),"%d", countdown[playerid]);
    Update3DTextLabelText(boxlabel[playerid], 0x00FFFFFF, str);




    if(countdown[playerid] == 0)
    {
    Delete3DTextLabel(boxlabel[playerid]);
    countdown[playerid] = 30;
    KillTimer(bUpdate[playerid]);
    return 1;
    }



    return 1;
    }

    Hi, kann mir jemand bei meinem Timer helfen? Habe es mittlerweile so, aber es updated sich nicht und zeigt keine korrekten Werte an:



    forward boxcountdown(playerid);
    public boxcountdown(playerid)
    {
    new str[144];
    if(countdown[playerid] > gettime())
    {



    countdown[playerid]--;
    format(str, sizeof(str),"%d", countdown[playerid]-gettime());
    Update3DTextLabelText(boxlabel[playerid], 0x00FFFFFF, str);



    }



    if(countdown[playerid] == 0)
    {
    Delete3DTextLabel(boxlabel[playerid]);
    countdown[playerid] = 30;
    return 1;
    }



    return 1;
    }



    Im Befehl:



    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    box[playerid] = CreateDynamicObject(3798, x, y+3, z-1.0, 0.0, 0.0, 0.0, -1, -1, -1, 200.0, 200.0);
    boxlabel[playerid] = Create3DTextLabel("0:30", 0x00FFFFFF, x,y+3,z, 25, 0, 0);
    SendClientMessage(playerid, -1, "Box {00FF00}created");
    PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0);
    blockboxspawn[playerid] = true;



    deleteboxes[playerid] = SetTimerEx("deletebox", 30*1000, 0, "i", playerid);
    SetTimerEx("boxcountdown", 1000, false, "i", playerid);
    boxamount[playerid]--;
    countdown[playerid] = gettime()+30;


    Hatte vor, dass sich der 3D Text updatet und anzeigt wie lange das Objekt das ich erstellt habe noch auf dem Boden bleibt bevor es gelöscht wird, aber ich mache einiges falsch :x