Доступ к готовым решениям

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

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

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

Anti-GM (CLEO|Sob)

YellowFace1

Компетентный
Сразу к делу.
Добавляем переменные в начале мода:
PHP:
new TakeDamageTime[MAX_PLAYERS];
new ShotsTotal[MAX_PLAYERS];
new CheatGM[MAX_PLAYERS];
new OldGun[MAX_PLAYERS], Float: OldHP[MAX_PLAYERS];
new Float:pHealth[MAX_PLAYERS];
new Float:pArmor[MAX_PLAYERS];
new shotTime[MAX_PLAYERS];
Добавляем в таймер с 3х секундным обновлением это:

PHP:
CheatGM[playerid]=0;
Добавляем в паблик "OnPlayerWeaponShot":
PHP:
if(hittype == 1)
    {
		if(OldGun[playerid] != weaponid) { OldGun[playerid]=weaponid; ShotsTotal[playerid]=0; }
        if(GetTickCount() - shotTime[playerid] <= 120 || InAFK(hitid) || GetTickCount() - shotTime[playerid] >= 3000) { ShotsTotal[playerid]=0; } //InAFK - ваша проверка на АФК
        new Float: x, Float: y, Float: z; GetPlayerPos(hitid,x,y,z);
        if((weaponid == 25 || weaponid == 31) && GetPlayerDistanceFromPoint(playerid,x,y,z) >= 35) { ShotsTotal[playerid]=0; }
        if((weaponid == 24 || weaponid == 23) && GetPlayerDistanceFromPoint(playerid,x,y,z) >= 30) { ShotsTotal[playerid]=0; }
        if(weaponid == 29 && GetPlayerDistanceFromPoint(playerid,x,y,z) >= 40) { ShotsTotal[playerid]=0; }
        if(weaponid == 30 && GetPlayerDistanceFromPoint(playerid,x,y,z) >= 55) { ShotsTotal[playerid]=0; }
        if(weaponid == 33 && GetPlayerDistanceFromPoint(playerid,x,y,z) >= 90) { ShotsTotal[playerid]=0; }
		switch(OldGun[playerid])
		{
		    case 23,24,25,33: { if(ShotsTotal[playerid] == 3) { KickEx(hitid); } }
		    case 31,30,29: { if(ShotsTotal[playerid] == 5) { KickEx(hitid); } }
		}
		ShotsTotal[playerid]++;
	}
        shotTime[playerid] = GetTickCount();
Далее в паблик "OnPlayerTakeDamage":
PHP:
if(issuerid == INVALID_PLAYER_ID) { pHealth[playerid]-=amount; }
    else
	{
	    ShotsTotal[issuerid] = 0;
	    if(pArmor[playerid] > 0)
        {
            if(pArmor[playerid]-amount <= 0) { SetPlayerArmourAC(playerid,0.0); }
            else { SetPlayerArmourAC(playerid,pArmor[playerid]-amount); }
        }
        else
	    {
			new Float: Health; GetPlayerHealth(playerid, Health);
		    if(OldHP[playerid] == Health && GetTickCount() - TakeDamageTime[playerid] > 120) { CheatGM[playerid]++; if(CheatGM[playerid]==2) { KickEx(playerid); } }
	        pHealth[playerid]-=amount; OldHP[playerid]=Health; TakeDamageTime[playerid]=GetTickCount();
	    }
	}
Заменяем стандартные функции "SetPlayerHealth" и "SetPlayerArmour" на эти:
PHP:
stock SetPlayerHealthAC(playerid, Float: amount) { pHealth[playerid]=amount; return SetPlayerHealth(playerid,amount); }
stock SetPlayerArmourAC(playerid, Float: Arm) { pArmor[playerid]=Arm; return SetPlayerArmour(playerid, Arm); }
Строго не судите, старался для вас)
Если есть где-то ошибки или великая нагрузка, то пишите в комментарии, разберёмся!
 
Последнее редактирование:
Сверху Снизу