Поиск сообщества
Показаны результаты для тегов '[MANUAL]'.
Найдено: 1 результат
-
Здравствуйте, ув.пользователи. Сегодня хотелось бы разобрать способ защиты от накрутки денег на Вашем игровом сервере. Теория: Как вы знаете, функция GivePlayerMoney существует для выдачи определенного количества денег. Разберем ее работу подробнее. Данная функция добавляет/отнимает числа от самого текстдрава денег. А функция же GetPlayerMoney возвращает данное значение. Исход из этого: байты могут быть заменены при помощи обычных программ, таких как ArtMoney и т.п. Что с этим можно сделать? Заменить байт на ПК пользователя труда не составит, а вот изменить переменную в процессе на сервере (удаленно) практически нереально. Я думаю, понятно, к чему я клоню. Практика: Создадим массив, который будет хранить кол-во денег отдельно для каждого игрока: new realmoney[MAX_PLAYERS]; Далее создадим функцию, по которой значение из GetPlayerMoney будет сверяться с переменной realmoney. В случае несоответствия - обнуление и кик: stock GiveMoneyAntiCheat(playerid, money) { if(GetPlayerMoney(playerid) > realmoney[playerid])//сверяем данные { //если чит, то: ResetPlayerMoney(playerid);// обнуляем GivePlayerMoney(playerid, realmoney[playerid]);//возвращаем SendClientMessage(playerid, 0xBBBBBBAA, "Вы были кикнуты за попытку накрутки денег."); Kick(playerid);//кикаем return 1; } else { //иначе выдаем все по стандарту: GivePlayerMoney(playerid, money); realmoney[playerid] = GetPlayerMoney(playerid); } return 1; } При дисконнекте игрока проверим деньги. Для этого в OnPlayerDisconnect достаточно поставить проверку и вызвать функцию: if(GetPlayerMoney(playerid) > realmoney[playerid]) { GiveMoneyAntiCheat(playerid, PlayerInfo[playerid][pMoney]); } Естественно, теперь все GivePlayerMoney нужно заменить на GiveMoneyAntiCheat. Спасибо.
- 10 ответов
-
- 8
-
- crmp
- criminal russia
-
(и ещё 4 )
C тегом: