Sign in to follow this  
Followers 0
MartinJoys

Система Vip аккаунта по времени на MySql

1 post in this topic

Всем привет на связи MartinJoys | Cherlock
Cегодня мы научимся делать вип аккаунты по времени, с автоматическим удалением по истечению времени.
Перейдем в самый вверх вашего мода и впишем туда этот код:

Спойлер

#include <a_samp>// стандартный инклуд
#include <YSI\y_commands> //для работы с командами
#include <mxdate>
#include <a_mysql> //для работы с бд
#include <sscanf> //
#define MYSQL_HOST     "localhost" // IP адресс БД.
#define MYSQL_USER     "root" // Login БД.
#define MYSQL_DB       "Samp" // Название БД.
#define MYSQL_PASS     "root" // Пароль БД.

 

 

Теперь необходимо установить подключение к базе при включении мода, перейдем в OnGameModeInit и впишем туда этот код:

 

mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS); //устанавливаем подключение
switch(mysql_ping())
{
    case 1: print("Соединение установлено"); // Если подключена БД.
    case -1: print("Нет соединения с БД"); // Если не подключена БД.
}  

 

Теперь если все будет нормально то в консоли появится инфа о том что соединение установлено.
Сейчас сделаем отключение от базы при выключении/перезагрузке мода, перейдем в OnGameModeExit и впишем:

mysql_close();

Теперь нужно сделать проверку, переходим в OnPlayerConnect и вписываем:

 

Спойлер

new query[100],name[24],string[240]sqlname[24],days;//
    GetPlayerName(playerid,name,sizeof(name));//узнаем имя
    mysql_real_escape_string(name,sqlname);
    format(query,sizeof(query),"SELECT * FROM `Donate` WHERE `Name` = '%s'",sqlname);
    mysql_query(query);//отправляем запрос
    mysql_store_result();//получаем ответ
    if(mysql_fetch_row(query) && mysql_num_rows() == 1)//если есть поле с именем игрока
    {
        mysql_get_field("Days", string);
        days=strval(string);//получаем время на которое выдан аккаунт
        if(gettime() >= days) //если срок закончился
        {
            SendClientMessage(playerid,0xFFFFFFFF,"Действие вашего аккаунта закончилось");
            format(string,sizeof(string),"DELETE FROM `Donate` WHERE `Name`='%s'",name);
            mysql_query(string);//удаляем его из бд
            //PlayerInfo[playerid][pDonate]=0; сюда впишите вашу випку
        }
        else//если действие аккаунта еще не закончилось
        {
            //PlayerInfo[playerid][pDonate]=1; ваша випка
            format(string,sizeof(string),"Действие вашего аккаунта закончится  %s ",date("%dd.%mm.%yyyy в %hh:%ii:%ss",days));
            SendClientMessage(playerid,0xFFFFFFFF,string);//выведем информацию о том когда закончится действие аккаунта
        }
    }
    mysql_free_result();//очищаем  

 

 

Теперь построим команду для выдачи випки. Внимание команда построена на YCM

 

Спойлер

