admin spec em outro player - hiwyn - 11/05/2022
Eu queria fazer um script pra ficar olhando os outros players jogar, até tentei funciona, mas tá uma merda....
1- quando um cara troca de interior ou virtual world (um dos dois ou os dois ainda não consegui indentificar) fica tudo branco
2- quando um cara entra num carro eu vejo de dentro do carro como se tivesse em primeira pessoa
Código: CMD:tv(playerid, params[]) {
if(admin[playerid] < 1) return 0;
new id, string[80], lvlaviso;
lvlaviso = admin[playerid];
if(sscanf(params,"u", id) && gSpectateID[playerid] == 65535) return SendClientMessage(playerid, -1, "Use: /tv [id]");
else if(sscanf(params,"u", id) && gSpectateID[playerid] != 65535) {
SetPlayerInteriorEx(playerid,0);
SetPlayerVirtualWorldEx(playerid,0);
inttype[playerid] = 0;
TogglePlayerSpectating(playerid, 0);
gSpectateID[playerid] = INVALID_PLAYER_ID;
gSpectateType[playerid] = ADMIN_SPEC_TYPE_NONE;
format(string, sizeof(string), "AdmCmd: %s saiu do modo TV.", PlayerName(playerid));
ABroadCast(COLOR_LIGHTRED, string, lvlaviso);
SpawnPlayer(playerid);
return 1;
}
if(id == playerid) return SendClientMessage(playerid, -1, "You can not use this command for yourself!");
else if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COLOR_GREY, "Jogador não conectado");
else if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "[ERROR] You have entered an invalid playername/playerid!");
else {
DoingTv(playerid, id);
format(string, sizeof(string), "AdmCmd: %s está de TV no jogador %s.", PlayerName(playerid), PlayerName(id) );
ABroadCast(COLOR_LIGHTRED, string, lvlaviso);
}
return 1;
}
public DoingTv(playerid, targetid) {
//
SetPlayerInteriorEx(playerid, GetPlayerInterior(targetid));
SetPlayerVirtualWorldEx(playerid, GetPlayerVirtualWorld(targetid));
inttype[playerid] = inttype[targetid];
//
gSpectateType[playerid] = ADMIN_SPEC_TYPE_PLAYER;
TogglePlayerSpectating(playerid, 1);
PlayerSpectatePlayer(playerid, targetid);
gSpectateID[playerid] = targetid;
}
public SetPlayerVirtualWorldEx(playerid, vwid) {
// set vw
SetPlayerVirtualWorld(playerid, vwid);
// update tv
foreach(new x : Player) {
if(IsPlayerConnected(x)
&& GetPlayerState(x) == PLAYER_STATE_SPECTATING
&& gSpectateID[x] == playerid
&& gSpectateType[x] == ADMIN_SPEC_TYPE_PLAYER
)
{
DoingTv(x, playerid);
break;
}
}
}
public SetPlayerInteriorEx(playerid, intid) {
// set interior
SetPlayerInterior(playerid, intid);
// reset tv
foreach(new x : Player) {
if(IsPlayerConnected(x)
&& GetPlayerState(x) == PLAYER_STATE_SPECTATING
&& gSpectateID[x] == playerid
&& gSpectateType[x] == ADMIN_SPEC_TYPE_PLAYER
)
{
DoingTv(x, playerid);
break;
}
}
}
RE: admin spec em outro player - White_Blue - 11/05/2022
No caso do interior pode ser resolvido na callback OnPlayerInteriorChange colocando o código lá, e creio que quando o player entra em um carro poderia ser resolvido na callback OnPlayerEnterVehicle
https://open.mp/docs/scripting/callbacks/OnPlayerInteriorChange
https://open.mp/docs/scripting/callbacks/OnPlayerEnterVehicle
RE: admin spec em outro player - hiwyn - 11/05/2022
(11/05/2022 11:38)White_Blue Escreveu: No caso do interior pode ser resolvido na callback OnPlayerInteriorChange colocando o código lá, e creio que quando o player entra em um carro poderia ser resolvido na callback OnPlayerEnterVehicle
https://open.mp/docs/scripting/callbacks/OnPlayerInteriorChange
https://open.mp/docs/scripting/callbacks/OnPlayerEnterVehicle
Eu sobreescrevi os setinterior pra
Código: SetPlayerInteriorEx
com o código que eu mandei acima
mas do jeito que eu fiz não funcionou bem
como eu deveria fazer? e nas callbacks de entrar e sair do veiculo, o que eu deveria mudar?
RE: admin spec em outro player - k2bi_YT - 11/05/2022
Teste isso:
Código PHP: forward AtualizarTV(playerid); new TimerSpec[MAX_PLAYERS]; new SpecVeh[MAX_PLAYERS]; CMD:tv(playerid, params[]) { if(admin[playerid] < 1) return 0; new id, string[80], lvlaviso; lvlaviso = admin[playerid]; if(sscanf(params,"u", id) && gSpectateID[playerid] == 65535) return SendClientMessage(playerid, -1, "Use: /tv [id]"); else if(sscanf(params,"u", id) && gSpectateID[playerid] != 65535) { SetPlayerInterior(playerid,0); SetPlayerVirtualWorld(playerid,0); inttype[playerid] = 0; TogglePlayerSpectating(playerid, 0); KillTimer(TimerSpec[playerid]); gSpectateID[playerid] = INVALID_PLAYER_ID; gSpectateType[playerid] = ADMIN_SPEC_TYPE_NONE; SpecVeh[playerid] = 0; format(string, sizeof(string), "AdmCmd: %s saiu do modo TV.", PlayerName(playerid)); ABroadCast(COLOR_LIGHTRED, string, lvlaviso); SpawnPlayer(playerid); return 1; } if(id == playerid) return SendClientMessage(playerid, -1, "You can not use this command for yourself!"); if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COLOR_GREY, "Jogador não conectado"); if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "[ERROR] You have entered an invalid playername/playerid!"); format(string, sizeof(string), "AdmCmd: %s está de TV no jogador %s.", PlayerName(playerid), PlayerName(id) ); ABroadCast(COLOR_LIGHTRED, string, lvlaviso); TogglePlayerSpectating(playerid, 1); PlayerSpectatePlayer(playerid, id); gSpectateID[playerid] = id; SpecVeh[playerid] = 0; TimerSpec[playerid] = SetTimerEx("AtualizarTV", 1000, true, "i", playerid); return 1; }
public AtualizarTV(playerid) { if(gSpectateID[playerid] != INVALID_PLAYER_ID) { if(IsPlayerConnected(gSpectateID[playerid])) { new id = gSpectateID[playerid]; if(GetPlayerInterior(playerid) != GetPlayerInterior(id)) SetPlayerInterior(playerid, GetPlayerInterior(id)); if(GetPlayerVirtualWorld(playerid) != GetPlayerVirtualWorld(id)) SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(id)); if(IsPlayerInAnyVehicle(id) && SpecVeh[playerid] == 0) { SpecVeh[playerid] = 1; PlayerSpectateVehicle(playerid, GetPlayerVehicleID(playerid)); return true; } else if(SpecVeh[playerid] == 1) { SpecVeh[playerid] = 0; PlayerSpectatePlayer(playerid, id); } return true; } KillTimer(TimerSpec[playerid]); SendClientMessage(playerid, -1, "O jogador que você estava assistindo desconectou."); SpecVeh[playerid] = 0; TogglePlayerSpectating(playerid, 0); SetPlayerInterior(playerid,0); SetPlayerVirtualWorld(playerid,0); inttype[playerid] = 0; gSpectateID[playerid] = INVALID_PLAYER_ID; gSpectateType[playerid] = ADMIN_SPEC_TYPE_NONE; format(string, sizeof(string), "AdmCmd: %s saiu do modo TV.", PlayerName(playerid)); ABroadCast(COLOR_LIGHTRED, string, lvlaviso); SpawnPlayer(playerid); return true; } return true; }
RE: admin spec em outro player - xbruno1000x - 11/05/2022
Essa FS tem textdraws muito bonitos e atende muito bem ao spectate.
https://github.com/Agneese-Saini/SA-MP/blob/master/filterscripts/spectate.pwn
RE: admin spec em outro player - hiwyn - 16/05/2022
Com os códigos que vcs mandaram aqui eu consegui fazer o meu, obrigado +rep
|