Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

/gm

Статус
В этой теме нельзя размещать новые ответы.

Derzilla

Умник
Здравствуйте, уважаемые форумчане.
Сегодня я решил все-таки выложить мою "позорную" работу.
Примерное время написания: 20-30 минут
Версия команды для ZCMD
Описание: Проверяет игрока на ГМ, сравнивая HP до и после использования команды. Если HP изменено (не читер), то ему будет возвращено его старое HP.
Скриншоты:
Если без чита:

Если с читом:
Что-ж, приступим..

Добавляем ко всем forward's:
PHP:
forward Gmtest(playerid);
Ко всем new's:
PHP:
new GmtestTimer[MAX_PLAYERS];
new AdmGM[MAX_PLAYERS] = 0;
new Float:AdmGMHP[MAX_PLAYERS];
new AdmGMID[MAX_PLAYERS] = INVALID_PLAYER_ID;
Далее ищем в public OnPlayerCommandText свою команду /gm и заменяем на эту (P.S. Спасибо Block. за оптимизацию)
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];
в команду /gm добавляем перед взрывом (перед CreateExplosion(boomx, boomy , boomz, 5, 0.5);):
PHP:
GetPlayerArmour(giveplayerid, AdmGMArm[playerid]);
SetPlayerArmourAC(giveplayerid, 0);
Если выдает ошибку на строчке SetPlayerArmourAC(giveplayerid, 0);, замените на SetPlayerArmour(giveplayerid, 0);
Далее в public Gmtest(playerid); после SetPlayerHealthAC (где игрок НЕ ГМ)
PHP:
SetPlayerArmourAC(AdmGMID[playerid], AdmGMArm[playerid]);
        AdmGMArm[playerid] = 0;
а в том месте, где игрок ГМ, просто обнуляем без возвращения:
PHP:
AdmGMArm[playerid] = 0;
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу