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

ядро донат-системы - бета

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

Anton_Styazhkin
U_DONATE.INC
ядро донат-системы
 
SsqF4dToBf4.jpg
 
Здравствуйте, мне часто писали в ЛС в ВКонтакте с просьбой написать/переделать их систему доната. Я стал озадачен целью создания библиотеки, которая бы упростила бы вам жизнь, мои дорогие новички в скриптинге. На данный момент библиотека находятся находится в стадии бета разработки и имеет несколько функций:
 
TextDraw:
UpdateDonateTextDraw(игрок) - обновляет донат-счетчик (TextDraw)
HideDonateTextDraw(игрок) - скрывает донат-счетчик (TextDraw)
ShowDonateTextDraw(игрок) - показывает донат-счетчик (TextDraw)
 
Деньги:
ResetPlayerDonateMoney(игрок) - обнуляет количество донат-денег
SetPlayerDonateMoney(игрок, сумма) - устанавливает количество донат-денег
GetPlayerDonateMoney(игрок) - получает количество донат-денег
GivePlayerDonateMoney(игрок, сумма) - выдает донат-деньги
 
По традиции небольшой пример:
Напишем донат-панель с тримя пунктами: сменить имя, обменять донат-деньги на игровые и купить скин.
 
#include <dc_cmd>
#include <sscanf2>

#include <u_donate> // :3

enum
    e_PLAYERS
{
    name[MAX_PLAYER_NAME],
    money,
    skin
};

new player[MAX_PLAYERS][e_PLAYERS];

COMMAND:donate(playerid)
{
    ShowPlayerDialog(playerid, 0, DIALOG_STYLE_LIST, "Донат", "{FFFFFF}Изменить имя\nОбменять на деньги\nИзменить скин", "Выбрать", "Отмена");
}

COMMAND:give_donate(playerid, params[])
{
    if(sscanf(params, "i", params[0]))
        return 0;

    GivePlayerDonateMoney(playerid, params[0]);
    UpdateDonateTextDraw(playerid);
    ShowDonateTextDraw(playerid);
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case 0:
        {
            if(!response)
                return 0;

            if(response)
            {
                switch(listitem)
                {
                    case 0:
                    {
                        if(GetPlayerDonateMoney(playerid) < 15)
                        {
                            SendClientMessage(playerid, -1, "У вас недостаточно донат-денег !");
                            return 0;
                        }
                        
                        ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "../изменить имя", "{FFFFFF}Введите новое имя.", "Купить", "Отмена");
                    }
                    case 1:
                    {
                        if(GetPlayerDonateMoney(playerid) <= 0)
                        {
                            SendClientMessage(playerid, -1, "Вам нечего менять ((99");
                            return 0;
                        }
                        
                        ShowPlayerDialog(playerid, 2, DIALOG_STYLE_MSGBOX, "../обменять на деньги", "{FFFFFF}Вы действительно хотите обменять донат-деньги?", "Да", "Нет");
                    }
                    case 2:
                    {
                        if(GetPlayerDonateMoney(playerid) < 75)
                        {
                            SendClientMessage(playerid, -1, "У вас недостаточно донат-денег !");
                            return 0;
                        }
                        
                        ShowPlayerDialog(playerid, 3, DIALOG_STYLE_INPUT, "../изменить скин", "{FFFFFF}Укажите номер скина, который хотите получить.", "Да", "Нет");
                    }
                }
            }
        }
        case 1:
        {
            if(!response)
                return 0;

            if(response)
            {
                if(!strlen(inputtext))
                    return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "../изменить имя", "{FFFFFF}Введите новое имя.", "Купить", "Отмена");
           
                if(strlen(inputtext) < MAX_PLAYER_NAME - 18 && strlen(inputtext) > MAX_PLAYER_NAME)
                    return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "../изменить имя", "{FFFFFF}Введите новое имя.", "Купить", "Отмена");

                for(new i = strlen(inputtext) - 1; i != -1; i--)
                    if((inputtext[i] >= 'a' &&  inputtext[i] <= 'z') || (inputtext[i] >= 'A' && inputtext[i] <= 'Z') || (inputtext[i] == '_'))
                        continue;
                    else
                        return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "../изменить имя", "{FFFFFF}Введите новое имя.", "Купить", "Отмена");

                sscanf(inputtext, "s[24]", player[playerid][name]);

                SetPlayerName(playerid, player[playerid][name]);

                static const
                    str[] = "Вы сменили имя на %s";
                new
                    ftm_str[sizeof(str) + (-2) + MAX_PLAYER_NAME];
                format(ftm_str, sizeof(ftm_str), str, player[playerid][name]);
                SendClientMessage(playerid, -1, ftm_str);

                SetPlayerDonateMoney(playerid, GetPlayerDonateMoney(playerid) - 15);

                UpdateDonateTextDraw(playerid);
                
                GameTextForPlayer(playerid, "~r~-$15", 2000, 5);
            }
        }
        case 2:
        {
            if(!response)
                return 0;

            if(response)
            {
                static const
                    str[] = "~g~+$%i";
                new
                    ftm_str[sizeof(str) + (-2) + 8];
                format(ftm_str, sizeof(ftm_str), str, GetPlayerDonateMoney(playerid));
                GameTextForPlayer(playerid, ftm_str, 2000, 5);

                GivePlayerMoney(playerid, GetPlayerDonateMoney(playerid));
                
                ResetPlayerDonateMoney(playerid);

                UpdateDonateTextDraw(playerid);
                
                SendClientMessage(playerid, -1, "Вы обменяли донат-деньги на игровые!");
            }
        }
        case 3:
        {
            if(!response)
                return 0;

            if(response)
            {
                new
                    old_skin;

                old_skin = player[playerid][skin];
                
                sscanf(inputtext, "i", player[playerid][skin]);
                
                if(old_skin == player[playerid][skin])
                {
                    player[playerid][skin] = old_skin;
                    SetPlayerSkin(playerid, player[playerid][skin]);
                    return 0;
                }
                    
                SetPlayerDonateMoney(playerid, GetPlayerDonateMoney(playerid) - 75);

                GameTextForPlayer(playerid, "~r~-$75", 2000, 5);

                UpdateDonateTextDraw(playerid);

                SetPlayerSkin(playerid, player[playerid][skin]);
                
                SendClientMessage(playerid, -1, "Вы изменили скин!");
            }
        }
    }
    return 1;
}

Скачать (click).

 

Автор: Anton_Styazhkin aka Untonyst ;)

 

Можете предлагать все ваши идеи, все учту.

  • Like 1

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


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

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

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

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

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

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

Войти

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

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

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

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

  • Похожий контент

    • 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, "Ваш баланс восстановлен. Администрация уже вкурсе!"); }   Функция вызывается читером и не возвращает какого-либо конкретного значения.   Скачать (click).   Создайте файл в том же самом блокноте, потом на «сохранить как» и введите «u_ac_money.inc».   Если вам понравится такой представление античитов, то я с радостью продолжу разработку, если мне будет не лень и если я буду не занят.
×

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

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