Problem mit 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
  • hey hey eine frage ich habe ein torhack system un ich möchte das das tor nicht gleich aufgeht sondern das man eine Minute warten muss
    hier mein Befehl



    if (strcmp(cmdtext, "/hackgate", true)==0)
    {
    if(PlayerInfo[playerid][pMember] == 5 || PlayerInfo[playerid][pLeader] == 5)
    {
    if(!whatever)
    {
    SetTimer("lcntor", 600000, 0);
    MoveDynamicObject(lcntor,1792.4239501953, -1444.0385742188, 9.5953044891357, 3.5);

  • Jetzt noch die Public von lcntor, da schreibste rein, was passieren soll.


    //Da muss ich das MoveDynamicObject..


  • SetTimer("lcntor", 600000, 0);


    1 Sekunde = 1000 Millisekunden
    60 Sekunden = 60000 Millisekunden = 1 Minute
    Fazit: 1x Null weg. Im Endeffekt siehts dann so aus:



    forward lcntor();


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/hackgate", true))
    {
    SetTimer("lcntor", 60000, false);
    return 1;
    }
    return 0;
    }


    public lcntor()
    {
    MoveDynamicObject(lcntor,1792.4239501953, -1444.0385742188, 9.5953044891357, 3.5);
    }


    Quellen: http://wiki.sa-mp.com/wiki/SetTimer


    EDIT: Grammatik und kaputter Link

  • Nein, ich meine in der Public dann, also


    public lcntor()
    {
    Dein Tor hier rein.. Und der rest auch, außer den timer halt (:
    }

  • Okay, dann hier meine Erklärung zum Timer:


    Als aller erstes musst du



    forward TimerName();


    in dein Script einfügen, am besten nach ganz oben zu den Präprozessordirektiven (#include, #define [...]). Das macht's einfach übersichtlicher. Dann muss der Timer in irgend einer anderen Funktion gestartet werden, in deinem Fall also bei einem Befehl, welcher /torhack heißt.



    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/torhack", true))
    {
    SetTimer("TimerName", 60000, false);
    return 1;
    }
    return 0;
    }


    Dieses "SetTimer" bewirkt nur, dass das Script anfängt zu zählen. Undzwar
    1
    2
    3
    4
    5
    ...
    60000


    Das ganze dauert 60'000 Millisekunden (Hey, da bemerken wir doch eine Gemeinsamkeit mit dem 2. Parameter), also 60 Sekunden, was insgesamt einer Minute entspricht.
    Doch was soll nach Ablauf dieser 60'000 Millisekunden passieren? Ganz einfach, wir schreiben das in unsere bisher deklarierte Funktion: TimerName.



    public TimerName()
    {
    // Inhalt hier, also was passieren soll.
    }


    Wenn wir also ein Object namens "lcntor" von einer bestimmten Koordinate auf:
    X: 1792.4239501953
    Y: -1444.0385742188
    Z: 9.5953044891357,
    bewegen wollen, benutzen wir den Befehl
    MoveDynamicObject(lcntor,1792.4239501953, -1444.0385742188, 9.5953044891357, 3.5);


    Also sieht unser komplettes Script am Ende so aus:



    forward TimerName();


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/hackgate", true))
    {
    SetTimer("TimerName", 60000, false);
    return 1;
    }
    return 0;
    }


    public TimerName()
    {
    MoveDynamicObject(lcntor,1792.4239501953, -1444.0385742188, 9.5953044891357, 3.5);
    }