Zzzerl
Нуль
- Регистрация
- 29 Сен 2017
- Сообщения
- 8
- Лучшие ответы
- 0
- Репутация
- 9
Что включает в себя данный мануал?
Регистрация:
1. Пароль
2. Повторение пароля
3. Почта - проверка занята ли почта другим игроком
4.Выбор пола
5. Спавн игрока
Авторизация:
1. Пароль
2. Спавн игрока
И так начнем.
Подключаем библиотеку MySQL
ко всем Include
Чтобы не искать строчку для логина, пароля, базы
создадим макрос
Создадим переменные
В public OnGameModeInit()
Чтобы вывести статус подключения, вставляем такой код в main{}
В public OnGameModeExit()
В public OnDialogResponse
Теперь создадим нужные Stock's и Public's
В public OnPlayerRequestClass
В public OnPlayerSpawn
В public OnPlayerConnect
В public OnPlayerDisconnect
Сама база
Как использовать UpdatePlayerData
UpdatePlayerData(playerid,field[],data) - playerid понятно, field - имя столбца в базе, data - переменная
Пример:
UpdatePlayerData(playerid,"Money",pData[playerid][pMoney])
Если забыл добавить какую то строчку, прошу написать об этом
Регистрация:
1. Пароль
2. Повторение пароля
3. Почта - проверка занята ли почта другим игроком
4.Выбор пола
5. Спавн игрока
Авторизация:
1. Пароль
2. Спавн игрока
И так начнем.
Подключаем библиотеку MySQL
ко всем Include
PHP:
#include <a_mysql>
создадим макрос
PHP:
#define HOST "HOST"
#define USER "USER"
#define PASS "PASS"
#define DB "DATABASE"
#define MAXLOGINA 3 //количество попыток входа в аккаунт
forward CheckUser(playerid);
forward OnPlayerJoin(playerid);
Создадим переменные
PHP:
enum PDATA
{
pId,//ID игрока в базе
pName[MAX_PLAYER_NAME], //Ник игрока
pPassword[32], //Пароль игрока
pEmail[64], //Почта игрока
pSex //Пол игрока
}
enum PTEMP
{
bool:pJoined, //Игрока зашел
bool:pLogined, //Игрок авторизовался
pLoginAttempt //Попытки входа
}
//Диалоги
enum
{
dLogin, //Авторизация
dRegister, //Рег пароль
dRegister1, //Рег повтор пароля
dRegister2, //Рег Почта
dRegister3 //Рег Пол
}
new mysql;
new pData[MAX_PLAYERS][PDATA];
new pTemp[MAX_PLAYERS][PTEMP];
new sdialog[193];//Массив для работы с диалогами регистрации\авторизации
PHP:
mysql = mysql_connect(HOST, USER, DB, PASS); //Подключение к базе
PHP:
if(mysql_errno())
print(" Подключение к базе не установлено");
else
{
print(" Подключение установлено");
mysql_query(1,"SET NAMES cp1251");
}
PHP:
mysql_close(mysql);//закрываем соединение
PHP:
switch(dialogid)
{
case dRegister:
{
if(!response)
{
SendClientMessage(playerid,0xFFFFFFFF,"Введите /q чтобы выйти");
Kick(playerid);
}
else if(!strlen(inputtext))
{
SendClientMessage(playerid,0xAFAFAFAA,"Вы не ввели пароль");
format(sdialog,sizeof(sdialog),"{FFFFFF}Добро пожаловать на сервер {20997c}Top Servak{FFFFFF}.\nВаш логин: {4981b3}%s{FFFFFF}\n\nДанный аккаунт {4ac24a}свободен{FFFFFF}.\nЧтобы зарегистрироваться введите пароль:",pData[playerid][pName]);
ShowPlayerDialog(playerid, dRegister, 1, "Регистрация", sdialog, "Далее", "Выйти");
}
else
{
if(strfind(inputtext,"|") != -1)
{
SendClientMessage(playerid,0xAFAFAFAA,"У вас в пароле присутствуют запрещенные символы");
format(sdialog,sizeof(sdialog),"{FFFFFF}Добро пожаловать на сервер {20997c}Top Servak{FFFFFF}.\nВаш логин: {4981b3}%s{FFFFFF}\n\nДанный аккаунт {4ac24a}свободен{FFFFFF}.\nЧтобы зарегистрироваться введите пароль:",pData[playerid][pName]);
ShowPlayerDialog(playerid, dRegister, 1, "Регистрация", sdialog, "Далее", "Выйти");
}
if(strlen(inputtext) <6 || strlen(inputtext) > 32)
{
SendClientMessage(playerid,0xFFFFFFFF,"Длина пароля должна быть от 6-и до 32-х символов");
format(sdialog,sizeof(sdialog),"{FFFFFF}Добро пожаловать на сервер {20997c}Top Servak{FFFFFF}.\nВаш логин: {4981b3}%s{FFFFFF}\n\nДанный аккаунт {4ac24a}свободен{FFFFFF}.\nЧтобы зарегистрироваться введите пароль:",pData[playerid][pName]);
ShowPlayerDialog(playerid, dRegister, 1, "Регистрация", sdialog, "Далее", "Выйти");
}
SetPVarString(playerid,"passvtr",inputtext);
ShowPlayerDialog(playerid,dRegister1,3,"Регистрация","{FFFFFF}Чтобы убедиться что вы не ошиблись при вводе\n\nПовторите ваш пароль:","Далее","Назад");
}
}
case dRegister1:
{
new oldpass[32];
GetPVarString(playerid,"passvtr",oldpass,32);
DeletePVar(playerid,"passvtr");
if(!response)
{
format(sdialog,sizeof(sdialog),"{FFFFFF}Добро пожаловать на сервер {20997c}Amicorum Role Play{FFFFFF}.\nВаш логин: {4981b3}%s{FFFFFF}\n\nДанный аккаунт {4ac24a}свободен{FFFFFF}.\nЧтобы зарегистрироваться введите пароль:",pData[playerid][pName]);
ShowPlayerDialog(playerid, dRegister, 1, "Регистрация", sdialog, "Далее", "Выйти");
}
if(!strcmp(inputtext,oldpass,false) && strlen(inputtext))
{
strcat(pData[playerid][pPassword],inputtext, 32);
ShowPlayerDialog(playerid,dRegister2,1,"{ffffad}Регистрация","{FFFFFF}Введите адрес Вашей электронной почты\nИспользуя его, вы сможете восстановить доступ к аккаунту\nв случае взлома или если забудете пароль\n\nУбедитесь в правильности ввода","Далее","Назад");
}
else
{
SendClientMessage(playerid,0xAFAFAFAA,"Введенные Вами пароли не совпадают");
format(sdialog,sizeof(sdialog),"{FFFFFF}Добро пожаловать на сервер {20997c}Amicorum Role Play{FFFFFF}.\nВаш логин: {4981b3}%s{FFFFFF}\n\nДанный аккаунт {4ac24a}свободен{FFFFFF}.\nЧтобы зарегистрироваться введите пароль:",pData[playerid][pName]);
ShowPlayerDialog(playerid, dRegister, 1, "Регистрация", sdialog, "Далее", "Выйти");
}
}
case dRegister2:
{
if(!response)
{
format(sdialog,sizeof(sdialog),"{FFFFFF}Добро пожаловать на сервер {20997c}Amicorum Role Play{FFFFFF}.\nВаш логин: {4981b3}%s{FFFFFF}\n\nДанный аккаунт {4ac24a}свободен{FFFFFF}.\nЧтобы зарегистрироваться введите пароль:",pData[playerid][pName]);
ShowPlayerDialog(playerid, dRegister, 1, "Регистрация", sdialog, "Далее", "Выйти");
}
if(strfind(inputtext,"|") != -1)
{
SendClientMessage(playerid,0xAFAFAFAA,"У вас в почте присутствуют запрещенные символы");
format(sdialog,sizeof(sdialog),"{FFFFFF}Добро пожаловать на сервер {20997c}Amicorum Role Play{FFFFFF}.\nВаш логин: {4981b3}%s{FFFFFF}\n\nДанный аккаунт {4ac24a}свободен{FFFFFF}.\nЧтобы зарегистрироваться введите пароль:",pData[playerid][pName]);
ShowPlayerDialog(playerid, dRegister, 1, "Регистрация", sdialog, "Далее", "Выйти");
}
else
{
new querys[90];
format(querys,sizeof(querys),"SELECT `Id` FROM `Users` WHERE `Email` = '%s'",inputtext);
mysql_query(mysql, querys);
if(cache_get_row_count(mysql))
{
SendClientMessage(playerid,CGRAY,"Данный eMail уже используется");
format(sdialog,sizeof(sdialog),"{FFFFFF}Добро пожаловать на сервер {20997c}Amicorum Role Play{FFFFFF}.\nВаш логин: {4981b3}%s{FFFFFF}\n\nДанный аккаунт {4ac24a}свободен{FFFFFF}.\nЧтобы зарегистрироваться введите пароль:",pData[playerid][pName]);
ShowPlayerDialog(playerid, dRegister, 1, "Регистрация", sdialog, "Далее", "Выйти");
return 0;
}
strcat(pData[playerid][pEmail],inputtext, 64);
ShowPlayerDialog(playerid,dRegister3,0,"Регистрация","Выберите пол для вашего персонажа.", "Мужской", "Женский");
}
}
case dRegister3:
{
if(response) pData[playerid][pSex] = 1;
else pData[playerid][pSex] = 2;
RegisterPlayer(playerid);
}
case dLogin:
{
if(!response)
{
SendClientMessage(playerid,0xFFFFFFFF,"Введите /q что бы Выйти");
Kick(playerid);
}
else if(!strlen(inputtext))
{
format(sdialog, sizeof(sdialog),"{FFFFFF}Добро пожаловать на сервер{4682b3} Top serva{FFFFFF}.\n\tВаш логин: {4682b3}%s{FFFFFF}\n\nДанный аккаунт {96ffa8}зарегистрирован{ffffff}.\nЧтобы войти введите пароль:",pData[playerid][pName]);
ShowPlayerDialog(playerid, dLogin, 3, "Авторизация", sdialog, "Войти", "Выйти");
}
else
{
if(!strcmp(inputtext,pData[playerid][pPassword],false,MAX_PLAYER_NAME))
{
pTemp[playerid][pLogined] = true;
LoadPlayerData(playerid);
SpawnPlayer(playerid);
}
else
{
pTemp[playerid][pLoginAttempt]++;
if(pTemp[playerid][pLoginAttempt] == MAXLOGINA)
{
SendClientMessage(playerid,0xFF0000AA,"Вы исчерпали лимит попыток ввода пароля, Вы были кикнуты!");
SendClientMessage(playerid,0xFFFFFFFF,"Напишите /q что бы Выйти");
return Kick(playerid);
}
new str[43];
new maxim = MAX_LOGIN_ATTEMPTS-pTemp[playerid][pLoginAttempt];
format(str, 43,"Пароль введен неверно. Осталось попыток: %d",maxim);
SendClientMessage(playerid,0xFF0000AA,str);
format(sdialog, sizeof(sdialog),"{FFFFFF}Добро пожаловать на сервер{4682b3} Top serva{FFFFFF}.\n\tВаш логин: {4682b3}%s{FFFFFF}\n\nДанный аккаунт {96ffa8}зарегистрирован{ffffff}.\nЧтобы войти введите пароль:",pData[playerid][pName]);
ShowPlayerDialog(playerid, dLogin, 3, "Авторизация", sdialog, "Войти", "Выйти");
}
}
}
}
PHP:
stock RegisterPlayer(playerid) //регистрация игрока
{
new query_string[300];
format(query_string, sizeof(query_string),"INSERT INTO `Users` (`Name`,`Password`,`Email`,`Sex`) VALUES ('%s','%s','%s','%d')",pData[playerid][pName],pData[playerid][pPassword],pData[playerid][pEmail],pData[playerid][pSex]);
mysql_query(mysql, query_string, false);
SendClientMessage(playerid,0x33AA33AA,"Аккаунт зарегистрирован");
pTemp[playerid][pLogined] = true;
LoadPlayerData(playerid); //загрузка данных из базы
SpawnPlayer(playerid);
return 1;
}
stock LoadPlayerData(playerid) //загрузка данных игрока из базы
{
new query[61]; format(query, 61, "SELECT * FROM `Users` WHERE Name = '%s'",pData[playerid][pName]);
mysql_query(mysql, query);
if(cache_get_row_count(mysql))
{
pData[playerid][pId] = cache_get_field_content_int(0, "Id", mysql);
cache_get_field_content(0, "Name", pData[playerid][pName], mysql, 24);
cache_get_field_content(0, "Email", pData[playerid][pEmail], mysql, 64);
pData[playerid][pSex] = cache_get_field_content_int(0, "Sex", mysql);
}
return 1;
}
stock UpdatePlayerData(playerid,field[],data) //обновление данных игрока
{
new query[90];
format(query,sizeof(query),"UPDATE `Users` SET `%s` = '%d' WHERE `Name` = '%s'",field,data,pData[playerid][pName]);
mysql_query(mysql, query);
return 1;
}
stock PlayerDef(playerid) //Обнуление данных игрока при выходе
{
pData[playerid][pId] = -1;
strdel(pData[playerid][pName], 0, 24);
strdel(pData[playerid][pPassword], 0, 32);
strdel(pData[playerid][pEmail], 0, 64);
pData[playerid][pSex] = 0;
}
public OnPlayerJoin(playerid) //Проверка есть ли в базе игрок
{
TogglePlayerControllable(playerid,0);
SpawnPlayer(playerid);
SetPlayerVirtualWorld(playerid,playerid+1);
SetPlayerPos(playerid, -1532.9323,688.2255,133.0514);
GetPlayerName(playerid, pData[playerid][pName], MAX_PLAYER_NAME);
new smysql[72];
mysql_format(mysql, smysql, sizeof smysql, "SELECT `Id`,`Password` FROM `Users` WHERE `Name` = '%s'", pData[playerid][pName]);
mysql_tquery(mysql, smysql, "CheckUser", "d", playerid);
}
public CheckUser(playerid)
{
if(cache_get_row_count(mysql))
{
new id = cache_get_row_int(0, 0, mysql);
cache_get_row(0, 1, pData[playerid][pPassword], mysql, 32);
format(sdialog,190,"{FFFFFF}Добро пожаловать на сервер{4682b3} Amicorum Role Play{FFFFFF}.\n\tВаш логин: {4682b3}%s{FFFFFF}\n\nДанный аккаунт {96ffa8}зарегистрирован{ffffff}.\nЧтобы войти введите пароль:",pData[playerid][pName]);
ShowPlayerDialog(playerid, dLogin, 3, "Авторизация", sdialog, "Войти", "Выйти");
}
else
{
format(sdialog,193,"{FFFFFF}Добро пожаловать на сервер {20997c}Amicorum Role Play{FFFFFF}.\nВаш логин: {4981b3}%s{FFFFFF}\n\nДанный аккаунт {4ac24a}свободен{FFFFFF}.\nЧтобы зарегистрироваться введите пароль:",pData[playerid][pName]);
ShowPlayerDialog(playerid, dRegister, 1, "Регистрация", sdialog, "Далее", "Выйти");
}
}
PHP:
pTemp[playerid][pJoined] = true;
SetTimerEx("OnPlayerJoin",10,false,"i",playerid);
return 1;
PHP:
TogglePlayerControllable(playerid,0);
if(!pTemp[playerid][pLogined] || !pTemp[playerid][pJoined]) return 1;
SetPlayerVirtualWorld(playerid,0);
SetPlayerInterior(playerid,0);
SetPlayerPos(playerid,1208.2224,-1747.0385,13.5933);
SetPlayerFacingAngle(playerid, 87.0252);
PHP:
pTemp[playerid][pLogined] = false;
PlayerDef(playerid);
PHP:
pTemp[playerid][pLogined] = false;
pTemp[playerid][pJoined] = false;
PlayerDef(playerid);
Как использовать UpdatePlayerData
UpdatePlayerData(playerid,field[],data) - playerid понятно, field - имя столбца в базе, data - переменная
Пример:
UpdatePlayerData(playerid,"Money",pData[playerid][pMoney])
Если забыл добавить какую то строчку, прошу написать об этом