Aktualisierender Checkpoint bei /orten

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
  • Hallo liebste Community.


    Ich höffe ich könnt mir wieder helfen, und zwar damit:


    if(strcmp(cmd, "/orten", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(!IsACop(playerid))
    {
    SendClientMessage(playerid, COLOR_GREY, "Du bist kein Polizist!");
    return 1;
    }
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Benutzung: /orten [Spieler ID]");
    return 1;
    }
    giveplayerid = ReturnUser(tmp);
    if(IsPlayerConnected(giveplayerid))
    {
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(giveplayerid, X,Y,Z);
    SetPlayerCheckpoint(playerid, X,Y,Z, 6);
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Falsche ID!");
    }
    }
    return 1;


    Das ist der Befehl /orten. Ich denke jeder kann sich daraus zusammen setzten was dieser Bewirkt.


    Das Problem: Der Checkpoint aktuallisiert sich nicht.


    Ich wöllte aber gern das er das tut.


    Könnt ihr mir verraten wie ich das hinbekomme?


    Vielen Dank im Vorraus


    Lg byBSE

  • Ehm, wieso hat das was mit der Farbe zu tun?!
    Sorry bin noch Anfänger. Ich kann bis jetzt nur einfache sachen.


    Ich hätte eher an einen Timer gedacht, der den checkpoint aller einer sekunde (bzw. mehreren millisekunden) aktuallisiert.


    Lg byBSE

  • Ehm, wieso hat das was mit der Farbe zu tun?!
    Sorry bin noch Anfänger. Ich kann bis jetzt nur einfache sachen.


    Ich hätte eher an einen Timer gedacht, der den checkpoint aller einer sekunde (bzw. mehreren millisekunden) aktuallisiert.


    Lg byBSE


    Du denkst auch Richtig . Das mit SetPlayerColor ist auch nicht ganz falsch. Du lässt die Farbe des georteten Spieler ändern, somit das der Cop, der /orten [ID] den Spieler auf der Minimap sieht, weil der geortete eine andere Farbe hat.

  • Timer ist schon richtig.


    Erstmal erstellst du eine globale variable in der du die ID des Timers speicherst. Da der Befehl ja warscheinlich für mehrere Personen zugänglich ist erstellst du gleich ein Array.
    new ortenTimer[MAX_PLAYERS];


    dann erstellst du ein public welches du per Timer aufrufen kannst.
    forward updateOrtenCheckpoint(playerid, zielid)
    public updateOrtenCheckpoint(playerid, zielid)//playerid ist die ID des spielers der den Checkpoint sehen soll, zielid ist die ID des Spielers an dessen Position der Checkpoint erstellt werden soll.
    {
    new Float:X,Float:Y,Float:Z;//Variablen für die Position erstellen
    GetPlayerPos(zielid, X,Y,Z);//Position unseres Ziels herausfinden
    SetPlayerCheckpoint(playerid, X,Y,Z, 6);//Checkpoint für playerid anzeigen
    return true;
    }


    Dann musst du das ganze nur noch als Timer aufrufen
    if(strcmp(cmd, "/orten", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(!IsACop(playerid))
    {
    SendClientMessage(playerid, COLOR_GREY, "Du bist kein Polizist!");
    return 1;
    }
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Benutzung: /orten [Spieler ID]");
    return 1;
    }
    giveplayerid = ReturnUser(tmp);
    if(IsPlayerConnected(giveplayerid))
    {
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(giveplayerid, X,Y,Z);
    SetPlayerCheckpoint(playerid, X,Y,Z, 6);
    ortenTimer[playerid] = SetTimerEx("updateOrtenCheckpoint", 1000, true, "ii", playeird, giveplayerid);
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Falsche ID!");
    }
    }
    return 1;
    }


    Und dann musst du schauen wann du den checkpoint nicht mehr anzeigen lassen möchtest. Also beim verlassen des Servers, oder wenn der spieler den Befehl erneut eingibt o.ä.
    Da machst du dann einfach
    KillTimer(ortenTimer[playerid]);
    um den Timer zu killen.

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • maddin VIELEN TAUSEND DANK :D hat funktioniert. Eine Frage: Die aktuallisierung kann man doch sicherlich schneller einstellen. Das macht man dann am Timer oder? (Sie ist schon schnell genug aber ich will ja was dabei lernen x) )



    2 Mal editiert, zuletzt von Tomsen ()