SA-MP Forums Archive
AntiGodMod - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: AntiGodMod (/showthread.php?tid=302276)

Pages: 1 2


AntiGodMod - DANGER1979 - 08.12.2011

Короче, сделал я этот античит и заметил, что опять разработчик сампа нам преподнёс ф-ию, про которую из-за своей баганутости можно забыть.
Речь пойдёт про новые ф-ии OnPlayerGiveDamag и OnPlayerTakeDamage.

Выкладываю весь античит, т.к. есть ложные срабатывания. Может общими мозгами получится доработать.
pawn Код:
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
{   //вызывается когда игрок playerid наносит урон игроку damagedid

    if(playerid == INVALID_PLAYER_ID) return 1;//исключения на всякий случай
    if(damagedid == INVALID_PLAYER_ID) return 1;//исключения на всякий случай
    if(!ANTIGODMOD) return 1;//отбрасываем проверку кода, если Античит выключен
    if(GetPVarInt(damagedid, "IsPlayerControllable") != 0 ) return 1;//отбрасываем случаи  если игрок был замарожен
    if(amount < 2.0) return 1;//отбрасываем случаи ударов кулаком
    if(AFK_IdleTime[damagedid] >= 3) return 1;//отбрасываем случаи  если игрок был АФК

    //ИНФОРМИРОВАНИЕ
    new string[MAX_STRING];
    new Float:health; GetPlayerHealth(damagedid, health);
    format(string, sizeof(string), "%s give %.1f damage to %s, weapon: %s (LastHealth:%.1f)",
        PlayerName(playerid), amount, PlayerName(damagedid), WeaponName(weaponid),
        health);
    SendClientMessageToAll(COLOR_GREEN, string);

    WaitDetected[damagedid] = 2;//сделали задержку на 2 срабатывания проверки античита
    DetectedGiveDamage[damagedid] = floatround(amount);
    return 1;
}

public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid) //при год моде и АФК не вызывается
{  //вызывается когда игрок playerid получает урон от игрока issuerid
//всегда вызывается после OnPlayerGiveDamage
    if(playerid == INVALID_PLAYER_ID) return 1;
    if(issuerid == INVALID_PLAYER_ID) return 1;
    if(!ANTIGODMOD) return 1;
    if(amount < 2.0) return 1;
    //if(GetPVarInt(playerid, "IsPlayerControllable") != 0 ) return 1;//при замарозке не вызывается
    //if(AFK_IdleTime[playerid] >= 3) return 1;//при АФК не вызывается
   
    DetectedGiveDamage[playerid] = 0;//обнулили, проверка закончена. Игрок чист.

    //ИНФОРМИРОВАНИЕ
    new string[MAX_STRING];
    new Float:health; GetPlayerHealth(playerid, health);
    format(string, sizeof(string), "%s take %.1f damage from %s, weapon: %s (LastHealth:%.1f)",
        PlayerName(playerid), amount, PlayerName(issuerid), WeaponName(weaponid),
        health);
    SendClientMessageToAll(COLOR_RED, string);
    return 1;
}

//САМ АНТИЧИТ
public OnPlayerUpdate(playerid)
{
    WaitDetected[playerid]--;
    if(DetectedGiveDamage[playerid] != 0 && WaitDetected[playerid] <= 0)
    {
        new string[MAX_STRING];
        format(string, sizeof(string), "AdmWarning: %s[%d]. Подозрение на бессмертие (GiveDamage:%d)",
            PlayerName(playerid), playerid, DetectedGiveDamage[playerid]);
        SendAdminMessage(ADMINS_MESSAGE_COLOR, string, 3);
        DetectedGiveDamage[playerid] = 0;//останавливаем флуд в чат
        WaitDetected[playerid] = 0;
    }
    return 1;
}
Какие будут предложения?


Re: AntiGodMod - Stepashka - 08.12.2011

Повреждения может получить игрок с ид INVALID_PLAYER_ID, а нанести?


Re: AntiGodMod - DANGER1979 - 08.12.2011

INVALID_PLAYER_ID на всякий случай.
Лично не заметил, чтобы необходимость в них обоих была. Т.к. таких случаев не было.

Так как собейты покуда не пашут на новом сампе, т.е. не все.
То мы покуда не смогли проверить антифейккилл, чтобы узнать реагируют ли новые ф-ии на убийством фейккилом.
ДУмаю, что они нормально отработают как и public OnPlayerDeath(playerid, killerid, reason)


