[Include] [INC] Weapon Anticheat
#1

Посмотрел я тут другие форумы и убедился. 99% Античитов здесь - фекалии.

Вот нормально, хоть и частично работающий античит на оружие. На патроны сделаете сами, кому надо. На патроны не делал, т.к код будет содержать много лишнего.


Добавляем переменные. MP - предполагаемое количество игроков на сервере.

Код:
#define MP 5

new PlayerWeapons[MP][46];
new iPlayerWeapon[MP];
new iNewPlayerWeapon[MP];
new iPlayerAmmo[MP];
new iNewPlayerAmmo[MP];
Добавляем функции куда-нибудь.
Код:
//---------------------------------------------------------------------------------------------

GivePlayerWeaponUAC(playerid,id,ammo)
{
PlayerWeapons[playerid][0] = 1;
PlayerWeapons[playerid][id] = 1;
if(id == 39) { PlayerWeapons[playerid][40] = 1; }
GivePlayerWeapon(playerid,id,ammo);
return 1;
}

//---------------------------------------------------------------------------------------------

ResetPlayerWeaponsUAC(playerid)
{
for(new i = 0; i < 46; i++)
{
PlayerWeapons[playerid][i] = 0;
}
PlayerWeapons[playerid][0] = 1;
ResetPlayerWeapons(playerid);
return 1;
}

//---------------------------------------------------------------------------------------------
Меняем все функции выдачи и сброса оружий на мои аналоги.
Также в конец OnPlayerDisconnect и в начало OnPlayerSpawn и OnPlayerDeath добавляем

Код:
ResetPlayerWeaponsUAC(playerid);
Заменяем функцию OnPlayerUpdate

Код:
public OnPlayerUpdate(playerid)
{
if(IsPlayerConnected(playerid))
{
iNewPlayerAmmo[playerid] = GetPlayerAmmo(playerid);
if(iNewPlayerAmmo[playerid] != iPlayerAmmo[playerid])
{
OnPlayerAmmoChange(playerid, iNewPlayerAmmo[playerid], iPlayerAmmo[playerid]);
iPlayerAmmo[playerid] = iNewPlayerAmmo[playerid];
}
iNewPlayerWeapon[playerid] = GetPlayerWeapon(playerid);
if(iNewPlayerWeapon[playerid] != iPlayerWeapon[playerid])
{
OnPlayerWeaponChange(playerid, iNewPlayerWeapon[playerid], iPlayerWeapon[playerid]);
iPlayerWeapon[playerid] = iNewPlayerWeapon[playerid];
}
}
return 1;
}
Добавляем функции:

Код:
forward OnPlayerAmmoChange(playerid, newammo, oldammo);
public OnPlayerAmmoChange(playerid, newammo, oldammo)
{
if(newammo == 0)
{
PlayerWeapons[playerid][GetPlayerWeapon(playerid)] = 0;
}
return 1;
}

//---------------------------------------------------------------------------------------------

forward OnPlayerWeaponChange(playerid, newweapon, oldweapon);
public OnPlayerWeaponChange(playerid, newweapon, oldweapon)
{
new string[128];
if(PlayerWeapons[playerid][newweapon] == 0 && GetPlayerWeapon(playerid) != 0)
{
format(string,128, "%s (%d) был кикнут. Читерство на оружие - %s.",GetName(playerid),playerid,aWeaponNames[newweapon]);
SendClientMessageToAll(COLOR_RED,string);
Kick(playerid);
}
return 1;
}
Массив aWeaponsNames возьмите из фильтрскрипта debug. Функцию GetName найдите тоже где нибудь.

Внимание! Этот античит прокатит только на те моды, где есть своя система аммуниций. Но по мне, ради такого стоит её сделать. Свою не даю, потому что я жид. И при подборе пикапа с оружием, выдавайте игроку тоже оружие что он подбирает, но только с нулём патронов.
Reply
#2

На патроны в данный момент сделать античит невозможно ибо кол во патронов в половине случаев возвращается неверное.
Reply
#3

Quote:

На патроны в данный момент сделать античит невозможно ибо кол во патронов в половине случаев возвращается неверное.

возможно и сделал, просто у тебя фантазия хромает.
Reply
#4

Quote:
Originally Posted by ^Faus
возможно и сделал, просто у тебя фантазия хромает.
С фантазией у меня всё нормально, сделать то можно, но зачем? Нормальный читер врубит фриз патронов и античит будет бесполезен)))
Reply
#5

я написал, кто хочет делать anti infinite ammo - пусть делают. у меня оно есть и работает.
Reply
#6

ещё короче баг такой маленький возникнуть может.
Если вы садитесь в Caddy вам выдаётся клюшка. Ну вы поняли что надо сделать
Reply
#7

какая вероятность что античит может ошибиться? прсото если большая то свой вырезать не буду чтобы заменить...
Reply
#8

