/tv - Position Speichern /tvoff Zur Position zurückporten

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
  • hey,


    ich möchte gern, dass wenn ich auf /tv gehe (jemanden beobachte) meine aktuelle Position gespeichert wird und wenn ich dann /tvoff gehe man dort wieder hingeportet wird.
    Ich habe das jz so gelöst, doch man spawnt immer am Spawnpunkt und nicht an der gespeicherten Position:



    new Float:TeleportTv[MAX_PLAYERS][3];


    if(!strcmp(cmd,"/tv",true))
    {
    tmp = strtok(cmdtext,idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_DBLUE, "* NUTZE: /tv [id/spielername]");
    if(!isPlayerAnAdmin(playerid,2)) return SendClientMessage(playerid,COLOR_GRAD2,"* [SERVER]Du kannst diesen Befehl nicht nutzen!");
    GetPlayerPos(playerid, TeleportTv[playerid][0],TeleportTv[playerid][1],TeleportTv[playerid][2]);
    new user = strval(tmp);
    user = ReturnUser(tmp);
    TogglePlayerSpectating(playerid, 1);
    PlayerSpectatePlayer(playerid, user);
    PlayerSpectateVehicle(playerid,GetPlayerVehicleID(user),SPECTATE_MODE_NORMAL);
    SendClientMessage(playerid,COLOR_GREEN,"* Du bist im Beobachtungsmodus. Sollte die Person aus einem Fahrzeug steigen oder in eine Fahrzeug steigen nutze den Befehl erneut!");
    return 1;
    }
    if(!strcmp(cmd,"/tvoff",true))
    {
    tmp = strtok(cmdtext,idx);
    if(!isPlayerAnAdmin(playerid,2)) return SendClientMessage(playerid,COLOR_GRAD2,"* [SERVER]Du kannst diesen Befehl nicht nutzen!");
    TogglePlayerSpectating(playerid, 0);
    PlayerSpectatePlayer(playerid, playerid);
    SendClientMessage(playerid,COLOR_GREEN,"* Du bist nun nicht mehr im Beobachtungsmodus und spawnst an dener letzten Position.");
    SetPlayerPos(playerid, TeleportTv[playerid][0],TeleportTv[playerid][1],TeleportTv[playerid][2]);
    return 1;
    }


    Kann mir jemand sagen wo der Fehler liegt?


    /edit: Hab ein wenig gestestet:
    if(!strcmp(cmd,"/gototv",true))
    {
    tmp = strtok(cmdtext,idx);
    if(!isPlayerAnAdmin(playerid,2)) return SendClientMessage(playerid,COLOR_GRAD2,"* [SERVER]Du kannst diesen Befehl nicht nutzen!");
    SendClientMessage(playerid,COLOR_GREEN,"*letzten Position.");
    SetPlayerPos(playerid, TeleportTv[playerid][0],TeleportTv[playerid][1],TeleportTv[playerid][2]);
    return 1;
    }
    Also das Speichern der Positionen klappt, wenn ich /gototv eingebe bin ich da, wo ich eigentlich auch bei /tv eingegeben habe & wo ich eigentlich auch wieder sein sollte wenn ich /tvoff eingebe

    Einmal editiert, zuletzt von Joe. () aus folgendem Grund: Siehe /edit

  • mach oben im Script das


    new Float:lastX[MAX_PLAYERS],Float:lastY[MAX_PLAYERS],Float:lastZ[MAX_PLAYERS];


    dann in den Befehl das rein:


    GetPlayerPos(playerid,lastX[playerid],lastY[playerid],lastZ[playerid]);


    wenn er den befehl beendet das machen


    SetPlayerPos(playerid,lastX[playerid],lastY[playerid],lastZ[playerid]);


    das war es schon im Ganzen

  • Ich habs nun mal so gemacht, auch wenn es vielleicht ein wenig umständlich ist, es funktioniert.
    in dem befehl /tv ist nichts anders
    if(!strcmp(cmd,"/tvoff",true))
    {
    tmp = strtok(cmdtext,idx);
    if(!isPlayerAnAdmin(playerid,2)) return SendClientMessage(playerid,COLOR_GRAD2,"* [SERVER]Du kannst diesen Befehl nicht nutzen!");
    TogglePlayerSpectating(playerid, 0);
    PlayerSpectatePlayer(playerid, playerid);
    SendClientMessage(playerid,COLOR_GREEN,"* Du bist nun nicht mehr im Beobachtungsmodus und spawnst an dener letzten Position.");
    SetTimerEx("TVtimer",109,0,"i",playerid);
    return 1;
    }


    Der Timer:
    public TVtimer(playerid)
    {
    SetPlayerPos(playerid, TeleportTv[playerid][0],TeleportTv[playerid][1],TeleportTv[playerid][2]);
    return 1;
    }

  • TeleportTv[playerid][0]
    wozu?


    Ich hab da doch was gepostet und als info nach 109 millisekunden wirst du dann zurückgepawnt

  • Ich hab es jetzt mal so versucht wie du es vorgeschlagen hast, ist aber im prinzip genau das selbe wie ich verher hatte.


    Wenn ich dann /tvoff eingebe spawn ich ganz kurz an der letzten posi und dann am spawnpunkt, wenn ich /tvoff dann noch mal eingebe,
    dann spawn ich an der letzten posi, doch ich versteh nicht warum, denn nach SetPlayerPos kommt doch nur noch return, wieso verändert
    der die posi dann noch mal?:/

  • ich habe keine ahnung was du da gemacht hast
    aus ein kleinen teil kann ich keine fehler erkennen