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

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

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

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

На оружие,патроны,бесконечные патроны,Dgun

Dezmont_Mailz

Умник
Я до этого писал античит,меня даже похвалили за это,но гнобили что в нём есть баги а проверяв командой и вправду они есть
Значит первом делом скажу что античит ловит на оружие,на патроны,также ловит читеров с бесконечными патронами,и так же NOP Dgun
Я исправил его тем что когда покупаешь оружие тебя могла кикать посколько там зависит от слотов,так же теперь когда садишься в машину с оружием с любым тебя не кикает что раньше много жалоб было на это!

нам понадобятся переменные не мало для мода сразу скажу
в pInfo

PHP:
bool:WeaponInfo[47],
	AmmoSlot[13],
	FP_Ammo_Reloading[2],
	FP_Player_Warns_Ammo_Reloading,
дальше колбеки

PHP:
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
    PlayerInfo[playerid][FP_Ammo_Reloading][0] = GetPlayerAmmo(playerid);
    if(PlayerInfo[playerid][FP_Ammo_Reloading][0] == PlayerInfo[playerid][FP_Ammo_Reloading][1])
	{
        switch(GetPlayerWeapon(playerid))
		{
		    case 0..15,44..46:
			{
                PlayerInfo[playerid][FP_Ammo_Reloading][1] = PlayerInfo[playerid][FP_Ammo_Reloading][0];
                PlayerInfo[playerid][FP_Player_Warns_Ammo_Reloading]=0;
                return 1;
            }
        }
        PlayerInfo[playerid][FP_Player_Warns_Ammo_Reloading]++;
        if(PlayerInfo[playerid][FP_Player_Warns_Ammo_Reloading]>5)
		{
            KickEx(playerid,COLOR_LIGHTRED,"Читер");
            return 1;
        }
    }
	else
	{
        PlayerInfo[playerid][FP_Ammo_Reloading][1]=PlayerInfo[playerid][FP_Ammo_Reloading][0];
        PlayerInfo[playerid][FP_Player_Warns_Ammo_Reloading]=0;
    }
    return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
    if(IsAPlane(vehicleid))
	{
	    PlayerInfo[playerid][WeaponInfo][46] = true;
	    PlayerInfo[playerid][AmmoSlot][11] += 1;
	}
	return 1;
}
дальше в конец мода

