Hey,
habe ein Problem mit meine Spectator-System.
Wenn der zu beobachtende Spieler das Interior und der virtuelle Welt wechselt, updatet das Specsystem bzw. ich werde nicht in das Interior oder in die virtuelle Welt gesetzt.
(Ich sehe dann nur Himmel)
Specbefehl:
ocmd:tv(playerid, params[]){
if(!SpielerInfo[playerid][pEingeloggt])return SendClientMessage(playerid,Grau,"Du bist nicht eingeloggt.");
if(!IstAdmin(playerid, 1))return SendClientMessage(playerid,Grau,"Du hast nicht die benötigten Rechte für diesen Befehl.");
{
new pID;
if(sscanf(params,"u",pID))return SendClientMessage(playerid,Gelb,"/tv [Spieler/ID]");
if(pID == playerid)return SendClientMessage(playerid,Grau,"Du kannst Dich nicht selber beobachten.");
if(!IsPlayerConnected(pID))return SendClientMessage(playerid,Grau,"Der Spieler ist nicht verbunden.");
if(IsSpecing[playerid] == 1)return SendClientMessage(playerid,Grau,"Du bist bereits im Beobachtungsmodus.");
GetPlayerPos(playerid,sx[playerid],sy[playerid],sz[playerid]);
inter[playerid] = GetPlayerInterior(playerid);
vWorld[playerid] = GetPlayerVirtualWorld(playerid);
TogglePlayerSpectating(playerid,true);
if(IsPlayerInAnyVehicle(pID) == 1){
if(GetPlayerInterior(pID) > 0){
SetPlayerInterior(playerid,GetPlayerInterior(pID));
}
if(GetPlayerVirtualWorld(pID) > 0){
SetPlayerVirtualWorld(playerid,GetPlayerVirtualWorld(pID));
}
PlayerSpectateVehicle(playerid,GetPlayerVehicleID(pID));
}else{
if(GetPlayerInterior(pID) > 0){
SetPlayerInterior(playerid,GetPlayerInterior(pID));
}
if(GetPlayerVirtualWorld(pID) > 0){
SetPlayerVirtualWorld(playerid,GetPlayerVirtualWorld(pID));
}
PlayerSpectatePlayer(playerid,pID);
}
PlayerPlaySound(playerid,5201,0.0,0.0,0.0);
new str[64],str1[64];
format(str,sizeof(str),"Du beobachtest nun %s",SpielerName(pID));
format(str1,sizeof(str1),"%s beobachtet nun %s",SpielerName(playerid),SpielerName(pID));
SendClientMessage(playerid,Tuerkies,str);
SendAdminChat(1,Hellgruen,str1);
IsSpecing[playerid] = 1;
IsBeingSpeced[pID] = 1;
spectatorid[playerid] = pID;
}
return 1;
}
Callback
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
if(IsBeingSpeced[playerid] == 1){
for(new i=0;i<MAX_PLAYERS;i++){
if(spectatorid[i] == playerid){
SetPlayerInterior(i,GetPlayerInterior(playerid));
SetPlayerVirtualWorld(i,GetPlayerVirtualWorld(playerid));
}
}
}
return 1;
}
Habe es schon mit
GetPlayerPos();
Versucht, ist leider gescheitert.