Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя
Показано с 11 по 20 из 34
  1. #11
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Обновил код до версии 0.2

    - - - Добавлено - - -

    Цитата Сообщение от m1n1vv Посмотреть сообщение
    А если так?
    PHP код:
    new
        
    ac_time[MAX_PLAYERS],
        
    ac_ammo[MAX_PLAYERS]; 
    PHP код:
    public OnPlayerWeaponShot(playeridweaponidhittypehitidFloat:fXFloat:fYFloat:fZ)
    {
        if(
    GetTickCount() > ac_time[playerid])
        {
            static
                
    ammo ac_ammo[playerid];

            
    ac_ammo[playerid] = GetPlayerAmmo(playerid);
            
    ac_time[playerid] = GetTickCount() + 1000;

            if (
    ammo == ac_ammo[playerid])
                
    SendClientMessage(playerid, -1, !"Infinity ammo +");
            else
                
    SendClientMessage(playerid, -1, !"Infinity ammo -");
        }
        return 
    1;

    Так же думал сделать по началу, потом подумал, а что если миниган начнет стрелять))
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  2. #12
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Обновил код до версии 0.2

    - - - Добавлено - - -



    Так же думал сделать по началу, потом подумал, а что если миниган начнет стрелять))
    Я бы за миниган так же кикал. Оружие дисбаланса.

  3. #13
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Обновил код до версии 0.2

    - - - Добавлено - - -



    Так же думал сделать по началу, потом подумал, а что если миниган начнет стрелять))
    Для минигана и другого скорострельного оружия просто делаешь "буфер" из 5-10 патрон. То бишь, если значение, возвращённое GetPlayerWeaponData, не совпадает с значением из массива на эти самые 5-10 патрон - игнорируешь. Иначе - читер.
    Либо просто можно задержку делать в GetPlayerWeaponData, но всё равно могут быть ложные.


    Вот мой вариант античита на оружие, которое я писал ещё году в 2014. Писал я его не для себя и как пример, так что за 100% работоспособность не ручаюсь (точнее, работать-то он будет, но вот на ложные срабатывания особо не тестировал)
    И да, код оставил нетронутым. Вот так я писал в 2014 году

     Часть, что должна быть в моде (пирихватынинужны!)
    PHP код:
    #include <AntiGunCheat>

    public OnPlayerConnect(playerid)
    {
        
    ClearGunAnticheatInfoOPC(playerid);
        return 
    1;
    }

    forward CheckPlayerWeapon(playerid);
    public 
    CheckPlayerWeapon(playerid)
    {
        if(!
    IsPlayerConnected(playerid)) goto CheckPlayerWeapon_end;
        if(
    GetPlayerState(playerid) != PLAYER_STATE_WASTED)
        {
            if(
    gun_ac_giveweapon_time[playerid][0] > GetTickCount()) return 1;
            for(new 
    0weapon[2]; != 13i++)
            {
                
    GetPlayerWeaponData_Ex(playeridiweapon[0], weapon[1]);
                if(
    gun_ac_weapon[playerid][i] == -&& weapon[0] || gun_ac_weapon[playerid][i] != -&&  gun_ac_weapon[playerid][i] != weapon[0])
                {
                    
    ResetPlayerWeaponsEx(playerid);
                    new 
    string[64+MAX_PLAYER_NAME+3];
                    
    GetPlayerName(playeridstringMAX_PLAYER_NAME);
                    
    format(stringsizeof(string), "Игрок %s [ID: %d] был кикнут по подозрению в использовании Gun Cheat (оружие)"stringplayerid);
                    
    SendClientMessageToAll(-1string);
                    
    Kick(playerid);
                    return 
    0;
                }
                if(
    weapon[0] != 46 && (gun_ac_ammo[playerid][i] == -&& weapon[1] || gun_ac_ammo[playerid][i] != -&&  gun_ac_ammo[playerid][i] != weapon[1]))
                {
                    if(
    gun_ac_giveweapon_time[playerid][1] > GetTickCount()) return 1;
                    
    ResetPlayerWeaponsEx(playerid);
                    new 
    string[78+MAX_PLAYER_NAME+3];
                    
    GetPlayerName(playeridstringMAX_PLAYER_NAME);
                    
    format(stringsizeof(string), "Игрок %s [ID: %d] был кикнут по подозрению в использовании Gun Cheat (патроны)"stringplayerid);
                    
    SendClientMessageToAll(-1string);
                    
    Kick(playerid);
                    return 
    0;
                }
            }
        }
        
    SetTimerEx("CheckPlayerWeapon"15000false"i"playerid);
        
    CheckPlayerWeapon_end:
        return 
    1;
    }

    public 
    OnPlayerWeaponShot(playeridweaponidhittypehitidFloat:fXFloat:fYFloat:fZ)
    {
        if(
    weaponid 46)
        {
            new 
    weapon_slot GetWeaponSlot(weaponid);
            
    gun_ac_ammo[playerid][weapon_slot]--;
            if(
    gun_ac_ammo[playerid][weapon_slot] == 0)
            {
                
    gun_ac_weapon[playerid][weapon_slot] = -1;
                
    gun_ac_ammo[playerid][weapon_slot] = -1;
            }
            else
            {
                if(
    gun_ac_weapon[playerid][weapon_slot] == -&& weaponid || gun_ac_ammo[playerid][weapon_slot] != -&& gun_ac_weapon[playerid][weapon_slot] != weaponid)
                {
                    
    ResetPlayerWeaponsEx(playerid);
                    new 
    string[64+MAX_PLAYER_NAME+3];
                    
    GetPlayerName(playeridstringMAX_PLAYER_NAME);
                    
    format(stringsizeof(string), "Игрок %s [ID: %d] был кикнут по подозрению в использовании Gun Cheat (оружие)"stringplayerid);
                    
    SendClientMessageToAll(-1string);
                    
    Kick(playerid);
                    return 
    0;
                }
                new 
    ammo;
                
    GetPlayerWeaponData_Ex(playeridweapon_slotammoammo);

                if(
    gun_ac_ammo[playerid][weapon_slot] == -&& ammo || gun_ac_ammo[playerid][weapon_slot] != -&& gun_ac_ammo[playerid][weapon_slot]+!= ammo)
                {
                    if(
    gun_ac_giveweapon_time[playerid][1] > GetTickCount()) return 1;
                    
    ResetPlayerWeaponsEx(playerid);
                    new 
    string[78+MAX_PLAYER_NAME+3];
                    
    GetPlayerName(playeridstringMAX_PLAYER_NAME);
                    
    format(stringsizeof(string), "Игрок %s [ID: %d] был кикнут по подозрению в использовании Gun Cheat (патроны)"stringplayerid);
                    
    SendClientMessageToAll(-1string);
                    
    Kick(playerid);
                    return 
    0;
                }
            }
        }
        return 
    1;



     А это уже часть для инклюда, где, в основном, криво перехвачены нативки
    PHP код:
    new gun_ac_weapon[MAX_PLAYERS][13],
        
    gun_ac_ammo[MAX_PLAYERS][13],
        
    gun_ac_giveweapon_time[MAX_PLAYERS][2];

    stock ClearGunAnticheatInfoOPC(playerid)
    {
        for(new 
    i!= 13i++)
        {
            
    gun_ac_weapon[playerid][i] = -1;
            
    gun_ac_ammo[playerid][i] = -1;
        }
        
    gun_ac_giveweapon_time[playerid][0] = -1;
        
    gun_ac_giveweapon_time[playerid][1] = -1;
        
    SetTimerEx("CheckPlayerWeapon"15000false"i"playerid);
        
    ResetPlayerWeapons(playerid);
        return 
    1;
    }

    stock GetPlayerWeaponData_Ex(playeridslot, &weapons, &ammo)
    {
        new 
    tick GetTickCount();
        if(
    gun_ac_giveweapon_time[playerid][1] >= tickgun_ac_giveweapon_time[playerid][1] = tick+1500;
        
    GetPlayerWeaponData(playeridslotweaponsammo);
        return 
    1;
    }

    stock GivePlayerWeaponEx(playeridweaponidammo)
    {
        if(!(
    weaponid 46))
        {
            
    SendClientMessage(playerid0xFF0000FF"Ошибка: {FFFFFF}В функцие GivePlayerWeapon используется неверный ID оружия");
            
    SendClientMessage(playerid0xFFFFFFFF"Пожалуйста, сообщите об этом администрации сервера");
            return 
    1;
        }
        new 
    weapon[2];
        
    GetPlayerWeaponData_Ex(playeridGetWeaponSlot(weaponid), weapon[0], weapon[1]);
        
    gun_ac_weapon[playerid][GetWeaponSlot(weaponid)] = weaponid;
        if(
    weaponid == weapon[0]) gun_ac_ammo[playerid][GetWeaponSlot(weaponid)] += ammo;
        else 
    gun_ac_ammo[playerid][GetWeaponSlot(weaponid)] = ammo;
        
    gun_ac_giveweapon_time[playerid][1] = GetTickCount()+1500;
        
    GivePlayerWeapon(playeridweaponidammo);
        return 
    1;
    }
    #define GivePlayerWeapon GivePlayerWeaponEx

    stock ResetPlayerWeaponsEx(playerid)
    {
        for(new 
    0!= 13i++)
        {
            
    gun_ac_weapon[playerid][i] = -1;
            if(
    gun_ac_ammo[playerid][i] != -1printf(gun_ac_ammo[playerid][i]);
            
    gun_ac_ammo[playerid][i] = -1;
        }
        
    ResetPlayerWeapons(playerid);
        return 
    1;
    }
    #define ResetPlayerWeapons ResetPlayerWeaponsEx

    stock GetWeaponSlot(weaponid)
    {
        switch(
    weaponid)
        {
            case 
    0..1:             return 0;
            case 
    2..9:             return 1;
            case 
    10..15:         return 10;
            case 
    16..1839:     return 8;
            case 
    22..24:         return 2;
            case 
    25..27:         return 3;
            case 
    28,29,32:         return 4;
            case 
    30,31:         return 5;
            case 
    33,34:         return 6;
            case 
    35..38:         return 7;
            case 
    40:             return 12;
            case 
    41..43:         return 9;
            case 
    44..46:         return 11;
        }
        return 
    0;



    Может кто найдёт что-то интересное для себя в этом говнокоде
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  4. #14
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    PHP код:
    public OnPlayerWeaponShot(playeridweaponidhittypehitidFloat:fXFloat:fYFloat:fZ)
    {
        if(
    weaponid 46
    Меня только одно интересует, разве может сработать этот паблик если стрелять не с этого условия 0 < weaponid < 46?
    И чем?
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  5. #15
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    PHP код:
    public OnPlayerWeaponShot(playeridweaponidhittypehitidFloat:fXFloat:fYFloat:fZ)
    {
        if(
    weaponid 46
    Меня только одно интересует, разве может сработать этот паблик если стрелять не с этого условия 0 < weaponid < 46?
    И чем?
    https://wiki.sa-mp.com/wiki/OnPlayerWeaponShot

      Открыть/закрыть




    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  6. #16
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Для минигана и другого скорострельного оружия просто делаешь "буфер" из 5-10 патрон. То бишь, если значение, возвращённое GetPlayerWeaponData, не совпадает с значением из массива на эти самые 5-10 патрон - игнорируешь. Иначе - читер.
    Либо просто можно задержку делать в GetPlayerWeaponData, но всё равно могут быть ложные.
    Я защиту 0.2 обкатаю на своём ходовом сервере, отпишусь тут будут ли ложные, но я сейчас прыгал летал скакал как жаленный в попу и не чего не выдавало ложно) единственно что не хватает в коде это афк системы, но я думаю не для кого не проблема ставить афк систему, поэтому я считаю что в основном античит стал более комфортным и рабочим, только благодаря Anti Infinity ammo теперь даже игнорирование GPWD не поможет, я думаю не кто не обойдёт такую систему пока что...

    - - - Добавлено - - -

    Цитата Сообщение от DeimoS Посмотреть сообщение
    https://wiki.sa-mp.com/wiki/OnPlayerWeaponShot

      Открыть/закрыть




    Нууу так там же написано что игрок может хакнуть для себя и отправлять пули, для античита наоборот нормально он его за такое и впоимает, или я английский не так перевел?
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  7. #17
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Сейчас проверил свой код на миниган. 0 ложных срабатываний.

  8. #18
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Один инвалид с г-и любезно обосрал мой код))
    Но при этом ещё и рассказал толковый баг(с подменой оружия в слотах), поэтому update 0.3

    - - - Добавлено - - -

    Цитата Сообщение от m1n1vv Посмотреть сообщение
    Сейчас проверил свой код на миниган. 0 ложных срабатываний.
    Вариант то не плохой, но 2 функции за 1 выстрел вызывать не знаю даже...
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  9. #19
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    А что насчет NOP Weapon Data?

  10. #20
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    А что насчет NOP Weapon Data?
    Цитата Сообщение от vovandolg Посмотреть сообщение
    только благодаря Anti Infinity ammo теперь даже игнорирование GPWD не поможет, я думаю не кто не обойдёт такую систему пока что...
    Как то так наверное)) Всё довольно хорошо связано между собой, поэтому наврятли получится долго поиграть...
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

 

 
Страница 2 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •