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

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

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

    • INewBRO
      От INewBRO
      Хотел записать в базу данные об игроке (пароль, ник и т.д) Но происходит ошибка и оно не записывается. Я написал чтобы ошибки сохранялись в файл. Комментарием отметил где ошибка
      Лог:
       
    • DEST
      От 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.
       
    • MartinJoys
      От MartinJoys
      Всем привет на связи MartinJoys | Cherlock
      Cегодня мы научимся делать вип аккаунты по времени, с автоматическим удалением по истечению времени.
      Перейдем в самый вверх вашего мода и впишем туда этот код:
       
      Теперь необходимо установить подключение к базе при включении мода, перейдем в OnGameModeInit и впишем туда этот код:
       
      mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS); //устанавливаем подключение switch(mysql_ping()) {     case 1: print("Соединение установлено"); // Если подключена БД.     case -1: print("Нет соединения с БД"); // Если не подключена БД. }    
      Теперь если все будет нормально то в консоли появится инфа о том что соединение установлено.
      Сейчас сделаем отключение от базы при выключении/перезагрузке мода, перейдем в OnGameModeExit и впишем:
      mysql_close(); Теперь нужно сделать проверку, переходим в OnPlayerConnect и вписываем:
       
       
      Теперь построим команду для выдачи випки. Внимание команда построена на YCM
       
      Теперь сделаем функцию выдачи випки, перейдем в низ вашего мода и напишем следующий код:  
      Теперь нужно создать таблицу в нашей бд:
      Создаем таблицу с именем 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
       
    • Nikita_Wrhavskiy
      От Nikita_Wrhavskiy
      Вопрос такой ребята как на php сделать так что что бы когда на сайте меняется статус аккаунта к примеру "онлайн" был зелёным цветом а "оффлайн" красным то есть работает через mysql базу статус аккаунта


    • Antoxa39
      От Antoxa39
      Дратути,я научился делать регистрацию, и хочу поделится со всеми как это сделать им самим.
      1.Нам потребуется: Denwer или Open Server. ( Урок про подключение я делал ранее, так что обьяснять сейчас что и как делать для подключения не буду, но урок можно посмотреть тут)
      2.MySQL R39-6.
      3. Прямые руки.
      4. Переходим к процессу.
      //P.S БД - База Данных
      Делаем подключение к БД.
      main(){} #include <a_samp> #include <a_mysql> #include <Pawn.CMD> #include <sscanf2> #include <streamer> #include <time> //--------------   SQL     ---------------------- new dbHandle; #define MYSQL_HOST "127.0.0.1" #define MYSQL_USER "mysql" #define MYSQL_BD "urok" #define MYSQL_PASSWORD "mysql" //------------------------ public OnGameModeInit() {     dbHandle = mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_BD,MYSQL_PASSWORD);     CheckConnectSQL();     return 1; } public OnGameModeExit() {     return 1; } stock CheckConnectSQL() {     if(mysql_errno()) printf("Подключение к БД %s прервалось. Код ошибки: %d",MYSQL_BD,mysql_errno())     else printf("Подключение к БД %s успешно!",MYSQL_BD)     return 1; }
      Подключение сделано.
      Далее мы должны сделать такое: Когда игрок заходит на сервер, нужно проверить есть ли игрок с таким Никнеймом в БД.
      Делаем массив,который будет хранить в себе пароль,имя игрока. ( сделаем еще и уровень ).
      // перед --------------   SQL     ---------------------- создаем enum //Enum - это вещь, позволяющая создавать большее количество адресов одной переменной enum pInfo{     pID,     pNick[24],     pPassword[32],     pLevel } new Player[MAX_PLAYERS][pInfo];//Мы обьявили переменную,которая будет хранить в себе наш Enum. Идем создавать БД.
      1.
      2.
      3.
      4.
      5. Идем обратно к скриптингу
      И вот тут, мы сделаем проверку есть ли в БД аккаунт с таким никнеймом.
      public OnPlayerConnect(playerid) {     GetPlayerName(playerid,Player[playerid][pNick],MAX_PLAYER_NAME);//Мы записали ник игрока в массив pNick.     new query[100];//создаем переменную с запросом.     format(query,sizeof(query),"SELECT * FROM `account` WHERE `pNick` = '%s'",Player[playerid][pNick]);//Форматируем запрос, SELECT * FROM, то есть      //загружаем всю информацию о игроке с ником, записаным в pNick.     mysql_function_query(dbHandle,query,true,"CheckPlayerBD","i",playerid);//Посылаем запрос в БД, указываем ИД подключение - dbHandle. true - потому что мы хотим получить информацию. И вызываем следующим паблик "CheckPlayerBD"     return 1; } //в конец мода forward CheckPlayerBD(playerid); public  CheckPlayerBD(playerid) {     new rows,fields;     cache_get_data(rows,fields);//Проверили есть ли строка с таким именем.     if(!rows)//если нет такого игрока то показываем регистрацию     {         ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Приветствуем Вас! Вы еще не зарегистрированы,введите свой пароль ниже.", "Далее", "");     }     else     {         ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Авторизация", "Рады видеть Вас снова на Urok. Авторизуйтесь.", "Далее", "");         cache_get_field_content(0,"pPassword",Player[playerid][pPassword],dbHandle);//Загружаем пароль игрока из БД.     }     return 1; } Я мог сделать ИД диалогов через енум, но для примера можно и так.
      Далее идем в OnDialogResponse
      public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {     switch(dialogid)     {         //case 1 это регистрация         case 1:         {             if(!response) return Kick(playerid); // если игрок отказывается от регистрации кикаем его.             if(strlen(inputtext) < 4 || strlen(inputtext) > 32 || strlen(inputtext) == 0) return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Длина пароля от 4 до 32 символов.\n Вы также не можете продолжить не указав пароль", "Далее", "");             //это была проверка на длину пароля             for(new i; i < strlen(inputtext); i++)             {                 switch(inputtext[i])                 {                     case 'A'..'Z','a'..'z','0'..'9':continue;                     default: return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Пароль может быть только: a-z, A-Z,0-9", "Далее", "");                 }             }             //это проверка на символы,если игрок будет писать пароль на русском, или какие нибудь другие символы             //например \*? то ему будет возвращатся этот же диалог,а если все отлично то регистрация продолжится.             new query[120 + MAX_PLAYER_NAME];//также создали запрос             format(query,sizeof(query),"INSERT INTO `account` (`pNick`,`pPassword`,`pLevel`) VALUES ('%s','%s','1')"),Player[playerid][pNick],inputtext);             /*Мы отформатировали строку,сделав в ней запрос: Добавить строку в таблице account, со столбцами pNick = '%s', %s значит строка             в данном случае эта строка, это массив который хранит в себе никнейм игрока,inputtext это введеный текст игроком, pLevel это уровень игрока,изначально в бд он будет 1.*/             mysql_query(dbHandle,query);             //теперь делаем запрос на загрузку акканута.             new query1[100];             format(query1,sizeof(query1),"SELECT * FROM `account` WHERE `pNick` = '%s'",Player[playerid][pNick]);//отфарматироваали новый запрос             mysql_function_query(dbHandle,query1,true,,"LoadAcc","i",playerid);         }     }     case 2:     {         if(!response) return Kick(playerid); // если игрок отказывается от авторизации также кикаем его.         if(strlen(inputtext) < 4 || strlen(inputtext) > 32 || strlen(inputtext) == 0) return ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Авторизация", "Неверный пароль", "Далее", "");//Делаем проверку на длину пароля, т.к при регистрации у нас пароль был от 4 до 32, тут тоже самое должно быть         for(new i; i < strlen(inputtext); i++)         {             switch(inputtext[i])             {                 case 'A'..'Z','a'..'z','0'..'9': continue;//если он также вводит правильные символы продолжаем выполнение кода для игрока.                 default: return  ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Авторизация", "Не верный пароль!", "Далее", "");// при вводе спец.символов ему будет возвращать диалог авторизации             }         }         new query[120];         format(query,sizeof(query),"SELECT * FROM `account` WHERE `pNick` = '%s' AND `pPassword` = '%s'",Player[playerid][pNick],inputtext)//Загрузить информацию о игроке,и проверить совпадает введеный пароль игроком,с тем который в БД.         mysql_function_query(dbHandle,query,true,"CheckPass","i",playerid);     }     return 1; } //создаем паблик LoadAcc forward LoadAcc(playerid); public LoadAcc(playerid) {     Player[playerid][pID] = cache_get_field_content_int(0,"pID",dbHandle);// 0 потому что в БД может быть только одна строка с таким именем или ИД     Player[playerid][pLevel] = cache_get_field_content_int(0,"pLevel",dbHandle);// приравнение, то есть записываем Левел и ИД игрока в наши массивы.     //Пароль и никнейм загружать не надо } forward CheckPass(playerid); public CheckPass(playerid) {     new rows,fields;     cache_get_data(rows,fields);//сверяем пароль     if(rows)     {         //если веденный пароль совпадает с паролем в БД то авторизуем игрока         SpawnPlayer(playerid);         SendClientMessage(playerid,-1,"Вы успешно авторизовались!");     }     else     {         //если нет то считаем попытки ввода пароля         SetPVarInt(playerid,"wrong_password",GetPVarInt(playerid,"wrong_password") + 1)         ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Авторизация","Не верный пароль!","Далее","");         new str[64];         format(str,sizeof(str),"У вас осталось: %d попыток",GetPVarInt(playerid,"wrong_password"));         SendClientMessage(playerid,-1,str);//форматируем строку, где говорим игроку сколько у него осталось попыток         if(GetPVarInt(playerid,"wrong_password") >= 5) return Kick(playerid);//если игрок использовал больше 5 попыток, то кикаем его     } } и в OnGameModeExit()
      public OnGameModeExit() {     mysql_close(dbHandle);//отключаемся от БД     return 1; }