Timer speichern und auslesen?

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
  • heyy


    will ein Timer speichern und auch wieder in den /stats auslesen lassen.


    Außerdem soll der Timer beim Connecten wida laden also ist fü ein arrest befehl


    und wen man noch davor im knast war soll man wieder im knast mit der rest zeit


    wie mache ic das?

  • Erstell eine Variable für jeden Spieler und einen Timer, der jede Sekunde die Variable um eins verringert.
    Davor setzt du natürlich die Variable auf die gewünschte Jail-Zeit.
    Dann kannst du mit /stats einfach die Variable auslesen und ausgeben.
    Beim Disconnect speicherst du die Variable in die Spielerdatei / SQL-Datenbank.
    Beim Laden teleportierst du den Spieler wieder ins Gefängnis, wenn die Variable ungleich Null ist.


    http://wiki.sa-mp.com/wiki/SetTimerEx


    #Brotfischbaron


    In schā'a llāh

  • Da ich Anfänger bin, habe ich es versucht...


    Oben:
    new speicher;
    forward speichert(playerid);
    new speichern[MAX_PLAYERS];


    Im arrest befehl
    speichern[playerid] = zeit*1000*60;
    speicher = SetTimerEx("speichert", 1000, 1,"i",playerid);


    und public:
    public speichert(playerid)
    {
    speichern -= 1000;
    }


    Leider Errors


    Edit:



    Zitat

    (5112) : error 023: array assignment must be simple assignment
    (5112) : warning 215: expression has no effect
    (2217) : warning 204: symbol is assigned a value that is never used: "speicher"

  • Jetzt wird es gespeicher:
    public speichert(playerid)
    {
    speichern[playerid] -= 1000;
    SetPVarInt(playerid,"Knastzeit",speichern[playerid]);
    }


    Nun bin ich mir nicht sicher wie es weiter gehen soll.
    Nun wird ja jede Sekunde eine Sekunden von der Knast zeit weg gemacht.
    Jetzt bin ich mir nicht sicher ob das Richtig ist.
    Der Timer muss ja auch noch gekillt werden:
    public speichert(playerid)
    {
    speichern[playerid] -= 1000;
    SetPVarInt(playerid,"Knastzeit",speichern[playerid]);
    if(GetPVarInt(playerid,"Knast")==0)
    {
    KillTimer(speicher);
    }
    }
    Richtig?
    //Edit: Habe bei dem Arrest Timer den PVar auf 0 gestellt wenn man raus kommt. Und auf 1 wenn man reinkommt!

  • Nein, er meinte mit "speichern", dass das auch nach dem Server-Restart noch verfügbar ist.
    Sieh dir dazu ein File-System wie dini o. Ä. an. Auch ein Datenbank System wie MySQL oder SQLite kann genutzt werden.
    Außerdem brauchst du keine PVar, da du das ja schon in der "speichern[]" Variable speicherst.


    #Brotfischbaron


    In schā'a llāh

  • .. Das meinte ich ja damit, du musst das in eine Spieler-Datei (Bspw.) speichern.
    Tust du das aber nicht, ist die PVar nach einem Restart genau so weg.
    Aber wie gesagt, du brauchst hier keine PVar, du kannst du auch direkt speichern[x] in die Spieler-Datei speichern.


    #Brotfischbaron


    In schā'a llāh

  • Bei /stats liest du einfach die Variable, die du beim Connect dementsprechend aus der Datei ausliest, in die du sie zuvor gespeichert hast, und dann in einen String formatierst.
    Damit das fortgesetzt wird, setzt du einfach wieder einen Timer auf eine Sekunde und verringerst die zuvor gesetzte Variable um Eins.


    #Brotfischbaron


    In schā'a llāh

  • Zur Nachfrage wieder:
    new arrestback;
    forward arrestzeitt(playerid);


    Dann:
    if(GetPVarInt(playerid,"Knast")==1)
    {
    SendClientMessage(playerid,ROT,"Zurück in den Knast! Du hast deine Strafe noch nicht abgesessen");
    SetPlayerPos(playerid,216.6484, 108.4219, 998.6719); //Im Knast
    SetPlayerInterior(playerid,10);
    arrestback = SetTimerEx("arrestzeitt", speichern[playerid], true,"i",playerid);
    }


    und
    public arrestzeitt(playerid)
    {
    KillTimer(arrestback);
    SetPVarInt(playerid,"Knast",0);
    SendClientMessage(playerid,GREEN,"Du bist aus dem Knast gekommen!");
    SendClientMessage(playerid,GREEN,"Benimm dich in Zunkunft!");
    SpawnPlayer(playerid);
    }


    Keine Errors oder Warnings.
    Funktioniert das so?

  • Du brauchst keine neuen Variablen und Timer - Setz einfache die alte "speichern[]" Variable beim Laden auf den jeweiligen Wert.
    Auch brauchst du keine neue Funktion und keinen neuen Timer.


    #Brotfischbaron


    In schā'a llāh

  • Ich versteh nicht ganz.
    Wenn ich nur den Wert setzen würde, passiert aber nichts. (Logischer Weiße).


    Sollte das nicht auch so Klappen? Aber Irgendwie wenn ich Spawne komm ich nicht im Knast. Es kommt die Message das ich wieder im knast gehen musste und sofort auch dass ich wieder frei bin.
    Doch nach den Sekunden die ich noch drin Sein müsste kommt das gleiche Nochmal.