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 leute,
    ich hab ein Problem.


    Und zwar:
    Wenn ich diesen Timer so wie ihr ihn jetzt gleich sehen werdet, verwende, Geht nach dem Ablauf der ersten Minute (Der Timer ist auf 60ne Minute gesetzt und Wiederholt sich) meine halbes Script nicht mehr.


    public pdtimer(playerid)
    {
    if(b_time[playerid]>0)
    {
    b_time[playerid]--;
    }
    if(b_time[playerid]==0)
    {
    SendClientMessage(playerid,COLOR_GREEN,"Du kannst nun wieder ernten!");
    b_time[playerid]=0;
    }
    if(SpielerInfo[playerid][ptime]<60)
    {
    SpielerInfo[playerid][ptime]++;
    UpPlayer(playerid);
    }
    if(SpielerInfo[playerid][ptime]>59)
    {
    new zinsen = (SpielerInfo[playerid][bank]/1000)*(5);
    new paydayrand = random(2000); paydayrand += 982 - isteuern;
    new string[286];
    GivePlayerDollars(playerid,paydayrand);
    SpielerInfo[playerid][aktiv]++;
    SpielerInfo[playerid][bank]=SpielerInfo[playerid][bank]+zinsen;
    SendClientMessage(playerid,COLOR_ORANGE,"|_______ Zahltag _______|");
    format(string, sizeof(string), "Lohn: $%d | Steuern: $%d", paydayrand,isteuern);
    SendClientMessage(playerid,COLOR_WHITE,string);
    format(string, sizeof(string), "Zinsen: $%d | Zinssatz: 0.5",zinsen);
    SendClientMessage(playerid,COLOR_WHITE,string);
    format(string, sizeof(string), "Neuer Kontostand: %d",SpielerInfo[playerid][bank]);
    SendClientMessage(playerid,COLOR_WHITE,string);
    SendClientMessage(playerid,COLOR_WHITE,"Du hast einen Aktivitätspunkt erhalten!");
    SpielerInfo[playerid][ptime]=0;
    }
    }


    Wenn ich aber die oberen beiden Abfragen auslasse, klappt alles.
    Jemand ne Lösung?

  • Speichert alle Daten des Spielers:
    public UpPlayer(playerid)
    {
    GetPlayerName(playerid,SpielerName,sizeof(SpielerName));
    format(Spielerdatei,sizeof(Spielerdatei),"/Users/%s.ini",SpielerName);
    dini_IntSet(Spielerdatei,"adminlevel",SpielerInfo[playerid][admin]);
    dini_IntSet(Spielerdatei,"wanteds",GetPlayerWantedLevel(playerid));
    dini_IntSet(Spielerdatei,"geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"bank",SpielerInfo[playerid][bank]);
    dini_IntSet(Spielerdatei,"skin",SpielerInfo[playerid][skin]);
    dini_IntSet(Spielerdatei,"team",SpielerInfo[playerid][team]);
    dini_IntSet(Spielerdatei,"leader",SpielerInfo[playerid][leader]);
    dini_IntSet(Spielerdatei,"rank",SpielerInfo[playerid][rank]);
    dini_IntSet(Spielerdatei,"job",SpielerInfo[playerid][job]);
    dini_IntSet(Spielerdatei,"ptime",SpielerInfo[playerid][ptime]);
    dini_IntSet(Spielerdatei,"aktiv",SpielerInfo[playerid][aktiv]);
    dini_IntSet(Spielerdatei,"jail",SpielerInfo[playerid][jail]);
    dini_IntSet(Spielerdatei,"hitman",SpielerInfo[playerid][hitman]);
    dini_IntSet(Spielerdatei,"hleader",SpielerInfo[playerid][hleader]);
    dini_IntSet(Spielerdatei,"warns",SpielerInfo[playerid][warns]);
    dini_IntSet(Spielerdatei,"führerschein",SpielerInfo[playerid][fahrlicense]);
    dini_IntSet(Spielerdatei,"bikeschein",SpielerInfo[playerid][bikelicense]);
    dini_IntSet(Spielerdatei,"flugschein",SpielerInfo[playerid][flylicense]);
    dini_IntSet(Spielerdatei,"drogen",SpielerInfo[playerid][weed]);
    return 1;
    }
    Aber das scheint den Fehler ja nicht zu verursachen.
    Die oberen beiden Abfragen:
    if(b_time[playerid]>0)
    {
    b_time[playerid]--;
    }
    if(b_time[playerid]==0)
    {
    SendClientMessage(playerid,COLOR_GREEN,"Du kannst nun wieder ernten!");
    b_time[playerid]=0;
    }
    Sobald die weg sind, läuft alles.


    MfG Firer

  • Also das hilft beim Problem warscheinlich nix aber nutz mal bloß nich Dini, das speichert sehr langsam, so geht das voll in die Hose


    //edit: Die zweite if abfragen nutzt garnix, was heißt das Dini doch jede minute speichert und das überlasstet den Server


    ^ :thumbup: Klasse Internet, oder? :thumbup: ^

  • Also das hilft beim Problem warscheinlich nix aber nutz mal bloß nich Dini, das speichert sehr langsam, so geht das voll in die Hose


    //edit: Die zweite if abfragen nutzt garnix, was heißt das Dini doch jede minute speichert und das überlasstet den Server

    Naja, dürfte nem 56 GB Ram Root nicht viel ausmachen.
    Und GF speichert bei jeder Bewegung des Spielers.


    Und klar nützt die zweite Abfrage etwas.
    Es wird ne Message an den Player gesendet. Fertig.
    Desweiteren wird "b_time" vorsichtsalber nochmal auf 0 gesetzt.




    MfG Firer

  • wenn nun bei der zweiten abfrage b_time auf 0 gesetzt wird und danach die ist b_time unter 60 abfrage läuft setzt die abfrage also doch b_time wieder auf eins
    //edit: Dini hat aber bei mir trotz 4GB Ram nicht gespeichert aufgrund von zuvielen daten (waren auch nur 30zeilen)


    ^ :thumbup: Klasse Internet, oder? :thumbup: ^

  • Ein berühmter Mann sagte einst:

    Zitat

    Jede Speicherart hat ihre Vor- und Nachteile.

    Und so ist es schließlich auch, jeder hat die freie Wahl und muss niemand anderem seinen Willen aufdrängen. Aber ich schweife ab.


    Führst du den Callback mit SetTimer oder SetTimerEx aus?
    /edit
    Ansonsten versuchs doch noch mit
    else if(SpielerInfo[playerid][ptime] == 60)
    {
    new zinsen = (SpielerInfo[playerid][bank]/1000)*(5);
    new paydayrand = random(2000); paydayrand += 982 - isteuern;
    new string[286];
    GivePlayerDollars(playerid,paydayrand);
    SpielerInfo[playerid][aktiv]++;
    SpielerInfo[playerid][bank]=SpielerInfo[playerid][bank]+zinsen;
    SendClientMessage(playerid,COLOR_ORANGE,"|_______ Zahltag _______|");
    format(string, sizeof(string), "Lohn: $%d | Steuern: $%d", paydayrand,isteuern);
    SendClientMessage(playerid,COLOR_WHITE,string);
    format(string, sizeof(string), "Zinsen: $%d | Zinssatz: 0.5",zinsen);
    SendClientMessage(playerid,COLOR_WHITE,string);
    format(string, sizeof(string), "Neuer Kontostand: %d",SpielerInfo[playerid][bank]);
    SendClientMessage(playerid,COLOR_WHITE,string);
    SendClientMessage(playerid,COLOR_WHITE,"Du hast einen Aktivitätspunkt erhalten!");
    SpielerInfo[playerid][ptime]=0;

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen