Wie kann ich es erstellen das über den Benutzernamen des jeweiligen Users angezeigt wird wieviele Wanteds er hat ?
Wanteds über den Benutzer
- 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
-
-
Beschreibe es mal genauer was du vor hast
-
Also ich nenne nun mal ein paar beispiele.
Max und Moritz nehmen wir da einmal
Max besitzt insgesamt 3 Wanteds. Nun soll Moritz aber sehen können wenn er in 5 Meter reichweite ist z.b das über seinen Namen eine Anzahl seiner Wanteds steht.
-
Hast du es schon angefangen oder gff. ausprobiert?
-
Ich weiß nicht wie ich damit anfangen soll deswegen wäre das ganze meine Frage gewesen wie es möglich wäre
-
Du musst für den Spieler ein 3DTextLabel erstellen, dieses aktalisierst du wenn du dem Spieler neue Wanteds gibst oder wenn die Wanteds weg gehen, wenn die Wanteds weg gehen lösch du das Label,
Das Label kannst du mit Attach3DTextLabelToPlayer ransetzen...Du brauchst folgende funktionen:
https://wiki.sa-mp.com/wiki/Attach3DTextLabelToPlayer
https://wiki.sa-mp.com/wiki/Create3DTextLabelhttps://wiki.sa-mp.com/wiki/Delete3DTextLabel
https://wiki.sa-mp.com/wiki/Update3DTextLabelText
Wenn du dem Spieler Wanteds gibst, nimmst du am besten Update3D....
Bei Fragen, einfach stellen
-
Soweit verstanden und durchgeführt.
Wanteds werden mir nicht bei jedem Spieler angezeigt der den Rang pMember == 1 hat.
if(PlayerInfo[playerid][pMember]==1)
{
new string2[128];
format(string2,sizeof(string2), "Wanteds: %d", PlayerInfo[p_id][pWanted]);
label=Create3DTextLabel(string2, COLOR_BUSBLUE, 0.0, 0.0, 0.4,10, 0, 1);
}Wo könnt da der Fehler sein
-
- wieso pmember und du musst das label noch attachen dazu label als playerid
-
Das Label soll nur für den pMember Angezeigt werden der den Wert 1 hat. Attachet ist das woanders. Denn es soll ja nicht nur der Attechet werden der pMember == 1 ist
-
Das kannst du alles mit [wiki]CreatePlayer3DTextLabel[/wiki] unter einen Hut bringen.
Dort gibt es nämlich Parameter für- den Spieler, der das Label sehen soll und
- den Spieler, der das Label (über seinem Kopf) tragen soll.
-
as Label soll nur für den pMember Angezeigt werden der den Wert 1 hat. Attachet ist das woanders. Denn es soll ja nicht nur der Attechet werden der pMember == 1 ist
if(Spieler[i][Fraktion] == 1)
{
new PlayerText3D:label;
for(new pwtds=0; pwtds<MAX_PLAYERS; pwtds++)
{
if(Spieler[pwtds][Wanteds] > 0)
{
new string[50];
format(string,sizeof(string),"(%d) %s\nWanteds: %d\nWantedgrund: %s",pwtds,SpielerName(pwtds),Spieler[pwtds][Wanteds],Spieler[pwtds][WantedGrund]);
label = CreatePlayer3DTextLabel(i,string,COLOR_WHITE,0.0,0.0,1.0,20.0,pwtds,INVALID_VEHICLE_ID,1);
}
else if(Spieler[pwtds][Wanteds] == 0)
{
DeletePlayer3DTextLabel(pwtds,label);
}
}
}Hier bitteschön, funktioniert einwandfrei. Musst nur die einzelnen Variabeln ändern. Das ganze Paket packst du in einen 1-Sekunden Timer, kann Global sein.
vergiss die For-Schleife nicht
for(new i=0; i<MAX_PLAYERS; i++)
Gruß, Kevin
-
Das bringt mir leider auch nichts. Der 3D Text wird nur für einen Spieler erstellt.
-
Das Label muss für jeden Spieler separat definiert und erstellt werden. Daher unter den Includes:
new Text3D:wantedLabel[MAX_PLAYERS];In OnPlayerConnect:
wantedLabel[playerid] = Create3DTextLabel("Wanted: 0", COLOR_BUSBLUE, 0.0, 0.0, 0.4,10, 0, 1);In OnPlayerSpawn:
Attach3DTextLabelToPlayer(wantedLabel[playerid], playerid, 0.0, 0.0, 0.7);In OnPlayerDisconnect:
Delete3DTextLabel(wantedLabel[playerid]);Und an der Stelle, an der sich das Wanted aktualisiert (kein Timer notwendig):
new str[16];
format(str, sizeof(str), "Wanted: %d", PlayerInfo[p_id][pWanted]);
Update3DTextLabelText(wantedLabel[p_id], COLOR_BUSBLUE, str); -
Dann können aber alle Spieler das Label sehen.
So, wie ich das verstanden habe, sollen es nur Mitglieder einer Fraktion sehen können.
Daher müsste - soweit ich weiß - [wiki]CreatePlayer3DTextLabel[/wiki] verwendet werden. -
So, wie ich das verstanden habe, sollen es nur Mitglieder einer Fraktion sehen können.
Dem ersten Post war das nicht zu entnehmen.
Da es im Thread-Verlauf aber wohl dazu kommt:
Dann würde der Code so aussehen:new PlayerText3D:wantedLabel[MAX_PLAYERS][MAX_PLAYERS];
Nach dem Login (und, falls der Spieler seinen pMember im laufen Betrieb ändern kann, zusätzlich dort wo das geändert wird):
if(PlayerInfo[playerid][pMember] == 1)
{
new str[16];
for(new i = 0, j = GetMaxPlayers(); i < j; i++)
{
format(str, sizeof(str), "Wanted: %d", PlayerInfo[i][pWanted]);
wantedLabel[playerid][i] = CreatePlayer3DTextLabel(playerid, str, COLOR_BUSBLUE, 0.0, 0.0, 0.4, 10, i);
}
}In OnPlayerDisconnect (und, falls der Spieler seinen pMember im laufen Betrieb ändern kann, zusätzlich dort wo das geändert wird und zwar bevor pMember gesetzt wird):
if(PlayerInfo[playerid][pMember] == 1)
{
for(new i = 0, j = GetMaxPlayers(); i < j; i++)
{
DeletePlayer3DTextLabel(playerid, wantedLabel[playerid][i]);
}
}An der Stelle, an der sich das Wanted aktualisiert (kein Timer notwendig):
new str[16];
for(new i = 0, j = GetMaxPlayers(); i < j; i++)
{
if(PlayerInfo[i][pMember] == 1)
{
format(str, sizeof(str), "Wanted: %d", PlayerInfo[p_id][pWanted]);
UpdatePlayer3DTextLabelText(i, wantedLabel[i][p_id], COLOR_BUSBLUE, str);
}
}Wobei ich hier voraussetze, dass SA-MP das Label einem Spieler auch attached, wenn dieser nach dem pMember = 1 auf den Server kommt.
Sollte das nicht der Fall sein, verkompliziert sich die ganze Sache nochmal. -
Beitrag von robbi2304 ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: // Edit Jeffry fügte neues hinzu (). -
Wo würde ich das Label denn am sinnvollsten Attachen ?
Nur der Spieler der Fraktion pMember == 1 soll die Wanteds am Ende sehen.
-
Das attachen wird hier geregelt:
wantedLabel[playerid][i] = CreatePlayer3DTextLabel(playerid, str, COLOR_BUSBLUE, 0.0, 0.0, 0.4, 10, i);
Das "i" am Ende heißt, dass es an den Spieler mit der ID "i" attached wird.Sprich, alle pMember = 1 sehen für alle Spieler das Label (sofern SA-MP das auch für nicht-online Spieler versteht, teste das bitte so).
-
Das attachen wird hier geregelt:
wantedLabel[playerid][i] = CreatePlayer3DTextLabel(playerid, str, COLOR_BUSBLUE, 0.0, 0.0, 0.4, 10, i);
Das "i" am Ende heißt, dass es an den Spieler mit der ID "i" attached wird.Sprich, alle pMember = 1 sehen für alle Spieler das Label (sofern SA-MP das auch für nicht-online Spieler versteht, teste das bitte so).
Habe ich nun getestet, bei ID 0 kann man den Richtigen Wert sehen. Bei ID 1 wird der Wert nicht ausgegeben.
-
Ok.
Dann füge bei OnPlayerConnect das mal hinzu:
new str[16];
for(new i = 0, j = GetMaxPlayers(); i < j; i++)
{
if(PlayerInfo[i][pMember] == 1)
{
DeletePlayer3DTextLabel(i, wantedLabel[i][playerid]);
format(str, sizeof(str), "Wanted: %d", PlayerInfo[playerid][pWanted]);
wantedLabel[i][playerid] = CreatePlayer3DTextLabel(i, str, COLOR_BUSBLUE, 0.0, 0.0, 0.4, 10, playerid);
}
}Klappt es dann?
-