Spectating system
#1

Hey,

I have the following code:
pawn Код:
stock SpectateOn(playerid)
{
        TogglePlayerSpectating(playerid, 1);
        for(new i=0; i<MAX_PLAYERS; i++)
        {
            if(!IsPlayerConnected(i) || i==playerid) continue;
            if(IsPlayerInAnyVehicle(i))
            {
                PlayerSpectateVehicle(playerid, GetPlayerVehicleID(i));
            }
            else
            {
                PlayerSpectatePlayer(playerid, i);
            }
        }
        IsPlayerSpectating[playerid] = true;
        new str[128];
        format(str, 128, "You are now spectating %s (ID:%d).", GetName(SpectatedPlayer[playerid]), SpectatedPlayer[playerid]);
        SendClientMessage(playerid, COLOR_FADE1, str);
}

stock SpectateOff(playerid)
{
        TogglePlayerSpectating(playerid, 0);
        SpectatedPlayer[playerid] = 0;
        IsPlayerSpectating[playerid] = false;
}

stock SpectateNext(playerid)
{
        SpectatedPlayer[playerid]++;
        for(new i=SpectatedPlayer[playerid]; i<MAX_PLAYERS; i++)
        {
                if(!IsPlayerConnected(i) || i==playerid) continue;
                if(IsPlayerInAnyVehicle(i))
                {
                        PlayerSpectateVehicle(playerid, GetPlayerVehicleID(i));
                }
                else
                {
                        PlayerSpectatePlayer(playerid, i);
                }
                SpectatedPlayer[playerid] = i;
                break;
        }
        new str[128];
        format(str, 128, "You are now spectating %s (ID:%d).", GetName(SpectatedPlayer[playerid]), SpectatedPlayer[playerid]);
        SendClientMessage(playerid, COLOR_FADE1, str);
}

stock SpectatePrevious(playerid)
{
    SpectatedPlayer[playerid]--;
    for(new i=SpectatedPlayer[playerid]; i>-1; i--)
    {
        if(!IsPlayerConnected(i) || i==playerid) continue;
       
        if(IsPlayerInAnyVehicle(i))
        {
            PlayerSpectateVehicle(playerid, GetPlayerVehicleID(i));
        }
        else
        {
            PlayerSpectatePlayer(playerid, i);
        }
       
        SpectatedPlayer[playerid] = i;
        break;
    }
    new str[128];
    format(str, 128, "You are now spectating %s (ID:%d).", GetName(SpectatedPlayer[playerid]), SpectatedPlayer[playerid]);
    SendClientMessage(playerid, COLOR_FADE1, str);
}

stock GetName(i)
{
    new name[24];
    GetPlayerName(i, name, 24);
    return name;
}
But sometimes it goes in the -1, -2, or 0 (Nobody).
It need to start spectating on the first not yourself id, When there isnt another player online, than it need to say 'Nobody online' or something.
I'll hope somebody can help me.
Thanks!
Reply
#2

Like this..:
pawn Код:
CMD:spec(playerid, params[])
{
    if(!IsPlayerConnected(playerid)) return 0;
    if(params = playerid) return 0;
    PlayerSpectatePlayer(playerid, params, SPECTATE_MODE_NORMAL);
    return 1;
}
Reply
#3

No...
Reply
#4

I have now:
pawn Код:
{
        TogglePlayerSpectating(playerid, 1);
        for(new i=0; i<MAX_PLAYERS; i++)
        {
            if(i==MAX_PLAYERS)
            {
                SendClientMessage(playerid, COLOR_FADE1, "There are no players to spectate.");
                SpectateOff(playerid);
                return 1;
            }
            if(!IsPlayerConnected(i) || i==playerid) continue;
            if(IsPlayerInAnyVehicle(i))
            {
                PlayerSpectateVehicle(playerid, GetPlayerVehicleID(i));
            }
            else
            {
                PlayerSpectatePlayer(playerid, i);
            }
        }
        IsPlayerSpectating[playerid] = true;
        new str[128];
        format(str, 128, "You are now spectating %s (ID:%d).", GetName(SpectatedPlayer[playerid]), SpectatedPlayer[playerid]);
        SendClientMessage(playerid, COLOR_FADE1, str);
        return 1;
}

stock SpectateOff(playerid)
{
        TogglePlayerSpectating(playerid, 0);
        SetSpawnInfo(playerid, 0, Playerdata[playerid][Skin], 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
        SpawnPlayer(playerid);
        SpectatedPlayer[playerid] = 0;
        IsPlayerSpectating[playerid] = false;
}

stock SpectateNext(playerid)
{
        SpectatedPlayer[playerid]++;
        for(new i=SpectatedPlayer[playerid]; i<MAX_PLAYERS; i++)
        {
                if(i==MAX_PLAYERS)
                {
                    SendClientMessage(playerid, COLOR_FADE1, "There are no players to spectate.");
                    SpectateOff(playerid);
                    return 1;
                }
                if(!IsPlayerConnected(i) || i==playerid) continue;
                if(IsPlayerInAnyVehicle(i))
                {
                        PlayerSpectateVehicle(playerid, GetPlayerVehicleID(i));
                }
                else
                {
                        PlayerSpectatePlayer(playerid, i);
                }
               
                SpectatedPlayer[playerid] = i;
                break;
        }
        new str[128];
        format(str, 128, "You are now spectating %s (ID:%d).", GetName(SpectatedPlayer[playerid]), SpectatedPlayer[playerid]);
        SendClientMessage(playerid, COLOR_FADE1, str);
        return 1;
}

stock SpectatePrevious(playerid)
{
    SpectatedPlayer[playerid]--;
    for(new i=SpectatedPlayer[playerid]; i>-1; i--)
    {
        if(i==MAX_PLAYERS)
        {
            SendClientMessage(playerid, COLOR_FADE1, "There are no players to spectate.");
            SpectateOff(playerid);
            return 1;
        }
        if(!IsPlayerConnected(i) || i==playerid) continue;
       
        if(IsPlayerInAnyVehicle(i))
        {
            PlayerSpectateVehicle(playerid, GetPlayerVehicleID(i));
        }
        else
        {
            PlayerSpectatePlayer(playerid, i);
        }
       
        SpectatedPlayer[playerid] = i;
        break;
    }
    new str[128];
    format(str, 128, "You are now spectating %s (ID:%d).", GetName(SpectatedPlayer[playerid]), SpectatedPlayer[playerid]);
    SendClientMessage(playerid, COLOR_FADE1, str);
    return 1;
}

stock GetName(i)
{
    new name[24];
    GetPlayerName(i, name, 24);
    return name;
}
Sometimes it goes above my player limit (25)
How can i fix my system?
Thanks!
Reply
#5

pawn Код:
#undef MAX_PLAYERS
#define MAX_PLAYERS 25
Reply
#6

With SpectatePrevious & SpectateNext can i come in the + ( higher then 25 ) and in the - (lower then 1) and i can spectate myself!?
Reply
#7

Quote:
Originally Posted by wouter0100
Посмотреть сообщение
With SpectatePrevious & SpectateNext can i come in the + ( higher then 25 ) and in the - (lower then 1) and i can spectate myself!?
Why don't you test it by yourself?
Reply
#8

I'am testing it by myself?
Reply
#9

Nobody :S?
Reply
#10

Sorry, bump
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)