Перейти к содержанию
Авторизация  
Anton_Styazhkin

Античит на деньги

Рекомендуемые сообщения

Anton_Styazhkin

U_AC_MONEY.INC

Античит на деньги от Anton_Styazhkin aka Untonyst

 

Хочу представим вам гибкий в настройке античит на деньги, написанный с использование ALS хуков (перехват нативных функций и каллбэков). 

 

Как работает античит. При любом несовпадение суммы денег игрока и суммы, записанной в античите, он будет срабатывать. Деньги будут списывать и будет вызван каллбэк «OnMoneyCheatDetected», конечно, если вы его указали. В зависимости от содержания этот каллбэка будет происходить «наказание» игрока за использование читов, или, оповещение администраторам о потенциальном читере. Ложных срабатываний пока не наблюдалось, по крайней мере меня как автора о них не извещали :D

 

Чтобы его подключить, вам просто надо в начале мода ко всем инклудам добавить

#include <u_ac_money>

При ложных срабатываниях, связанных с проблемами с сетью, высоким пингом или чем-нибудь еще, перед подключением инклуда добавим

#define AC_MONEY_IGNORE_TICK_TIME (значение) 
#include <u_ac_money>

Важно, чтобы значение было больше 1000. Если не выставлять это значение, то ставится значение по умолчанию - 1000.

 

Чтобы настроить индивидуально наказание, оповещение администраторам или что-нибудь еще, достаточно в моде добавить каллбэк OnMoneyCheatDetected

#include <u_ac_money> 

public OnMoneyCheatDetected(playerid) 
{ 
    SendClientMessage(playerid, -1, "Ваш баланс восстановлен. Администрация уже вкурсе!"); 
}  
 
Функция вызывается читером и не возвращает какого-либо конкретного значения.
 
 
Создайте файл в том же самом блокноте, потом на «сохранить как» и введите «u_ac_money.inc».
 
Если вам понравится такой представление античитов, то я с радостью продолжу разработку, если мне будет не лень и если я буду не занят.
  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Web

Код на пастебине умер.

 

Пример использования:

#include <zcmd> 
#include <sscanf2> 

CMD:checkplayer(playerid, params[]) 
{ 
    new targetid; 
    if(sscanf(params, "u", targetid)) 
        return SendClientMessage(playerid, -1,!"Введите /checkplayer [игрок]" 
    ); 
    if(CheckPlayerOnMoney(targetid) == 1) 
    { 
        static const fmt_str[] = 
        "У игрока %s (id %i) была обнаружено использование чита на деньги."; 
        new str[sizeof fmt_str + (-2+MAX_PLAYER_NAME) + (-2+4)]; 
        GetPlayerName(targetid, str, MAX_PLAYER_NAME); 
        format(str, sizeof str, fmt_str, str, targetid); 
        return SendClientMessage(playerid, -1, str); 
    } 
        return SendClientMessage(playerid, -1, !"Использование чита на деньги не обнаружено." 
    ); 
} 

Код инклуда:

/*
 * Copyright (c) 2016, Untonyst
 *
 * This software is provided 'as-is', without any express or implied
 * warranty. In no event will the authors be held liable for any damages
 * arising from the use of this software.
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 * 1. The origin of this software must not be misrepresented; you must not
 * claim that you wrote the original software. If you use this software
 * in a product, an acknowledgement in the product documentation would be
 * appreciated but is not required.
 * 2. Altered source versions must be plainly marked as such, and must not be
 * misrepresented as being the original software.
 * 3. This notice may not be removed or altered from any source distribution.
 */

#if !defined _samp_included
    #include <a_samp>
#endif

#if defined _u_acm_included
    #endinput
#endif
#define _u_acm_included

#if !defined AC_MONEY_IGNORE_TIME
    #define AC_MONEY_IGNORE_TIME (1000)
#endif

static ac_money[MAX_PLAYERS];
static ignore_tick[MAX_PLAYERS];

public OnPlayerDisconnect(playerid, reason)
{
    ac_money[playerid] = ignore_tick[playerid] = 0;
    #if defined u_acm__OnPlayerDisconnect
        u_acm__OnPlayerDisconnect(playerid, reason);
    #endif
    return 1;
}
#if defined _ALS_OnPlayerDisconnect
    #undef OnPlayerDisconnect
#else
    #define _ALS_OnPlayerDisconnect
#endif
#if defined u_acm__OnPlayerDisconnect
forward u_acm__OnPlayerDisconnect(playerid, reason);
#endif
#define OnPlayerDisconnect u_acm__OnPlayerDisconnect

stock CheckPlayerOnMoney(playerid, call=0)
{
    new money = GetPlayerMoney(playerid);
    if(ac_money[playerid] == money)
        return 0;
    if((ac_money[playerid] > money)
    && (GetTickCount() > ignore_tick[playerid]))
    {
        ac_money[playerid] = money;
    }
    if(call > 0)
    {
        #if defined OnMoneyCheatDetected
            CallLocalFunction(!"OnMoneyCheatDetected", !"iii",
                playerid, money - ac_money[playerid], ac_money[playerid]
            );
        #endif
        ResetPlayerMoney(playerid);
        GivePlayerMoney(playerid, ac_money[playerid]);
    }
    return 1;
}

stock u_acm__GivePlayerMoney(playerid, money)
{
    ignore_tick[playerid] = GetTickCount() + AC_MONEY_IGNORE_TIME;
    ac_money[playerid] += money;
    return GivePlayerMoney(playerid, money);
}
#if defined _ALS_GivePlayerMoney
    #undef GivePlayerMoney
#else
    #define _ALS_GivePlayerMoney
#endif
#define GivePlayerMoney u_acm__GivePlayerMoney

stock u_acm__GetPlayerMoney(playerid)
    return ac_money[playerid];
#if defined _ALS_GetPlayerMoney
    #undef GetPlayerMoney
#else
    #define _ALS_GetPlayerMoney
#endif
#define GetPlayerMoney u_acm__GetPlayerMoney

stock u_acm__ResetPlayerMoney(playerid)
{
    ac_money[playerid] = 0;
    return ResetPlayerMoney(playerid);
}
#if defined _ALS_ResetPlayerMoney
    #undef ResetPlayerMoney
#else
    #define _ALS_ResetPlayerMoney
#endif
#define ResetPlayerMoney u_acm__ResetPlayerMoney

#if defined OnMoneyCheatDetected
forward OnMoneyCheatDetected(playerid, cheat_money, money);
#endif

Запилите в первый пост.

Изменено пользователем Веб

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.