MapIcon an der Position des Spielers?

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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
  • 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.


  • 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 :D

  • Beitrag von N0SKILL ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.

  • Ist mir bewusst, ich wollte ihm nur nicht alles vorkaufen :whistling:
    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 :pinch:


    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:

    Zitat

    P.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 X(

  • Beitrag von N0SKILL ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • 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.

  • 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.