Уважаемый гость, если у Вас возникли проблемы с регистрацией, просьба обратиться в тех.поддержку или на почту admin@pawno-crmp.ru

Для полного доступа ко всем функциям форума, Вам необходимо зарегистрироваться и авторизоваться.

Мануал

Создание системы регистрации msyql R40

* * * * * 1 criminal russia crmp pawno уроки crmp крмп

#1
  laku

laku
  • 3
    • 8
    • 06.07.17

Когда я только начинал писать свой первый "недо код" Появилась проблема с mysql и регистрацией(авторизацией).

Эту тему создал специально для новичков, я постараюсь объяснить все понятно если будут вопросы обращайтесь, ну что же начнём, 

 

1. База данных :

Если у вас есть хост с Phpmyadmin, можете исполосовать его, что бы запустить на локалки есть программа Denwer 

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Установка проста, ну или чекайте в инете ибо я ленивый 

 

2.Система аккаунтов:

 

1.

Открыть/Закрыть
Выбераем бд в которой будем создавать таблицу (клик по создать таблицу) и вводим данные о таблице:
В поле "Имя таблицы" вводим "accounts"
В поле "Количество столбцов" вводим "3"

2. Структуру новой таблицы заполняем следующим образом:

Открыть/Закрыть
Первый столбец

- Имя столбца: id
- Тип столбца: INT
- Длина/значения: 11
Все остальные значения, кроме A_I, не трогаем. Находим A_I (Auto Increment) и ставим галочку.
Идентификаторов не может быть больше одного в таблице. Да оно и не нужно =)

Второй столбец
- Имя столбца: player_name
- Тип столбца: VARCHAR
- Длина/значения: 24 (так как длина ника в SA-MP не может превышать 24 символа)
Все остальные значения не трогаем.

Третий столбец
- Имя столбца: password
- Тип столбца: VARCHAR
- Длина/значения: 30 (Я ограничу длину пароля игрока 30-ю символами. Вы можете сделать меньше/больше)

 

3.Запускаем pawno:

1. Данные для подключения

В начало нашего скрипта (под "#include ") добавим:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Разбор кода

#include <a_mysq> - подключаем инклюд, в котором хранится объявление всех функций для работы с плагином.
#define MYSQL_HOST "localhost" - Этот макрос хранит в себе адрес хостинга, где хранится база данных (мы будем запускать на ПК, поэтому указываем адрес локальной сети).
#define MYSQL_USER "root" - Этот макрос хранит в себе имя пользователя, у которого имеется доступ к базе данных (так как мы запускаем мод на ПК, у нас это администратор. Когда будете запускать мод на хостинге, Вам выдадут особое имя)
#define MYSQL_DATABASE "first_database" - Этот макрос содержит в себе имя базы данных. Если при создании БД Вы прописывали имя отличное от моего, измените его на то, что указали Вы.
#define MYSQL_PASSWORD "" -- Этот макрос хранит в себе пароль, который требуется для подключения к базе данных
new mysql_connect_ID;
Это целочисленная переменная, в которой мы будем хранить ID подключения, которое потребуется для работы большинства функций.


2. Подключение к базе данных

В OnGameModeInIt

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Разбор кода
Данная функция возвращает ID подключения, который мы и записали в переменную.

3. Ко всем enum

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Разбор кода

enum e_PLAYER_INFO -enum - англ. Enumeration (Перечисление) - это тип, состоящий из набора целочисленных констант
pID, - Первый член перечисления, а по совместительству и ячейка, в которой будет хранится ID аккаунта игрока.
pName[MAX_PLAYER_NAME], - Второй член перечисления, а по совместительству и ячейка, в которой будет хранится имя аккаунта.
pPassword[31] - Третий член массива, а по совместительству и ячейка, в которой будет хранится пароль от аккаунта.
new pInfo[MAX_PLAYERS][e_PLAYER_INFO]; - Массив, через который мы будем обращаться у нужному нам члену перечисления за данными.

4.  Поиск игрока в базе данных и запись ника в массив

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Так же нам нужно эти данные записать в наш массив.

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

