Wiz Khalifa
Компетентный
Здравствуйте, скриптеры SA-MP. Сегодня для молодых скриптеров покажу, как осуществить перевод сервера из файлов в базу данных MySQL. Вообще что такое MySQL?
MySQL — Система Управления Базами Данных, сокращённо (СУБД). СУБД используется как сервер, обращаются к нему через программку phpMyAdmin. MySQL поддерживает многочисленные типов таблиц, по этому и ценится. Так же базы данных на много быстрее всяких там файлов, которые хранят в себе различную информацию, в данном случае будем переводить аккаунты в базу для SA-MP.
Ну, теперь начнём применять базу данных. Для начала нам конечно же понадобится Apache сервер , плагин и инклуд Mysql.
Устанавливаем Apache, и на рабочем столе увидите 3 ярлыка. Start, Stop, Restart.[/CENTER]
http://sampru.ru/292-denwer.html (НЕ РЕКЛАМА)
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
(НЕ РЕКЛАМА)Устанавливаем Apache, и на рабочем столе увидите 3 ярлыка. Start, Stop, Restart.
Запускаем Денвер, щёлкаем по ярлыку Start Denwer. Если денвер правильно установлен, то он запуститься. Далее идём в свой любимый браузер Firefox, Opera, Google Chroome в адресной строке набираем localhost в окне появится не большой списочек программ, нам нужна PhpMyAdmin. Мы зашли в основную программу, где создают базы и таблицы. Нам необходимо создать новую базу. Пишем любое название в поле и нажимаем создать. База готова, теперь нужно ей присвоить пользователя, нажимаем на строчку Привилегии, находим пользователя «root“ убираем пароль, и выбираем для этого пользователя базу данных которая нам необходима.
Теперь в своей базе нам нужно создать таблицу вот такого вида.
userid - ид игрока
username - ник
password — пароль
С базой мы закончили, переходим непосредственно к моду.
Ставим плагин, Windows mysql.dll, Linux mysql.so
Добавляем инклуд a_mysql.inc
В начале вставляем:
Запускаем Денвер, щёлкаем по ярлыку Start Denwer. Если денвер правильно установлен, то он запуститься. Далее идём в свой любимый браузер Firefox, Opera, Google Chroome в адресной строке набираем localhost в окне появится не большой списочек программ, нам нужна PhpMyAdmin. Мы зашли в основную программу, где создают базы и таблицы. Нам необходимо создать новую базу. Пишем любое название в поле и нажимаем создать. База готова, теперь нужно ей присвоить пользователя, нажимаем на строчку Привилегии, находим пользователя «root“ убираем пароль, и выбираем для этого пользователя базу данных которая нам необходима.
Теперь в своей базе нам нужно создать таблицу вот такого вида.
userid - ид игрока
username - ник
password — пароль
С базой мы закончили, переходим непосредственно к моду.
Ставим плагин, Windows mysql.dll, Linux mysql.so
Добавляем инклуд a_mysql.inc
В начале вставляем:
PHP:
#define SQL_HOST "localhost"//сам хост
#define SQL_USER "root"//пользователь, которого мы задавали в базе.
#define SQL_PASS ""//пароль мы убрали у пользователя, без него полегче.
#define SQL_DB "Ваше Название"//Ваше название базы
Подключаемся к базе: Вставляем этот кусок кода в самый конец
PHP:
forward ConnectMySQL();
public ConnectMySQL()
{
mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS))//подключаемся
if(mysql_ping() == 1)//проверка подключились ли к базе
{
mysql_debug(1);
printf("[MYSQL]: Подключение к `%s` выполнено!", SQL_DB);
}
else
{
printf("[MYSQL]: [ERROR]: Подключение к `%s` не выполнено", SQL_DB);
}
return 1;
}
Mysql способна, к чтению(SELECT), к записи(INSERT) и обновлению(UPDATE) данных. К чему это всё я говорю, да к тому, нам же необходимо сделать регистрацию, авторизацию и обновление (сохранение) данных игрока.
Регистрация.
Регистрация.
PHP:
case 2:
{
if (! strlen (inputtext) || strlen (inputtext) 32)
{
return ShowPlayerDialog (playerid,2,1,"Регистрация на Sent_Styles“,"Вы забыли ввесте пароль!nЧто-бы начать играть необходимо зарегестрироваться.nПожалуйста введите пароль ниже…“,"Далее“,"»);
}
format (qwery,512,"INSERT INTO `users` (`name`,`pass`) VALUES ('%s','%s') ", PlayerInfo[playerid][pName], inputtext);
mysql_query (qwery);
//Дальнейшие действия регистрации
mysql_real_escape_string (inputtext, PlayerInfo[playerid][pPass]);
return 1;
}
Авторизация.
PHP:
case 1:
{
BaseGet("pass",PlayerInfo[playerid][pPass]);//Запрос для получения пароля из бд ,в переменную .
if(!strlen(inputtext)){ShowPlayerDialog(playerid,1,1,"Авторизация на Sent_Styles","Вы забыли ввести пароль.nЧто-бы начать играть необходимо авторизоваться.nПожалуйста введите пароль ниже...","Далее","");}
if(strcmp(PlayerInfo[playerid][pPass],inputtext, true) == 0)
{
//Действия при правильном вводе пароля
return 1;
}
else ShowPlayerDialog(playerid,1,1,"Авторизация на Sent_Styles","Вы не правильно ввели пароль.nЧто-бы начать играть необходимо авторизоваться.nПожалуйста введите пароль ниже...","Далее","");
return 1;
}
Обновление (Сохранение) Данных.
PHP:
public OnPlayerDisconnect(playerid, reason)
{
BaseSetInt("users","level",PlayerInfo[playerid][pLevel],"Name",PlayerInfo[playerid][pName]);
/*
format(query,128,"UPDATE `users` SET `level` = '%d' WHERE `Name` = '%s'",PlayerInfo[playerid][pLevel],PlayerInfo[playerid][pName]);
mysql_query(query);
*/
//Дальнейшие действия
return 1;
}
PHP:
BaseSetInt(base[],fields[],perms,opredelitel[],name[])
{
new query[256];
format(query,512,"UPDATE `%s` SET `%s` = '%d' WHERE `%s` = '%s'",base,fields,perms,opredelitel,name);
mysql_query(query);
}
/*==============================================================================*/
BaseGet(fields[],perms[])
{
new fetch[128];
mysql_fetch_field_row(fetch,fields);
strmid(perms, fetch, 0, strlen(fetch), 255);
}
/*==============================================================================*/
BaseGetInt(fieldi[],&permi)
{
new fetch[128];
mysql_fetch_field_row(fetch,fieldi);
permi = strval(fetch);
}
/*==============================================================================*/
BaseGetFloat(fieldf[],&Float:permf)
{
new fetch[256];
mysql_fetch_field_row(fetch,fieldf);
permf = floatstr(fetch);
}
/*==============================================================================*/
BaseSetFloat(base[],fields[],Float:perms,opredelitel[],name[])
{
new query[128];
format(query,sizeof(query),"UPDATE `%s` SET `%s` = '%f' WHERE `%s` = '%s'",base,fields,perms,opredelitel,name);
mysql_query(query);
}
BaseSet(base[],fields[],perms[],opredelitel[],name[])
{
mysql_real_escape_string(perms,perms);
new query[512];
format(query,512,"UPDATE `%s` SET `%s` = '%s' WHERE `%s` = '%s'",base,fields,perms,opredelitel,name);
mysql_query(query);
}
Всё! Мы перенесли сохранение данных игрока из файлов в базу данных Mysql, урок перевод сервера на MySQL закончен.
