© HovinE
Умник
Сегодня добавил команду /recon (без ошибок).
Начал тестировать команду с напарником, что вышло: Только начал спекать за ним, как тут отрубается сервер!
В логи ничего не пишет, ошибок повторюсь нет.
Дефайны:
Переменные:
Форварды:
Код команды /recon:
Код команды /recoff:
Код public OnPlayerSelectedMenuRow:
Код меню:
Код старта:
Код стоп:
Дополнение:
Помогите пожалуйста, буду искренне благодарен, а так же признателен!
Начал тестировать команду с напарником, что вышло: Только начал спекать за ним, как тут отрубается сервер!
В логи ничего не пишет, ошибок повторюсь нет.
Дефайны:
PHP:
#define ADMIN_SPEC_TYPE_NONE 0
#define ADMIN_SPEC_TYPE_PLAYER 1
#define ADMIN_SPEC_TYPE_VEHICLE 2
PHP:
new Spectate[MAX_PLAYERS];
new Menu:reconmenu;
new Toogle[MAX_PLAYERS];
new gSpectateID[MAX_PLAYERS];
new gSpectateType[MAX_PLAYERS];
PHP:
forward Menu();
PHP:
if(PlayerInfo[playerid][pAdmin] == 0) return true;
new specid;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Информиция: /recon [id]");
specid = ReturnUser(tmp);
if(specid == playerid) return SendClientMessage(playerid, COLOR_WHITE, "[Ошибка] Вы ввели свой ID.");
if(PlayerInfo[specid][pAdmin] > PlayerInfo[playerid][pAdmin]) return true;
if(!IsPlayerConnected(specid)) return SendClientMessage(playerid, COLOR_WHITE, "Игрок - оффлайн.");
if(GetPlayerState(specid) == PLAYER_STATE_SPECTATING && gSpectateID[specid] != INVALID_PLAYER_ID)
{
GetPlayerName(gSpectateID[specid], sendername, sizeof(sendername));
format(string, sizeof(string), " Этот игрок наблюдает за [%d]%s!",gSpectateID[specid], sendername);
SendClientMessage(playerid, COLOR_GREY, string);
return 1;
}
if(GetPlayerState(specid) != 1 && GetPlayerState(specid) != 2 && GetPlayerState(specid) != 3) return SendClientMessage(playerid, COLOR_RED, "Игрок не вступил в игру !");
StartSpectate(playerid, specid);
Spectate[playerid] = specid;
ShowMenuForPlayer(reconmenu,playerid);
return true;
PHP:
if(PlayerInfo[playerid][pAdmin] == 0) return true;
new specid;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING)
StopSpectate(playerid);
return 1;
}
specid = ReturnUser(tmp);
StopSpectate(specid);
format(string, sizeof(string), " Вы отключили [%d]%s из режима слежения!",gSpectateID[specid], sendername);
SendClientMessage(playerid, COLOR_GREY, string);
return true;
PHP:
new Menu:Current = GetPlayerMenu(playerid); // НА САМОМ ДЕЛЕ КОД ПОСТРОЕН ЛЕСЕНКОЙ!!!
if(Current == reconmenu)
{
new string[150];
GetPlayerName(Spectate[playerid], giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
switch(row)
{
case 0:
{
if(Toogle[Spectate[playerid]] == 0)
{
TogglePlayerControllable(Spectate[playerid], 0);
format(string, sizeof(string), "%s был заморожен Администратором %s.",giveplayer ,sendername);
SendAdminMessage(COLOR_GREY, string);
ShowMenuForPlayer(reconmenu,playerid);
Toogle[Spectate[playerid]] = 1;
}
else
{
TogglePlayerControllable(Spectate[playerid], 1);
format(string, sizeof(string), "%s был разморожен Администратором %s",giveplayer ,sendername);
SendAdminMessage(COLOR_GREY, string);
ShowMenuForPlayer(reconmenu,playerid);
Toogle[Spectate[playerid]] = 0;
}
}
case 1:
{
format(string, sizeof(string), "Игрок %s | На GM test Администратором %s",giveplayer, sendername);
SendAdminMessage(COLOR_GREY, string);
new Float:boomx, Float:boomy, Float:boomz;
GetPlayerPos(Spectate[playerid],boomx, boomy, boomz);
CreateExplosion(boomx, boomy , boomz, 5, 2);
ShowMenuForPlayer(reconmenu,playerid);
}
case 2:
{
new Float:slx, Float:sly, Float:slz;
GetPlayerName(Spectate[playerid], giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
SetPlayerHealth(Spectate[playerid], 130);
GetVehiclePos(GetPlayerVehicleID(Spectate[playerid]), slx, sly, slz);
SetVehiclePos(GetPlayerVehicleID(Spectate[playerid]), slx, sly, slz+550);
PlayerPlaySound(Spectate[playerid], 1130, slx, sly, slz+5);
format(string, sizeof(string), "AdmCmd: %s был подкинут администратором %s",giveplayer ,sendername);
SendAdminMessage(COLOR_GREY, string);
ShowMenuForPlayer(reconmenu,playerid);
}
case 3:
{
new playersip[150];
GetPlayerIp(Spectate[playerid],playersip,sizeof(playersip));
format(string, sizeof(string), "[%s] IP: %s",giveplayer,playersip);
SendClientMessage(playerid,COLOR_GREY,string);
ShowMenuForPlayer(reconmenu,playerid);
}
case 4:
{
new Float:shealth;
new Float:slx, Float:sly, Float:slz;
GetPlayerHealth(Spectate[playerid], shealth);
SetPlayerHealth(Spectate[playerid], shealth-5);
GetPlayerPos(Spectate[playerid], slx, sly, slz);
SetPlayerPos(Spectate[playerid], slx, sly, slz+5);
PlayerPlaySound(Spectate[playerid], 1130, slx, sly, slz+5);
ShowMenuForPlayer(reconmenu,playerid);
}
case 5:
{
new mess[64];
format(mess, 64, "/getstats %d",Spectate[playerid]);
OnPlayerCommandText(playerid,mess);
ShowMenuForPlayer(reconmenu,playerid);
}
case 6:
{
StartSpectate(playerid, Spectate[playerid]);
ShowMenuForPlayer(reconmenu,playerid);
}
case 7:
{
StopSpectate(playerid);
Spectate[playerid] = 255;
PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0);
}
}
}
return true;
PHP:
public Menu()
{
reconmenu = CreateMenu("Recon", 1, 25.0, 160.0, 100.0 );
AddMenuItem(reconmenu,0,"Freeze");
AddMenuItem(reconmenu,0,"GMtest");
AddMenuItem(reconmenu,0,"VehSlap");
AddMenuItem(reconmenu,0,"Getip");
AddMenuItem(reconmenu,0,"Slap");
AddMenuItem(reconmenu,0,"Stats");
AddMenuItem(reconmenu,0,"Update");
AddMenuItem(reconmenu,0,"Re Off");
}
PHP:
stock StartSpectate(playerid, specid) // НА САМОМ ДЕЛЕ КОД ПОСТРОЕН ЛЕСЕНКОЙ!!!
{
for(new x=0; x<GetMaxPlayers(); x++)
{
if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && gSpectateID[x] == playerid)
{
AdvanceSpectate(x);
}
}
if(IsPlayerInAnyVehicle(specid))
{
SetPlayerInterior(playerid,GetPlayerInterior(specid));
SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(specid));
TogglePlayerSpectating(playerid, 1);
PlayerSpectateVehicle(playerid, GetPlayerVehicleID(specid));
gSpectateID[playerid] = specid;
gSpectateType[playerid] = ADMIN_SPEC_TYPE_VEHICLE;
}
else
{
SetPlayerInterior(playerid,GetPlayerInterior(specid));
SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(specid));
TogglePlayerSpectating(playerid, 1);
PlayerSpectatePlayer(playerid, specid);
gSpectateID[playerid] = specid;
gSpectateType[playerid] = ADMIN_SPEC_TYPE_PLAYER;
}
new ping = GetPlayerPing(specid);
new Float:health;
new Float:armour;
GetPlayerHealth(specid, health);
new string[356], name[24];
GetPlayerName(specid,name,sizeof(name));
SetTimer("SpectatorOb", 1000, 0);
format(string,356,"~n~~n~~n~~n~~n~~n~~n~~n~~n~~w~Nick [%s] - ID [%d]~n~HP [%.0f] - AR: [%.1f] - PING: [%d]", name,specid,health,armour,ping);
GameTextForPlayer(playerid,string,10000,3);
return 1;
}
PHP:
stock StopSpectate(playerid)
{
TogglePlayerSpectating(playerid, 0);
gSpectateID[playerid] = INVALID_PLAYER_ID;
gSpectateType[playerid] = ADMIN_SPEC_TYPE_NONE;
GameTextForPlayer(playerid,"~n~~n~~n~~n~~n~~n~~n~~n~~w~Spectator Mode Off",3000,3);
return 1;
}
PHP:
stock AdvanceSpectate(playerid) // НА САМОМ ДЕЛЕ КОД ПОСТРОЕН ЛЕСЕНКОЙ!!!
{
if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING && gSpectateID[playerid] != INVALID_PLAYER_ID)
{
for(new x = gSpectateID[playerid]+1; x <= GetMaxPlayers(); x++)
{
if(x == MAX_PLAYERS) x = 0;
if(IsPlayerConnected(x) && x != playerid)
{
if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && gSpectateID[x] != INVALID_PLAYER_ID || (GetPlayerState(x) != 1 && GetPlayerState(x) != 2 && GetPlayerState(x) != 3)) continue;
else
{
StartSpectate(playerid, x);
break;
}
}
}
}
return true;
}