5. Создание действий для диалогов

Сначала нам нужно вспомнить о себе любимых и упростить работу с диалогами, создав ещё одно перечисление, которое будет позволять писать нам на месте ID диалога какие-то слова, намекающие нам на предназначение этого диалога, а не обычные числа. Ведь согласитесь, "dRegister" гораздо сильнее намекает нам на то, что этот диалог является диалогом регистрации, нежели просто "0", "1" или какое-либо ещё число. Но перечисление не только даст нам возможность более лучше понимать предназначение диалога по его ID, но и избавит нас от страха того, что ID диалогов могут перепутаться, ведь перечисление само определит свободный ID и установит его.

Чтоб создать такое перечисление, находим наше перечисление с данными игроков и выше него создадим ещё одно:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Всё =) Теперь достаточно придумывать имя каждому новому диалогу, дописывать его в этот список и тогда Вы точно никогда не запутаетесь при создании новых диалогов.

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

6. Создание/загрузка аккаунта игрока

В самый конец мода вставим этот stock:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

А вот и сам коллбэк, который вернёт ID аккаунта:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Загрузка аккаунта:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

7.  Сохранение аккаунта

Так же, в самом конце, добавим новый stock

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

И в OnPlayerDisconnect

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

8. Отключение от базы данных

Так же нужно не забыть добавить запрос к плагину MySQL на отключение от нашей базы данных. Делается это просто.

В OnGameModeExit 

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

9. Обнуление массива с данными

 

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

Делается это просто. Сначала в OnPlayerDisconnect, после "SaveAccount(playerid);" добавим:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

А после в конец скрипта:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

10. Проверка на авторизацию игрока

 

В начало мода, к переменным, добавим следующий массив:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Теперь в UploadPlayerAccount/CreateNewAccount, перед SpawnPlayer, добавить

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

В OnPlayerText добавляем следующее:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

В начало OnPlayerCommandText

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Если помог
Ставь +

 

Автор
DeimoS


compan (27 Июль 2017 - 17:45):
Код брать под тег "Код". До 18:36 у Вас есть время исправить или тема будет удалена. Хоть и жалко.
Elrmrnt-Kritik (27 Июль 2017 - 22:09):
Не сразу поняли что ли, что нужно код в тег "Код" брать... Почему-то одна половина правильно оформлена, другая - нет. Взял сам в BB код участки кода и табуляцию сбитую поправил.
Elrmrnt-Kritik (27 Июль 2017 - 22:09):
 Комментарий модератора 
1.10. Код больше 4-х строк и содержимое логов брать под тег "Код", в противном случае тема или пост будет удалён (на усмотрение администрации). Как использовать тег "Код"?
Единые Правила Форума (ЕПФ)

  • 3

#2
  SeregaMaterazi

SeregaMaterazi
  • 0
    • 3
    • 11.01.17

А можно скриншот регистрации/авторизации?


  • 0

#3
  Daniil_Poltorak

Daniil_Poltorak
  • 5
    • 476
    • 08.07.15

SeregaMaterazi,Зачем скриншот? Можно текст под себя переделать. Ну если руки откуда надо растут.


  • 0

#4
  Desais

Desais
  • 0
    • 1
    • 17.05.17

Что делать если такая ошибка?[spoiler='Код']C:\Users\nzQ\Desktop\Tournament ñ 0\gamemodes\tdm.pwn(2) : fatal error 100: cannot read from file: "a_


  • 0

#5
  Vitya_Vowkiv

Vitya_Vowkiv
  • 0
    • 1
    • 16.11.17

У меня появляеться такая ошибка C:\Users\Þð³é\Desktop\srv-pawno-crmp-c3-win\gamemodes\new.pwn(3) : fatal error 100: cannot read from file: "a_<span class="searchlite""


  • 0

#6
  Almas55541

Almas55541
  • 5
    • 147
    • 31.07.17

Vitya_Vowkiv,  убрать эту строка a_<span class="searchlite" или покажите строку 3


  • 0

#7
  Roman345345

Roman345345
  • 0
    • 34
    • 26.02.16

Многа ошибок

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.


  • 0