YCMD:donate(playerid, params[ ] ,help)//donate это название команды
{
     if(!IsPlayerAdmin(playerid)return SendClientMessage(playerid,-1,"Вы не администратор.");//проверка на администратора
    new string[144];
    if(!strlen(params[0])|| !strlen(params[1])) return SendClientMessage(playerid,0xFFFFFFFF,"{0099FF}Используйте:     {FFFFFF}/donate {99D938}[playerid] [Day] ");//если параметры не указанны
    DonatePlayer(params[0],params[1]);//если указанны то дадим випку и занесем в бд
    format(string,sizeof(string),"Вам выдан Вип аккаунт на %d дней",params[1]);
    SendClientMessage(params[0],0xFFFFFFFF,string);//покажем сообщение игроку которому выдали
    //ваша випка PlayerInfo[params[0]][pDonate]=1;
    return true;
}

 

 Теперь сделаем функцию выдачи випки, перейдем в низ вашего мода и напишем следующий код:
Спойлер

stock DonatePlayer(playerid,days)
{
    new query[256],name[24];
    GetPlayerName(playerid,name,sizeof(name));//узнаем имя
    format(query, sizeof(query), "INSERT INTO `Donate` (`Name`, `Days`) VALUE ('%s','%d')",name,gettime()+86400*days);//gettime()вернет время в секундах, 86400 секунд в одних сутках, days количество дней на которое будет установлен вип аккаунт
    mysql_query(query);//отправим запрос
    return true;
}  

 

 

Теперь нужно создать таблицу в нашей бд:
Создаем таблицу с именем Donate, делаем 2 столбца Name и Days.
В первом укажем значение string(24), а во втором int(11).

 

Необходимые для работы инклуды а так же плагины можете скачать по этой ссылкам:
http://rghost.ru/40382201
http://rghost.ru/40382221
http://rghost.ru/40382234
http://rghost.ru/40382569


Автор: Я MartinJoys | Cherlock

 

Edited by Cawfee

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Guest Джон
      By Guest Джон
      Требуется разработчик в сфере павно, оплата будет.

      С меня;
      Стабильность, привелегии возможно на сервере, оплата в сроки, сотрудничество возможное с вашими условиями.

      с вас; доказательства опыта работы, проверка так произойдет таким образом что вы напишите простой скрипт, я проверю и мы начнем работу. С вас также попрошу знания скриптинга на павно, умение настройки базы данных, умение ставить моды и тд. Мод с нуля,сервер Infinity RolePlay, приставка ролеплей не с проста, сервер фулл рп. На админку маловероятно что поставлю, лишь если буду уверен в вашем опыте и знаниях на посту. Ценю доброжелательность, честность, стабильность, коммуникативность, опыт.

      Планирую сделать комфортную площадку САМП для приятного времяпровождения на мобильном устройстве или пк(свои условия будут) в основном нацелены будем на мобильные устройства.

      Пожалуйста можно без высоких ценников, мне всего 14, однако опыта я достиг не малого. Все же даже так мог бы оплачивать услуги скриптера.
    • MCrown
      By MCrown
      Приветствую вас дорогие друзья!
      Хочу собрать команду энтузиастов (бесплатная основа до открытия) для создания и успешного запуска амбициозного проекта в индустрии SA:MP.
       
      Важны любые умения! Вы креативный и амбициозный человек желающий реализовать свои идеи и доказать всем что всё что кажется невозможно - вполне реально!
      Сам же я являюсь скриптером с многолетним опытом как в разработке так и работы в команде. Я же буду заниматься финансированием всех необходимых ресурсов самого проекта (оплата необходимых ресурсов для разработки). 
      Совсем не важно в чём вы хороши, важно что вы имеете стимул и желание работать в проекте и развивать свои навыки!
      В общем, все остальные подробности можно будет обсудить уже в ходе личного общения. Если ты это читаешь то знай, я жду именно тебя!
    • DEST
      By DEST
      ДИНАМИЧЕСКИЕ ЗОНЫ (streamer плагин)
       
      ОБЩЕЕ ОПИСАНИЕ: 
      Как я заметил, многие интересуются, как создать действие для игрока в какой-либо определенной точке карты. Например, как выдать игроку бутылку пива автоматически при заходе в клуб? Конечно, можно это сделать, создав секундный таймер и выполнять действия там, но как по мне, динамические зоны справятся  с этим лучше. 
      ТРЕБОВАНИЯ: 
      Для работы необходимо: 
      1) Плагин streamer. 
      2) Инклуд streamer. 
      Желательно иметь актуальную версию плагина и инклуда, хотя это не обязательно. 
      ТЕХНИЧЕСКОЕ ОПИСАНИЕ РАБОТЫ: 
      Принцип работы данных зон прост: когда игрок заходит в зону, которая создается кстати, в виде геометрических фигур (об этом позже) для него срабатывает коллбэк - OnPlayerEnterDynamicArea. После того, как игрок покидает динамическую зону для него срабатывает другой коллбэк - OnPlayerLeaveDynamicArea. В оба эти коллбэка поступают одинаковые аргументы - playerid, areaid. Где playerid - ид игрока, который вошел / покинул зону, а areaid - ид самой зоны. 
      ТИПЫ СОЗДАВАЕМЫХ ЗОН: 
      1) Круг. Для создания данной зоны потребуются X и Y координата центра круга, а также радиус создаваемой зоны. 
      2) Прямоугольник. Для создания данной зоны, необходимо иметь координаты противоположных углов, образующих прямоугольник. 
      3) Сфера. Для данной зоны требуются X, Y, Z координаты центра сферы и ее размер (радиус). 
      4) Куб. Точно также как и прямоугольник, только потребуются еще и Z координаты противоположных углов. Рисунок не требуется. 
      Пример использования:
      new zone_army; public OnGameModeInit(playerid) { zone_army = zone51 = CreateDynamicCube(-13.0555,1702.1824, 15.0,405.9110, 2071.6646, 850.0); return 1; } public OnPlayerEnterDynamicArea(playerid, areaid) { if(areaid == zone_army) SendClientMessage(playerid,-1,"Покиньте охряняемую зону. Иначе будет открыт огонь."); return 1; } public OnPlayerLeaveDynamicArea(playerid, areaid) { if(areaid == zone_army) SendClientMessage(playerid,-1,"Благодарим за понимание."); return 1; } Пример взят с сайта forum-pawno.ru. 
      СВЯЗАННЫЕ ФУНКЦИИ: 
      DestroyDynamicArea(areaid); - уничтожение динамической зоны.  IsValidDynamicArea(areaid); - проверка за существование динамической зоны с данным ID.  TogglePlayerDynamicArea(playerid, areaid, toggle); - скрытие динамической зоны для игрока.  TogglePlayerAllDynamicAreas(playerid, toggle); - скрытие всех динамических зон для игрока.  IsPlayerInDynamicArea(playerid, areaid); - проверка на нахождение игрока в динамической зоне с определенным ID.  AttachDynamicAreaToPlayer(areaid, playerid); - прикрепление динамической зоны с определенным ID к игроку.  AttachDynamicAreaToVehicle(areaid, vehicleid); - прикрепление динамической зоны с определенным ID к машине.  DestroyAllDynamicAreas(); - уничтожение всех динамических зон.  CountDynamicAreas(); - подсчет количества динамических зон.  Внимание! К игрокам и машинам можно прикрепить только зоны с типом круг и сфера. 
      На этом все! 
      Благодарности: 
      Благодарность выражается следующим веб-ресурсам: 
      forum-pawno.ru
      forum.sa-mp.com
      Автор: @DEST.
       
    • Guest stibs
      By Guest stibs
      Всем привет! 
      Сегодня я вам поведаю  про такую прекрасную штуку как тернарный оператор. В принципе, тернарный оператор это такая же конструкция как и конструкция if/else. 
       
      Конструкция  оператора.
      условие ? правда : ложь
       
      Пример использования.
      Например, на конструкции if/else одно выражение может выглядеть вот так: 
      if (z > y) {     x = 5; } else {     x = 3; } А вот так это будет выглядеть с использованием тернарного оператора:
      x = (z > y) ? (5) : (3);  
    • kusehsup
      By kusehsup
      Здравствуйте.
      Решил рассказать про виды диалоговых окон.
       
      Начнем.
      Диалоги бывают 4-ех видов, это..
      DIALOG_STYLE_MSGBOX DIALOG_STYLE_INPUT DIALOG_STYLE_LIST DIALOG_STYLE_PASSWORD  
       
      Разберемся, что к чему.
       
       
      Первый вид диалога - DIALOG_STYLE_MSGBOX.
      Его действие - Показывает сообщение игроку. Пример: Правила сервера.
      Код диалога: 
      ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "Тут название", "Тут текст", "Кнопка1", "Кнопка2");  
      Второй вид диалога - DIALOG_STYLE_INPUT
      Его действие - Показывает сообщение игроку + есть поле для ввода информации. Пример: Ввод email при регистрации на РП сервере.
      Код диалога: 
      ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Тут название","Тут ваш текст","Кнопка1","Кнопка2");  
      Третий вид диалога - DIALOG_STYLE_LIST
      Его действие - Показывает игроку список. ( Диалог со списком ). Пример такого диалога - Команда /mn и тому подобное.
      Код диалога: 
      ShowPlayerDialog(playerid, 2, DIALOG_STYLE_LIST, "Тут название", "Пункт 1\nПункт 2", "Кнопка1", "Кнопка2");  
      Четвертый и последний вид диалога - DIALOG_STYLE_PASSWORD
      Его действие - Диалог с инфрмацией и полем для ввода, где введенные символы будут заменены на звездочки ( Поле для ввода пароля ).
      Код диалога: 
      ShowPlayerDialog(playerid, 3, DIALOG_STYLE_PASSWORD, "Тут название", "Тут текст(можете написать 'Введите пароль')", "Кнопка1", "Кнопка2");  
      На этом все