Spec Perspective - Printable Version
+- SA-MP Forums Archive (
https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (
https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (
https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Spec Perspective (
/showthread.php?tid=327125)
Spec Perspective -
AustinJ - 19.03.2012
My spec command works just fine on my server, but when the player that you are specing gets in a vehicle the camera get really close. How do I fix this problem?
pawn Код:
else if(!strcmp(command, "/spec", true))
{
if(Player_Admin[playerid] >= 2)
{
new id;
if(sscanf(params, "I(-1)", id))
{
SendClientMessage(playerid, COLOR_PINK, "Usage: /spec [playerid]");
}
else if(Player_Spec[playerid] == 1 && id == -1)
{
TogglePlayerSpectating(playerid, 0);
SetPlayerPos(playerid, Player_B_Spec[playerid][0], Player_B_Spec[playerid][1], Player_B_Spec[playerid][2]);
SetPlayerFacingAngle(playerid, Player_B_Spec[playerid][3]);
SendClientMessage(playerid, COLOR_LIME, "Spec Turned Off");
Player_Spec[playerid] = 0;
}
else
{
if(id < 0 || id > PMAX || Player_Logged[id] != 1)
{
SendClientMessage(playerid, COLOR_GREY, "That player isn't logged in.");
}
else if(playerid == id)
{
SendClientMessage(playerid, COLOR_GREY, "You can not spec yourself.");
}
else
{
if(Player_Spec[playerid] == 1)
{
PlayerSpectatePlayer(playerid, id);
SendClientMessage(playerid, COLOR_LIME, "Player Switched!");
}
else
{
GetPlayerPos(playerid, Player_B_Spec[playerid][0], Player_B_Spec[playerid][1], Player_B_Spec[playerid][2]);
GetPlayerFacingAngle(playerid, Player_B_Spec[playerid][3]);
TogglePlayerSpectating(playerid, 1);
PlayerSpectatePlayer(playerid, id);
Player_Spec[playerid] = 1;
SendClientMessage(playerid, COLOR_LIME, "You are now spectating.");
}
}
}
return 1;
}
}
Re: Spec Perspective -
Skribblez - 19.03.2012
pawn Код:
new Float:health;
if(IsPlayerInAnyVehicle(id))
{
PlayerSpectateVehicle(playerid, GetPlayerVehicleID(id));
GetVehicleHealth(GetPlayerVehicleID(id), health);
}
edit: saw that you're already using "id" as your variable. anyway, hope you give me a reputation point if this helps.
Re: Spec Perspective -
CoCo™ - 19.03.2012
Just check when he changes state if there's a player spec'ing him, if there is- Just update the spectators function using the code above.
Re: Spec Perspective -
[BP]Tony - 19.03.2012
pawn Код:
#if EnableSpec == true
dcmd(lspec,5,cmdtext);
dcmd(lspecoff,8,cmdtext);
dcmd(lspecvehicle,12,cmdtext);
#endif
PHP код:
if(AccInfo[playerid][Level] >= 2 || IsPlayerAdmin(playerid))
{
if(AccInfo[playerid][pGps] != -1)
return SendClientMessage(playerid, red, "ERROR: First Disable the Gps System! (/gps off)");
if(!strlen(params) || !IsNumeric(params)) return
SendClientMessage(playerid, LIGHTBLUE2, "Usage: /lspec [PlayerID]") &&
SendClientMessage(playerid, orange, "Function: Will spec a specified Player");
new specplayerid = ReturnUser(params);
if(AccInfo[specplayerid][Level] == ServerInfo[MaxAdminLevel] && AccInfo[playerid][Level] != ServerInfo[MaxAdminLevel])
return SendClientMessage(playerid,red,"ERROR: You cannot use this command on this admin");
if(IsPlayerConnected(specplayerid) && specplayerid != INVALID_PLAYER_ID)
{
if(specplayerid == playerid)
return SendClientMessage(playerid, red, "ERROR: You cannot spectate Yourself");
if(GetPlayerState(specplayerid) == PLAYER_STATE_SPECTATING && AccInfo[specplayerid][SpecID] != INVALID_PLAYER_ID)
return SendClientMessage(playerid, red, "ERROR: Player spectating someone else");
if(GetPlayerState(specplayerid) != 1 && GetPlayerState(specplayerid) != 2 && GetPlayerState(specplayerid) != 3)
return SendClientMessage(playerid, red, "ERROR: Player not Spawned");
if((AccInfo[specplayerid][Level] != ServerInfo[MaxAdminLevel]) || (AccInfo[specplayerid][Level] == ServerInfo[MaxAdminLevel] && AccInfo[playerid][Level] == ServerInfo[MaxAdminLevel]))
{
GetPlayerPos(playerid,Pos[playerid][0],Pos[playerid][1],Pos[playerid][2]);
GetPlayerFacingAngle(playerid,Pos[playerid][3]);
SendCommandToAdmins(playerid,"LSpec");
SendClientMessage(playerid,blue,"|- Spectating On -|");
return StartSpectate(playerid, specplayerid);
}
else return SendClientMessage(playerid,red,"ERROR: You cannot spectate the highest level admin");
}
else return ErrorMessages(playerid, 2);
}
else return ErrorMessages(playerid, 7);
}
Give me rep. if i helped you
Re: Spec Perspective -
MP2 - 19.03.2012
Use OnPlayerStateChange to detect when a player enters or exists a vehicle. You will need to store the ID of the player that the spectator is spectating then do a loop.