Код:
#include <a_samp>
#define COLOR_ORANGE 0xFF8000FF
#define COLOR_GREY 0xC0C0C0FF
#define dcmd(%1,%2,%3) if(!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, " "))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
new Float:OldHealth[MAX_PLAYERS];
new bool:Checking[MAX_PLAYERS];
forward BlowUpPlayer(playerid);
forward CheckHealth(playerid);
forward ReturnHealth(playerid);
forward CheckLimit(playerid);
public CheckLimit(playerid)return Checking[playerid]=false;
public OnPlayerConnect(playerid)
{
Checking[playerid]=false;
return 1;
}
public OnPlayerDisconnect(playerid)
{
Checking[playerid]=false;
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(godmode,7,cmdtext);
return 0;
}
dcmd_godmode(playerid,params[])
{
new tmp[255],giveplayerid,idx;
tmp = strtok(params, idx);
giveplayerid=strval(tmp);
GetPlayerHealth(giveplayerid,OldHealth[giveplayerid]);
if(!IsPlayerAdmin(playerid))
return SendClientMessage(playerid,COLOR_GREY,"Ты не админ ёптанах");
if(!strlen(tmp))
return SendClientMessage(playerid,COLOR_GREY,"/Godmode [ид игрока]");
if(!IsPlayerConnected(giveplayerid))
return SendClientMessage(playerid,COLOR_GREY,"Такого игрока не существует");
if(Checking[giveplayerid]==true)
return SendClientMessage(playerid,COLOR_GREY,"Это процедуру можно проделывать раз в полторы секунды");
if(GetPlayerAnimationIndex(playerid))
{
new animlib[32],animname[32];
GetAnimationName(GetPlayerAnimationIndex(giveplayerid),animlib,32,animname,32);
if((!strcmp(animlib, "SWIM", true)) || (!strcmp(animlib, "PED") && !strcmp(animname, "FALL_FALL") || !strcmp(animname, "factalk") && !IsPlayerInAnyVehicle(giveplayerid)))
return SendClientMessage(playerid,COLOR_GREY,"Вы не можете проверять этого игрока в данный момент");
}
Checking[giveplayerid]=true;
SetPlayerHealth(giveplayerid,100);
SetPlayerArmour(giveplayerid,0);
SetTimerEx("BlowUpPlayer",150,false,"d",giveplayerid);
return 1;
}
public BlowUpPlayer(playerid)
{
new Float:POS[3];
GetPlayerPos(playerid, POS[0], POS[1], POS[2]);
CreateExplosionForPlayer(playerid, POS[0], POS[1], POS[2], 4, 5);
SetTimerEx("CheckHealth",200,false,"d",playerid);
}
public CheckHealth(playerid)
{
new PlayerName[MAX_PLAYER_NAME],str[256],Float:Health;
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
GetPlayerHealth(playerid,Health);
if(Health>=100)
{
format(str,sizeof(str),"Игрок %s подозревается в использовании Год Мод'а (Packetloss: %f | Ping: %d)",PlayerName,NetStats_PacketLossPercent(playerid),GetPlayerPing(playerid));
SendClientMessageToAll(COLOR_ORANGE,str);
if(NetStats_PacketLossPercent(playerid)>0.6 || GetPlayerPing(playerid)>160)SendClientMessageToAll(COLOR_ORANGE,"Данные неточные т.к. игрок имеет слишком большой пинг либо пакетлосс");
SendClientMessage(playerid,COLOR_ORANGE,"Ты чё падла ты чё ты чё");
}
else if(Health<100)
{
SendClientMessage(playerid,COLOR_ORANGE,"Вы были проверены на Год Мод");
format(str,sizeof(str),"%s не использует Год Мод",PlayerName);
for(new i=0;i<MAX_PLAYERS;i++)if(IsPlayerAdmin(i))SendClientMessage(i,COLOR_ORANGE,str);
}
SetTimerEx("ReturnHealth",200,false,"d",playerid);
}
public ReturnHealth(playerid)
{
new str[256];
format(str,sizeof(str),"Вам вернулись ваши жалкие %d хп",floatround(OldHealth[playerid]));
SendClientMessage(playerid,COLOR_ORANGE,str);
SetPlayerHealth(playerid,OldHealth[playerid]);
SetTimerEx("CheckLimit",1500,false,"d",playerid);
}
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}