Wanted System

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
  • Ja. Du musst ein Textdraw an der Position erstellen und dein Wantedsystem anpassen.
    Du nutzt nicht mehr "SetPlayerWantedLevel" sondern machst dir eine eigene Funktion.


    new WantedLevel[MAX_PLAYERS]; // Bitte beim Verbinden (@OnPlayerConnect) auf 0 setzen


    forward SetPlayerCrimeLevel(playerid, level);
    public SetPlayerCrimeLevel(playerid, level)
    {
    WantedLevel[playerid] += level;
    // Dann noch dein Textdraw hier mit dem Level updaten und perfekt! :)
    return 1;
    }

  • Ja. Du musst ein Textdraw an der Position erstellen und dein Wantedsystem anpassen.
    Du nutzt nicht mehr "SetPlayerWantedLevel" sondern machst dir eine eigene Funktion.


    new WantedLevel[MAX_PLAYERS]; // Bitte beim Verbinden (@OnPlayerConnect) auf 0 setzenforward SetPlayerCrimeLevel(playerid, level);public SetPlayerCrimeLevel(playerid, level){WantedLevel[playerid] += level;// Dann noch dein Textdraw hier mit dem Level updaten und perfekt! :)return 1;}

    Danke erstmal für deinen Tipp. Allerdings komme ich nicht wirklich weit.
    Ich habe es nun wie folgt aufgebaut,



    new WantedLevel[MAX_PLAYERS]; // Bitte beim Verbinden (@OnPlayerConnect) auf 0 setzen
    forward SetPlayerCrimeLevel(playerid, level);
    public SetPlayerCrimeLevel(playerid, level)
    {
    WantedLevel[playerid] += level;
    TextDrawCreate(1.000000,433.000000,PlayerInfo[playerid][pWanted]);
    return 1;
    }


    Ich gebe mit folgenden Befehl die Wanteds



    ocmd:su(playerid,params[])
    {
    new pID, Wanteds, Grund[128];
    if(sscanf(params,"uis",pID,Wanteds,Grund))return SendClientMessage(playerid,COLOR_RED,"Fehler bei der Eingabe. Verwende: /su [ID] [Anzahl] [Grund]");
    {
    new string[128];
    new Name2[MAX_PLAYER_NAME];
    new string2[128];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    GetPlayerName(pID,Name2,sizeof(Name2));
    format(string,128,"Du hast dem Spieler %s %i Wanteds gegeben! Grund: %s",Name2,Wanteds,Grund);
    format(string2,128,"Der Spieler %s hat dir %i Wanteds gegeben! Grund: %s",name,Wanteds,Grund);
    SetPlayerWantedLevel(pID,GetPlayerWantedLevel(pID) + Wanteds);
    SendClientMessage(playerid,COLOR_RED,string);
    PlayerInfo[playerid][pWanted]+=(GetPlayerWantedLevel(pID));
    SendClientMessage(pID,COLOR_RED,string2);
    }
    return 1;
    }

    Einmal editiert, zuletzt von robbi2304 ()

  • Wenn du ne Variable hast nutze die und nicht das was ich dir gebe.



    forward SetPlayerCrimeLevel(playerid, level);
    public SetPlayerCrimeLevel(playerid, level)
    {
    PlayerInfo[playerid][pWanted] += level;
    TextDrawCreate(1.000000,433.000000,PlayerInfo[playerid][pWanted]);
    return 1;
    }

  • Hallöchen.


    Fast geschafft nur nochmal eine Frage an euch. Wie sage ich dem ocmd:su befehl nochmal das er in die Datenbank die Sachen schreiben soll bzw in den pWanted vormerken soll ?




    ocmd:su(playerid,params[])
    {
    new pID, Wanteds, Grund[128]/*Array fehlt*/;
    if(sscanf(params,"uis",pID,Wanteds,Grund))return SendClientMessage(playerid,COLOR_RED,"USING: /su [ID] [Anzahl] [Grund]");
    {
    new name[MAX_PLAYER_NAME];
    new string[128];
    new Name2[MAX_PLAYER_NAME];
    new string2[128];
    GetPlayerName(playerid,name,sizeof(name));
    GetPlayerName(pID,Name2,sizeof(Name2));
    [b]PlayerInfo[playerid][pWanted]+=Grund; // Das wäre ja Falsch[/b]
    format(string,128,"Du hast dem Spieler %s %i Wanteds gegeben! Grund: %s",Name2,Wanteds,Grund);
    format(string2,128,"Der Spieler %s hat dir %i Wanteds gegeben! Grund: %s",Name,Wanteds,Grund);
    SendClientMessage(playerid,COLOR_BUSBLUE,string);
    SendClientMessage(pID,COLOR_RED,string2);
    }
    return 1;
    }



    forward wanted();
    public wanted()
    {
    new string[164];
    format(string,sizeof(string),"%i",PlayerInfo[p_id][pWanted]);
    TextDrawSetString(Textdraw0,string);
    return 1;




    }

  • Das ist ja so schon richtig. Du musst nur - sofern noch nicht getan - die Wantedlevel noch bei deiner Speicherfunktion mit einbinden, die beim Disconnect abgerufen wird.

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • Mit welchen Plugin arbeitest du denn ?

    Nur mit Streamer und MySQL.


    Allerdings muss ich z.b eine Funktion wie diese einbauen


    PlayerInfo[playerid][pMoney]+=hInfo[i][h_preis];


    Nur das diese eben für die Wanteds ist. Ich komm gerade echt nicht drauf wie das nochmal war. Es muss ja nur die Anzahl noch ausgelesen werden



    Wenn ich den geposteten Code verwende kommt folgender Error


    Code
    error 033: array must be indexed (variable "Grund")
  • Code
    PlayerInfo[playerid][pWanted]+=Wanteds;

    Hoffe du speicherst die Variable beim DIsconnect in eine DB ab.
    Sonst sind die Wanteds nach dem Relog futsch.



    //Edit pID statt playerid, sonst gibst dir selbst Wanteds : SRy

    RFT

  • Wenn ich dich richtig verstanden habe, meinst du cache_get_field_content_int.



    PlayerInfo[playerid][pWanted]=cache_get_field_content_int(spalte,"spaltenname");

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • Code
    PlayerInfo[playerid][pWanted]+=Wanteds;

    Hoffe du speicherst die Variable beim DIsconnect in eine DB ab.
    Sonst sind die Wanteds nach dem Relog futsch.



    //Edit pID statt playerid, sonst gibst dir selbst Wanteds : SRy

    Wie Blöd bin ich auch Wanteds zum speichern freigeben aber Grund auswählen o.o aber danke dir nun gibts wenigstens keine errors

  • Ich hatte gedacht das war gefordert, weil er oben schrieb "Es muss ja nur noch die Anzahl ausgelesen werden."
    Aber da du ja die Lösung geschrieben hast die er wollte, passt alles. :D

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • Hier scheint doch noch etwas nicht zu stimmen.


    Leider bekomme ich und derjenige der die Wanteds erhalten soll die Wanteds.


    Ich will sie natürlich nicht haben haha


    Einmal hier der Code



    ocmd:su(playerid,params[])
    {
    new pID, Wanteds, Grund[128]/*Array fehlt*/;
    if(sscanf(params,"uis",pID,Wanteds,Grund))return SendClientMessage(playerid,COLOR_RED,"USING: /su [ID] [Anzahl] [Grund]");
    {
    new name[MAX_PLAYER_NAME];
    new string[128];
    new Name2[MAX_PLAYER_NAME];
    new string2[128];
    GetPlayerName(playerid,name,sizeof(name));
    GetPlayerName(pID,Name2,sizeof(Name2));
    format(string,128,"Du hast dem Spieler %s %i Wanteds gegeben! Grund: %s",Name2,Wanteds,Grund);
    format(string2,128,"Der Spieler %s hat dir %i Wanteds gegeben! Grund: %s",Name,Wanteds,Grund);
    PlayerInfo[pID][pWanted]+=Wanteds;
    SendClientMessage(playerid,COLOR_BUSBLUE,string);
    SendClientMessage(pID,COLOR_RED,string2);
    }
    return 1;
    }

  • Also in dem Code werden dir selbst keine Wanteds zugewiesen.

    Sie werden mir aber im TextDraw angezeigt und den anderen.
    Ebenfalls werden diese auch gespeichert.
    Also ich denke es stimmt was mit


    PlayerInfo[pID][pWanted]+=Wanteds;


    nicht


    Oder vielleicht sitzt hier auch was falsch



    forward wanted(playerid);
    public wanted(playerid)
    {
    new string[164],pID;
    format(string,sizeof(string),"%i",PlayerInfo[playerid][pWanted]);
    TextDrawSetString(Textdraw0,string);
    return 1;
    }

    Einmal editiert, zuletzt von robbi2304 ()

    • Offizieller Beitrag

    Dies schein auch alles richtig, du könntet lediglich das pID löschen, da du es ja gar nicht brauchst und den string ein wenig verkleinern.
    Aber zeig uns doch einfach mal wo du wanted(playerid) ausführst.



    //EDIT



    So sollte eigentlich alles klappen:


  • ups siehe an da fehlt was. Habe nur einen Timer dafür aber mehr nicht xD.




    SEtTimer("wanted",1000,1);


    Die Wanteds funktionieren aber deswegen denk ich schon das alles soweit Richtig ist. Denn der public wanted übergibt alles ans Textdraw.
    Nur das Textdraw versteht nicht das er den Wanted nur für eine Person geben soll.


    @Jeffry vielleicht kannst du da weiter helfen.


    Wanteds werden Richtig vergeben wiegesagt nur falsch im Textdraw angezeigt

    • Offizieller Beitrag

    So nun muss ich überlegen wie ich den nochmal erstelle

    Ich würde dir eher von diesem Timer abraten, da es eigentlich ja unsinnig ist.
    Du kannst es auch lediglich bei den paar Befehlen, wo du die Wanteds Updaten musst einfügen.
    Also bei
    OnPlayerConnect (Oder deiner Variante davon)
    OnPlayerDisconnect
    Befehl: /su
    Befehl: /clear
    ggf. beim Inviten bei den Cops
    Und eventuell falls du Wanteds noch anders verschwinden sollten

  • Das ganze würde aber nichts an der Anzeige vom TextDraw ändern