CVVXN
Дебютант
добрый день, крч у меня баг при выходе с рекона таков, если админ вошёл в слежку находясь в интерьере мэрии например, то при выходе его тпшит не в инту мэрии а в рандомную инту и вирт мир, хотя это всё записывается, исправил это всё publics'om и таймером, но как это сделать моментально, как и было, но без бага? при выходе с рекона вызывается stock setplayerspawn
код прикреплю ниже (это без фикса, как было, баг остаётся в силе)
и это при выходе с рекона
и дальше уже код со спавном игроков если они во фраках и прочее
код прикреплю ниже (это без фикса, как было, баг остаётся в силе)
PHP:
CMD:recon(playerid,params[])
{
if(!PlayerInfo[playerid][pAlcoInvenxua]) return 1;
if(!strcmp(params[0],"off",true) && GetPlayerState(playerid) == 9) {
TogglePlayerSpectatingEx(playerid,0);
GameTextForPlayer(playerid,"~w~RECON ~r~OFF",3000,4);
return true;
}
if(sscanf(params, "d", params[0])) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /re(con) [id]");
if(!IsPlayerConnected(params[0]) || params[0] == playerid) return SendClientMessage(playerid,COLOR_GRAD1, "Ошибка: Игрока не существует или это Вы");
if(FD(params[0]) && !FD(playerid)) return SendClientMessage(playerid,-1,"Запрещенно следить за этим человеком!");
if(PlayerInfo[params[0]][pInv] > 0 && !FD(playerid)) return SendClientMessage(playerid, COLOR_GRAD1, "У игрока куплена функция 'скрытность'!");
new playerState = GetPlayerState(params[0]);
if(playerState == PLAYER_STATE_SPECTATING && gSpecID[params[0]] != INVALID_PLAYER_ID) return SendMes(playerid, COLOR_GRAD1, "Администратор следит за %s[%i]", PlayerInfo[gSpecID[params[0]]][pNames], gSpecID[params[0]]);
if(playerState != 1 && playerState != 2 && playerState != 3) return SendClientMessage(playerid, COLOR_GRAD1, "Игрок не вступил в игру");
if(GetPlayerState(playerid) != 9)
{
GetPlayerPos(playerid, gPlayerPosition[playerid][0],gPlayerPosition[playerid][1],gPlayerPosition[playerid][2]);
gPlayerInformation[playerid][0] = GetPlayerInterior(playerid);
gPlayerInformation[playerid][1] = GetPlayerVirtualWorld(playerid);
}
gSpecID[playerid] = params[0];
StartRecon(playerid, params[0]);
UpdateRecon(playerid, params[0]);
ShowMenuForPlayer(ReconPanel, playerid);
for(new i; i < 7; i++) PlayerTextDrawShow(playerid, ReconPlayerText[playerid][i]);
if(PlayerInfo[playerid][pAlcoInvenxua] < 5) return true;
return SendClientMessage(playerid, COLOR_GREY, "Для того, чтобы закочить слежку за игроком, введите: '/re off'");
Pawn:
}
stock SetPlayerInteriorEx(playerid, inter) {
SetPlayerInterior(playerid, inter);
PlayerInfo[playerid][pInt] = inter;
}
stock SetPlayerVirtualWorldEx(playerid, virt) {
SetPlayerVirtualWorld(playerid, virt);
PlayerInfo[playerid][pVirt] = virt;
}
stock TogglePlayerSpectatingEx(playerid, start) {
SetPVarInt(playerid, "AntiSpecKick", 5);
if(!start) SetPlayerSpawn(playerid);
TogglePlayerSpectating(playerid, start);
PHP:
stock SetPlayerSpawn(playerid)
{
if(gSpecID[playerid] != INVALID_PLAYER_ID)
{
gSpecID[playerid] = INVALID_PLAYER_ID;
CancelSelectTextDraw(playerid);
HideMenuForPlayer(ReconPanel, playerid);
for(new i; i < 7; i++) PlayerTextDrawHide(playerid, ReconPlayerText[playerid][i]);
new Float:z_coord = gPlayerPosition[playerid][2] - 1.0;
SetSpawnInfoEx(playerid, gPlayerPosition[playerid][0], gPlayerPosition[playerid][1], z_coord, 0.0);
SetPlayerInteriorEx(playerid, gPlayerInformation[playerid][0]);
SetPlayerVirtualWorldEx(playerid, gPlayerInformation[playerid][1]);
gSpecState[playerid] = INVALID_PLAYER_ID;
return 1;
}
