Привет всем. Может кто знает принцип работы Fake Kill? И какие способы детекта есть (коллбэки может вызываются и т.д.), заранее спасибо.
Вид для печати
Привет всем. Может кто знает принцип работы Fake Kill? И какие способы детекта есть (коллбэки может вызываются и т.д.), заранее спасибо.
Залогируй OnPlayerDeath, то бишь:
PHP код:
public OnPlayerDeath(playerid, killerid, reason)
{
printf("ID: %d | kilerid: %d | reason: %d", playerid, killerid, reason);
}
Отсылает данные серверу об ложной смерти игрока, при этом игроки могут быть очень далеко друг от друга и тд. Можно сделать проверку на расстояние при убийстве.
Вот такой вот код нашел в интернете:
В OnPlayerDeath:
При изменении ХП игроку на ноль (SetPlayerHP(playerid, 0.0)) иногда срабатывает кик. Но т.к. точного принципа работы античита я не уловил, понять не могу, как сделать нормально.PHP код:
if(killerid != INVALID_PLAYER_ID)
if(GetPlayerWeapon(killerid) != reason || !IsPlayerInRangeOfPlayer(5.0, playerid, killerid) && !GetPlayerWeapon(killerid))
Kick(playerid);
Лол, мда, шок, сейчас набегут меня учить как писать псевдокод.
Ну да, ладно:
Код:если(ид_убийцы не равен инвалид_плейр_ид (0xFFFF (В 16 hex), что в dec значит: 65535)
{
если(ид_оружие_убийцы не равно причине или не радиусу и не оружию убийцы)
{
кикаем(убитого);
}
}
Есть Fake Kill, который перед этим телепортирует читера к нужному игроку и только потом убивает. Чтоб полностью от такого чита защитится, нужно и время последней смерти убитого проверять (записали время первой смерти и сверяем его с последующими. Если, например, второй раз умер за время, меньшее секунде - прибавляем одно предупреждение к, например, pVar, дабы предотвратить ложные срабатывания. Если же больше одной секунды - перезаписываем переменную с временем на новое значение. Ну и если первая проверка (меньше секунды) сработала, например, 3 раза подряд - читер), и расстояние + ID оружия сверять => получится уже две разные проверки