[Include] [INC] Money Anticheat
#1

90% античитов на деньги обходятся по такой схеме. В этом античите такое не пройдёт.

Инсталляция:

Difference - это отличие между суммой, которую игроку дало скриптом и которая у него на руках. Если эта сумма отличается более чем на 15$ его кикнет. Для стант-серверов рекомендуется сделать побольше, но в пределах нормы.

Ставим в TOP
pawn Code:
#define DIFFERENCE 15
new PlayerMoney[MAX_PLAYERS];
Ставим отдельно:
pawn Code:
//-----------------------------------------------------------------------------------------------------

public OnPlayerConnect(playerid)
{
PlayerMoney[playerid] = 0;
return 1;
}

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

stock GivePlayerMoneyUAC(playerid,money)
{
MoneyAntiCheat(playerid);
PlayerMoney[playerid]+=money;
GivePlayerMoney(playerid,money);
return 1;
}

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

stock SetPlayerMoneyUAC(playerid,money)
{
MoneyAntiCheat(playerid);
PlayerMoney[playerid] = money;
SetPlayerMoney(playerid,money);
return 1;
}

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

stock GetPlayerMoneyUAC(playerid)
{
MoneyAntiCheat(playerid);
return PlayerWant[playerid][playermoneyuac];
}


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

stock ResetPlayerMoneyUAC(playerid)
{
MoneyAntiCheat(playerid);
PlayerMoney[playerid] = 0;
ResetPlayerMoney(playerid);
return 1;
}

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

forward MoneyAntiCheat(playerid);
public MoneyAntiCheat(playerid)
{
new string[128];
new cash = GetPlayerMoney(playerid);
if(cash > playermoneyuac[playerid])
{
if ((cash-playermoneyuac[playerid]) > DIFFERENCE)
{
new hacked = cash - playermoneyuac[playerid];
GivePlayerMoney(playerid, -hacked);
format(string,128, "%s (%d) кикнут с сервера. Причина: Читерство на деньги (%d),GetName(playerid),playerid,hacked);
SendClientMessageToAll(COLOR_RED,string);
Kick(playerid);
}
}
return 1;
}


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

stock GetName(playerid)
{
new Name[256];
GetPlayerName(playerid,Name,MAX_PLAYER_NAME);
return Name;
}

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

stock MoneyLove(playerid)
{
new cash = GetPlayerMoney(playerid);
if(cash > playermoneyuac[playerid])
{
if ((cash-playermoneyuac[playerid]) > DIFFERENCE)
{
playermoneyuac[playerid] = GetPlayerMoney(playerid);
}else{
MoneyAntiCheat(playerid);
}
}
return 1;
}

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

public OnPlayerEnterVehicle(playerid,vehicleid,ispassenger)
{
if(GetVehicleModel(vehicleid) == 420 || GetVehicleModel(vehicleid) == 438)
{
MoneyLove(playerid);
}
return 1;
}


//-----------------------------------------------------------------------------------------------------
Не забудьте заменить функции GetPlayerMoney GivePlayerMoney SetPlayerMoney на мои!
Reply
#2

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

Каждый решает сам, что ему использовать....
Reply
#4

спору нет, но ты будешь такой античит использовать? если нет, то почему? какие минусы/плюсы?
Reply
#5

Quote:

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

что за тупизм. Все аналоги этого античита обходились, когда между таймером игрок читерил и ему давалось лаве скриптовой функцией или путем GetPlayerMoney, особенно в командах с подачей денег. Вот и всё, по крайней мере я так обошёл несколько античитов в начале лета. Сейчас может другие авторы поняли свои косяки, но эту уязвимость я уже заметил давно, руки не доходили выложить.
Reply
#6

А если на сервере 2 игрока с ид 2 и 3, что будет делать данный античит? А я скажу что - ничего он не сделает, т.к. даже проверять их не станет... (даю подсказку - КОТОК)))
Кстати что значит КОТОК? Любопытно даже стало
Reply
#7

автор
Quote:
Originally Posted by ^Psycho^
Quote:

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

что за тупизм. Все аналоги этого античита обходились, когда между таймером игрок читерил и ему давалось лаве скриптовой функцией или путем GetPlayerMoney, особенно в командах с подачей денег. Вот и всё, по крайней мере я так обошёл несколько античитов в начале лета. Сейчас может другие авторы поняли свои косяки, но эту уязвимость я уже заметил давно, руки не доходили выложить.
тупизмом можно назвать твой античит недописанный.
выдрал куски из общего какого-то кода и с довольным лицом создал релиз (:
могу пожелать только удачи в исправлениях
Reply
#8

Quote:
Originally Posted by ^Psycho^
Code:
stock PlayerCounter()
{
new c;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i)) { c++;}
}
return c;
}
Допустим у нас 10 игроков с ид от 0 до 9, игрок с ид 5 вышел и твоя функция вернет 9 игроков. это верно, но тогда цикл
Code:
for(new i = 0; i < KOTOK; i++)
{
MoneyAntiCheat(i);
}
забудет о игроке с ид 9...

ЗЫ парень наверно на КОТОК торопился) а вообще это очень забавно - докапываться до названий переменных)))
Reply
#9

и зачем вообще нужен был коток? можно ведь
Code:
for(new i = 0; i < PlayerCounter(); i++)
Reply
#10

Quote:
Originally Posted by Serafim_sd
и зачем вообще нужен был коток? можно ведь
Code:
for(new i = 0; i < PlayerCounter(); i++)
Ну условие цикла ведь проверяется/вычисляется на каждой итерации - получился бы цикл в цикле
Reply
#11

исправление будет, не ссать.
Reply
#12

Скоро будет?
Reply
#13

готово. дело одной минуты
Reply
#14

Он в интерьере за чит не посчитает если оружие в аммо купить?
Reply
#15

вроде не должен
Reply
#16

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

Вообщем в интах не конфликтует, но чит на деньги не всегда определяет
Reply
#18

Ты обновку античита делал?
Reply
#19

угу
Reply
#20

ужасный способ...
грузит сервер ппц....
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)