Re: AntiGodMod - Stepashka - 08.12.2011

А ты уверен что годмод работает по принципу блокировки наносимого урона?
Недочеты с поверхностного взгляда: нет связи между нанесенным уроном и тем кто его нанес.
Причем здесь вообще годмод и наносимый урон, урон может и наносится а человек будет бессмертен, смотри первое предложение.
Суть работы должна быть такая: нанесли урон, мы его запомнили, потом проверили здоровье игрока, если оно не изменилось на значение нанесенного урона, от предыдущего состояния - ты читер.


Re: AntiGodMod - DANGER1979 - 08.12.2011

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
А ты уверен что годмод работает по принципу блокировки наносимого урона?
Уверен. Я же это уже протестировал, а не просто выложил теоретический код.
OnPlayerTakeDamage не вызывается при год моде

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Недочеты с поверхностного взгляда: нет связи между нанесенным уроном и тем кто его нанес.
а зачем? ведь проверяем игрока в которого стреляют. И нам не важно кто. Зачем избыточный код?
Если нужен, ТО предложи вариант кода. Но я думаю ложных срабатываний меньше не станет.

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Причем здесь вообще годмод и наносимый урон, урон может и наносится а человек будет бессмертен, смотри первое предложение.
Суть работы должна быть такая: нанесли урон, мы его запомнили, потом проверили здоровье игрока, если оно не изменилось на значение нанесенного урона, от предыдущего состояния - ты читер.
Нет. Урон не наносится. ПРОВЕРЕНО.

Отнятое здоровье и урон могут отличаться на доли. Получения здоровья для проверки с кол-вом полученного урона можно сделать, но это не уменьшит ложные срабатывания. Т.к. они в основном предположительно из-за пинга (более 100), из-за использования ближнего оружия (приклад автомата),
из-за не точности модели, т.е. на моём экране игрок получил урон, а у игроков рядом стоящих на экране игрок даже не дернулся.


Re: AntiGodMod - White_116 - 08.12.2011

У меня нет уверености что OnPlayerGiveDamag и OnPlayerTakeDamage работаю синхронно. Замечал когда у себя на "монеторе" попадал в скин срабатывал один из пабликов (забыл какой именно) но здоровье не снялось. пинги у меня 40 у апонента 120.


Re: AntiGodMod - Stepashka - 08.12.2011

Quote:
Originally Posted by DANGER1979
Посмотреть сообщение
OnPlayerTakeDamage не вызывается при год моде
Вот отсюда и пляшем, не срабатывают оба события или только отслеживающее потерю здоровья?


Re: AntiGodMod - DANGER1979 - 08.12.2011

Я же ясно написал, что OnPlayerTakeDamage не вызывается при год моде, при АФК, и при обездвиживании.

Естественно OnPlayerGiveDamage срабатывает во всех случаях. НО сказать что нормально нельзя.
Т.к. бывает один выстрел по оппоненту вызывает одно срабатывание OnPlayerGiveDamage и два срабатывания OnPlayerTakeDamage. А бывает у игрока нету год мода, но OnPlayerTakeDamage через раз не вызывается по непонятным причинам.

Кстати ГодМод проверяли Клео скриптами, а не собейтом. Но это не имеет значения.


Re: AntiGodMod - Jon_De - 08.12.2011

OnPlayerGiveDamag -- когда игрок попал в чейто СКИН, не по пингу, так что любой лаг или рассинхрон и античит будет гнать, если кстати отключить в собе Onfoot Data , то думаю ложно вызывать паблик можно будет, короче ничего хорошего не выйдет с этим


Re: AntiGodMod - DANGER1979 - 08.12.2011

А не надо думать и предполагать. Надо проверять.
Я лично проверил и выложил код. И расписал результаты проверки.


Re: AntiGodMod - Mutha_X - 08.12.2011

Что на счёт присваивания всех игроков к одной команде и использования только OnPlayerGiveDamage: и будет как в мта и всё жестко будет держаться на стороне сервера(кстати, в WoT именно такой принцип - все выстрелы/столкновения танков рассчитываются на сервере)?


Re: AntiGodMod - Stepashka - 08.12.2011

