Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Переводим систему аккаунтов на MySQL R6

Статус
В этой теме нельзя размещать новые ответы.

Ben_Lovejoy

Компетентный
Урока не видел. Если был просьба модераторов удалить тему..
Здравствуйте, уважаемые пользователи форума Pawno-Info.Ru. Многие желали бы перевести систему аккаунтов на MySQL, но не знают как это сделать. MySQL работает намного быстрее, чем файлы, которые используют почти все сервера в CRMP.
Итак, для перевода нам понадобятся следующие вещи:
1. Denwer.
2. MySQL Plugin от g-stylezzz.
a)
б)
в)
3. Плагин Sscanf от Y_Less'a.
В serever.cfg добавим сторчку
PHP:
plugins mysql sscanf
I Этап:
1. Устанавливаем Denewer. Запускаем
2. Открываем браузер, набирем в адресную строку "localhost".
3. Выбираем PhpMyAdmin.
4. Создаем БД, я создал с название "server"
5. Создаем таблицу, я создал с названем "users".
6. Создаем несколько полей.
Например:
Название: Name, тип VARCHAR (для строчек всегда используйте такой тип), длина 24
Название: Key, тип VARCHAR, длина 32
Название: Admin, тип INT (целое число)
Название: Level, тип INT
Название: Pos_x, тип Float (число с плавающей точкой (дробь))
Более подробно этот этап можно посмотреть

II Этап:
Добавляем в начало мода следующие строчки:
PHP:
//Подключаем наши инклюды[/size][/size]
#include <a_mysql>
#include <sscanf2>
//Теперь вот такие макросы:
#define SQL_HOST "localhost" // IP адресс БД.
#define SQL_USER "root" // Пользователь БД
#define SQL_DB "server" // Название БД.
#define SQL_PASS "" // Пароль БД.
Теперь функции подключения к БД и отлючения от БД:
PHP:
ConnectMySQL()
{
  mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);
  switch(mysql_ping())
  {
  case 1: print("MySQL : Успешно подключено"), mysql_debug(1);
  case -1: print("MySQL : Ошибка. Нет соединения");
  }
  return 1;
}
DisconnectMySQL()
{
mysql_close();
print("MySQL откючено");
}
Вызываем первую фукцию в OnGameModeInit:
PHP:
ConnectMySQL()
Вторую в OnGameModeExit:
PHP:
DisconnectMySQL()
Для начала нам нужна регистрация:
PHP:
OnPlayerRegister(playerid, password[])
{
new name[24];
GetPlayerName(playerid, name, 24);
format(PlayerInfo[playerid][pKey], 32, "%s", password); //Форматируем пароль.
new query[256];
format(query, sizeof(query), "INSERT INTO `users`(`Name`, `Key`) VALUES ('%s', '%s')",
name, PlayerInfo[playerid][pKey]); //Создаем SQL запрос
mysql_query(query); //Отправляем запрос
return 1;
}
То есть, после вызова этой функции, в нашей таблице, создается новая строка, где заполнется поле Name именем игрока и поле Key паролем игрока, остальные поля мы будем заполнять уже в сохранении аккаунтов.
Функция сохранения аккаунтов:
PHP:
SaveAccount(playerid)
{
new name[24];
GetPlayerName(playerid, name, 24);
new string[256], list[40]; //Создаем строчки, одна для запроса, и для создания запроса
format(string, 256, "UPDATE `users` SET");
/* Начинаем собирать запрос по кусочкам, одним format'ом будет очень неудобно, да и многим надо сохранить очень много данных */
format(list, 60, " `Admin` = '%d',", PlayerInfo[playerid][pLevel]); strcat(string, list);
format(list, 60, " `Level` = '%d',",PlayerInfo[playerid][pAdmin]); strcat(string, list);
format(list, 60, " `Pos_x` = '%d'", PlayerInfo[playerid][pDonateRank]); strcat(string, list);
//Функция strcat объединяет две строчки в одну
format(list, 60, " WHERE `Name`='%s'", name); strcat(string, list); // В ту строку, где значение поля Name равно имени игрока
mysql_query(string); //Отправляем запрос
}
Теперь рассмотрим загрузку данных из БД, тут нам и понадобится sscanf:
PHP:
OnPlayerLogin(playerid)
{
new qwery[256], result[3000], a[24];
GetPlayerName(playerid, a, 24);
format(qwery,256,"SELECT * FROM `users` WHERE `Name` = '%s' LIMIT 1",PlayerInfo[playerid][pName]);
mysql_query(qwery); //Отправляем запрос
mysql_store_result(); //Принимаем результат
mysql_fetch_row_format(result, "|"); //
Расставляем между значиями знак "|". То есть результат будет выглядить примерно так: Nick_Name|password|8|1|5.0000
sscanf(result, "p<|>s[24]s[32]iif",
//С помощь sscanf'а разделяем результат s[число ячеек] - строчка, i - integer (целое число), f - float (дробь).
a,
PlayerInfo[playerid][pKey],
PlayerInfo[playerid][pAdmin],
PlayerInfo[playerid][pLevel],
PlayerInfo[playerid][pPos_x],
);
mysql_free_result(); //Отчищаем результат
}
Вот собственно и все, торопился, если что-то неправильно написал, поправьте.
Для написания урока использовался материал: SA-MP.COM и Pa***.ru (не реклама).
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу