Система регистрации на сервере SAMP (MySQL) — Часть 1

26 декабря 2013 | Рубрика: Статьи

В этой статье я расскажу Вам, как можно написать систему регистрации с нуля (можно и адаптировать под Ваш Godfather мод). 

Итак, для этого нам понадобятся следующие вещи:
1.Denwer 3 (2012) — через эту программу мы будем запускать и администрировать наш MySQL сервер.  Скачать Denwer 3.

2.MySQL Plugin от g-stylezzz — плагин для работы с базой данных.

Это кинуть в папку Plugins (жми на ссылку)

Это кинуть в папку с сервером (жми на ссылку)  + в server.cfg добавить строку: plugins mysql sscanf 

a_mysql.inc — это кинуть в папку Pawno\Includes

3. Sscanf Plugin — плагин, при помощи которого нам будет удобней и быстрей извлекать данные из результата при выборке из таблицы.

Начнём! 

 — Устанавливаем Denwer, запускаем сервер (на рабочем столе появится ярлык «Start Denwer»). 
 — Заходим в браузер и в адресной строке вводим «localhost» (без кавычек). 
 — Спускаемся ниже и переходим по ссылке: http://localhost/Tools/CODEmyadmin/index.CODE 
 — Итак, вы видите CODEmyadmin, сейчас мы можем управлять базой данных. 
 — Создаём таблицу: 
 — Примерно в центре есть «Create new database». 
 — Я назвал свою БД «pawno», кодировку выбрал «cp1251_bin». 

 

БД создана 

Теперь нам нужно создать таблицу для аккаунтов

Name — Название таблицы, Number of Fields — количество полей. 
Мы используем 3 поля,
1. ID аккаунта, чтобы можно было его распознать в таблице, можно, конечно использовать ник, но с ИД удобней;
2. Ник игрока, думаю тут всё ясно;
3. Пароль игрока.
Таблица создана, сейчас мы настроим наши поля. 

Нажимаем Save.
Все нужное я выделил красным, теперь расскажу, что за что отвечает.
Field — название поля;
Type — тип данных, есть integer (целые числа), string (VARCHAR, TEXT), float, DATE, DATETIME, TIME и т.д., в общем как в павно, тут я использую VARCHAR для строк, и INT для целых чисел.
Length/Values — сколько «ячеек» мы выделяем для поля, для ника 24 (MAX_PLAYER_NAME), для пароля — 64.
Collation — кодировка.
AUTO_INCREMENT — генерирует значения для ID игрока в порядке возрастания (1, 2, 3…).

Так будет выглядеть пустая, без аккаунтов таблица: 

— Базу данных и таблицу мы подготовили, теперь перейдем к моду. 

 — Сверху мода, где вы подключаете все инклюды, добавляем эти строки: 

#include <a_mysql> // SQL функции.
#include <sscanf2> // Извлечение данных.

 — Чуть ниже задефайним парметры БД: 

#define SQL_HOST «localhost» // IP адресс БД.
#define SQL_USER «root» // Login БД.
#define SQL_DB «pawno» // Название БД.
#define SQL_PASS «» // Пароль БД.

— Дефайны для ID’ов диалогов и цвета сообщений. 

#define DIALOG_LOGIN 1
#define DIALOG_REGISTER 2
#define DIALOG_WRONGPAS 3
#define COLOR_LIGHTRED 0xFF6347AA
#define COLOR_YELLOW 0xFFFF00AA

— Создадим массив для хранения данных аккаунта. 

enum Variables {
aID,
aName[MAX_PLAYER_NAME],
aPassword[64],
bool: aLogged,
aWrongPassword,
};
new playerVariable[100][Variables]; // 100 — моё кол-во слотов для игроков на сервере.

— Создадим функцию для подключения и отключения к БД

ConnectMySQL() { // В OnGameModeInIt вставьте ConnectMySQL();
mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS); // Тут мы используем все данные, которые мы дефайнили.
switch(mysql_ping()) { // Проверка на то, что мы подключены к БД.
case 1: print(«MySQL connection: alive.»); // Если подключена БД.
case -1: print(«MySQL connection: dead.»); // Если не подключена БД.
}
return 1;
}

DisconnectMySQL() { // Вставьте DisconnectMySQL(); в OnGameModeExit, отключаемся от БД.
mysql_close();
print(«MySQL connection closed.»);
}

CheckMySQLConnection() { // Этот сток мы будем использовать для проверки, подключена ли БД перед её использованием.
if(mysql_ping() == -1) mysql_reconnect();
return 1;
}