Nochmal Timerfrage

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
  • also ich hab nen geldcheck gemacht der überprüft ob der spieler geld hat wenn ja gibs nen kick so aber warum geht das nicht?


    forward GeldCheck(playerid);
    public GeldCheck(playerid)
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(GetPlayerMoney(i) > 0)
    {
    SendClientMessage(playerid, FARBE_ROT, "Lass den Geldcheat aus!");
    ResetPlayerMoney(playerid);
    Kick(playerid);
    }
    }
    }
    kann es sein das bei forward (playerid) und nicht (i) steht? ?(

  • Du willst das man kein geld haben kann



    public GeldCheck(playerid)
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(GetPlayerMoney(i) >= 0)
    {
    SendClientMessage(playerid, FARBE_ROT, "Lass den Geldcheat aus!");
    ResetPlayerMoney(playerid);
    Kick(playerid);
    }
    }
    }

    RFT

  • Das funzt nie im Leben. Du musst mit Variable arbeiten und einem Timer der checkt ob er das Geld ausm SCript bekommt.

  • ......


    Epic Fail.


    Warum bitteschön hast du den Integer "playerid" im Callback Header, aber hast im Callback selbst einen for-Loop der von 0 - 199 geht, bzw. in diesem Fall für alle Player das Geld checkt?!


    So und nicht anders:
    @MoneyCheck();


    new i;


    @MoneyCheck()
    {
    for(; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerMoney(i) > 0)
    {
    SendClientMessage(i, FARBE_ROT, "Lass den Geldcheat aus!");
    ResetPlayerMoney(i);
    Kick(i);
    }
    }
    return 1;
    }


    // Dann nimm doch einfach meinen Code.......


  • new timer=0;


    forward Geldcheck


    public OnGamemodeInit()
    {
    timer=SetTimer("GeldCheck",1000,1); // jede Sekunde wird die Funktion Geldcheck aufgerufen
    }


    public OnGameModeExit()
    {
    DestroyTimer(timer);
    }


    public GeldCheck()
    {
    for(new playerid = 0;playerid<MAX_PLAYERS;playerid++)
    {
    if(GetPlayerMoney(playerid) >= 0)
    {
    SendClientMessage(playerid, FARBE_ROT, "Lass den Geldcheat aus!");
    ResetPlayerMoney(playerid);
    Kick(playerid);
    }
    }
    return 1;
    }

    Einmal editiert, zuletzt von Woozie ()

  • teste das mal einfach so



    forward GeldCheck(playerid);


    unter Ongamemodeinit



    public OnGameModeInit()
    {
    SetTimer("GeldCheck",1000,1);
    }



    public GeldCheck(playerid)
    {
    if(GetPlayerMoney(playerid) >= 1)
    {
    SendClientMessage(playerid,COLOR_RED,"Lass den GeldCheat Aus");
    ResetPlayerMoney(playerid);
    Kick(playerid);
    }
    return 1;
    }

    RFT

    Einmal editiert, zuletzt von RFT ()

  • Woozie, funktioniert nicht :>


    Woher soll Pawno bitte wissen was "playerid" für einen Wert hat?


    // BTW, warum gibst du dem Integer "timer" überhaupt noch einen Wert? ^^

  • Julian, deins funktioniert auch nicht, bzw. nur bei ID 0.


    Um deinen Code zu benützen bräuchte man SetTimerEx

  • Deins funktioniert nicht, glaub mir.


    Du hast im Callback den Parameter "playerid", aber übergibst ihn nicht über den Timer.

  • so gins danke an euch! :thumbup:
    forward GeldCheck();
    SetTimer("GeldCheck",5000,1);
    public GeldCheck()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(GetPlayerMoney(i) > 0)
    {
    SendClientMessage(i, FARBE_ROT, "Lass den Geldcheat aus!");
    ResetPlayerMoney(i);
    Kick(i);
    }
    }
    }

  • Ich zitiere mich nochmal, da ich was gefixed habe.
    1. eine Public Funktion braucht einen Rückggabewert (return)
    2. habe ich playerid anstelle von i eingebaut


    Zur Frage wegen der Variable bei Timer. In meinem Gamemode wird alles manuell entladen, was bei OnGameModeInit gesetzt/gestartet wurde. Das hat den Sinn, daß der SAMP Server seltenere abraucht, SAMP Client weniger Probleme bereitet und der Neustart sauberer ist. Das SAMP Team hat ihre Software nämlich in keinster Weise sauber programmiert. Wäre dies nämlich so, wäre ein GMX auch ein Reseten aller Variablen bzw. des benutzten Speichers.