Alles anzeigenDu solltest das hier nutzen:
CAlles anzeigenocmd:vcam(playerid,params[]) { if(GetPVarType(playerid,!"spectate_person") != PLAYER_VARTYPE_NONE) { //Löscht diese Zwischenvariable DeletePVar(playerid,!"spectate_person"); //Das lässt den Spieler aus dem spectate Modus (er wird dadurch respawnt) TooglePlayerSpectating(playerid, 0); return 1; } new pID; if(sscanf(params,"u",pID)) return SendClientMessage(playerid,COLOR_GREY,"/vcam [playerid]"); if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR_RED,"Dieser Spieler ist nicht online!"); if(!IsPlayerInAnyVehicle(pID)) return SendClientMessage(playerid,COLOR_RED,"Dieser Spieler befindet sich in keinem Auto!"); //Sorgt dafür, dass playerid in die Welt von pID kommt, damit er ihn sehen kann SetPlayerInterior(playerid, GetPlayerInterior(pID)); SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(pID)), //Versetzt playerid in den Spectate Modus und beobachtet pID kontinuierlich! TooglePlayerSpectating(playerid, 1); PlayerSpectateVehicle(playerid, GetPlayerVehicleID(pID)); //Wichtig, damit bei erneutem eingeben von /vcam der Spectate Modus aufgehoben wird SetPVarInt(playerid,!"spectate_person",pID); return 1; }
Das aktualisiert sich von selbst, da musst du kein OnPlayerUpdate o.ä. nutzen.
PS: Er respawnt jetzt, wenn er den Befehl noch einmal eingibt, wenn er wieder dahin gelangen soll, wo er war, müsstest du seine Position, Interior & VW zwischenspeichern und dann wieder setzen.
Danke dir für den Code und deine Hilfsbereitschaft. Allerdings gibt es auf dem Server auf dem das System später drauf soll folgendes Problem:
Die Leute die den Befehl benutzen werden haben keine Berechtigung um zu spectaten. Was bedeutet dass wenn dieser Code ins Script implementiert wird, wird der Spieler, der den Befehl ausführt, direkt vom ACS weggehauen.
Deswegen will ich das mit SetPlayerCameraPos etc. machen.