Timerfehler

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
  • Moin, ich habe nochmal ne Frage, bei mir ist es im Script so das ich wenn ich ein Command mache und darin kommt ein Timer vor also
    SetTimerEx(..);
    dieser Timer wird erst bei dem 2 mal gestartet, also wenn ich das Command zum 2ten mal eingebe, was ist da schief? ein Beispiel



    CMD:starttimer(playerid,params[])
    {
    new timer;
    timer = SetTimerEx("beispiel",3000,true,"i",playerid);
    return 1;
    }
    CMD:stoptimer(playerid,params[])
    {
    KillTimer(timer);
    return 1;
    }

    So, ich gebe /starttimer ein und es geschiet vorerst nix, beim zweiten mal aber, wird dann der Timer ausgeführt..
    Danke im Vorraus

  • Die Funktion wird alle 3 Sekunden ausgeführt., solang musst du schon warten.


    um den Timer 1 mal auzuführen



    Timer soll sich alle 3 Sekunden wiederholen


  • Wenn du den Timer startest, greift er erst in 3000ms auf die Public-Funktion zu. Wenn der Intervall bei der Funktion "beispiel" immer 3000ms (also 3 Sekunden) bleibt, ruf doch die Funktion direkt auf und pack dort den Timer rein.


    Beispiel:



    Der Unterschied im Code zwischen meinem Vorredner und mir ist, daß der Timer bzw. die Funktion sofort nach der CMD-Eingabe ausgeführt wird.

  • Naja ja ok ich mach einfach nochmal ein Beispiel

    CMD:tanken(playerid,params[])
    {
    new tanken1;
    if(sscanf(params,"i",tanken1)) return SendClientMessage(playerid, WEISS, "Verwendung: /tanken [Liter]");
    SetPVarInt(playerid,"tanken",tanken1);
    for(new i=0;i<sizeof(tInfo);i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,3,tInfo[i][P_x],tInfo[i][P_y],tInfo[i][P_z])) return SendClientMessage(playerid, GRUEN, "Du bist nicht an einer Tankstelle!");
    {
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, ROT, "Zum tanken musst du dich in einem Fahrzeug befinden!");
    //if(tank[GetPlayerVehicleID(playerid)]+tanken1>vInfo[GetPlayerVehicleID(playerid)][max_tank]) return SendClientMessage(playerid, ROT, "Soviel kannst du nicht tanken!");
    SendClientMessage(playerid, GRUEN, "Dein Auto wird nun befüllt!");
    TogglePlayerControllable(playerid,false);
    time1 = SetTimerEx("tankenze",1000,true,"i",playerid);
    return 1;
    }
    }
    return 1;
    }

    So, im Timer "tankenze" steht folgendes

    public tankenze(playerid)
    {
    if(GetPVarInt(playerid,"tanken")<1)
    {
    TogglePlayerControllable(playerid,true);
    SendClientMessage(playerid, GRUEN, "Dein Auto wurde betankt!");
    KillTimer(time1);
    return 1;
    }
    SetPlayerMoney(playerid,GetPlayerMoney(playerid)-2);
    new vID=GetPlayerVehicleID(playerid);
    tank[vID]=tank[vID]+1;
    SetPVarInt(playerid,"tanken",GetPVarInt(playerid,"tanken")-1);
    return 1;
    }

    So, das Problem ist, wenn ich an einer Tankstelle stehe und /tanken 15 eingebe, dann steht da, "Dein Auto wird nun befüllt!", aber der Timer wird nicht gestarten, sprich danach passiert nix, beim 2 mal geht's dann los(Geld wird abgezogen, Liter aufgefüllt)

  • Sollte so funktionieren.

  • Das Code hat paar Probleme, welche ich ebenfalls beseitigt habe, beachte dabei folgende Dinge

    • Wenn du 1 Variable nutzst für die TimerID und zwei Leute tanken , so wird der zweite Timer stehts beendet und der erste läuft weiter
    • Wenn du an einer Tankstelle bist, welche nicht den Index 0 in deinem Array tInfo hat so wird dir immer die Fehlermeldung ausgegen das du dich nicht an der Tankstelle befindest
    • Bei Timern musst du aufpassen diese sind zwar inakurat, jedoch solltest du nicht 2 Timer zur selben Zeit aufrufen dies kann zu Lags führen



  • Omg, hab das jetzt auch erst, nachdem ich mir deinen Beitrag 2mal durchgelesen habe, gesehen.


    Zeile 4 und 10 (die Klammern) sind natürlich überflüssig. Sorry, hab mir den restlichen Code nicht genauer angesehen und mich nur auf den Timer konzentriert ^^.