Hey Leute,
ich wollte euch fragen, ob ihr mir sagen könnt, wie ich die Position des Spielers als MapIcon für alle anderen SPieler anzeigen lassen kann.
P.S: Es ist für ein Taxisystem
Hey Leute,
ich wollte euch fragen, ob ihr mir sagen könnt, wie ich die Position des Spielers als MapIcon für alle anderen SPieler anzeigen lassen kann.
P.S: Es ist für ein Taxisystem
Einen Timer der z.B jede halbe Sekunde ein Icon an der Position des Spielers setzt.
Beispiel: (Achtung: Kein C&P, funktioniert nicht)
forward mapicon();
SetTimer("mapicon", 5000, true); // Timer der jede halbe Sekunde aktualisiert
public mapicon()
{
for (new i = 0; i < MAX_PLAYERS; i++)
{
SetPlayerMapIcon( i, 56, X, Y, Z, 52, 0, MAPICON_LOCAL );
}
}
//EDIT
Wie mein unterer "Nachposter" schon sagte musst du natürlich noch die Position des Taxifahrers herausfinden.
Alles anzeigen
forward mapicon();
SetTimer("mapicon", 5000, true); // Timer der jede halbe Sekunde aktualisiert
public mapicon()
{
for (new i = 0; i < MAX_PLAYERS; i++)
{
SetPlayerMapIcon( i, 12, 2204.9468, 1986.2877, 16.7380, 52, 0, MAPICON_LOCAL );
}
}
er will es aber das das mapicon an der stelle erstellt wird wo der spieler grade is..
ocmd:command(playerid,parms[])
{
new Float:x44, Float:y44, Float:z44;
GetPlayerPos(playerid,x44,y44,z44);
for (new i = 0; i < MAX_PLAYERS; i++)
{
SetPlayerMapIcon(i, 12,x44,y44,z44, 52, 0, MAPICON_LOCAL );
}
return 1;
}
wen ich jetzt richtig verstehe
Ist mir bewusst, ich wollte ihm nur nicht alles vorkaufen
Zumal deine Funktion fehlerhaft ist da er nur einmal ein Map Icon setzt welches sich nicht aktualisiert.
da is nix fehler haft dann startet mal halt den timer nach der schleife wo is das problem nur es brauch doch net gleich von anfang laufen
wen man zb sowas für cops macht is es mit befehl besser
ocmd:command(playerid,parms[])
{
new Float:x44, Float:y44, Float:z44;
GetPlayerPos(playerid,x44,y44,z44);
for (new i = 0; i < MAX_PLAYERS; i++)
{
SetPlayerMapIcon(i, 12,x44,y44,z44, 52, 0, MAPICON_LOCAL );
}
SetTimer("mapicon", 5000, true); // Timer der jede halbe Sekunde aktualisiert
return 1;
}
Ich weiß nicht ob du lesen kannst:
ZitatP.S: Es ist für ein Taxisystem
//EDIT
So müsste es gehen wie du willst:
stock TaxiDuty() // ACHTUNG: Nur ein Beispiel
{
new Float:PosX, Float:PosY, Float:PosZ;
GetPlayerPos(playerid,PosX, PosY, PosZ);
SetTimer("mapicon", 500, true); // Timer der jede halbe Sekunde aktualisiert
return 1;
}
forward mapicon();
public mapicon()
{
for (new i = 0; i < MAX_PLAYERS; i++)
{
SetPlayerMapIcon( i, 56, PosX, PosY, PosZ, 52, 0, MAPICON_GLOBAL );
}
}
Und woher weiß die mapicon-Funktion, an welcher X,Y,Z es das Icon setzen soll?
stock TaxiDuty(playerid) // ACHTUNG: Nur ein Beispiel
{
new Float:PosX, Float:PosY, Float:PosZ;
GetPlayerPos(playerid,PosX, PosY, PosZ);
SetTimerEx("mapicon", 500, true, "fff", PosX, PosY, PosZ); // Timer der jede halbe Sekunde aktualisiert
return 1;
}
forward mapicon(X,Y,Z);
public mapicon(X,Y,Z)
{
for (new i = 0; i < MAX_PLAYERS; i++)
{
SetPlayerMapIcon( i, 56, X, Y, Z, 52, 0, MAPICON_GLOBAL );
}
}
N0SKILL: Almero:
Wenn ihr einen Code postet, dann achtet doch mal darauf, dass dieser auch einen Sinn ergibt
Benutz doch einfach SetPlayerColor(playerid, farbe);
DJ Deagle: Das was du da machst funktioniert aber aus zwei Gründen auch nicht. Erstens müsste man im Funktionskopf die XYZ Werte als "Float" deklarieren, und zweitens startest du einen Timer, der immer wieder an dieselbe Position das MapIcon setzt.
Unter die Includes:
new gTaxiTimer[MAX_PLAYERS] = {-1,...};
Im Befehl:
if(gTaxiTimer[playerid] != -1) KillTimer(gTaxiTimer[playerid]);
gTaxiTimer[playerid] = SetTimerEx("SetTaxiIcon", 100, true, "d", playerid);
Beim Beenden:
if(gTaxiTimer[playerid] != -1) KillTimer(gTaxiTimer[playerid]);
gTaxiTimer[playerid] = -1;
Unten im Gamemode:
forward SetTaxiIcon(playerid);
public SetTaxiIcon(playerid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
for(new i=0; i<MAX_PLAYERS; i++) if(IsPlayerConnected(i)) SetPlayerMapIcon(i, 56, x, y, z, 55, MAPICON_GLOBAL);
return 1;
}
Allerdings ist zu beachten, dass hier immer nur das Mapicon mit der Server-ID 56 gesetzt wird. Das bedeutet, wenn du zwei Spieler im Taxi-Modus hast klappt das nicht mehr, dann wird nur das Taxi von der höheren ID angezeigt. Da musst du entscheiden, ob du nur ein Taxi hast, oder ob du einen Betrag X an Mapicons reservierst, und diese dann anzeigst. Oder du nutzt den Streamer, damit geht es möglicherweise besser.
Alles anzeigenDJ Deagle: Das was du da machst funktioniert aber aus zwei Gründen auch nicht. Erstens müsste man im Funktionskopf die XYZ Werte als "Float" deklarieren, und zweitens startest du einen Timer, der immer wieder an dieselbe Position das MapIcon setzt.
Unter die Includes:
new gTaxiTimer[MAX_PLAYERS] = {-1,...};
Im Befehl:
if(gTaxiTimer[playerid] != -1) KillTimer(gTaxiTimer[playerid]);
gTaxiTimer[playerid] = SetTimerEx("SetTaxiIcon", 100, true, "d", playerid);
Beim Beenden:
if(gTaxiTimer[playerid] != -1) KillTimer(gTaxiTimer[playerid]);
gTaxiTimer[playerid] = -1;
Unten im Gamemode:
forward SetTaxiIcon(playerid);
public SetTaxiIcon(playerid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
for(new i=0; i<max_players; i++)="" if(isplayerconnected(i))="" setplayermapicon(i,="" 56,="" x,="" y,="" z,="" 55,="" mapicon_global);
return 1;
}
Allerdings ist zu beachten, dass hier immer nur das Mapicon mit der Server-ID 56 gesetzt wird. Das bedeutet, wenn du zwei Spieler im Taxi-Modus hast klappt das nicht mehr, dann wird nur das Taxi von der höheren ID angezeigt. Da musst du entscheiden, ob du nur ein Taxi hast, oder ob du einen Betrag X an Mapicons reservierst, und diese dann anzeigst. Oder du nutzt den Streamer, damit geht es möglicherweise besser.
Wie genau meinst du das mit dme Reservieren?
Bzw. wie kann ich sie Reservieren (bzw. wie kann ich sie dan verwenden?)
Und wieso muss ich die reservieren, denn wenn man einen Server erstellt, ohne was zu verändern, hat doch auch jeder Spieler einen farbigen Punkt, da wo er gerade steht...
Das gleiche möchte ich auch machen, nur dasse s bei den Taxifahrern in Gelb angezeugt wird!
Sonst habe ich sie soweit deaktiviert (bei den anderen Spielern)
Ja dann ist es wesentlich einfacher, wenn du nur die Farbe des vorhandenen Icons ändern willst.
Entweder du nutzt SetPlayerColor, sprich du setzt dem Spieler seine Farbe auf Gelb, oder du nutzt SetPlayerMarkerForPlayer, damit kannst du dann zum Beispiel die Farbe beibehalten und nur die Anzeigefarbe im Radar ändern. Mit einer Schleife kannst du es dann für alle Spieler ändern.
Schau mal ob du damit klar kommst, falls nicht poste den Code den du bis dahin hast, dann können wir dir helfen.
Man kann aber auch per SetVehicleParamsEx den objective wert auf 1 setzten