Djcrem
Умник
Искал анти фэйккилл на свой проект, наткнулся на это http://pawno-info.ru/threads/128504-Anti-Fake-Kill (бред сивой кобылы)
Что-то похожее было здесь http://pawno-info.ru/threads/111768-Анти-FakeKill-FastKill , но по сути это все бредня.
Пришлось написать самому, время работы 15 минут. Проверял на своем сервере, работает отлично.
Прежде всего, добавим функцию определения расстояния от игрока до игрока. Куда нибудь в конец мода (не в паблик или другой сток) вставляем:
public OnPlayerDeath вставляем:
1 строка, "заформатим нужную нам информацию", надеюсь все знают как это делать.
2 строка, проверяем если игрок сам себя убил, возвращаемся.
3 строка, проверяем находится ли у предполагаемого читера оружие в руках которым он убил, если нет - оповещение админам и затем кик.
Остается проблема, если игрок в список фэйковых оружий выбрал кулаки, то мы не сможем это определить. Именно за этим к нам приходит 4 строка, проверяем на расстояние игрока, ведь кулаками нельзя убить на расстоянии, а значит - игрок читер.
Спасибо за внимание, в коде используются нестандартные функции вроде: Сообщение администраторам, опять же надеюсь на вашу сознательность и компетентность в кодинге.
Что-то похожее было здесь http://pawno-info.ru/threads/111768-Анти-FakeKill-FastKill , но по сути это все бредня.
Пришлось написать самому, время работы 15 минут. Проверял на своем сервере, работает отлично.
Прежде всего, добавим функцию определения расстояния от игрока до игрока. Куда нибудь в конец мода (не в паблик или другой сток) вставляем:
PHP:
stock IsPlayerInRangeOfPlayer(Float:radi, playerid, targetid)
{
if(IsPlayerConnected(playerid) && IsPlayerConnected(targetid) &&
!IsPlayerNPC(playerid) && !IsPlayerNPC(targetid))
{
new Float:posx, Float:posy, Float:posz;
GetPlayerPos(targetid, posx, posy, posz);
if(IsPlayerInRangeOfPoint(playerid, radi, posx, posy, posz)) return 1;
}
return 0;
}
PHP:
format(string, 60, "Warning | FakeKill | %s[%d]",PlayerName(playerid),playerid);
if(killerid == INVALID_PLAYER_ID) return 1;
else if(GetPlayerWeapon(killerid) != reason) return SendAdminMessage(COLOR_RED, string), Kick(playerid);
else if(!IsPlayerInRangeOfPlayer(2.0, playerid, killerid) && GetPlayerWeapon(killerid) == 0) return SendAdminMessage(COLOR_RED, string), Kick(playerid);
2 строка, проверяем если игрок сам себя убил, возвращаемся.
3 строка, проверяем находится ли у предполагаемого читера оружие в руках которым он убил, если нет - оповещение админам и затем кик.
Остается проблема, если игрок в список фэйковых оружий выбрал кулаки, то мы не сможем это определить. Именно за этим к нам приходит 4 строка, проверяем на расстояние игрока, ведь кулаками нельзя убить на расстоянии, а значит - игрок читер.
Спасибо за внимание, в коде используются нестандартные функции вроде: Сообщение администраторам, опять же надеюсь на вашу сознательность и компетентность в кодинге.
Последнее редактирование:
