PayDay problem mit dem Timer.

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Ich habe für den Payday einen timer erstellt, jedoch kriegt man alle 60 Sekunden 2 Minuten abgezogen :X


    forward paydaytimer(playerid);


    SetTimer("paydaytimer",1000*60,1);


    public paydaytimer(playerid)
    {
    PayerControl[playerid][sPayDay] -= 1;
    if(PayerControl[playerid][sPayDay] == 0)
    {
    SendClientMessage(playerid,COLOR_WHITE,"PayDay!");
    GivePlayerMoney(playerid,1000);
    PayerControl[playerid][sPayDay] = 60;


    }
    return 1;
    }

    Einmal editiert, zuletzt von Shad ()

  • Ich denke, du willst jede Stune einen Payday erhalten. So du benutzt dafür eine Variable, die die verbleibenden Minuten enthält. Bdeutet also, dass der Public jede Minute (60 Sekunden = 60000 Millisekunden) aufgerufen werden muss. Soweit so gut, da du das ja schon hast. Thoretisch dürfte das auch so funktionieren. Das einzige, was ich jetzt noch komisch finde ist, dass du in deinem payday public einen integer Wert nutzt, der nicht übermittelt wird. Ich würde hier auf jeden Fall SetTimerEx nutzen, da so der Int Wert übermittelt werden kann. Dies könnte auch dein Problem lösen, da der public dann für einen Spieler genau das macht, was er auch soll und nicht zufällig einem Spieler zweimal den Public durchführt.


    SetTimerEx("paydaytimer",1000*60,1,"i",playerid);

  • aber wo kommt der Timerex hin? in "OnGameModeInit" oder? aber soviel wie ich weiß kann man dort keine PlayerId definieren :X weil ich bekomme Error das Playerid nicht vorhanden währe.

  • Jaja da natürlich nicht. Di willst ja für jeden Spieler einen eigenen Timer haben oder ? Alternativ kannst du ja auch nur näherungswerte nehmen, sprich einen Timer, der alle 6 Sekunden mit einer for die Spieler durchgeht und jedem, egal ob schon 60 Sekunden auf dem Server oder nicht, eine Minute abzieht.


    Im ersten Falle musst du das unter OnPlayerConnect machen. Und nicht vergessen den Timer beim Disconnecten zu killen.


    SetPVarInt(playerid,"TIMERID",SetTimer....);
    KillTimer(GetPVarInt(playerid,"TIMERID");

  • Jaja da natürlich nicht. Di willst ja für jeden Spieler einen eigenen Timer haben oder ? Alternativ kannst du ja auch nur näherungswerte nehmen, sprich einen Timer, der alle 6 Sekunden mit einer for die Spieler durchgeht und jedem, egal ob schon 60 Sekunden auf dem Server oder nicht, eine Minute abzieht.


    Im ersten Falle musst du das unter OnPlayerConnect machen. Und nicht vergessen den Timer beim Disconnecten zu killen.


    SetPVarInt(playerid,"TIMERID",SetTimer....);
    KillTimer(GetPVarInt(playerid,"TIMERID");


    ich werde da nicht schlau raus.


    also:
    ganz oben:
    new PDtimer;
    in connect:
    PDtimer = SetTimerEx("paydaytimer",1000*60,1,"i",playerid);


    und bei Disconnect:
    KillTimer(PDtimer);


    oder?


    //edit workt :)
    der geht nun immer alle 60 sekunden -1 :) danke dir.


    so nur noch Auto Problem lösen :D

  • Dass du eine globale Variable nimmst


    PDtimer


    Die bei jedem Spieler einen neuen Wert erhält, da SetTimer ja die TimeriD returnt ist eher suboptimal, da Spieler A Disconnected auch der Timer von Spieler B gekillt wird. Mach lieber für jeden Spieler eine eigene Variable in der die Timerid des Spielers gespeichert wird.


    SetPVarInt(playerid,"TIMERID",SetTimer....);
    KillTimer(GetPVarInt(playerid,"TIMERID");