Код:
#include <a_samp>
#define spec_modo_player 1
#define spec_modo_veic 2
new
idEspiado[MAX_PLAYERS],
idEspiando[MAX_PLAYERS],
spec_modo[MAX_PLAYERS],
bool:EstaEspiando[MAX_PLAYERS],
gLIMITE_JOGADORES = -1;
forward GetPlayerID(string[]);
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(espiar,6,cmdtext); ///////////////////linha16///////////////////
return false; ///////////////////////linha17///////////
}
public OnPlayerConnect(playerid)
{
idEspiando[playerid] = INVALID_PLAYER_ID;
idEspiado[playerid] = INVALID_PLAYER_ID;
return true;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(GetPlayerState(i) == PLAYER_STATE_SPECTATING && idEspiado[i] == playerid)
{
TogglePlayerSpectating(i, 1);
PlayerSpectateVehicle(i, vehicleid);
spec_modo[playerid] = spec_modo_veic;
}
}
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(GetPlayerState(i) == PLAYER_STATE_SPECTATING && idEspiado[i] == playerid)
{
TogglePlayerSpectating(i, 1);
PlayerSpectatePlayer(i, playerid);
spec_modo[playerid] = spec_modo_player; ////////////////////////////linha 49 /////////////////
}
}
return 1;
}
dcmd_espiar(playerid, params[])
{
if(IsPlayerAdmin(playerid))
{
new
plid,
string[128];
if(!strlen(params)) return SendClientMessage(playerid, 0xFFFFFFAA, "Digite: /espiar [id (ou nick) do jogador/off]");
if(!psf_StrNumerica(params))
{
if(psf_ParteExiste(params, "off"))
{
if(idEspiando[playerid] != INVALID_PLAYER_ID)
{
TogglePlayerSpectating(playerid, 0);
idEspiado[playerid] = INVALID_PLAYER_ID;
idEspiando[plid] = INVALID_PLAYER_ID;
spec_modo[playerid] = 0;
EstaEspiando[playerid] = false;
return 1;
} else SendClientMessage(playerid, 0xFF0000AA, "Vocк nгo estб espiando ninguйm!");
return 1;
}
else
if(!psf_StrNumerica(params) && IsPlayerConnected(GetPlayerID(params)))
{
plid = GetPlayerID(params);
EspiarPlayer(playerid, plid);
format(string, sizeof(string), "Vocк estб espiando %s(id:%d).", PlayerName(plid), plid);
SendClientMessage(playerid, 0x006600AA, string);
} else SendClientMessage(playerid, 0xFF0000AA, "O playerid indicado nгo estб conectado.");
}
if(psf_StrNumerica(params))
{
plid = strval(params);
if(IsPlayerConnected(plid))
{
EspiarPlayer(playerid, plid);
format(string, sizeof(string), "Vocк estб espiando %s(id:%d).", PlayerName(plid), plid);
SendClientMessage(playerid, 0x006600AA, string);
return 1;
} else SendClientMessage(playerid, 0xFF0000AA, "O playerid indicado nгo estб conectado.");
}
}
return 1;
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
new x = 0;
while(x != MAX_PLAYERS)
{
if(IsPlayerConnected(x) && GetPlayerState(x) == PLAYER_STATE_SPECTATING && idEspiado[x] == playerid &&
spec_modo[x] == spec_modo_player) SetPlayerInterior(x, newinteriorid);
x++; /////////////////////////////linha112//////////////////////////
}
}
public GetPlayerID(string[])
{
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) == 1)
{
new testname[MAX_PLAYER_NAME];
GetPlayerName(i, testname, sizeof(testname));
//printf("GetP:testname = %s : string = %s",testname,string);
if(psf_ParteExiste(string, testname)) ////////////////////linha 125///////////
{
//printf("TRUE GetP:testname = %s : string = %s playerid %d",testname,string, i);
return i;
}
}
}
return INVALID_PLAYER_ID;
}
stock LerLimiteJogadores()
{
if(gLIMITE_JOGADORES == -1) gLIMITE_JOGADORES = GetServerVarAsInt("maxplayers");
return gLIMITE_JOGADORES;
}
stock PlayerName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
return name;
}
stock ProcurarJogadorID(playerid, str[], bool:leituratodos = true)
{
new resultado;
if(strlen(str))
{
if(psf_ParteExiste(str, "*"))
{
if(leituratodos) return -1;
else
{
SendClientMessage(playerid, 0xFF0000AA, "Este comando nгo possui a funзгo 'todos' (*). Por favor, mencione um nome ou id.");
return INVALID_PLAYER_ID+2;
}
}
else if(!strcmp(str, "eu", true)) return playerid;
LerLimiteJogadores();
new nomef[MAX_PLAYER_NAME];
psf_CopiarStr(nomef, str);
resultado = ProcurarJogadorID_(nomef);
if(resultado == INVALID_PLAYER_ID)
{
new strm[128];
format(strm, sizeof(strm), "Referкncia '%s' nгo encontrada (jogador desconectado ou nome incompleto)!", str);
SendClientMessage(playerid, 0xFF0000AA, strm);
}
return resultado;
}
SendClientMessage(playerid, 0xFF0000AA, "ERRO (PJID01): VALORES NULOS!");
return INVALID_PLAYER_ID+1;
}
stock ProcurarJogadorID_(nomef[MAX_PLAYER_NAME])
{
new
t = strlen(nomef),
tlj = strlen(psf_IntStr(gLIMITE_JOGADORES));
if(psf_StrNumerica(nomef) && t <= tlj)
{
new valor = strval(nomef);
if(t == 1 || t == 2) if(valor >= 0 && valor <= gLIMITE_JOGADORES) return valor;
if(tlj > 2 && t == tlj) for(new i; i < gLIMITE_JOGADORES; i++) if(valor == i && IsPlayerConnected(i)) return i;
}
if(t > 2) for(new i; i < gLIMITE_JOGADORES; i++) if(!strcmp(PlayerName(i), nomef, true) && IsPlayerConnected(i)) return i;
return INVALID_PLAYER_ID;
}
stock EspiarPlayer(playerid, espiadoid)
{
TogglePlayerSpectating(playerid, 1);
idEspiado[playerid] = espiadoid;
idEspiando[espiadoid] = playerid;
SetPlayerInterior(playerid,GetPlayerInterior(espiadoid));
SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(espiadoid));
if(IsPlayerInAnyVehicle(espiadoid))
{ ///////////////////////////linha203/////////////////////////////////////
PlayerSpectateVehicle(playerid, GetPlayerVehicleID(espiadoid));
idEspiado[playerid] = espiadoid;
idEspiando[espiadoid] = playerid;
spec_modo[playerid] = spec_modo_veic;
}
else
{
PlayerSpectatePlayer(playerid, espiadoid);
idEspiado[playerid] = espiadoid;
idEspiando[espiadoid] = playerid;
spec_modo[playerid] = spec_modo_player;
}
return 1;
}