Wanted System buggt

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.


    Ich habe mal ein paar Fragen bezüglich meines Wanted System.
    Erstens soll der Spieler wenn er disconnected und in der Nähe eines Cops der Duty ist automatisch in den Knast kommen, leider funktioniert es nicht denn er wird ganz normal gespawnt.


    Spoiler anzeigen
    if(SpielerInfo[playerid][pWanteds] > 0)
    {
    if(teaminrangeofpoint(1)) {
    format(wstring, sizeof(wstring), "%s wurde durch ausloggen Verhaftet!",SpielerName(playerid));
    SendClientMessage(playerid, info, wstring);
    SpielerInfo[playerid][pKnast] = 1;
    SpielerInfo[playerid][pWanteds] = 0;
    SetPlayerWantedLevel(playerid, 0); }
    }
    stock teaminrangeofpoint(frakid) {
    new count, i, Float:pos[3];
    for(; i < MAX_PLAYERS;i++) {
    if(IsPlayerInRangeOfPoint(i, 20.0, pos[0], pos[1], pos[2])) continue;
    if(SpielerInfo[i][pTeam] == frakid && SpielerInfo[i][pDuty]) count ++;
    }
    return count;
    }


    Dann möchte ich mein Wanted System so aufbauen:
    Insgesammt kann man 25 "Wanteds" bekommen, insgesammt sind das dann 6 Sterne
    1-4 Wanteds - 1 Stern
    5-9 Wanteds - 2 Sterne
    10 - 14 Wanteds - 3 Sterne
    15 - 19 Wanteds - 4 Sterne
    20-24 Wanteds - 5 Sterne
    25 - ... 6 Sterne
    Ab 25 Wanteds ist klar bleibt man bei 6 Sternen.
    Ich habe mein Befehl jetzt erstmal so gemacht:

    Spoiler anzeigen
    ocmd:wanted(playerid,params[])//wanted
    {
    if(SpielerInfo[playerid][pTeam] == 1)
    {
    new wanteds,pID;
    new Wanted[128],Cop[128],Verbrecher[128],reason[128];
    if(sscanf(params,"uis",pID,wanteds,reason))return SendClientMessage(playerid,info,"/wantedtest [Spieler] [Wantedzahl] [Grund]");
    if(wanteds<1||wanteds>25)return SendClientMessage(playerid,error,"Du kannst nur minimal 1 Wanted oder maximal 25 Wanteds geben!");
    SetPlayerWantedLevel(pID, GetPlayerWantedLevel(pID)+wanteds);
    SpielerInfo[pID][pWanteds] = GetPlayerWantedLevel(pID);
    format(Cop,sizeof(Cop)," Du hast %s Wanteds gegeben. Grund %s",SpielerName(pID),wanteds,reason);
    format(Verbrecher,sizeof(Verbrecher)," %s hat dir %i Wanteds Gegeben. Grund: %s",SpielerName(playerid),wanteds,reason);
    format(Wanted,sizeof(Wanted), "Nun ist dein Wantedlevel auf %i gestiegen!",GetPlayerWantedLevel(pID));
    SendClientMessage(playerid,cop,Cop);
    SendClientMessage(pID,info,Verbrecher);
    SendClientMessage(pID,warn,Wanted);
    SavePlayer(pID);
    }
    else
    {
    SendClientMessage(playerid,error,"Du bist kein Polizist!");
    }
    return 1;
    }


    Jedoch will ich es ja so einteilen wie oben beschrieben und auch beim Spawn sollen die Sterne in dem System angezeigt werden.


    Leider weiß ich nicht wie es am besten geht.
    Ich könnte zwar eine Abfrage machen wie viele er hat und wenn es 1 - 4 ist dann ein Stern ...
    Aber würde es nicht noch einfacher gehen?


    Und kann mir einer ein Beispiel geben, wie ich den Knast befehl mache?
    Und wie ich die Zeit dann in der DB speichere und beim login dann Abfrage und in einen Timer oder so setzen und wie ich das alles halt am besten mache.
    Wichtiges was ihr braucht:

    Spoiler anzeigen

    SpielerInfo[playerid][pKnast]
    SpielerInfo[playerid][pKnastzeit]
    SpielerInfo[playerid][pWanteds]


    Danke für jede Hilfe!
    Mit freundlichen Grüßen


    TV 8)


    Jeffry:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • 1.)
    Bei deinem stock fehlt GetPlayerPos und du musst abfragen bei wem sie in der Nähe sind.
    stock teaminrangeofpoint(playerid, frakid)
    {
    new count, i, Float:pos[3];
    for(; i < MAX_PLAYERS;i++)
    {
    GetPlayerPos(i, pos[0], pos[1], pos[2]);
    if(!IsPlayerInRangeOfPoint(playerid, 20.0, pos[0], pos[1], pos[2])) continue;
    if(SpielerInfo[i][pTeam] == frakid && SpielerInfo[i][pDuty]) count ++;
    }
    return count;
    }


    if(SpielerInfo[playerid][pWanteds] > 0)
    {
    if(teaminrangeofpoint(playerid, 1))
    {
    format(wstring, sizeof(wstring), "%s wurde durch ausloggen Verhaftet!",SpielerName(playerid));
    SendClientMessageToAll(info, wstring);
    SpielerInfo[playerid][pKnast] = 1;
    SpielerInfo[playerid][pWanteds] = 0;
    SetPlayerWantedLevel(playerid, 0);
    //Außerdem musst du darauf achten, dass der Spieler erst hier danach gespeichert wird
    //und nicht schon davor, sonst wird pKnast in der Datenbank/Datei nicht gesetzt.
    }
    }



    2.)
    Das sähe dann so aus:
    ocmd:wanted(playerid,params[])
    {
    if(SpielerInfo[playerid][pTeam] == 1)
    {
    new wanteds, pID, string[145];
    if(sscanf(params,"uis[145]",pID,wanteds,string))return SendClientMessage(playerid,info,"/wantedtest [Spieler] [Wantedzahl] [Grund]");
    if(wanteds<1||wanteds>25)return SendClientMessage(playerid,error,"Du kannst nur minimal 1 Wanted oder maximal 25 Wanteds geben!");
    SpielerInfo[pID][pWanteds] = (wanteds/5) + 1;
    SetPlayerWantedLevel(pID, SpielerInfo[pID][pWanteds]);
    format(string,sizeof(string)," Du hast %s Wanteds gegeben. Grund %s",SpielerName(pID),wanteds,string);
    SendClientMessage(playerid,cop,string);
    format(string,sizeof(string)," %s hat dir %i Wanteds Gegeben. Grund: %s",SpielerName(playerid),wanteds,string);
    SendClientMessage(pID,info,string);
    format(string,sizeof(string), "Nun ist dein Wantedlevel auf %i gestiegen!",SpielerInfo[pID][pWanteds]);
    SendClientMessage(pID,warn,string);
    SavePlayer(pID);
    }
    else
    {
    SendClientMessage(playerid,error,"Du bist kein Polizist!");
    }
    return 1;
    }
    Ich habe dir einige Änderungen gemacht, vor allem die unnötig vielen Variablen weg gemacht.
    Die Berechnung nach deinem Modell ist diese: sterne = (wanteds/5) + 1
    Kannst es nachrechnen.



    3.)
    Was soll den der Knast Befehl machen? Soll die Zeit auch runter gehen, wenn der Spieler offline ist, oder soll die verbleibende Zeit gespeichert werden, und wenn er wieder online kommt, dann muss er den Rest absitzen? Oder soll er es wieder von vorne absitzen?
    Generell kannst du in allen Varianten mit gettime() als Erkennungsmerkmal, ob der Spieler im Knast ist und wie lange, arbeiten.

  • Ach Okey hab ich also falsch gemacht


    Ja es soll so sein das wenn ich Bsp 500sek hatte und mich ausloggen das ich beim einloggen dann wieder 500 habe :)
    Kannst mir ja mal ein kleines Prinzip zeigen :)


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Gut, das sähe dann im Ansatz so aus:


    Beim Befehl:
    SpielerInfo[pID][pKnast] = 1;
    SpielerInfo[pID][pKnastzeitBis] = gettime() + eingegebene_zeit;
    SpielerInfo[pID][pKnastzeit] = eingegebene_zeit;


    Diese Werte speicherst du beim SavePlayer (also bei OnPlayerDisconnect) in die Datenbank/Datei.


    Wenn die Knast Zeit zu Ende ist (mit einem 1 Sekunden Timer prüfen):
    OnGameModeInit:
    SetTimer("SekundenTimer", 1000, true);


    Und das Callback:
    forward SekundenTimer();
    public SekundenTimer()
    {
    new time = gettime();
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(SpielerInfo[i][pKnast] == 1)
    {
    if(SpielerInfo[i][pKnastzeitBis] < gettime())
    {
    SpielerInfo[i][pKnast] = 0;
    SpielerInfo[i][pKnastzeitBis] = 0;
    SpielerInfo[i][pKnastzeit] = 0;
    //Und hier dann die Position setzen, etc...
    }
    }
    }
    return 1;
    }


    Beim Login lädst du einfach diese 3 Werte aus der Datenbank/Datei und dann fragst du bei OnPlayerSpawn ab:
    if(SpielerInfo[playerid][pKnast] == 1)
    {
    SpielerInfo[playerid][pKnastzeitBis] = gettime() + SpielerInfo[playerid][pKnastzeit]; //Damit die 500 Sekunden wieder drauf sind.
    //Hier Position wieder in den Knast setzen.
    }

  • Hi Jeffry.


    Soweit habe ich alles verstanden, kleine Fragen habe ich dennoch.


    Was macht KnastzeitBis?


    Und im Befehl ist mir gerade aufgefallen das Wanteds die Sterne sind, ich wollte es eigentlich am besten so..
    Das Wanteds bsp den Wert 25 haben und es dann 6 Sterne sind, ich wollte das so machen weil wenn ich es nur über die Sterne mache bekommt man zu schnell 6 Wanteds.
    und wenn ich einem Spieler z.b 3 Wanteds gebe und darauf noch mal 2 dann soll er insgesammt 5 Wanteds haben und 2 Sterne, zurzeit würde dann von der 3 zu 2 Wanteds wechseln deshalb habe ich
    SpielerInfo[pID][pWanteds] += (wanteds/5) + 1;
    Versucht, scheint dann aber doch nicht so zu klappen ^^


    Und maximal sollte man insgesammt 25 Wanteds haben können danach kann man ihm keine Wanteds mehr geben.
    Weißt du was ich meine :D


    Ahja, wie mach ich es am besten damit der Spieler jede 5 Minuten 1 Wanted(keine Sterne) verliert und wenn es zb von 5 Wanteds auf 4 Wanteds geht, logischerweise hat er ja dann nur noch 1 Stern (davor 2)


    Danke für deine Hilfe :)


    MfG



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • 1.)
    Die pKnastzeitBis ist der Timestamp (also die Uhrzeit) an dem der Spieler aus dem Knast entlassen wird. Sobald gettime() (gibt den momentanen Timestamp zurück) größer ist als pKnastzeitBis, dann wird der Spieler entlassen.


    2.)
    Ahh, achso. Dann ändere:
    SpielerInfo[pID][pWanteds] = (wanteds/5) + 1;
    SetPlayerWantedLevel(pID, SpielerInfo[pID][pWanteds]);

    zu:
    SpielerInfo[pID][pWanteds] = wanteds;
    SetPlayerWantedLevel(pID, (SpielerInfo[pID][pWanteds]/5) + 1);

    Dann passt es.


    3.)
    Ja, das hattest du ja schon im Befehl drin.
    if(wanteds<1||wanteds>25)return SendClientMessage(playerid,error,"Du kannst nur minimal 1 Wanted oder maximal 25 Wanteds geben!");
    Oder?


    4.)
    Einen Minuten-Timer (gleich wie der Sekunden-Timer) bei dem du bei jedem Aufruf für jeden Spieler (Schleife!) der online ist, einen Wanted Punkt abziehst:
    SpielerInfo[pID][pWanteds]--;
    SetPlayerWantedLevel(pID, (SpielerInfo[pID][pWanteds]/5) + 1);

    Wenn du die Änderung aus Punkt 2 gemacht hast, dann gibt das hier auch Sinn.

  • Ahh ok, dann wäre das jetzt auch geklärt ^^


    Danke, ich werde es gleich testen :)


    Hab es jetzt so gemacht, da der Spieler nicht mehr als 25 Wanteds insgesammt haben darf ^^
    if(SpielerInfo[pID][pWanteds] > 25) return SendClientMessage(playerid,error,"Der Spieler hat die maximale anzahl an Wanteds erreicht!");



    Ich versuch es mal, wird bestimmt nicht schwer sein.


    Ich melde mich nach den Tests, danke dir!
    //Edit:


    Habe mal alles getestet, und bis hier klappt alles wunderbar :)
    habe nun einen kleinen Knast befehl gemacht wo ich die Zeit eingeben muss wie lange er eingeknastet wird.
    Kann ich es auch so machen das Pro wanted 2 Minuten die Knastzeit ist?

    Spoiler anzeigen
    ocmd:knast(playerid,params[])
    {
    if(SpielerInfo[playerid][pKnast] != 0)return SendClientMessage(playerid,Color_Red,"Dieser Spieler ist bereits im Gefägnis!"); {
    new time,pID,string[128];
    if(sscanf(params,"u",pID,time))return SendClientMessage(playerid,Color_Green,"/Knast [id][Zeit]");
    format(string,sizeof(string),"Du hast %s: für %d Sekunden in den Knast gesteckt.",SpielerName(pID),time);
    SendClientMessage(playerid,info,string);
    SpielerInfo[pID][pKnast] = 1;
    SpielerInfo[pID][pKnastzeitBis] = gettime() + time;
    SpielerInfo[pID][pKnastzeit] = time; }
    return 1;
    }


    Jeffry:
    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF () aus folgendem Grund: Edit wegen Code & Jeffry hinzugefügt

  • Sollte so funktionieren:


    time = SpielerInfo[pID][pWanteds] * 120


    120 = 2 Minuten ( 2* 60 Sekunden)



    ocmd:knast(playerid,params[])
    {
    if(SpielerInfo[playerid][pKnast] != 0)return SendClientMessage(playerid,Color_Red,"Dieser Spieler ist bereits im Gefägnis!"); {
    new pID,string[128];
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,Color_Green,"/Knast [id][Zeit]");
    new time = SpielerInfo[pID][pWanteds] * 120;
    format(string,sizeof(string),"Du hast %s: für %d Sekunden in den Knast gesteckt.",SpielerName(pID),time);
    SendClientMessage(playerid,info,string);
    SpielerInfo[pID][pKnast] = 1;
    SpielerInfo[pID][pKnastzeitBis] = gettime() + time;
    SpielerInfo[pID][pKnastzeit] = time;
    return 1;
    }

  • Super funktioniert alles!


    Kleine Frage:


    Ist es jetzt so, dass egal ob beim Wanted abzieh Timer grad 50 Sekunden sind, Spieler kommt Online und muss nur 10 Sekunden warten bis 1 Wanted weg geht?
    Kann ich da mit SetTimerEx arbeiten ? Dann würde wenn man On kommt ja erst 60 Sekunden vergehen müssen bevor ein Wanted weg geht oder?


    Mit freundlichen Grüßen


    //edit:


    Hier sagt er mir immer Spieler wird nicht gesucht, obwohl er Wanteds hat?

    Spoiler anzeigen
    ocmd:knast(playerid,params[])
    {
    new pID,string[128];
    new Float:knasti[3];
    GetPlayerPos(pID, knasti[0], knasti[1], knasti[2]);
    new time = SpielerInfo[pID][pWanteds] * 120;
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, knasti[0], knasti[1], knasti[2])) return SendClientMessage(playerid, error, "Du bist nicht in der Nähe des gesuchten!");
    if(SpielerInfo[pID][pKnast] != 0)return SendClientMessage(playerid,error,"Dieser Spieler ist bereits im Gefägnis!");
    if(SpielerInfo[pID][pWanteds] < 1) return SendClientMessage(playerid, error, "Dieser Spieler wird nicht gesucht!");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,Color_Green,"/Knast [id][Zeit]");
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 197.6453, 158.3188, 1003.0234) || IsPlayerInRangeOfPoint(playerid, 5.0, 196.7424,179.3564,1003.0234)) return SendClientMessage(playerid, error, "Du bist nicht bei den Zellen!");
    {
    format(string,sizeof(string),"Du hast %s: für %d Sekunden in den Knast gesteckt.",SpielerName(pID),time);
    SendClientMessage(playerid,info,string);
    SpielerInfo[pID][pKnast] = 1;
    SpielerInfo[pID][pKnastzeitBis] = gettime() + time;
    SpielerInfo[pID][pKnastzeit] = time;
    SpielerInfo[pID][pWanteds] = 0;
    SpielerInfo[pID][pSterne] = 0;
    SetPlayerWantedLevel(pID,0);
    }
    return 1;
    }


    und hier hab ich mal mit SetTimerEx gemacht, ist das richtig?

    Spoiler anzeigen

    //Kopf
    new Wantedtime[MAX_PLAYERS];
    for (new i=0; i< MAX_PLAYERS; i++)
    {
    Wantedtime[i] = SetTimerEx("WantedTimer",60000,true,"i",i);
    }

    Jeffry:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF () aus folgendem Grund: Jeffry hinzugefügt und Code eingefügt

  • 1.)
    Die sscanf Funktion muss vor den Abfragen stehen.
    ocmd:knast(playerid,params[])
    {
    new pID,string[128];
    new Float:knasti[3];
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,Color_Green,"/Knast [id][Zeit]");
    GetPlayerPos(pID, knasti[0], knasti[1], knasti[2]);
    new time = SpielerInfo[pID][pWanteds] * 120;
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, knasti[0], knasti[1], knasti[2])) return SendClientMessage(playerid, error, "Du bist nicht in der Nähe des gesuchten!");
    if(SpielerInfo[pID][pKnast] != 0)return SendClientMessage(playerid,error,"Dieser Spieler ist bereits im Gefägnis!");
    if(SpielerInfo[pID][pWanteds] < 1) return SendClientMessage(playerid, error, "Dieser Spieler wird nicht gesucht!");
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 197.6453, 158.3188, 1003.0234) || IsPlayerInRangeOfPoint(playerid, 5.0, 196.7424,179.3564,1003.0234)) return SendClientMessage(playerid, error, "Du bist nicht bei den Zellen!");
    {
    format(string,sizeof(string),"Du hast %s: für %d Sekunden in den Knast gesteckt.",SpielerName(pID),time);
    SendClientMessage(playerid,info,string);
    SpielerInfo[pID][pKnast] = 1;
    SpielerInfo[pID][pKnastzeitBis] = gettime() + time;
    SpielerInfo[pID][pKnastzeit] = time;
    SpielerInfo[pID][pWanteds] = 0;
    SpielerInfo[pID][pSterne] = 0;
    SetPlayerWantedLevel(pID,0);
    }
    return 1;
    }


    2.)
    Nein, das was du da machst bringt nichts.
    Wenn, dann müsstest du den SetTimerEx bei OnPlayerConnect starten.

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


    Mit dem einknasten geht alles!
    Bloß bin ich zu doof um die Zeit abzulesen :D


    Spoiler anzeigen
    ocmd:zeit(playerid, params[])
    {
    new string[128];
    format(string,sizeof(string), "Du bist noch %d Sekunden im Knast!",SpielerInfo[playerid][pKnastzeit]);
    SendClientMessage(playerid,warn,string);
    return 1;
    }

    Jedoch wird das Wanted nicht mehr abgezogen, habe es jetzt so gemacht:
    Spoiler anzeigen
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    Wantedtime[playerid] = SetTimerEx("Wantedtimer",60000,true,"i",playerid);
    }

    Jeffry:


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Also zu
    1.
    Es steht immer die Zeit dort, mit der ich in den Knast gekommen bin.
    Jedoch die Zeit wird trotzdem geringer, bloß im Command nicht :/


    2.
    Ich habe es unter OnPlayerConnect und das soll die Wanteds erst abziehen wenn der Spieler eingeloggt ist.


    Spoiler anzeigen
    //________MySQL_______//
    new query[256];
    format(query, sizeof(query), "SELECT * FROM accounts WHERE Name='%s'", SpielerName(playerid));
    //________Joinmessage_______//
    new string[128];
    format(string,sizeof(string),"%s hat den Server betreten", SpielerName(playerid));
    SendClientMessageToAll(0xCCCCCCFF,string);
    //________Serversettings_______//
    SetPlayerColor(playerid, -1);
    gettime(hour, minute);
    SetPlayerTime(playerid,hour,minute);
    SetPlayerScore(playerid,SpielerInfo[playerid][pLevel]);
    //________Knast_System________//
    Wantedtime[playerid] = SetTimerEx("Wantedtimer",60000,true,"i",playerid);

    Spoiler anzeigen
    forward WantedTimer();
    public WantedTimer()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(SpielerInfo[i][pWanteds] > 0)
    {
    SpielerInfo[i][pWanteds]--;
    SetPlayerWantedLevel(i, (SpielerInfo[i][pWanteds]/5) + 1);
    SpielerInfo[i][pSterne] = SpielerInfo[i][pWanteds]/5 + 1;
    SendClientMessage(i, erfolg, "Herzlichen Glückwunsch, du hast ein Wanted verloren!");
    }
    else if(SpielerInfo[i][pWanteds] == 0)
    {
    SetPlayerWantedLevel(i,0);
    SpielerInfo[i][pSterne] = 0;
    }
    }
    }
    return 1;
    }

    Als es noch unter OnGameModeInit als normaler SetTimer stand, ging alles ^^
    Bloß kam ich on und habe nach 10 Sek manchmal schon 1 Wtd verloren deswegen will ich für jeden Spieler seinen eigenen Timer.
    Mit freundlichen Grüßen


    Jeffry:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ah, so willst du das. Dann:
    ocmd:zeit(playerid, params[])
    {
    new string[128];
    format(string,sizeof(string), "Du bist noch %d Sekunden im Knast!",SpielerInfo[playerid][pKnastzeitBis]-gettime());
    SendClientMessage(playerid,warn,string);
    return 1;
    }


    Und der Timer muss so aussehen:
    forward WantedTimer(playerid);
    public WantedTimer(playerid)
    {
    if(IsPlayerConnected(playerid))
    {
    if(SpielerInfo[playerid][pWanteds] > 0)
    {
    SpielerInfo[playerid][pWanteds]--;
    SetPlayerWantedLevel(playerid, (SpielerInfo[playerid][pWanteds]/5) + 1);
    SpielerInfo[playerid][pSterne] = SpielerInfo[playerid][pWanteds]/5 + 1;
    SendClientMessage(playerid, erfolg, "Herzlichen Glückwunsch, du hast ein Wanted verloren!");
    }
    else if(SpielerInfo[playerid][pWanteds] == 0)
    {
    SetPlayerWantedLevel(playerid,0);
    SpielerInfo[playerid][pSterne] = 0;
    }
    }
    return 1;
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Beim Wanted Public Playerid hinzufügen oder?


    forward WantedTimer(playerid);
    public WantedTimer(playerid)
    {
    Jeffry:


    Edit:
    Der Spieler mit Wanteds bekommt immer noch keine abgezogen
    Der Command funktioniert.


    Wenn ich jetzt ein befehl machen möchte wo ich die Knastzeit verändern kann, von was muss ich dann den Wert ändern?
    Knastzeit oder KnastzeitBis?


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Ja, gut aufgepasst! :good:
    Hatte ich vergessen.



    EDIT:
    1.)
    Wantedtime[playerid] = SetTimerEx("Wantedtimer",60000,true,"i",playerid);
    zu:
    Wantedtime[playerid] = SetTimerEx("WantedTimer",60000,true,"i",playerid);


    2.)
    Beides. Jeweils += die extra Zeit.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Hi,



    Wieso wird beim Relog meine Knastzeit wieder auf die gestellt, mit der ich eingeknastet/getötet wurde?


    D.h ich komm mit 700 Sekunden in den Knast, logge mich mit 500 wieder ein und habe wieder 700.


    So speichere ich und lade ich es:


    SpielerInfo[playerid][pKnastzeit] = cache_get_field_content_int(0, "Knastzeit");
    SpielerInfo[playerid][pKnastzeitBis] = cache_get_field_content_int(0, "KnastzeitBis");


    format(query, sizeof(query), "%sWanteds = '%d', Knast = '%d', Knastzeit = '%d', KnastzeitBis = '%d', Knastskin = '%d', Sterne = '%d', Verbrechen = '%d', wTot = '%d', Inhaftiert = '%d' WHERE Name = '%s'", query,
    SpielerInfo[playerid][pWanteds], SpielerInfo[playerid][pKnast], SpielerInfo[playerid][pKnastzeit],SpielerInfo[playerid][pKnastzeitBis], SpielerInfo[playerid][kSkin], SpielerInfo[playerid][pSterne],SpielerInfo[playerid][pVerbrechen],SpielerInfo[playerid][wTot],SpielerInfo[playerid][pInhaftiert], SpielerInfo[playerid][pName]);//1807


    Bei OnPlayerDisconnect


    Spoiler anzeigen
    //________________ Wanted-System ______________________
    if(SpielerInfo[playerid][pWanteds] > 0 && teaminrangeofpoint(playerid,1))
    {
    format(wstring, sizeof(wstring), "%s wurde durch ausloggen Verhaftet!",SpielerName(playerid));
    SendClientMessageToAll(info, wstring);
    new time = SpielerInfo[playerid][pWanteds] * 120;
    SpielerInfo[playerid][pKnastzeitBis] = gettime() + time;
    SpielerInfo[playerid][pKnastzeit] = time;
    SpielerInfo[playerid][pKnast] = 1;
    SpielerInfo[playerid][pInhaftiert] += 1;
    SpielerInfo[playerid][pWanteds] = 0;
    SpielerInfo[playerid][pSterne] = 0;
    SpielerInfo[playerid][kSkin] = 62;
    SetPlayerWantedLevel(playerid, 0);
    }
    //________________ Saveplayer ______________________
    SavePlayer(playerid);


    Jeffry:



    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Weil du das so wolltest, ich hatte dich zu Anfang mal danach gefragt. ;)


    Schreibe das Speichern so, dann geht es wie du es jetzt willst:
    format(query, sizeof(query), "%sWanteds = '%d', Knast = '%d', Knastzeit = '%d', KnastzeitBis = '%d', Knastskin = '%d', Sterne = '%d', Verbrechen = '%d', wTot = '%d', Inhaftiert = '%d' WHERE Name = '%s'", query,
    SpielerInfo[playerid][pWanteds], SpielerInfo[playerid][pKnast], SpielerInfo[playerid][pKnastzeitBis]-gettime(),SpielerInfo[playerid][pKnastzeitBis], SpielerInfo[playerid][kSkin], SpielerInfo[playerid][pSterne],SpielerInfo[playerid][pVerbrechen],SpielerInfo[playerid][wTot],SpielerInfo[playerid][pInhaftiert], SpielerInfo[playerid][pName]);//1807
    Wir ziehen einfach von der "ZeitBis" die momentane Zeit (also die vom Speicher-Zeitpunkt) ab, dann wissen wir, wie lange er noch im Knast sein muss.