Вероятность вообще отсутствует, если все оружия что ты выдаёшь в моде, выдаются через эту функцию.
Но опять же, есть спорные моменты, например когда заходишь в Police Ranger(выдаётся шотган) или Caddy(клюшка).

Решается просто.
Код:
public OnPlayerEnterVehicle(playerid,vehicleid,ispassenger)
{
if(GetVehicleModel(vehicleid) == 457) { GivePlayerWeaponUAC(playerid,2,0); }
if(GetVehicleModel(vehicleid) == 599) { GivePlayerWeaponUAC(playerid,25,0); }
}
Reply
#9

Quote:
Originally Posted by ^Faus
Вероятность вообще отсутствует, если все оружия что ты выдаёшь в моде, выдаются через эту функцию.
Но опять же, есть спорные моменты, например когда заходишь в Police Ranger(выдаётся шотган) или Caddy(клюшка).

Решается просто.
Код:
public OnPlayerEnterVehicle(playerid,vehicleid,ispassenger)
{
if(GetVehicleModel(vehicleid) == 457) { GivePlayerWeaponUAC(playerid,2,0); }
if(GetVehicleModel(vehicleid) == 599) { GivePlayerWeaponUAC(playerid,25,0); }
}
Но если при этом у тебя уже есть оружие в этом слоте, то клюшку тебе не дадут, а в слот шотгана вроде добавятся патроны
Reply
#10

у меня был антчит выдавал через ACSGivePlayerWeapon и частенько кикал невиновных)) хз почему
будет время попробую твой)
Reply
#11

Я написал, что для этого нужна своя система аммуниций. И все функции выдачи оружия должны быть заменены на мои.


Quote:

Но если при этом у тебя уже есть оружие в этом слоте, то клюшку тебе не дадут, а в слот шотгана вроде добавятся патроны

Клюшка выдаётся при посадке в машину, что непонятного? А ноль патронов просто так.
Reply
#12

Quote:
Originally Posted by ^Faus
Клюшка выдаётся при посадке в машину, что непонятного?
Не совсем, клюшка будет дана если в этом слоте нету другого оружия.
Reply
#13

подскажите пожалуйста, в чем может быть проблема, я ставлю этот античит, все отлично работает, но как только на сервер заходит больше 5 человек все начинают тупо падать с неба.
Reply
#14

ну подскажите, в чем проблема?
Reply
#15

оружие глючит в сампе... лучше сделать норм систему античита (по определению) и внести в нее исключения:
1) если сел в тачу - то делать доп. обработку спецоружия (теков...)
2) если сел в спецмодель кот выдает скриптовым образом оружие то тупо отнимать
3) сделать счетчик "лагов" если античит в течение 10 сек пытался отнять пухи у игрока и кол-во провалов более пяти то тупо кикать с подозрением на чит или лаг... скоро сделаю свой античит по этой схеме... думаю что все будет работать норм...

P.s: будут проблемы возможно во времена когда игрок выходит входит в тачку....(серву данные не отсылаются в этот момент (хз почему)... итд...)
Reply
#16

не тестировал твой античит, но думаю что в нём много не учтёно.
писал античит оружия, но он у меня на сервере постоянно выключен, т.к. при онлайне в 200 человек сильно ложно флудит в чат, когда кто то быстро скролит оружие. остальное всё учтено.
вся проблема в античитах оружия то, что в сампе при быстром скроле возвращается, даже при определённом оружие, т.е. проверке закончил ли смену оружия игрок, кол-во патронов от другого оружия.
Reply
#17

del.....
Reply
#18

Quote:

вся проблема в античитах оружия то, что в сампе при быстром скроле возвращается, даже при определённом оружие, т.е. проверке закончил ли смену оружия игрок, кол-во патронов от другого оружия.

А наф так? лучше делать проверку оружейных слотов, онито помойму не должны глючить при скролле

уже осталось совсем совсем мало - скоро напишу свой античит....

З.Ы: DANGER1979 , советую сделать антилаг - оч помогает...метод создания - в OnPlayerUpdate() делать инкремент переменной PlayerUpdateTicks и обнулять ее после проверок в главном таймере.... если она = 0 то игрок либо лагает либо в афк))) работает отлично) для теста афк нужно сделать счетчик афк...т.е скока раз она была равна нулю...если например 5 раз... т.е лаг длинной в 5 сек хДД то писать в чат что игрок перешел в афк...
Reply
#19

Quote:
Originally Posted by Maggi
View Post
уже осталось совсем совсем мало - скоро напишу свой античит....
а может не надо , напишите уже что-нибудь новое, реально надоели эти баяны, совсем фантазии чтоли нет?!
Reply
#20

как говорится: перестаньте изобретать велосипед, его уже давно изобрели
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)