wieder einsperren nach reconnect

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 ihr müsst emir helfen :
    ich möchte für cops den /arrest befehl scripten das stellt ja auchkein problem dar einfach timer stellen und dannach wieder freilassen . abe rwie mache ich das wenn der spieler sich reloggt de rtimer an der selben stelle wieter läuft und er wieder im knast landet?


    bitte ihr müsst mir helfen

  • Nimm dir mal ein Beispiel an dem Godfather, und such in einem Godfather nach pJail oder pJailTime, diese Methode ist sehr beliebt..

  • die wird aber irgendwie nach dem ausloggen nicht gesavt oder?
    kann ich nicht beim ausloggen den timerstand abfragen und specihern und beim eiloggen den time rneu setrzen?

    Einmal editiert, zuletzt von chilly$willy ()

  • Du könntest einfach bei /arrest einen Wert in die Spielerdatei schreiben(wenn du ein Loginsystem hast). Diesen wert lädst du beim Connecten und fragst ihn ab. Im Arresttimer musst du dann eine Variable "hochzählen" und deren Wert auch mit abspeichern, damit du den Timer später wieder starten kannst.


  • // Nimm die Jailzeit als Variable.
    //Bspl. :
    knastzeit[playerid] = 120; // in Sekunden
    // Dann nimmste
    SetTimerEx("knastweg", 20*1000, false, "d", playerid);
    // ==============================
    public knastweg(playerid)
    {
    if(IsPlayerConnected(playerid)
    {
    knastzeit[playerid] -= 20;
    if(knastzeit[playerid] <= 0)
    {
    SendClientMessage(playerid, COLOR, "Du bist ein freier Mann.");
    SetPlayerPos(...);
    }
    else
    {
    SetTimerEx("knastweg", 20*1000, false, "d", playerid);
    }
    }
    }


    Und dann musst du nur bei OnPlayerDisconnect die Variable Knastzeit speichern (ist dann die Restzeit).
    Bei OnPlayerConnect einfach die knastzeit wieder laden, abfragen ob sie größer als 0 ist und wenn ja, dann setzt du ihn in den knast und startest wieder den Timer von oben.


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------

  • new knastzeit[MAX_PLAYERS];
    new timer[MAX_PLAYERS];
    forward knasttimer(playerid);
    //bei /arrest:
    knastzeit[id] = time; // Wie du das halt mit deinem Befehl gemacht hast.
    timer[id] = SetTimerEx("knasttimer",1000,1,"d",id);


    public knasttimer(playerid);
    {
    if(knastzeit[playerid]<= 0)
    {
    KillTimer(timer[playerid]);
    // Spieler aus Knast lassen
    }
    else
    {
    knastzeit[playerid]--; // pro sekunde wir von der Variable Knastzeit 1 abgezogen.
    }
    return 1;
    }


    // bei OnPlayer Disconnect variable knastzeit[playerid] in Spielerdatei schreiben und bei OnPlayerConnect wieder Laden
    //OnPlayerConnect:
    knastzeit[playerid] = .... //laden
    if(knastzeit[playerid] > 0)
    {
    timer[id] = SetTimerEx("knasttimer",1000,1,"d",id);
    }
    So in der Art müsste es klappen.

  • Zitat

    was hat die 120 mit den 20*1000 zu tun ich möcht eja nicht das beim ausloggen die selbe zeit nochmal abgessesen werden muss sonder nur die zeit die noch übrig bleibt

    120 Sekunden wird er im Beispiel eingesperrt.
    Der Timer wiederholt sich alle 20 Sekunden und zieht dann von den 120 Sekunden 20 ab.
    D.h. die Zeit geht alle 20 Sekunden um 20 Sekunden 0runter. Ich wollte damit nur einen Timer sparen, der sich im Sekundentakt wiederholt. Den bei schnellen Timer ist die wahrscheinlichkeit größer, dass er zeitgleich mit einem anderen Timer auftritt. --> Lags können entstehen.


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------

  • jetz verstehe ichs glaube ich ich versuchs mal danke leute^^