Jail System zeit richtig speichern PROBLEM

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,


    ich habe mir ein Jail System, welches mit dem Wantedsystem zusammenarbeitet gebastelt. Dieses funktioniert wie folgt, wenn der Player 3 Sterne hat, wird er für 6 minuten ins Jail gebracht, da Wantedlevel * 2 , diese Zeit wird auch mit Dini gespeichert, funktioniert alles.
    Ich habe diesem Timer daher eine ID zugewiesen, d.h. knastzeit = SetTimerEx... , leider wird diese Zeit nicht gespeichert, wenn sie runtergeht, also der PVar bleibt 6 obwohl ich schon >1 drin bin. Wie kann ich es machen, damit die zeit, die runtergeht gespeichert wird, also wenn ich eine minute drin bin, dass der PVar auf 5 geht??


    ocmd:jail(playerid, params[])
    {
    new pID;
    new Float:x,Float:y,Float:z;
    new string[128];
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,COLOR_WHITE,"/jail [ID]");
    GetPlayerPos(pID,x,y,z);
    if(!IsPlayerInRangeOfPoint(pID,2,x,y,z)) return SendClientMessage(playerid,ROT,"Der Spieler ist nicht in deiner Nähe!");
    if(!IsPlayerInRangeOfPoint(pID,2,1526.9745,-1677.7667,5.8906)) return SendClientMessage(playerid,ROT,"Der Spieler ist nicht in der LSPD Garage!");
    if(!IsPlayerInFrakt(playerid,1)) return SendClientMessage(playerid,ROT,"Du bist kein Cop!");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,ROT,"Der angegebene Spieler ist nicht Online!");
    if(GetPVarInt(pID,"Wantedlevel") <=1) return SendClientMessage(playerid,ROT,"Der Spieler hat keine Wanteds!");
    //if(pID == playerid) return SendClientMessage(playerid,ROT,"Du kannst dich nicht selbst einsperren!");
    SetPlayerPos(pID,264.5515,77.3523,1001.0391);
    SetPlayerInterior(pID, 6);
    ResetPlayerWeapons(pID);
    GivePlayerMoney(playerid,500);
    SetPlayerWantedLevel(pID, 0);
    format(string, sizeof(string), "Du gehst für %i minuten in den Knast.",GetPVarInt(pID,"Wantedlevel")*2);
    SendClientMessage(pID,COLOR_WHITE,string);
    SendClientMessage(pID,ROT,"Geh nicht Off, Jail System speichert deine Knastzeit nicht! *WIRD GEFIXXT*"); //wenn entbuggt - zeile rausnehmen!
    SendClientMessage(playerid,COLOR_WHITE,"** Spieler eingebuchtet + $500 Lohn. **");
    knastzeit = SetTimerEx("knasttimer",GetPlayerWantedLevel(pID)*1000*60*2,false,"i",pID);
    SetPVarInt(pID,"Knastzeit",knastzeit);
    SetPVarInt(pID,"knast",1);
    InKnast[playerid] = 1;
    return 1;
    }


    ocmd:jailtime(playerid, params[])
    {
    new string[128];
    if(InKnast[playerid] == 0) return SendClientMessage(playerid,ROT,"Du bist nicht im Knast!");
    format(string,sizeof(string),"* Du musst noch %iminuten deine Strafe absitzen!",GetPVarInt(playerid,"Knastzeit"));
    SendClientMessage(playerid,COLOR_WHITE, string);
    return 1;
    }


    public knasttimer(playerid)
    {
    if(GetPVarInt(playerid,"Knastzeit") == 0)
    {
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid,1545.8807,-1675.3688,13.5612);
    SetCameraBehindPlayer(playerid);
    SendClientMessage(playerid,ROT,"[Knast Information]{FFFFFF} Du hast deine Haftstrafe abgesessen und verlierst 500€.");
    InKnast[playerid] = 0;
    //KillTimer(knastzeit);
    SetPVarInt(playerid,"knast",0);
    SetPVarInt(playerid,"Knastzeit",0);
    SetPlayerWantedLevel(playerid,0);
    GivePlayerMoney(playerid,-500);
    }
    return 1;
    }


    Hoffe ihr könnt mir bei diesem Problem helfen. Danke.

    Mit freundlichen Grüßen
    Skillz

  • Speicher eine Variable namens "knastzeit".


    Erstell einen Timer der bei OnGameModeInit gestartet wird und 1 Minute dauert.


    Setz Knastzeit in diesem Timer -1, vorausgesetzt er ist im Knast & Online.
    Wenn knastzeit auf 0 steht lass ihn aus dem Knast raus.

  • Wenn er eingesperrt wird setzt du z.b. die variable knastzeit auf 6 (6 Minuten)


    Du fragst im Timer ab ob der Spieler eingeloggt ist und im Knast sitzt.
    Wenn ja setzt du die variable immer -1 (weil der Timer 1 Minute geht und dann wieder neu los geht)
    Wenn knastzeit jetzt auf 0 steht (also er seine Zeit abgesessen hat) holst du ihn aus dem Knast raus.

  • OnGameModeInit
    SetTimer("injail", 60000, 1); // Eine minute


    ocmd:jail(playerid, params[])
    {
    new pID;
    new Float:x,Float:y,Float:z;
    new string[128];
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,COLOR_WHITE,"/jail [ID]");
    GetPlayerPos(pID,x,y,z);
    if(!IsPlayerInRangeOfPoint(pID,2,x,y,z)) return SendClientMessage(playerid,ROT,"Der Spieler ist nicht in deiner Nähe!");
    if(!IsPlayerInRangeOfPoint(pID,2,1526.9745,-1677.7667,5.8906)) return SendClientMessage(playerid,ROT,"Der Spieler ist nicht in der LSPD Garage!");
    if(!IsPlayerInFrakt(playerid,1)) return SendClientMessage(playerid,ROT,"Du bist kein Cop!");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,ROT,"Der angegebene Spieler ist nicht Online!");
    if(GetPVarInt(pID,"Wantedlevel") ==0) return SendClientMessage(playerid,ROT,"Der Spieler hat keine Wanteds!");
    //if(pID == playerid) return SendClientMessage(playerid,ROT,"Du kannst dich nicht selbst einsperren!");
    SetPlayerPos(pID,264.5515,77.3523,1001.0391);
    SetPlayerInterior(pID, 6);
    ResetPlayerWeapons(pID);
    GivePlayerMoney(playerid,500);
    SendClientMessage(pID,ROT,"Geh nicht Off, Jail System speichert deine Knastzeit nicht! *WIRD GEFIXXT*"); //wenn entbuggt - zeile rausnehmen!
    SendClientMessage(playerid,COLOR_WHITE,"** Spieler eingebuchtet + $500 Lohn. **");
    new jtime = GetPlayerWantedLevel(pID)*2;
    //knastzeit = SetTimerEx("knasttimer",GetPlayerWantedLevel(pID)*1000*60*2,false,"i",pID);
    SetPVarInt(pID,"Knastzeit",jtime);
    SetPVarInt(pID,"knast",1);
    InKnast[playerid] = 1;
    format(string, sizeof(string), "Du gehst für %i minuten in den Knast.",GetPVarInt(pID,"Knastzeit"));
    SendClientMessage(pID,COLOR_WHITE,string);
    SetPlayerWantedLevel(pID, 0);
    return 1;
    }


    ocmd:jailtime(playerid, params[])
    {
    new string[128];
    if(InKnast[playerid] == 0) return SendClientMessage(playerid,ROT,"Du bist nicht im Knast!");
    format(string,sizeof(string),"* Du musst noch %iminuten deine Strafe absitzen!",GetPVarInt(playerid,"Knastzeit"));
    SendClientMessage(playerid,COLOR_WHITE, string);
    return 1;
    }


    forward injail(playerid);
    public injail(playerid)
    {
    if(IsPlayerConnected(playerid) || GetPVarInt(playerid,"knast")==1)
    {
    SetPVarInt(playerid,"Knastzeit",-1);
    return 1;
    }
    if(GetPVarInt(playerid,"Knastzeit")==0)
    {
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid,1545.8807,-1675.3688,13.5612);
    SetCameraBehindPlayer(playerid);
    SendClientMessage(playerid,ROT,"[Knast Information]{FFFFFF} Du hast deine Haftstrafe abgesessen und verlierst 500€.");
    InKnast[playerid] = 0;
    //KillTimer(knastzeit);
    SetPVarInt(playerid,"knast",0);
    SetPVarInt(playerid,"Knastzeit",0);
    SetPlayerWantedLevel(playerid,0);
    GivePlayerMoney(playerid,-500);
    return 1;
    }
    return 1;
    }


    Dort steht dann zwar "Du kommst für 2minuten in den Knast!" (bei 1wanted) aber wenn ich dann /jailtime eingebe steht da "..noch 0minuten.." und ich komme nach 2 minuten nicht raus...
    Wo ist denn das Problem?


    Edit: Dieses Problem wurde durch löschen des alten codes @ OnPlayerUpdate gelöst. Aber leider wird der Spieler, sobald die Jailzeit auf 0 ist, nicht aus den jail teleportiert...
    public injail(playerid)
    {
    if(IsPlayerConnected(playerid) || GetPVarInt(playerid,"knast")==1)
    {
    SetPVarInt(playerid,"Knastzeit",GetPVarInt(playerid,"Knastzeit")-1);
    return 1;
    }
    //if(GetPVarInt(playerid,"Knastzeit")==0)
    if(GetPVarInt(playerid,"Knastzeit")<=0)
    {
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid,1545.8807,-1675.3688,13.5612);
    SetCameraBehindPlayer(playerid);
    SendClientMessage(playerid,ROT,"[Knast Information]{FFFFFF} Du hast deine Haftstrafe abgesessen und verlierst 500€.");
    InKnast[playerid] = 0;
    KillTimer(timerjail);
    SetPVarInt(playerid,"knast",0);
    SetPVarInt(playerid,"Knastzeit",0);
    SetPlayerWantedLevel(playerid,0);
    GivePlayerMoney(playerid,-500);
    return 1;
    }
    return 1;
    }


    Edit2: Es geht nun, es lag an dem return bei public bei der 1. abfrage im public. Danke für die Hilfe! :)

    Mit freundlichen Grüßen
    Skillz

    2 Mal editiert, zuletzt von skillz33 ()