Guten Tag Ihr lieben. Mich stört es derzeit mit dem aktuellen Wanted System. Leider kann man ja nicht mehr als 6 Sterne Standardmäßig Anzeigen lassen.
Welche möglichkeiten habe ich die Wanteds so Anzeigen zu lassen wie auf dem Angefügten Bild ?
Wanted System
- robbi2304
- Geschlossen
- Erledigt
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;
} -
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;}
-
Mit welchen Plugin arbeitest du denn ?
-
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.
-
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
-
-
Wenn ich dich richtig verstanden habe, meinst du cache_get_field_content_int.
PlayerInfo[playerid][pWanted]=cache_get_field_content_int(spalte,"spaltenname"); -
Wie Blöd bin ich auch Wanteds zum speichern freigeben aber Grund auswählen o.o aber danke dir nun gibts wenigstens keine errors
-
@#s
Damit würdest den Content sofern er geladen wurde höchstens auslesen.
-
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. -
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.
-
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 mitPlayerInfo[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;
} -
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:
Code
Alles anzeigenforward wanted(playerid); public wanted(playerid) { new string[3]; format(string, sizeof(string),"%i", PlayerInfo[playerid][pWanted]); TextDrawSetString(Textdraw0, string); return 1; } stock SpielerName(playerid) { new name[MAX_PLAYER_NAME+1]; GetPlayerName(playerid, name, sizeof(name)); return name; } ocmd:su(playerid,params[]) { new pID, Wanteds, Grund[128]; if(sscanf(params,"uds", pID, Wanteds, Grund))return SendClientMessage(playerid, COLOR_RED, "USING: /su [ID] [Anzahl] [Grund]"); //Hier COP Abfrage etc. new string[128]; format(string, sizeof(string), "Du hast dem Spieler %s %d Wanteds gegeben! Grund: %s", SpielerName(pID), Wanteds, Grund); SendClientMessage(playerid, COLOR_BUSBLUE, string); format(string, sizeof(string), "Der Spieler %s hat dir %i Wanteds gegeben! Grund: %s", SpielerName(playerid), Wanteds, Grund); SendClientMessage(pID, COLOR_RED, string); PlayerInfo[pID][pWanted] += Wanteds; wanted(pID); return 1; }
-
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:
Code
Alles anzeigenforward wanted(playerid); public wanted(playerid) { new string[3]; format(string, sizeof(string),"%i", PlayerInfo[playerid][pWanted]); TextDrawSetString(Textdraw0, string); return 1; } stock SpielerName(playerid) { new name[MAX_PLAYER_NAME+1]; GetPlayerName(playerid, name, sizeof(name)); return name; } ocmd:su(playerid,params[]) { new pID, Wanteds, Grund[128]; if(sscanf(params,"uds", pID, Wanteds, Grund))return SendClientMessage(playerid, COLOR_RED, "USING: /su [ID] [Anzahl] [Grund]"); //Hier COP Abfrage etc. new string[128]; format(string, sizeof(string), "Du hast dem Spieler %s %d Wanteds gegeben! Grund: %s", SpielerName(pID), Wanteds, Grund); SendClientMessage(playerid, COLOR_BUSBLUE, string); format(string, sizeof(string), "Der Spieler %s hat dir %i Wanteds gegeben! Grund: %s", SpielerName(playerid), Wanteds, Grund); SendClientMessage(pID, COLOR_RED, string); PlayerInfo[pID][pWanted] += Wanteds; wanted(pID); return 1; }
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
-
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 -
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 solltenDas ganze würde aber nichts an der Anzeige vom TextDraw ändern