Derzilla
Умник
Здравствуйте, уважаемые форумчане.
Сегодня я решил все-таки выложить мою "позорную" работу.
Примерное время написания: 20-30 минут
Версия команды для ZCMD
Описание: Проверяет игрока на ГМ, сравнивая HP до и после использования команды. Если HP изменено (не читер), то ему будет возвращено его старое HP.
Скриншоты:
Что-ж, приступим..
Добавляем ко всем forward's:
Ко всем new's:
Далее ищем в public OnPlayerCommandText свою команду /gm и заменяем на эту (P.S. Спасибо Block. за оптимизацию)
Далее создадим паблик:
Вот и все!
Уважаемые скриптеры, знаю что можно было использовать функцию SetTimerEx, но я не очень дружу с этими таймерами, и попросту могу что-либо напутать с ними. Если сделаете более упрощенную (с SetTimerEx), буду только рад.
Всем удачи!
-----------------
Сделал систему с учетом брони, может бред, но все же..
Суть:
Перед проверкой, сканируется броня человека (запоминается) и убирается. После проверки возвращается:
Ко всем new's:
в команду /gm добавляем перед взрывом (перед CreateExplosion(boomx, boomy , boomz, 5, 0.5);):
Если выдает ошибку на строчке SetPlayerArmourAC(giveplayerid, 0);, замените на SetPlayerArmour(giveplayerid, 0);
Далее в public Gmtest(playerid); после SetPlayerHealthAC (где игрок НЕ ГМ)
а в том месте, где игрок ГМ, просто обнуляем без возвращения:
Сегодня я решил все-таки выложить мою "позорную" работу.
Примерное время написания: 20-30 минут
Версия команды для ZCMD
Описание: Проверяет игрока на ГМ, сравнивая HP до и после использования команды. Если HP изменено (не читер), то ему будет возвращено его старое HP.
Скриншоты:
Если без чита:
Если с читом:
Если с читом:
Добавляем ко всем forward's:
PHP:
forward Gmtest(playerid);
PHP:
new GmtestTimer[MAX_PLAYERS];
new AdmGM[MAX_PLAYERS] = 0;
new Float:AdmGMHP[MAX_PLAYERS];
new AdmGMID[MAX_PLAYERS] = INVALID_PLAYER_ID;
PHP:
if(strcmp(cmd, "/gm", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] < 2) return SendClientMessage(playerid, COLOR_GRAD1, "Вам не доступна данная функция");
GetPlayerName(playerid, sendername, sizeof(sendername));
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /gm [id]");
giveplayerid = strval(tmp);
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid, COLOR_GREY, "[Ошибка] Игрок не найден!");
new Float:boomx, Float:boomy, Float:boomz;
GetPlayerPos(giveplayerid,boomx, boomy, boomz);
GetPlayerHealth(giveplayerid,AdmGMHP[playerid]);
AdmGM[playerid] = 1;
AdmGMID[playerid] = giveplayerid;
CreateExplosion(boomx, boomy , boomz+7, 5, 0.5);
GmtestTimer[playerid] = SetTimerEx("Gmtest",1000,true,"d",playerid);
return true;
}
PHP:
public Gmtest(playerid)
{
new string[128], Float:nowhealth[MAX_PLAYERS];
if(AdmGM[playerid] == 1)
{
GetPlayerHealth(AdmGMID[playerid],nowhealth[AdmGMID[playerid]]);
}
if((AdmGMHP[playerid]-nowhealth[AdmGMID[playerid]]) > 0)
{
format(string, sizeof(string), "До: \t\t\t\t%.0f.0 HP\nПосле: \t\t\t%.0f.0 HP\nHP уменьшилось на: \t\t%.0f.0\n\n{7FB151}ГМ не обнаружено. HP игрока восстановлено.",AdmGMHP[playerid],nowhealth[AdmGMID[playerid]],(AdmGMHP[playerid]-nowhealth[AdmGMID[playerid]]));
ShowPlayerDialog(playerid,8888,DIALOG_STYLE_MSGBOX, "Проверка на God Mode",string, "Закрыть", "");
SetPlayerHealthAC(AdmGMID[playerid], AdmGMHP[playerid]);
AdmGM[playerid] = 0;
AdmGMHP[playerid] = 0;
AdmGMID[playerid] = INVALID_PLAYER_ID;
}
else if((AdmGMHP[playerid]-nowhealth[AdmGMID[playerid]]) == 0)
{
format(string, sizeof(string), "До: \t\t\t%.0f.0 HP\nПосле: \t\t%.0f.0 HP\nHP не уменьшилось\n\n{CD5A5A}Возможно этот игрок использует ГМ.",AdmGMHP[playerid],nowhealth[AdmGMID[playerid]]);
ShowPlayerDialog(playerid,8888,DIALOG_STYLE_MSGBOX, "Проверка God Mode",string, "Закрыть", "");
AdmGM[playerid] = 0;
AdmGMHP[playerid] = 0;
AdmGMID[playerid] = INVALID_PLAYER_ID;
}
KillTimer(GmtestTimer[playerid]);
}
Уважаемые скриптеры, знаю что можно было использовать функцию SetTimerEx, но я не очень дружу с этими таймерами, и попросту могу что-либо напутать с ними. Если сделаете более упрощенную (с SetTimerEx), буду только рад.
Всем удачи!
-----------------
Сделал систему с учетом брони, может бред, но все же..
Суть:
Перед проверкой, сканируется броня человека (запоминается) и убирается. После проверки возвращается:
Ко всем new's:
PHP:
new Float:AdmGMArm[MAX_PLAYERS];
PHP:
GetPlayerArmour(giveplayerid, AdmGMArm[playerid]);
SetPlayerArmourAC(giveplayerid, 0);
Далее в public Gmtest(playerid); после SetPlayerHealthAC (где игрок НЕ ГМ)
PHP:
SetPlayerArmourAC(AdmGMID[playerid], AdmGMArm[playerid]);
AdmGMArm[playerid] = 0;
PHP:
AdmGMArm[playerid] = 0;
Последнее редактирование модератором:
