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
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 откючено");
}
PHP:
ConnectMySQL()
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;
}
Функция сохранения аккаунтов:
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); //Отправляем запрос
}
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 (не реклама).
Последнее редактирование модератором:
