Эту тему создал специально для новичков, постараюсь объяснить всё понятно. Если будут вопросы — обращайтесь. Ну что же, начнём.
[size=150]1. Сама БД.
Если у вас есть хост с MySQL и PhpMyAdmin, можете исполосовать его. Если же нет — воспользуйтесь [url=www.denwer.ru]Denwer
Установка проста, ну или чекайте в инете ибо я ленивый.
Если у Вас есть хостинг с MySQL (MySQLi или MariaDB) и PhpMyAdmin, конечно же, можете исполосовать его. Если всё-таки нет — воспользуйтесь популярной программкой [url=www.denwer.ru]Denwer
[size=150]2. Создаём таблицу в базе данных.
Создайте базу данных, а в ней воткнём новую таблицу (нажмите левой кнопкой мыши по ссылке «Создать таблицу») и введите следующие данные о таблице:
Название — «accounts»
Количество столбцов — 3
[b]Столбец №1
[list][*]Имя: id
[*]Тип: INT
[*]Длина: 11
[*]A_I (Auto Increment) — поставьте галочку
Все остальные значения не трогаем. Одинаковых идентификаторов, как Вы сами наверняка догадались, в таблице быть не может. Да, в общем, оно и не нужно.
[b]Второй столбик
[list][*]Имя: player_name.
[*]Тип: VARCHAR.
[*]Длина: 24 (так как длина ника в San Andreas Multiplayer/Criminal Russia Multiplayer не может превышать 24 символа).
Все остальные значения также не трогаем.
[b]Третий столб
[list][*]Имя: password
[*]Тип: VARCHAR
[*]Длина: 30 (ограничу длину пароля игрока 30 символами, ну а Вы можете сделать меньше или больше)
[size=150]3. Программируем сервер
[size=125]1. Данные для подключения
В начало нашего скрипта (под #include) добавим:
[code]#include
#define DB_HOST «localhost»// Адрес сервера, на котором расположена база. Если он локальный (OpenServer/Denwer), оставьте localhost или замените его на 127.0.0.1, как хотите.
#define DB_USER «root»//Имя пользователя, через которого мы будем коннектиться с базой данных. Я взял root.
#define DB_DATABASE «myserver»// Имя базы данных, которую Вы создали
#define DB_PASSWORD «15021980»// Пасс от пользователя
new MySQL:mysql_connect_ID; // Переменная типа MySQL, в которой будет храниться ид подключения к БД
enum dIDs { // IDs диалогов
dKickMessage, //Автоматически займёт ID0
dRegister, //ID1
dLogin //ID2
}
enum pInfo {
pID, // айди аккаунта
pName[MAX_PLAYER_NAME], // ник клиента
pPassword[31] // Пароль
}
new Player[MAX_PLAYERS][pInfo]; // через pInfo[ID_ИГРОКА][enum]; будем обращаться к значению enum из enum pInfo
forward FindPlayerInTable(playerid);
forward UploadPlayerAccountNumber(playerid);
forward UploadPlayerAccount(playerid);
[size=125]2. Подключение к базе.
В [color=#0000FF]public
[code]mysql_connect_ID = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
[b]3. Поиск игрока в БД и запись ника в массив Player[ID_ИГРОКА][pName]
В [color=#0000FF]public
[code]GetPlayerName(playerid, Player[playerid][pName], MAX_PLAYER_NAME); // Определяем ник игрока ID_ИГРОКА и записываем его в Player[ID_ИГРОКА][pName]
new query_string[75]; // Этого нам должно хватить
format(query_string, sizeof(query_string), «SELECT * FROM `accounts` WHERE `player_name` = ‘%s'», Player[playerid][pName]); // Ищем строку таблицы accounts, в которой ячейка player_name равна значению Player[ID_ИГРОКА][pName], то есть нику нашего игрока
mysql_tquery(mysql_connect_ID, query_string, «FindPlayerInTable»,»i», playerid);
В конец мода:
[code]public FindPlayerInTable(playerid) {
new rows;
cache_get_row_count(rows);
if(!rows) {
ShowPlayerDialog(playerid, dRegister, DIALOG_STYLE_INPUT, «Вход», «Аккаунт не зарегистрирован, введите пароль», «Зарегать», «Выход»);
} else {
ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, «Вход», «Аккаунт зарегистрирован, введите пароль», «Вход», «»);
cache_get_value_name(0, «password», pInfo[playerid][pPassword], 31);
}
return true;
}
[b]5. Действия для диалогов
Почти вся система работает, замечательно! Даже диалоговые окна есть! Правда, пока они не работают. Давайте же исправим этот страшный недочёт! Для этого в [color=#0000FF]public
[code]if(dialogid == dRegister) {
if(!response) {
ShowPlayerDialog(playerid, dKickMessage, DIALOG_STYLE_MSGBOX, «Перезайдите», «{FFFFFF}Вы были отключены от сервера.
{FF0000}Причина: нарушение правил Сервера (отказ от обязательной регистрации)
{FFFFFF}Для выхода с сервера введите «/q»» в чат»»