[Timer] bleibt Stecken

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
  • Hallo Leute.
    Sobald ich die Bankraube, möchte ich es so machen, dass es nur jede 30 Minuten geht.
    Jedoch bleibt die Zeit bei 29 Minuten hängen, wenn ich /bankraub eingeb.


    Script Code.
    if(strcmp(cmdtext,"/bankraub", true) == 0)
    {
    new string[128];
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 2316.1877,-10.0451,26.7422))
    {
    if(robtime > 0)
    {
    format(string, sizeof(string), "* Die Bank kann erst in %d Minuten ausgeraubt werden.", robtime);
    SendClientMessage(playerid, COLOR_RED, string);
    return 1;
    }
    else
    {
    robtime = SetTimerEx("Robtimer", 3600000 , 0, "i", playerid);
    BRobTime[playerid] = 5;
    RaubtBank[playerid] = 1;
    brob[playerid] = SetTimerEx("BankRaub", 60000, 1, "i", playerid);
    }
    }
    return 1;
    }


    Function Robtimer(playerid)
    {
    robtime = 0; // Sobald 30 Minuten um sind.
    }

  • warum genau brauch man dafür nochmal einen Timer?


    speicher dir einfach gettime ab und bau dir ne abfrage ob 30 min vorbei sind... Timer nichts gut, Timer fressen resourcen, if you know what i mean


    (e reschr)

    nanosMalte


    Zitat

    Zitat von Goldkiller




    Obwohl MiniYoda das Wörtchen "Dynamisch" in der Deutschen SA-MP szene mit durchaus fatalen Folgen verbreitete, so hat er dennoch bewiesen, dass er das Handwerk PAWN hervorragend beherrscht. Er gehört definitiv zu den kompetentesten Scriptern die man bei SA-MP.DE finden kann.

  • oder mach es mit gettickcount :D lastrob = GetTickCount();


    und wenn er robt fragst ab ob ( (lastrob + 360000) < GetTickCount()) ist :D

    nanosMalte


    Zitat

    Zitat von Goldkiller




    Obwohl MiniYoda das Wörtchen "Dynamisch" in der Deutschen SA-MP szene mit durchaus fatalen Folgen verbreitete, so hat er dennoch bewiesen, dass er das Handwerk PAWN hervorragend beherrscht. Er gehört definitiv zu den kompetentesten Scriptern die man bei SA-MP.DE finden kann.

  • Sollte dies, auch so Funktionieren?
    if(strcmp(cmdtext,"/bankraub", true) == 0)
    {
    new string[128];
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 2316.1877,-10.0451,26.7422))
    {
    if(robtime > 0)
    {
    format(string, sizeof(string), "* Die Bank kann erst in %d Minuten ausgeraubt werden.", robtime);
    SendClientMessage(playerid, COLOR_RED, string);
    return 1;
    }
    else
    {


    BRobTime[playerid] = 5;
    RaubtBank[playerid] = 1;
    brob[playerid] = SetTimerEx("BankRaub", 60000, 1, "i", playerid);
    }
    }
    return 1;
    }


    public BankRaub(playerid)
    {
    if(IsPlayerConnected(playerid))
    {
    else if(BRobTime[playerid] == 1)
    {
    BRobTime[playerid] --;
    new randsumme = 1000 + random(4000), string[128];
    GivePlayerMoney(playerid, randsumme);
    format(string, sizeof(string), " %s hat die Bank erfolgreich ausgeraubt und erhielt $%d!", SpielerName(playerid), randsumme);
    SendClientMessageToAll(COLOR_RED, string);
    robtime = 30;
    }
    }
    return 1;
    }

  • Timer sind böse. Timer sind a) nie wirklich ganz korrekt, aber noch viel schlimmer denn b) sie müllen dein server zu.

    nanosMalte


    Zitat

    Zitat von Goldkiller




    Obwohl MiniYoda das Wörtchen "Dynamisch" in der Deutschen SA-MP szene mit durchaus fatalen Folgen verbreitete, so hat er dennoch bewiesen, dass er das Handwerk PAWN hervorragend beherrscht. Er gehört definitiv zu den kompetentesten Scriptern die man bei SA-MP.DE finden kann.

  • oder mach es mit gettickcount :D lastrob = GetTickCount();


    und wenn er robt fragst ab ob ( (lastrob + 360000) < GetTickCount()) ist :D


    Ich würde da eher zu gettime tendieren da diese funktionen den timestamp returnt besser gesagt die zahl der sekunden von Januar 1970.
    Aber das ist ja auch wurst. Wenn dieser wert gespeichert wird ist natürlich gettime vorteilhaft da GetTickCOunt die Zeit geturnt seit dem der Server on(gestartet wurde) ist.


    stock ConvertToMinutes (sec) return (sec/60);
    von sekunden zu minuten


    stock ConvertToMinutes (sec) return (sec/60000);
    von milisekunden zu sekunden ist natürlich mit % möglich das genauer auszugeben wenn man will also noch die sekunden , oder milisekunden jedoch muss dan ein string zurück gegeben
    werden

  • Wie gesagt ich würde es auch eher über gettime lösen ;) aber über gettickcount ist es einfacher für Einsteiger

    nanosMalte


    Zitat

    Zitat von Goldkiller




    Obwohl MiniYoda das Wörtchen "Dynamisch" in der Deutschen SA-MP szene mit durchaus fatalen Folgen verbreitete, so hat er dennoch bewiesen, dass er das Handwerk PAWN hervorragend beherrscht. Er gehört definitiv zu den kompetentesten Scriptern die man bei SA-MP.DE finden kann.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Wie gesagt ich würde es auch eher über gettime lösen ;) aber über gettickcount ist es einfacher für Einsteiger


    hm man kann sich jetzt darüber streiten du musst bei beidem werte dazu rechnen beim einen sind es sogar millisekunden(gettickcount ) beim anderen Sekunden ^^ (gettime)


    _______________________________________
    @ EloGamer
    links(5) ist kleiner als rechts(6)
    5 < 6


    links(6) ist größer als rechts(5)
    6 > 5

  • xD naja gettickcount ist ja wurscht ob da noch 3 Nullen ranhängst, ist halt einfach geschmackssache.


    Du kansnt dir aber auch einfach ne Funktion scripten die gettime angaben vergleicht, so habe ich das bei einigen scripten von mir gelöst gehabt :D


    Aber bei meinem neuen Wurfscript nutze ich gettickcount, da es manchmal auch auf millisecs ankommt (siehe videobereich).


    Hier kann sich der Autor des Threats aber eine Lösung aussuchen, btw. an den Autor: Probiere es mal alleine, du schaffst das schon ;)

    nanosMalte


    Zitat

    Zitat von Goldkiller




    Obwohl MiniYoda das Wörtchen "Dynamisch" in der Deutschen SA-MP szene mit durchaus fatalen Folgen verbreitete, so hat er dennoch bewiesen, dass er das Handwerk PAWN hervorragend beherrscht. Er gehört definitiv zu den kompetentesten Scriptern die man bei SA-MP.DE finden kann.

  • Hier mit Erklärungen:


    Beim Raub:
    letzterRaubZeit = gettime(); // speichere aktuelle zeit(gettime() gibt die anzahl an vergangenen sekunden seit dem 1 januar 1970 an)



    Zum überprüfen ob 30 Minuten um sind:
    if( ( letzterRaubZeit + (60*30) ) < gettime() )// ist ('letzterRaubZeit' + 30 Minuten) kleiner als die aktuelle zeit(gettime() gibt die anzahl an vergangenen sekunden seit dem 1 januar 1970 an) ?

  • Sollte dies, auch so Funktionieren?
    if(strcmp(cmdtext,"/bankraub", true) == 0)
    {
    new string[128];
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 2316.1877,-10.0451,26.7422))
    {
    format(string, sizeof(string), "* Die Bank kann erst in %d Minuten ausgeraubt werden.",letzterRaubZeit = gettime(););
    SendClientMessage(playerid, COLOR_RED, string);
    return 1;
    }
    else
    {
    if( ( letzterRaubZeit + (60*30) ) < gettime() )
    {
    BRobTime[playerid] = 5;
    RaubtBank[playerid] = 1;
    brob[playerid] = SetTimerEx("BankRaub", 60000, 1, "i", playerid);
    }
    }
    return 1;
    }


    public BankRaub(playerid)
    {
    if(IsPlayerConnected(playerid))
    {
    else if(BRobTime[playerid] == 1)
    {
    BRobTime[playerid] --;
    new randsumme = 1000 + random(4000), string[128];
    GivePlayerMoney(playerid, randsumme);
    format(string, sizeof(string), " %s hat die Bank erfolgreich ausgeraubt und erhielt $%d!", SpielerName(playerid), randsumme);
    SendClientMessageToAll(COLOR_RED, string);
    }
    }
    return 1;
    }