Spectate positioning not working correctly.
#1

I'm having an issue with the admin spectate system. After you type /specoff, instead of teleporting to your original position, the person you were spectating is sent there, OR you're both sent to spawn.

pawn Код:
COMMAND:specoff(playerid,params[])
{
    #if EnableSpectate == true
    if(PlayerInfo[playerid][pAdmin] >=1)
    {
        if(gPlayerSpectating[playerid] == 1)
        {
            TogglePlayerSpectating(playerid, 0);
            gSpectateID[playerid] = INVALID_PLAYER_ID;
            gPlayerSpectating[playerid] = 0;
            gSpectateType[playerid] = ADMIN_SPEC_TYPE_NONE;
            SendClientMessage(playerid, COLOR_GREEN, "You have stopped spectating!");
            TextDrawHideForPlayer(playerid,Spectation);
            spectimer = SetTimer("SpecSpawn",1000,0);
        }
        else SendClientMessage(playerid,COLOR_RED,"ERROR: You are not in spectate mode!");
    }
    else SendClientMessage(playerid, COLOR_GREY, "You're not authorized to use this command.");
    #endif
    return 1;
}

forward SpecSpawn(playerid);
public SpecSpawn(playerid)
{
    SetPlayerPos(playerid,sx, sy, sz);
    SetPlayerFacingAngle(playerid, sa);
    SetPlayerSkin(playerid,PlayerInfo[playerid][pSkin]);
    KillTimer(spectimer);
    return 1;
}

COMMAND:spec(playerid,params[])
{
    if(PlayerInfo[playerid][pAdmin] >=1)
    {
            if(gPlayerSpectating[playerid] == 0)
            {
                new Target;
                if(!sscanf(params, "u", Target))
                {
                    if(gPlayerSpectating[Target] == 0)
                    {
                        if(Target == INVALID_PLAYER_ID) return SendClientMessage(playerid,COLOR_BRIGHTRED,"ERROR: That player is not connected.");
                        GetPlayerPos(playerid,sx, sy, sz);
                        GetPlayerFacingAngle(playerid, sa);
                        TogglePlayerSpectating(playerid, 1);
                        PlayerSpectatePlayer(playerid, Target);
                        SetPlayerInterior(playerid,GetPlayerInterior(Target));
                        gSpectateID[playerid] = Target;
                        gPlayerSpectating[playerid] = 1;
                        gSpectateType[playerid] = ADMIN_SPEC_TYPE_PLAYER;
                        new tname[MAX_PLAYER_NAME];
                        GetPlayerName(Target,tname,sizeof(tname));
                        new MyString[128];
                        format(MyString,sizeof MyString, "You are now spectating %s! Type /specoff to stop!", tname);
                        SendClientMessage(playerid, COLOR_GREEN, MyString);
                    }
                    else SendClientMessage(playerid,COLOR_RED,"ERROR: Player is in spectate mode!");
                }
                else SendClientMessage(playerid,COLOR_WHITE,"USAGE: /spec <playerid>");
            }
            else SendClientMessage(playerid,COLOR_RED,"ERROR: You are already in spectate mode!");
        }
        else SendClientMessage(playerid, COLOR_GREY, "You're not authorized to use this command.");
    return 1;
}
Reply
#2

Why the timer doesn't work properly? because you have arguements and you must use SetTimerEx! the code below should work. or you can simply call the function directly instead of a timer.

pawn Код:
SetTimerEx("SpecSpawn", 1000, false, "i", playerid);
Reply
#3

Quote:
Originally Posted by Patrick_
Посмотреть сообщение
Why the timer doesn't work properly? because you have arguements and you must use SetTimerEx! the code below should work. or you can simply call the function directly instead of a timer.

pawn Код:
SetTimerEx("SpecSpawn", 1000, false, "i", playerid);
Testing...

EDIT:
Sorry for late response, but it seems to be working without extended testing.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)