Quote:
Originally Posted by Mutha_X
Посмотреть сообщение
Что на счёт присваивания всех игроков к одной команде и использования только OnPlayerGiveDamage: и будет как в мта и всё жестко будет держаться на стороне сервера(кстати, в WoT именно такой принцип - все выстрелы/столкновения танков рассчитываются на сервере)?
для этого нам придется изобрести новый мультиплеер для GTA:SA, который будет полностью серверным.


Re: AntiGodMod - Geryy - 08.12.2011

Quote:
Originally Posted by Jon_De
Посмотреть сообщение
когда игрок попал в чейто СКИН, не по пингу, так что любой лаг или рассинхрон и античит будет гнать
Получится если стреляющий у себя попал(OnPlayerGiveDamage), а у того из-за пинга не попало (OnPlayerTakeDamage) будет сообщать о чите?


Re: AntiGodMod - DANGER1979 - 08.12.2011

Jon_De, капитан Очевидность.
Mutha_X, не пиши херню. Если бы, да кабы.

Geryy, да, в том то и дело. Что нету в сампе синхры.
вспомните ф-ию public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat).
И что-нибудь дельное с неё получилось у кого-нибудь, чтобы при онлайне хотя бы 30 работало?
У меня ф-ию OnUnoccupiedVehicleUpdate закоментирована, т.к. кривее не придумаешь. При её кривой работе только претензии от игроков сыпятся.


Re: AntiGodMod - DANGER1979 - 27.12.2011

Ну что?
так и ни кто не нашёл решение?

Степашка, OkStyle, Ziggi, скажите Вам удалось идеальный АнтиГодМод написать?


Re: AntiGodMod - CKA3KuH - 27.12.2011

У меня на сервере антиГМ работает отлично. Единственное, были проблемы с нажатием Esc, но это легко решается.


Re: AntiGodMod - DANGER1979 - 27.12.2011

Ну поведуй.
Я выложил код.
Ты по такому принципу делал?
Или ты делал через замеры хп в public OnPlayerUpdate(playerid) или в таймере.

Я написал что OnPlayerGiveDamage даёт ложные срабатывания когда игрок без чита
а ф-ия public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid) при этом не фиксирует урон.
Т.е. абсурд.

Какая твоя история?
Хотелось бы увидеть код. Т.к. борьба с читерами я считаю - это благородное общее дело.


Re: AntiGodMod - anonim15 - 27.12.2011

Quote:
Originally Posted by DANGER1979
Посмотреть сообщение
Ну поведуй.
Я выложил код.
Ты по такому принципу делал?
Или ты делал через замеры хп в public OnPlayerUpdate(playerid) или в таймере.

Я написал что OnPlayerGiveDamage даёт ложные срабатывания когда игрок без чита
а ф-ия public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid) при этом не фиксирует урон.
Т.е. абсурд.

Какая твоя история?
Хотелось бы увидеть код. Т.к. борьба с читерами я считаю - это благородное общее дело.
Я предполагаю что вся проблема ложных сбрасываний, заключается в if(amount < 2.0) return 1; Попробуй поставить if(amount < 10.0) return 1;


Re: AntiGodMod - CKA3KuH - 27.12.2011

Quote:
Originally Posted by DANGER1979
Посмотреть сообщение
Ну поведуй.
Я выложил код.
Ты по такому принципу делал?
Или ты делал через замеры хп в public OnPlayerUpdate(playerid) или в таймере.

Я написал что OnPlayerGiveDamage даёт ложные срабатывания когда игрок без чита
а ф-ия public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid) при этом не фиксирует урон.
Т.е. абсурд.

Какая твоя история?
Хотелось бы увидеть код. Т.к. борьба с читерами я считаю - это благородное общее дело.
К сожалению, кода не будет.

OnPlayerUpdate не советую вообще использовать при онлайне выше 80-100 человек.
OnPlayerGiveDamage - тут копайте.


Re: AntiGodMod - Jon_De - 27.12.2011

Quote:
Originally Posted by CKA3KuH
Посмотреть сообщение
OnPlayerGiveDamage - тут копайте.
Учитываются попадания только по скину => включу Disable onfoot data => все игроки для меня стоят на месте => стреляю и кикаю всех за ГМ Если не так то вот еще 1 вариант развитий: игрок бежит, вышел в АФК не останавливаясь, скин скользит по земле для других игроков, кто то попадает в него => опять же кик ( или что там у вас )
А если проверка какая, на то что скорость игрока = 0, то тоже бредово... хотя для онлайн 0-100 и при отсутвии даже малейших лагов возможно и будет более менее стабильно и что то рабочее