KillTimer klappt nicht

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
  • Grüße, ich wollte meinen Timer beenden unter bestimmten Bedingungen. Natürlich habe ich nachgeprüft wo der Fehler liegt und ordentlich geprintet. Der Timer wird nur einmal gesetzt und läuft dann in seiner Schleife weiter. An den Stellen wo ich KillTimer nutze habe ich einen Print gesetzt und dieser wird auch angezeigt. Jedoch wird der Timer nicht gestoppt und die Schleife geht immer weiter ohne das er irgendwo neu gesetzt wurde. Sieht jemand den Fehler?

    public ActorSchiessen()
    {
    if(JamaicaGibtBefehl == 1)
    {
    JamaicaGibtBefehl =0;
    KillTimer(ActorSchiessenTimer);
    ActorSchiessenTimer = SetTimer("ActorSchiessen", 5000, true);
    }
    MotelRuhigAbfragen();
    print("Schiessen Timer läuft");
    new IfSchiesst;
    if(MotelUnruhig == 1)
    {
    for(new p;p<MAX_PLAYERS;p++)
    {
    if(!IsCrip(p))
    {
    if(IsSchlaeger[p] == 1 || IsMotelSchuetze(p) || IsSchusswaffe(p))
    {
    if(JamaicaAngeschossen == 0 && RezepLadyTot == 0 && JamaicaVerletzt == 0)
    {
    if(IsPlayerInRangeOfPoint(p,4.5,2216.503906,-1152.774169,1025.796875) || IsPlayerInRangeOfPoint(p,3.0,2221.090576,-1153.498657,1025.796875) || IsPlayerInRangeOfPoint(p,3.0,2216.586425,-1147.341552,1025.796875) || IsPlayerInRangeOfPoint(p,3.0,2215.256835,-1150.719726,1025.796875))
    {
    new Float:health;
    GetPlayerHealth(p,health);
    if(health < 81){ImMotel[p]=0;}
    SetPlayerHealth(p,health-80);
    IfSchiesst = 1;
    }
    }
    }
    }
    if(IfSchiesst == 1)
    {
    if(IsPlayerInRangeOfPoint(p,20.0,2216.407714,-1148.544921,1025.796875))
    {
    SendClientMessage(p,COLOR_PURPLE,"Jamaica_Nolan schießt mit ihrer AK um sich!");
    }
    }
    }
    }
    if(MotelUnruhig == 0)
    {
    if(ActorLeben())
    {
    print("Actor Waffen weg wird gesetzt");
    KillTimer(ActorSchiessenTimer);
    ActorWaffenWeg();
    return 1;
    }
    }
    return 1;
    }


    Der Timer schickt dann immer wieder die Befehle MotelRuhigAbfragen und ActorWaffenWeg los.

  • JamaicaRuhig ist auf 0. Wie gesagt der Timer läuft in der Schleife ab und wird nicht neu gesetzt (durch print getestet).
    MotelUnruhig ist auf 0, Wie gesagt Timer schickt den Befehl ActorWaffenWeg los. Dort wird der Timer dann auch eig gekillt.


    Der Timer wird weiter entfernt losgeschickt:
    if(JamaicaDrehtAb >= 3){KillTimer(JamaicaChecktAbTimer);JamaicaGibtBefehl = 1;ActorSchiessenTimer = SetTimer("ActorSchiessen", 5000, true);}


    Dann landet er im Public bei JamaicaGibtBefehl, wird gekillt und neu gesetzt. Ab da an läuft er nur noch in seiner Schleife weiter:
    if(JamaicaDrehtAb >= 3){KillTimer(JamaicaChecktAbTimer);JamaicaGibtBefehl = 1;ActorSchiessenTimer = SetTimer("ActorSchiessen", 5000, true);}


    EDIT:


    Ich habe jetzt nochmal nachgeschaut ob alles klappt ohne die Ecke JamaicaGibtBefehl. Dann bricht der Timer wunderbar ab und Ende. Mir scheint es irgendwie wenn die Ecke JamaicaGibtBefehl den Timer 2x laufen lässt. (Der Text das sie schießt kommt dann auch 2 mal ansonsten nicht) Aner der wird doch gekillt?

    Einmal editiert, zuletzt von Rexo ()

  • Kommt er vielleicht in diese Abfrage hier mehr als 1x rein ?
    if(JamaicaDrehtAb >= 3)
    {
    KillTimer(JamaicaChecktAbTimer);
    JamaicaGibtBefehl = 1;
    print("ActorSchiessenTimer wurde gestartet");//Wie oft würde er dies ausgegeben wenn du den print einfügst ? Evtl wird 'ActorSchiessenTimer' ja überschrieben.
    ActorSchiessenTimer = SetTimer("ActorSchiessen", 5000, true);
    }


    //edit

    Aner der wird doch gekillt?

    Also in der Abfrage wird er nicht 'gekillt' aber du könntest den Timer zur Sicherheit killen.

  • Es sind immer die kleinen verdammten Fehler die man nicht findet^^



    if(JamaicaGibtBefehl == 1)
    {
    KillTimer(ActorSchiessenTimer);
    ActorSchiessenTimer = SetTimer("ActorSchiessen", 5000, true);
    print("HIER HIER HIER");
    JamaicaGibtBefehl =0; //So ist es richtig....
    }



    if(JamaicaGibtBefehl == 1)
    {
    JamaicaGibtBefehl =0; //DER WAR FALSCH!
    KillTimer(ActorSchiessenTimer);
    ActorSchiessenTimer = SetTimer("ActorSchiessen", 5000, true);
    print("HIER HIER HIER");
    }


    Danke dir aber auf jeden Fall für die HIlfe. Hätte noch ewig gebraucht um auf den Fehler zu stoßen ohne Denkanstoß^^