PHP:
stock GetAmmoEx(playerid)
{
    new weap = GetPlayerWeapon(playerid);
    if(weap > 0 && PlayerInfo[playerid][WeaponInfo][weap] == false || GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK)
	{
		KickEx(playerid,COLOR_LIGHTRED,"Ваш текст");
		return 1;
	}
    switch(weap)
    {
		case 0: return 1;
    	default:
    	{
			if(GetPlayerAmmo(playerid) < 0)
			{
				KickEx(playerid,COLOR_LIGHTRED,"Ваш текст");
				return 1;
   			}
   			new slot = 0;
			switch(weap)// ïðè÷èíà
			{
				case 0,1:       slot = 0;
				case 2..9:      slot = 1;
				case 22..24:    slot = 2;
				case 25..27:    slot = 3;
				case 28,29,32:  slot = 4;
				case 30,31:     slot = 5;
				case 33,34:     slot = 6;
				case 35..38:  	slot = 7;
				case 16..18:    slot = 8;
				case 41..43:    slot = 9;
				case 10..15:    slot = 10;
				case 44..46:    slot = 11;
				case 40:        slot = 12;
			}
			if(GetPlayerAmmo(playerid) > PlayerInfo[playerid][AmmoSlot][slot])
			{
				KickEx(playerid,COLOR_LIGHTRED,"Ваш текст");
				return 1;
			}
			else if(GetPlayerAmmo(playerid) != PlayerInfo[playerid][AmmoSlot][slot])
			{
			    PlayerInfo[playerid][AmmoSlot][slot] = GetPlayerAmmo(playerid);
			}
			if(GetPlayerAmmo(playerid) == 0)
			{
			    ResetPlayerWeapons(playerid);
			    PlayerInfo[playerid][WeaponInfo][weap] = false;
				PlayerInfo[playerid][AmmoSlot][slot] = 0;
			}
			return 1;
		}
	}
	return 1;
}
stock ServerGiveWeapon(playerid,weaponid,rammo)
{
    if(PlayerInfo[playerid][PlayerInAFK] > 0) return 1;
    new slot = 0;
	switch(weaponid)// ïðè÷èíà
	{
		case 0,1:       slot = 0;
		case 2..9:      slot = 1;
		case 22..24:    slot = 2;
		case 25..27:    slot = 3;
		case 28,29,32:  slot = 4;
		case 30,31:     slot = 5;
		case 33,34:     slot = 6;
		case 35..38:  	slot = 7;
		case 16..18:    slot = 8;
		case 41..43:    slot = 9;
		case 10..15:    slot = 10;
		case 44..46:    slot = 11;
		case 40:        slot = 12;
	}
 	PlayerInfo[playerid][WeaponInfo][weaponid] = true;
 	PlayerInfo[playerid][AmmoSlot][slot] += rammo;
	GivePlayerWeapon(playerid,weaponid,rammo);
	return 1;
}
stock Delgun(playerid)
{
    ResetPlayerWeapons(playerid);
    for(new i = 0; i < 13; i++) PlayerInfo[playerid][AmmoSlot][i] = 0;
    for(new i = 0; i < 47; i++) PlayerInfo[playerid][WeaponInfo][i] = false;
	return 1;
}
stock IsAPlane(vehicleid)
{
	switch(GetVehicleModel(vehicleid))
	{
		case 592, 577, 511, 512, 593, 520, 553, 476, 519, 460, 513, 548, 417, 487, 488, 497, 563, 447, 469: return 1;
	}
	return 0;
}
дальше в OnPlayerConnect,OnPlayerDeath и OnPlayerSpawn

PHP:
Delgun(playerid);
созданный паблик GetAmmoEx в секундный тайме (( таймер который обновляется каждую секунду ))

PHP:
GetAmmoEx(i);
Выдачу оружия меняем на

PHP:
ServerGiveWeapon
а теперь разберём мои старые ошибки в античите!!
Дело в том что оружие не по клиенту а по игре размещается по слотам
Иза чего были ложные,потому что в слоте 1000 пуль а в оружие 500 пуль потому что мы два раза купили или сделали ган иза этого был ложный кик
Почему в машинах кикало,дело в том что до этого когда садишься в машину GetPlayerAmmo устанавливался на 0 а привыходе из машины он был больше чем патроны в оружие иза этого он думал что ты читанул патроны однако тут проверка стоит на слот как бы в оружие не может быть больше патронов чем слоте имеем виду это
Но сейчас в данном коде это всё поравлено,наслаждайтесь и издевайтесь над читерами

Алгоритм большой но оптимизирован и читабельность кода 100% не врезается в глаза так что отдаю даром
Если где то есть ссылочку а вот прошлый античит http://pawno-info.ru/showthread.php?t=218006
Есть смысл от NOP OnPlayerWeaponShot но все знают что прокачка оружия будет через сек. таймер поэтому он будет тратить куча патронов а толку 0 он оружие не вкачает поже я сделаю что бы без прокачки скила а выстрелов было много был кик тем самым на вашем сервере будет стоять АНТИ NOP OnPlayerWeaponShot

Кто не знает что такое KickEx то просто в конец мода
PHP:
stock KickEx(playerid, color, reason[])
{
	SendClientMessage(playerid, color, reason);
	SetTimerEx("KickPlayer", GetPlayerPing(playerid) + 100, false, "i", playerid);
	return 1;
}
forward KickPlayer(playerid);
public KickPlayer(playerid)
{
	Kick(playerid);
	return 1;
}
 
Последнее редактирование:
Сверху Снизу