- Автор темы
- #1
Здравствуйте,эта статья - посвящение,тем кто уже освоил MxINI или Dini,тем кто гонится за оптимизацией,скоростью или просто-же за знаниями в том или ином языке.
MySQL - свободная система управления базами данных (СУБД). MySQL является решением для малых и средних приложений.Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты.
Теперь к делу.
MySQL - имеет три основные действия ,то есть Чтение,Запись,Обновление(перезапись данных).
Пример чтения данных из таблицы :
Что-же теперь делать нам с полученными данным,а получили-ли мы их спросите вы?
Теперь мы воспользуемся функцией:
Теперь рассмотрим функции записи данных в БД.Не удивляетесь,что информации так мало,тк всё еще впереди ...
Через формат мы вставляет-записываем данные в таблицу "playerinfo",точнее если на языке Мускула ,то в таблицу `playerinfo`,далее мы записываем данные в определенные ячейки с определенными значениями - VALUES.Ячейки БД мы тоже пишем в таких-же скобка,что и сама таблица:
Теперь можно рассмотреть функцию обновления данных в БД:
Здесь мы обновляем уровень игрока и количество денег в БД с именем игрока - X ,которых может быть не больше одного.
Как-бы вступление закончилось окунемся по-глубже.
Что нам нужно для содержания сервера у себя на компьютере ?
Для начало нам нужен MySQL сервер,PhpMyAdmin.Кому как удобно,можете скачать Denwer или ,что душе угодно.
Далее нам нужны будут Mysql плагин и инклуд,так-же mysql клиент для SAMP сервера.
Далее перейдем к Pawno,нам нужно как-то же подключаться к БД.
Для этого используем данные от MYSQL от вашего MYSQL-сервера.
Далее мы попробуем создать простую регистрацию с random-скинами.
Так-же не забывайте писать после запроса:
MySQL - свободная система управления базами данных (СУБД). MySQL является решением для малых и средних приложений.Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты.
Теперь к делу.
MySQL - имеет три основные действия ,то есть Чтение,Запись,Обновление(перезапись данных).
Пример чтения данных из таблицы :
Пример:
format(qwery,256,"SELECT * FROM `playerinfo` WHERE `name` = '%s' LIMIT 1",PlayerInfo[playerid][pName]);
mysql_query(qwery);//Посылает запрос к самой БД,точнее мы проверяем есть ли такой пользователь с именем X.
mysql_store_result();//Эта функция пере конвертирует данные MYSQL в язык pawno,что-то в этом роде,то есть подготавливает к работе
Что-же теперь делать нам с полученными данным,а получили-ли мы их спросите вы?
Теперь мы воспользуемся функцией:
Пример:
GetPlayerName(playerid,PlayerInfo[playerid][pName],24);
format(qwery,256,"SELECT * FROM `playerinfo` WHERE `name` = '%s' LIMIT 1",PlayerInfo[playerid][pName]);
mysql_query(qwery);
mysql_store_result();
if(!mysql_fetch_row_format(qwery))
{
ShowPlayerDialog(playerid,1,1,"Pawn-Wiki.Ru"","Регистрация на сервера SaMP Pawn-Wiki.Ru","Далее","");
//Показываем диалог регистрации,если такого имени нету в БД
}
else
{
//показываем окно авторизации или чего-либо другого,если это имя найдено в бд.
}
Теперь рассмотрим функции записи данных в БД.Не удивляетесь,что информации так мало,тк всё еще впереди ...
Пример:
format(qwery,256,"INSERT INTO `playerinfo` (`name`,`password`,`sex`,`skin`,`money`,`lvl`,`adminlvl`,`team`,`rank`) VALUES ('%s','%s','%d','%d','%d','%d',0,0,0)",PlayerInfo[playerid][pName],PlayerInfo[
playerid][pPass],PlayerInfo[playerid][pSex],PlayerInfo[playerid][pSkin],PlayerInfo[playerid][pMoney]
,PlayerInfo[playerid][pLevel]);
mysql_query(qwery);
Через формат мы вставляет-записываем данные в таблицу "playerinfo",точнее если на языке Мускула ,то в таблицу `playerinfo`,далее мы записываем данные в определенные ячейки с определенными значениями - VALUES.Ячейки БД мы тоже пишем в таких-же скобка,что и сама таблица:
Теперь можно рассмотреть функцию обновления данных в БД:
Пример:
format(qwery,256,"UPDATE `playerinfo` SET `lvl`='%d',`money`='%d' WHERE `name`='%s' LIMIT 1",PlayerInfo[playerid][pLevel],PlayerInfo[playerid][pMoney],PlayerInfo[playerid][pName]);
mysql_query(qwery);
Здесь мы обновляем уровень игрока и количество денег в БД с именем игрока - X ,которых может быть не больше одного.
Как-бы вступление закончилось окунемся по-глубже.
Что нам нужно для содержания сервера у себя на компьютере ?
Для начало нам нужен MySQL сервер,PhpMyAdmin.Кому как удобно,можете скачать Denwer или ,что душе угодно.
Далее нам нужны будут Mysql плагин и инклуд,так-же mysql клиент для SAMP сервера.
Далее перейдем к Pawno,нам нужно как-то же подключаться к БД.
Для этого используем данные от MYSQL от вашего MYSQL-сервера.
Пример:
#include <a_samp>
#include <a_mysql>
#include <sscanf2>
#define SQL_HOST "localhost"
#define SQL_USER "sent"
#define SQL_PASS "sent"
#define SQL_DB "sent"
#pragma tabsize 0
new qwery[512];
enum pInfo
{
pName[24],
pPass[18],
pSex,
pSkin,
pMoney,
pLevel,
pAdminLevel,
pTeam,
pRank,
pNumber
};
new PlayerInfo[MAX_PLAYERS][pInfo],pLogged[MAX_PLAYERS];
new RandomFemaleSkins[][] =
{
{9},{10},{11},{38},{39},{40},{54},{55},{56},{63},{64},{75},{76},{77},
{85},{87},{88},{90},{93},{131},{130},{138},{139},{141},{145},{148},{149},
{152},{157},{169},{172},{178},{190},{192},{193},{194},{199},{198},{201},
{207},{211},{215},{219},{225},{226},{233},{237},{244},{246},{251},{257},
{263}
};
new RandomMaleSkins[][] =
{
{7},{18},{19},{20},{21},{23},{27},{29},{30},{37},{44},{49},{52},{57},
{60},{62},{66},{70},{73},{78},{82},{94},{96},{100},{111},{127},{132},
{135},{137},{142},{144},{147},{154},{158},{164},{167},{170},{177},{181},
{184},{185},{188},{200},{203},{212},{217},{223},{228},{230},{236},{240},
{247},{248},{252},{254},{259},{260},{264}
};
public OnGameModeInit()
{
mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);
if(mysql_ping() == 1)
{
mysql_debug(1);
printf("[MYSQL]: подключение успешно", SQL_DB);
}
else printf("[MYSQL]: [ERROR]: не удалось подключиться к бд", SQL_DB);
for(new i = 0;i < 300;i++){AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);}
return 1;
}
public OnGameModeExit()
{
mysql_close();
return 1;
}
Выделить и скопировать код
Далее мы попробуем создать простую регистрацию с random-скинами.
Пример:
public OnPlayerConnect(playerid)
{
pLogged[playerid] = 0;
PlayerInfo[playerid][pSex] = 0;
PlayerInfo[playerid][pSkin] = 200;
PlayerInfo[playerid][pMoney] = 2500;
PlayerInfo[playerid][pLevel] = 1;
GetPlayerName(playerid,PlayerInfo[playerid][pName],24);
format(qwery,256,"SELECT * FROM `playerinfo` WHERE `name` = '%s' LIMIT 1",PlayerInfo[playerid][pName]);
mysql_query(qwery);
mysql_store_result();
if(!mysql_fetch_row_format(qwery))
{
ShowPlayerDialog(playerid,1,1,"Регистрация на \"Pawn-Wiki.Ru\"","Здравствуйте,добро пожаловать на \"Pawn-Wiki.Ru\"!\nЧто-бы начать играть вам нужно:\n1.Зарегестрироваться;\n2.Заполнить анкету;\n3.Пройти обучение.\nЧто-бы зарегестрироваться,\nпожалуйте введите пароль ниже!\n\t\tPawn-Wiki.Ru","Далее","");
}
else
{
ShowPlayerDialog(playerid,4,0,"Последние новости","Новости сервера:","Далее","");
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1){
if(!strlen(inputtext)) ShowPlayerDialog(playerid,1,1,"Регистрация на \"Pawn-Wiki.Ru\"","Вы не ввели пароль!\nЧто-бы начать играть вам нужно:\n1.Зарегестрироваться;\n2.Заполнить анкету;\n3.Пройти обучение.\nЧто-бы зарегестрироваться,\nпожалуйте введите пароль ниже!\n\t\tPawn-Wiki.Ru","Далее","");
else {mysql_real_escape_string(inputtext,PlayerInfo[playerid][pPass]);ShowPlayerDialog(playerid,2,0,"Выбор пола","Пожалуйста выберите пол,\nчто-бы продолжить регистрацию.\nВы мужчина или женщина?","Мужчина","Женщина");}}
if(dialogid == 2){
new SeX[64];PlayerInfo[playerid][pMoney] = 2500; PlayerInfo[playerid][pLevel] = 1;GivePlayerMoney(playerid,PlayerInfo[playerid][pMoney]);SetPlayerScore(playerid,PlayerInfo[playerid][pLevel]);
if(response == 1){new RandomMale = random(sizeof(RandomMaleSkins));PlayerInfo[playerid][pSex] = 1;PlayerInfo[playerid][pSkin] = RandomMaleSkins[RandomMale][0];SetSpawnInfo(playerid,0,PlayerInfo[playerid][pSkin],2233.7,-1165.5,1030,180,0,0,0,0,0,0);
SetPlayerInterior(playerid,15);SpawnPlayer(playerid);}
else{new RandomFemale = random(sizeof(RandomFemaleSkins));PlayerInfo[playerid][pSex] = 2;SetPlayerSkin(playerid, RandomFemaleSkins[RandomFemale][0]);PlayerInfo[playerid][pSkin] = GetPlayerSkin(playerid);SetSpawnInfo(playerid,0,PlayerInfo[playerid][pSkin],2245,-1164,1030,0,0,0,0,0,0,0);SetPlayerInterior(playerid,15);
SpawnPlayer(playerid);}
if(PlayerInfo[playerid][pSex] == 1){SeX="Мужчина";}
if(PlayerInfo[playerid][pSex] == 2){SeX="Женщина";}
format(qwery,256,"Вы прошли все этапы регистрации!\nСпасибо за регистрацию.\nПриятной игры.\nВаше имя на сервере:%s,\nВаш пароль:%s,\nВаш пол:%s,\nВаша наличность:%d",PlayerInfo[playerid][pName],PlayerInfo[playerid][pPass],SeX,PlayerInfo[playerid][
pMoney]);
ShowPlayerDialog(playerid,3,0,"Конец регистрации",qwery,"Завершить","");
}
if(dialogid == 3)
{
pLogged[playerid] = 1;
format(qwery,256,"INSERT INTO `playerinfo` (`name`,`password`,`sex`,`skin`,`money`,`lvl`,`adminlvl`,`team`,`rank`) VALUES ('%s','%s','%d','%d','%d','%d',0,0,0)",PlayerInfo[playerid][pName],PlayerInfo[
playerid][pPass],PlayerInfo[playerid][pSex],PlayerInfo[playerid][pSkin],PlayerInfo[playerid][pMoney]
,PlayerInfo[playerid][pLevel]);
mysql_query(qwery);
}
if(dialogid == 4)
{
BaseGet("password",PlayerInfo[playerid][pPass]);//Берем пароль из БД
BaseGetInt("sex",PlayerInfo[playerid][pSex]);//Берем пол из БД
BaseGetInt("skin",PlayerInfo[playerid][pSkin]);//Берем скин из БД
BaseGetInt("money",PlayerInfo[playerid][pMoney]);//Берем наличку из БД
BaseGetInt("lvl",PlayerInfo[playerid][pLevel]);//Берем уровень из БД
BaseGetInt("adminlvl",PlayerInfo[playerid][pAdminLevel]);//Берем адми уровень из БД
BaseGetInt("team",PlayerInfo[playerid][pTeam]);//Берем фракцию из БД
BaseGetInt("rank",PlayerInfo[playerid][pRank]);//Берем ранк из БД
new SeX[64];
if(PlayerInfo[playerid][pSex] == 1){SeX="Мужчина";}
if(PlayerInfo[playerid][pSex] == 2){SeX="Женщина";}
format(qwery,512,"\tСтатистика аккаунта\n\tКоличество лет в штате:%d\n\tВаша наличность:%d\n\tВаш пол:%s\n\tВаша работа:в разработке\n\tВы состоите в:в разработке\nЗдравствуйте,добро пожаловать на \"Pawn-Wiki.Ru\"!\nЭто имя уже уже зарегестрированно,\nвозможно вы у нас уже играете,или это имя занято.\nПожалуйста введите паароль ниже,\nесли вы у нас играете!\nЕсли вы у нас впервые,то смените имя на другое и\nпройдите регистрацию!\n\t\tPawn-Wiki.Ru",PlayerInfo[playerid][pLevel],
PlayerInfo[playerid][pMoney],
SeX);
ShowPlayerDialog(playerid,5,1,"Аторизаация на \"Pawn-Wiki.Ru\"",qwery,"Далее","");
}
if(dialogid == 5)
{
if(!strcmp(inputtext, PlayerInfo[playerid][pPass], false))
{
if(PlayerInfo[playerid][pSex] == 1 && PlayerInfo[playerid][pTeam] == 0) {SetSpawnInfo(playerid,0,PlayerInfo[playerid][pSkin],2233.7,-1165.5,1030,0,0,0,0,0,0,0);SetPlayerInterior(playerid,15);SpawnPlayer(playerid);
}
if(PlayerInfo[playerid][pSex] == 2 && PlayerInfo[playerid][pTeam] == 0) {SetSpawnInfo(playerid,0,PlayerInfo[playerid][pSkin],2245,-1164,1030,0,0,0,0,0,0,0);SetPlayerInterior(playerid,15);SpawnPlayer(playerid);
}
SendClientMessage(playerid, 0xFFFFFFFF, "Вы успешно авторизовались");
SetPlayerScore(playerid, PlayerInfo[playerid][pLevel]);
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
pLogged[playerid] = 1;
}
else ShowPlayerDialog(playerid,4,1,"Аторизаация на \"Pawn-Wiki.Ru\"","Вы не правильно ввели пароль!\nПожалуйста введите его сново!","Далее","");
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
format(qwery,256,"UPDATE `playerinfo` SET `lvl`='%d',`money`='%d' WHERE `name`='%s' LIMIT 1",PlayerInfo[playerid][pLevel],PlayerInfo[playerid][pMoney],PlayerInfo[playerid][pName]);
mysql_query(qwery);
mysql_free_result();
//При выходе игрока с сервера мы сохраняем его уровень и количество денег на сервере,тк скин и пол мы сохранили при регистрации,зачем-же посылать лишние запросы?
return 1;
}
//Ниже функции которые облегчат нам жизнь и работу с БД
BaseGet(fields[],perms[])//Функция взятия String-а из бд
{
new fetch[256];
mysql_fetch_field_row(fetch,fields);
strmid(perms, fetch, 0, strlen(fetch), 255);
}
BaseGetInt(fieldi[],&permi)//Функция взятия цифрового значения из бд
{
new fetch[256];
mysql_fetch_field_row(fetch,fieldi);
permi = strval(fetch);
}
BaseGetFloat(fieldf[],&Float:permf)//Функция взятия Float-а из бд
{
new fetch[256];
mysql_fetch_field_row(fetch,fieldf);
permf = floatstr(fetch);
}
BaseSet(base[],fields[],perms[],opredelitel[],name[])//Функция записи String-а в бд
{
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);
}
BaseSetFloat(base[],fields[],Float:perms,opredelitel[],name[])//Функция записи Float-а в бд
{
new query[512];
format(query,512,"UPDATE `%s` SET `%s` = '%f' WHERE `%s` = '%s'",base,fields,perms,opredelitel,name);
mysql_query(query);
}
BaseSetInt(base[],fields[],perms,opredelitel[],name[])//Функция записи цифрового значения в бд,но она мне не понадобилась пока,что
{
new query[512];
format(query,512,"UPDATE `%s` SET `%s` = '%d' WHERE `%s` = '%s'",base,fields,perms,opredelitel,name);
mysql_query(query);
}
Так-же не забывайте писать после запроса:
НЕ ЗАБУДЬ ЗАРАЗА:
mysql_free_result();//очистка запросов в бд