Timer Bug

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
  • Guten Tag,


    Ich arbeite grade an meinen Toren und das komische ist das ich den Befehl 2 mal eingeben muss bis der timer sich aktiviert.
    Wenn ich danach ein anderes Tor öffne geht alles einfand frei.



    woran könnte das liegen??


    So wende ich den Timer an:



    SetTimerEx("CloseGateTimer",5000, 0, "i",3);


    Hier mein Timer public:



    public CloseGateTimer(gateID)
    {
    switch(gateID)
    {
    case 1:return MoveObject(Gate[0], -493.39999, -562.79999, 26.2,1), MoveObject(Gate[1], -485.60001, -562.79999, 26.2,1);
    case 2:return MoveObject(Gate[2],1589.6, -1638.2, 14.6,1.0);
    case 3:return MoveObject(Gate[3], 1544.7, -1630.8, 13.1-0.1, 1.0, 0, 89.25, 90);
    }
    return 1;
    }

    Mit freundlichen Grüßen,


    Fabi.StaR :love::saint:


  • Hier der Ganze /tor befehl:



    if(strcmp(cmd, "/tor", true) == 0 || strcmp(cmd, "/gate", true) == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid, 10, -493.39999, -562.79999, 26.2))//Wheelmen Gate
    {
    if(PlayerInfo[playerid][pFraktion] != 8 && PlayerInfo[playerid][pAdmin] < 4)return SCM(playerid, COLOR_WHITE, #FEHLERTEXT"Du besitzt nicht die benötigten Rechte.");
    MoveObject(Gate[0], -493.39999-8, -562.79999, 26.2, 1.0);//Wheelmen Links
    MoveObject(Gate[1], -485.60001+8, -562.79999, 26.2, 1.0);//Wheelmen Rechts
    SetTimerEx("CloseGateTimer",5000, 0, "i",1);
    return 1;
    }
    if(IsPlayerInRangeOfPoint(playerid, 10, 1589.6, -1638.2, 14.6))
    {
    if(PlayerInfo[playerid][pFraktion] != 2 && PlayerInfo[playerid][pAdmin] < 4)return SCM(playerid, COLOR_WHITE, #FEHLERTEXT"Du besitzt nicht die benötigten Rechte.");
    MoveObject(Gate[2],1589.6, -1638.2, 14.6-8,1.0);
    SetTimerEx("CloseGateTimer",5000, 0, "i",2);
    return 1;
    }
    if(IsPlayerInRangeOfPoint(playerid, 10, 1544.7, -1630.8, 13.1))
    {
    MoveObject(Gate[3], 1544.7, -1630.8, 13.1+0.1,1.0, 0, 0, 90);
    SetTimerEx("CloseGateTimer",5000, 0, "i",3);
    return 1;
    }
    return 1;
    }


    Kaliber das public CloseGateTimer wird nicht auf gerufen, warum weiß ich selber nicht.

    Mit freundlichen Grüßen,


    Fabi.StaR :love::saint:


  • Ich gehe davon aus, dass du den Timer woanders im Code versehentlich killst (alter Wert in einer Variable?).
    Füge die prints mal so hinzu und poste dann was im Log steht, wenn du es das erste mal, das zweite mal und das dritte mal eingibst.
    if(strcmp(cmd, "/tor", true) == 0 || strcmp(cmd, "/gate", true) == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid, 10, -493.39999, -562.79999, 26.2))//Wheelmen Gate
    {
    if(PlayerInfo[playerid][pFraktion] != 8 && PlayerInfo[playerid][pAdmin] < 4)return SCM(playerid, COLOR_WHITE, #FEHLERTEXT"Du besitzt nicht die benötigten Rechte.");
    MoveObject(Gate[0], -493.39999-8, -562.79999, 26.2, 1.0);//Wheelmen Links
    MoveObject(Gate[1], -485.60001+8, -562.79999, 26.2, 1.0);//Wheelmen Rechts
    new timer = SetTimerEx("CloseGateTimer",5000, 0, "i",1);
    printf("Timer1 ID: %d", timer);
    return 1;
    }
    if(IsPlayerInRangeOfPoint(playerid, 10, 1589.6, -1638.2, 14.6))
    {
    if(PlayerInfo[playerid][pFraktion] != 2 && PlayerInfo[playerid][pAdmin] < 4)return SCM(playerid, COLOR_WHITE, #FEHLERTEXT"Du besitzt nicht die benötigten Rechte.");
    MoveObject(Gate[2],1589.6, -1638.2, 14.6-8,1.0);
    new timer = SetTimerEx("CloseGateTimer",5000, 0, "i",2);
    printf("Timer2 ID: %d", timer);
    return 1;
    }
    if(IsPlayerInRangeOfPoint(playerid, 10, 1544.7, -1630.8, 13.1))
    {
    MoveObject(Gate[3], 1544.7, -1630.8, 13.1+0.1,1.0, 0, 0, 90);
    new timer = SetTimerEx("CloseGateTimer",5000, 0, "i",3);
    printf("Timer3 ID: %d", timer);
    return 1;
    }
    return 1;
    }

  • Code
    [16:18:48] Timer2 ID: 4
    [16:22:17] Timer2 ID: 5
    [16:22:23] Das Gate mit der ID:(3) wird geschlossen
    [16:22:31] Timer2 ID: 6
    [16:22:36] Das Gate mit der ID:(3) wird geschlossen


    Sorry hab ich überlesen :)

    Mit freundlichen Grüßen,


    Fabi.StaR :love::saint:


  • Kein Problem.
    Gut, also das sieht mir stark danach aus. Beheben kannst du das nur, indem du den Code findest, der dir den Timer 4 stoppt, da müsstest du alle deine KillTimer's mal debuggen (print davor setzen und die Timer ID ausgeben lassen).
    Wenn dir das zu viel Arbeit ist, könntest du es (gegebenenfalls übergangsweise) auch so umgehen:
    if(strcmp(cmd, "/tor", true) == 0 || strcmp(cmd, "/gate", true) == 0)
    {
    SetTimerEx("CloseGateTimer",100, 0, "i",-1);
    if(IsPlayerInRangeOfPoint(playerid, 10, -493.39999, -562.79999, 26.2))//Wheelmen Gate
    {
    if(PlayerInfo[playerid][pFraktion] != 8 && PlayerInfo[playerid][pAdmin] < 4)return SCM(playerid, COLOR_WHITE, #FEHLERTEXT"Du besitzt nicht die benötigten Rechte.");
    MoveObject(Gate[0], -493.39999-8, -562.79999, 26.2, 1.0);//Wheelmen Links
    MoveObject(Gate[1], -485.60001+8, -562.79999, 26.2, 1.0);//Wheelmen Rechts
    new timer = SetTimerEx("CloseGateTimer",5000, 0, "i",1);
    printf("Timer1 ID: %d", timer);
    return 1;
    }
    if(IsPlayerInRangeOfPoint(playerid, 10, 1589.6, -1638.2, 14.6))
    {
    if(PlayerInfo[playerid][pFraktion] != 2 && PlayerInfo[playerid][pAdmin] < 4)return SCM(playerid, COLOR_WHITE, #FEHLERTEXT"Du besitzt nicht die benötigten Rechte.");
    MoveObject(Gate[2],1589.6, -1638.2, 14.6-8,1.0);
    new timer = SetTimerEx("CloseGateTimer",5000, 0, "i",2);
    printf("Timer2 ID: %d", timer);
    return 1;
    }
    if(IsPlayerInRangeOfPoint(playerid, 10, 1544.7, -1630.8, 13.1))
    {
    MoveObject(Gate[3], 1544.7, -1630.8, 13.1+0.1,1.0, 0, 0, 90);
    new timer = SetTimerEx("CloseGateTimer",5000, 0, "i",3);
    printf("Timer3 ID: %d", timer);
    return 1;
    }
    return 1;
    }
    Das behebt das Problem zwar nicht im Ursprung, aber in der Ausführung. Falls nicht, poste nochmal die prints.

  • Ich habe nirgendswo CloseTimer. das ist ja das komische


    CloseTimer? Du meinst KillTimer. Such mal danach.
    Möglicherweise in einer Include oder einem Filterscript?


    Funktioniert der Befehl denn, wenn du es so machst? Falls der Grund für den Fehler nicht auffindbar ist könntest du es dann ja so machen (im Endeffekt wird es der User nicht merken).

  • Wenn du nirgends einen Timer killst ist das Problem eigentlich nicht zu erklären, ich wüsste zumindest nicht, was die Ursache sonst sein könnte.
    Ich würde es vorerst einfach so lassen, spielt ja keine Rolle. Vielleicht findet sich irgendwann der Fehler von selbst, und wenn nicht ist es auch nicht wirklich tragisch, sofern das das einzige Problem mit den Timern ist.