В верхушечку
Code
new plmoney[MAX_PLAYERS];
В public OnPlayerConnect засунем это:
Code
plmoney[playerid] = 0;
Теперь создадим "паблик", который будет давать деньги "от имени сервера":
Code
//Засуньте куда-угодно, но НЕ в другой "паблик"
public GivePlayerMoneyLegal(playerid,money)
{
if(money > 0)//Если мы даем деньги
{
plmoney[playerid] += money;//Сначала добавим это кол-во денег в наш массив
GivePlayerMoney(playerid,money);//И дадим эту сумму игроку
return 1;//Неважно, что эта функция будет возвращать, пусть это будет "тру"
}
else//Еслы мы забираем деньги
{
GivePlayerMoney(playerid,money);//Сначала заберем эту сумму игроку
plmoney[playerid] += money;//В наш массив добавим это кол-во денег
}
return 1;//Неважно, что эта функция будет возвращать, пусть это будет "тру"
}
Т. к. это "паблик", его нужно "профорвардить", засунем эту строку над нашим пабликом:
Code
forward GivePlayerMoneyLegal(playerid,money);
Теперь найдем OnPlayerUpdate, и засунем туда это:
Code
if(GetPlayerMoney(playerid) > plmoney[playerid])//Если у игрока на руках денег больше, чем должно быть... Значит он их читернул.
{
new str[64];//Переменная, в которую мы запишем наше уведомление о обнаружении читера
new plname[MAX_PLAYER_NAME];//Переменная, в которую мы поместим имя читера
GetPlayerName(playerid,plname,sizeof(plname));//Узнаем имя нашего читера
format(str,sizeof(str),"АНТИЧИТ: %s был кикнут. Причина: Читерство ($%d)",plname,GetPlayerMoney(playerid) - plmoney[playerid]);//Поместим всю нужную информацию в нашу переменную
SendClientMessageToAll(0xF0624496,str);//Опозорим этого игрока на весь сервер
Kick(playerid);//И кикнем его
}
Всё что остаётся сделать - заменить стандартную GivePlayerMoney на созданную нами GivePlayerMoneyLegal.
ВАЖНО: этот код так-же будет кикать людей, которые выиграли деньги в казино или заработали их при помощи прыжков/стантов, т. к. все вмешательства в денежную сумму игрока со стороны самой игры узнать не удастся.
!!!Если вы нашли баг,пишите сюда - обязательно исправлю!!!