Spec Perspective
#1

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;
        }
    }
Reply
#2

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.
Reply
#3

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.
Reply
#4

pawn Код:
#if EnableSpec == true
    dcmd(lspec,5,cmdtext);
    dcmd(lspecoff,8,cmdtext);
    dcmd(lspecvehicle,12,cmdtext);
    #endif
PHP код:
    if(AccInfo[playerid][Level] >= || IsPlayerAdmin(playerid))
    {
        if(
AccInfo[playerid][pGps] != -1)
        return 
SendClientMessage(playeridred"ERROR: First Disable the Gps System! (/gps off)");
        
        if(!
strlen(params) || !IsNumeric(params)) return
        
SendClientMessage(playeridLIGHTBLUE2"Usage: /lspec [PlayerID]") &&
        
SendClientMessage(playeridorange"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(playeridred"ERROR: You cannot spectate Yourself");
            
            if(
GetPlayerState(specplayerid) == PLAYER_STATE_SPECTATING && AccInfo[specplayerid][SpecID] != INVALID_PLAYER_ID)
            return 
SendClientMessage(playeridred"ERROR: Player spectating someone else");
            
            if(
GetPlayerState(specplayerid) != && GetPlayerState(specplayerid) != && GetPlayerState(specplayerid) != 3)
            return 
SendClientMessage(playeridred"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(playeridspecplayerid);
            }
            else return 
SendClientMessage(playerid,red,"ERROR: You cannot spectate the highest level admin");
        }
        else return 
ErrorMessages(playerid2);
    }
    else return 
ErrorMessages(playerid7);

Give me rep. if i helped you
Reply
#5

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.
Reply


Forum Jump:


Users browsing this thread: