PDA

Просмотр полной версии : [Вопрос] PlayerSpectateVehicle



geneff
14.01.2019, 02:15
Здравствуйте. У меня такой вопрос к Вам, вот у меня есть команда слежки за игроком, и когда я ее ввожу находясь в транспорте чтобы посмотреть за другим игроком который тоже находится в транспорте - происходит интересная хрень. Меня сначало кидает в PLAYER_STATE_SPECTATING, потом в PLAYER_STATE_DRIVER и снова в PLAYER_STATE_SPECTATING. Так вот.... Это какой-то баг или так должно быть?

DeimoS
14.01.2019, 11:38
Код нужно смотреть

geneff
14.01.2019, 19:33
Код нужно смотреть

CMD:

CMD:recon(playerid, params[])
{
IsAdminEx(1);

extract params -> new targetid; else
return SendClientMessage(playerid, COLOR_WHITE, "Введите: /re(con) [id]");

if(0 == IsPlayerConnected(targetid))
return SendErrorMessage(playerid, PlayerIsNotOnline);

if(IsPlayerLogged(targetid) == PLAYER_OFFLINE)
return SendErrorMessage(playerid, PlayerIsNotLogged);

if(pTemp[targetid][p_spectation_id] != INVALID_PLAYER_ID)
return SendErrorMessage(playerid, "Администратор в режиме наблюдения");

if(GetPlayerState(targetid) != 1 && GetPlayerState(targetid) != 2 && GetPlayerState(targetid) != 3)
return SendClientMessage(playerid, COLOR_RED, "error 0132");

if(pTemp[playerid][p_spectation_id] == INVALID_PLAYER_ID)
{
new Float:pos_x, Float:pos_y, Float:pos_z, Float:pos_a;
GetPlayerPos(playerid, pos_x, pos_y, pos_z);
GetPlayerFacingAngle(playerid, pos_a);

SetPVarInt(playerid, "SpecInt", GetPlayerInterior(playerid));
SetPVarInt(playerid, "SpecVw", GetPlayerVirtualWorld(playerid));
SetPVarFloat(playerid, "SpecX", pos_x);
SetPVarFloat(playerid, "SpecY", pos_y);
SetPVarFloat(playerid, "SpecZ", pos_z);
SetPVarFloat(playerid, "SpecA", pos_a);

SetPlayerReconTextDraw(playerid, true);

for(new i; i < sizeof(gSpectating_TD); i++)
TextDrawShowForPlayer(playerid, gSpectating_TD[i]);

ShowMenuForPlayer(Admin, playerid);
}
else KillTimer(pTemp[playerid][p_spectation_timer]);

SetPlayerInterior(playerid, GetPlayerInterior(targetid));
SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(targetid));
TogglePlayerSpectating(playerid, true);

new veh_id = GetPlayerVehicleID(targetid);

if(veh_id > 0)
PlayerSpectateVehicle(playerid, veh_id);
else
PlayerSpectatePlayer(playerid, targetid);

pTemp[playerid][p_spectation_id] = targetid;
pTemp[playerid][p_spectation_timer] = SetTimerEx("@UpdatePlayerSpectating", 500, false, "dd", playerid, targetid);

return 1;
}

Ну и паблик обновления

@UpdatePlayerSpectating(playerid, targetid);
@UpdatePlayerSpectating(playerid, targetid)
{
if(0 == IsPlayerConnected(playerid))
return 1;

if(0 == IsPlayerConnected(targetid))
{
HideMenuForPlayer(Admin, playerid);
SetPlayerReconTextDraw(playerid, false);
pTemp[playerid][p_spectation_id] = INVALID_PLAYER_ID;
return GameTextForPlayer(playerid, "~w~RECON ~r~ OFF~n~ ~r~PLAYER DISCONNECT", 5000, 3);
}
if(pTemp[playerid][p_spectation_id] == INVALID_PLAYER_ID)
return 1;

new
string[300];

format(string, sizeof(string), "%s [ %d ]", GetName(targetid), targetid);
PlayerTextDrawSetString(playerid, gSpectating_PTD[playerid][0], string);

new Float:player_health;
GetPlayerHealth(targetid, player_health);
format(string, sizeof(string), "HP: %0.1f", player_health);
PlayerTextDrawSetString(playerid, gSpectating_PTD[playerid][1], string);

new Float:player_armour;
GetPlayerArmour(targetid, player_armour);
format(string, sizeof(string), "ARM: %0.1f", player_armour);
PlayerTextDrawSetString(playerid, gSpectating_PTD[playerid][2], string);

format(string, sizeof(string), "PING: %d", GetPlayerPing(targetid));
PlayerTextDrawSetString(playerid, gSpectating_PTD[playerid][3], string);

format(string, sizeof(string), "IP: %s", GetIP(targetid));
PlayerTextDrawSetString(playerid, gSpectating_PTD[playerid][7], string);

format(string, sizeof(string), "Reg.IP: %s", pInfo[targetid][pIpReg]);
PlayerTextDrawSetString(playerid, gSpectating_PTD[playerid][8], string);

format(string, sizeof(string), "Speed: %d", GetPlayerSpeed(targetid));
PlayerTextDrawSetString(playerid, gSpectating_PTD[playerid][9], string);

if(IsPlayerInAnyVehicle(targetid))
{
new
veh_id = GetPlayerVehicleID(targetid),
Float:vehicle_health;

GetVehicleHealth(veh_id, vehicle_health);

format(string, sizeof(string), "HP: %0.1f", vehicle_health);
PlayerTextDrawSetString(playerid, gSpectating_PTD[playerid][4], string);

format(string, sizeof(string), "Fuel: %0.1fL", VehicleInfo[veh_id][vFuel]);
PlayerTextDrawSetString(playerid, gSpectating_PTD[playerid][5], string);

format(string, sizeof(string), "Engine: %s", VehicleInfo[veh_id][vEngine] ? ("ON"):("OFF"));
PlayerTextDrawSetString(playerid, gSpectating_PTD[playerid][6], string);
}
return (pTemp[playerid][p_spectation_timer] = SetTimerEx("@UpdatePlayerSpectating", 500, false, "dd", playerid, targetid));
}