В теме 8 сообщений

Kutuzov
Новичок

Доброго времени суток.

Хочу пригласить вас на канал, а особенно новичков.

На канале есть как и базовый курс, где я рассказываю об основных функциях в Pawn, так и сегодня провел первый стрим и начал писать мод с нуля. 

Сегодня на стриме сделал подключение к базе данных mysql, на следующем стриме или видео сделаем уже основные действия регистрации, после авторизации и так далее будем понемногу делать сервер. Мой курс по моду нацелен на то, чтобы показать разработку сервера уже на новых версиях плагинов, на новых стандартах. Стараюсь максимально понятно объяснить. У меня также свой телеграмм канал, где я буду оповещать о новых видео или стримах и буду выкладывать полезную информацию тоже. Все ссылки на скачивания сервера, плагинов и других дополнений я пишу как в чате стрима, так и оставляю в описании стрима, чтобы зрители не искали плагины сами, ссылки даю с провереных уже источников, где нет никаких вирусов.

Ссылки:

Стрим: https://www.youtube.com/watch?v=DImb-ez7P7k&t=2714s

Ссылка на канал: https://www.youtube.com/@samp_proger

Ссылка на телеграмм канал: https://t.me/pawndevelop

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


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

Ничего личного. Но вам бы самому под учить библиотеки, основы программирования. А потом бы обучать других. А не делать так, что бы они перенимали плохие паттерны программирования.

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


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

Не поймите меня не правильно, возможно я ошибаюсь, но судя по логике того как вы объясняете людям - складывается ощущение что пишите вы код через нейросеть. Извините за мою бестактность.

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


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

@surenescore Ну знаешь я даже не уделвён) Нейросеть делает из тебя супер кодером и преподователем 2025 года.:bravo:o.O

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


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

@surenescore Делал сам, не через нейросеть. Ютуб заругался на авторские права трека во всех двух стримах, пришлось удалить. Буду скоро заново делать, я пересмотрел код который писал и я сделаю по другому, в более надежном и лучшем виде. Я сам понял что наделал глупостей в коде. Я знаю и другой способ, более надежный чем этот. 

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


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

Посмотрел исходник: https://github.com/VadimKutuzov/samp-roleplay-server/blob/video-2-system-registration/gamemodes/new.pwn

Проблемы с кодировкой, проблемы с архитектурой (можно разбить мод на модули), выделять памяти можно и более оптимально, макросы вроде:

 

#define SCM SendClientMessage
#define SPD ShowPlayerDialog

 

совсем не обязательны и субъективны. SetTimerEx("GetAccountFromMySQL", 1000, false, "i", playerid); - полный бред. Серверу не нужно ничего ожидать, скриптер - этим шагом только все усложняет и вредит серверу...

 

Берите пример только с нормально-написанных проектов:

 

https://github.com/Open-GTO/Open-GTO

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


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

@Web Я вообще начал делать по тому варианту, по которому учился и делал первую регистрацию и понял это только после второй серии. Я знаю более нормальный и надежный вариант и я его сделаю.

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


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

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

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

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

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


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

Войти

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


Войти

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

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

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

    • Kutuzov
      От Kutuzov
      Автор данного канала снимает уроки по программированию на Pawn, также скоро будет на 20 подписчиков снимать мод с нуля в samp. 
      Приглашаем всех на канал, а также особенно новичков. Даже если вы уже знаете pawn, подпишитесь пожалуйста на его канал и поддержите его.
      Автор канала не требует денег!!! Он обучает всех бесплатно!!!
      Ссылка на канал: https://www.youtube.com/@prog_samp_easy
       
      Также у него есть свой тг канал, но начнет вести его, как только будет не менее 10 подписчиков.
       Ссылка на тг канал: https://t.me/pawndevelop
       
      Всем удачи
    • INewBRO
      От INewBRO
      Хотел записать в базу данные об игроке (пароль, ник и т.д) Но происходит ошибка и оно не записывается. Я написал чтобы ошибки сохранялись в файл. Комментарием отметил где ошибка
      Лог:
       
    • 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; }  
    • Johny_Fox
      От Johny_Fox
       
      « San Andreas Online »

      Добро пожаловать в солнечный SanAndreas

      Уважаемые пользователи форума Pawno-Rus, я приглашаю вас в захватывающий мир « San Andreas Online », где реализовываются мечты. Окунитесь в беззаботный, и такой знакомый мир SanAndreas по-новому.





      Заработайте денег, получите авторитет и уважение, найдите верных друзей, катайтесь по штату на новеньком автомобиле, купите большой и уютный дом, развлекитесь в баре с коллегами.
      Займите сторону блюстителя закона: ловите бандитов, участвуйте в спецоперациях, лечите людей...
      Или же наоборот: торгуйте оружием, употребляйте запрещенные вещества, станьте главой преступного синдиката, и скройтесь от полиции штата.
      Вы также можете стать крупным бизнесменом, начав с небольшой забегаловки. Станьте главой крупной транспортной компании, владельцем таксопарка, рекламного агентства, ночного клуба, автозаправочной станции, магазина продуктов, риэлторского агентства...
      Эти и многие другие бизнесы доступны на нашем проекте « San Andreas Online ».





      На данный момент мы проделали большую работу для того, чтобы каждому игроку было комфортно, для того, чтобы вы не соскучились, а так же мы постарались максимально защитить вас от чит-программ, подключив мощные античиты.
      Мы постарались сделать все, чтобы вам хотелось вернуться в этот небольшой, но уютный мир « San Andreas Online ».





      Для того, чтобы начать игру, необходимо пройти простую процедуру регистрации.
      Все начинается с вашего приезда. Поезд подъезжает к платформе, и вот вы на вокзале Лос Сантоса...
      С этого момента вы позабудете, что такое скучные и нудные Role Play сервера, познакомитесь с новыми людьми.
      Добро пожаловать в штат San Andreas!





      Внимание! Данный проект не предполагает начальных бонусов. Игрок пребывает в штат с тремястами долларами.
      Дальнейшая судьба и способы заработка зависят от вас.

      - Разработана и применена система квестов для новых пользователей.
      - Система NPC для игроков.
      - Абсолютно новые интерьеры.
      - Удобное меню, а также комфортная для глаз и восприятия цветовая палитра.
      - Нестандартные работы, доступные уже с 1-го уровня.
      - Помощь новым игрокам 24/7.
      - Кастомизация вашего игрового персонажа.
      - Новые тюнинг ателье.


      Проект открыт с
      23.11.2020

      IP адрес:
      217.106.106.86:7031


      Форум.


      Проект предназначен для PC/Android Gaming.