Здравствуйте дорогие друзья! Сегодня я хотел бы с вами поделиться с системой Регистрации/Авторизации на MySQL R34 Многие друзья просили помочь с данной темой,но я решил выложить полноценную регистрацию/авторизацию для всех,чтобы вам было понятней я всё описал!
И так приступим:
Подключаем библиотеку MySQL это можно сделать кодом ниже:
Код
#include <a_mysql>
Для более удобного настраивания подключения/имя базы мы макросим функции
Код
#define mysql_host ""//host #define mysql_user ""//user #define mysql_db ""//database #define mysql_pass ""//password #define Baza "Accountss"//Название базы
Массивы,переменные:
Код
new MYSQL_ARG;//Аргумент подключения new asd[256];//Ячейка для работы с мускулом
enum Info { pName[24], pPassword[15], pLevel, Float:pKaord, pSkype[20], pLogged }; new PlayerInfo[MAX_PLAYERS][Info];
В public OnGameModeInit()
Код
MYSQL_ARG = mysql_connect(mysql_host, mysql_user, mysql_db, mysql_pass);//Подключаем мускул(плагин) к серверу
new stats[100]; mysql_stat(stats);//Возвращает текущий статус сервера (время работы,количество потоков,запросов,открытых таблиц и количество запросов в секунду) print(stats);
В public OnPlayerCommandText(playerid, cmdtext[]) Для проверки
В public OnDialogResponse Сам диалог регистрации и авторизации
У кого dialogid под свичём то используем так:
Код
case 1: //Регистрация { if(!response) return Kick(playerid);//Кикаем игрока т.к он нажал Кик if(!strlen(inputtext)) { ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация","Здравствуйте вы не зарегистрированы\nВведите свой пароль в окошечко","Войти","Кик"); SendClientMessage(playerid, -1, "Вы не чего не ввели"); return 0; } if(strlen(inputtext) < 5 || strlen(inputtext) > 15)//Проверка на вводные данные { ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация","Здравствуйте вы не зарегистрированы\nВведите свой пароль в окошечко","Войти","Кик"); SendClientMessage(playerid, -1, "Ваш пароль должен быть от 5 до 15 символов"); return 0; } format(PlayerInfo[playerid][pPassword], 15,"%s", inputtext);//Записываем пароль в переменную Reg(playerid);//Регистрируем нового игрока в базе(он создал для того,чтобы было удобней) SendClientMessage(playerid, -1, "Вы зарегистрировались"); PlayerInfo[playerid][pLogged] = 1;//Ставим значение на 1 т.к зашли SetPlayerPos(playerid,-1421.8978,-291.1276,14.1484);//Посылаем игрок на координаты } // case 2: //Авторизация { if(!response) return Kick(playerid);//Кикаем игрока т.к он нажал Кик if(!strlen(inputtext)) { ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, "Авторизация","Здравствуйте\nВы здесь уже зарегестрированы\nВведите свой пароль, для входа в игру","Войти","Кик"); SendClientMessage(playerid, -1, "Вы не чего не ввели"); return 0; } mysql_format(MYSQL_ARG, asd,90, "SELECT * FROM `"Baza"` WHERE `Name` = '%e' AND `Password` = '%e'", PlayerInfo[playerid][pName], inputtext);//Узнаём логин игрока,и введённый пароль mysql_function_query(MYSQL_ARG, asd, true, "Avtoriz","ds", playerid, inputtext); //Отправляем логин игрока и введённый пароль }
У кого проверкой if
Код
if(dialogid == 1) { if(!response) return Kick(playerid);//Кикаем игрока т.к он нажал Кик if(!strlen(inputtext)) { ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация","Здравствуйте вы не зарегистрированы\nВведите свой пароль в окошечко","Войти","Кик"); SendClientMessage(playerid, -1, "Вы не чего не ввели"); return 0; } if(strlen(inputtext) < 5 || strlen(inputtext) > 15)//Проверка на вводные данные { ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация","Здравствуйте вы не зарегистрированы\nВведите свой пароль в окошечко","Войти","Кик"); SendClientMessage(playerid, -1, "Ваш пароль должен быть от 5 до 15 символов"); return 0; } format(PlayerInfo[playerid][pPassword], 15,"%s", inputtext);//Записываем пароль в переменную Reg(playerid);//Регистрируем нового игрока в базе(он создал для того,чтобы было удобней) SendClientMessage(playerid, -1, "Вы зарегистрировались"); PlayerInfo[playerid][pLogged] = 1;//Ставим значение на 1 т.к зашли SetPlayerPos(playerid,-1421.8978,-291.1276,14.1484);//Посылаем игрок на координаты } if(dialogid == 2) { if(!response) return Kick(playerid);//Кикаем игрока т.к он нажал Кик if(!strlen(inputtext)) { ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, "Авторизация","Здравствуйте\nВы здесь уже зарегестрированы\nВведите свой пароль, для входа в игру","Войти","Кик"); SendClientMessage(playerid, -1, "Вы не чего не ввели"); return 0; } mysql_format(MYSQL_ARG, asd,90, "SELECT * FROM `"Baza"` WHERE `Name` = '%e' AND `Password` = '%e'", PlayerInfo[playerid][pName], inputtext);//Узнаём логин игрока,и введённый пароль mysql_function_query(MYSQL_ARG, asd, true, "Avtoriz","ds", playerid, inputtext); //Отправляем логин игрока и введённый пароль }
В public OnPlayerConnect(playerid)
Код
PlayerInfo[playerid][pLogged] = 0;//Проверка на вход PlayerInfo[playerid][pLevel] = 500;//Запишем кол-во левела для нового игрока
GetPlayerName(playerid, PlayerInfo[playerid][pName], 24);//Узнаём ник игрока и записываем в переменную PlayerInfo[playerid][pName] mysql_format(MYSQL_ARG, asd, 90, "SELECT `Name` FROM `"Baza"` WHERE `Name` = '%e'", PlayerInfo[playerid][pName]);//Форматируем строку и записываем логин mysql_function_query(MYSQL_ARG, asd, true, "Start_R_A","d", playerid);//Отправляем запрос и узнаём есть ли в бд ник игрока
В public OnPlayerDisconnect(playerid, reason)
Код
if(PlayerInfo[playerid][pLogged] == 1)//Проверяем подключен ли игрок { Save(playerid);//Сохраним его аккаунт }
В конец мода
Код
forward Start_R_A(playerid); public Start_R_A(playerid)//Тут мы узнаём статус игрока(зарегистрирован или наоборот) { new rows, fields; cache_get_data(rows, fields); if(rows) { ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, "Авторизация","Здравствуйте\nВы здесь уже зарегестрированы\nВведите свой пароль, для входа в игру","Войти","Кик"); } else { ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация","Здравствуйте вы не зарегистрированы\nВведите свой пароль в окошечко","Войти","Кик"); } return 1; }
Код
forward Avtoriz(playerid, password[]); public Avtoriz(playerid, password[])//Тут мы узнаём верные данные он ввёл или нет(Пароль) { new rows, fields; cache_get_data(rows, fields); if(!rows) { ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, "Авторизация","Здравствуйте\nВы здесь уже зарегестрированы\nВведите свой пароль, для входа в игру","Войти","Кик"); SendClientMessage(playerid,-1,"Вы ввели не верный пароль"); return 1; } PlayerInfo[playerid][pLogged] = 1;//Ставим значение на 1 т.к зашли for(new i = 0; i < rows;i++) { Avt(i,playerid);//Тут читаем бд и записываем в переменную(сток создал чтобы вы не запутались и было удобней) } SetPlayerPos(playerid,-1421.8978,-291.1276,14.1484);//Посылаем игрок на координаты SendClientMessage(playerid, -1, "Вы успешно вошли"); return 1; }
Код
stock Avt(i,playerid)//Сток для чтения бд { PlayerInfo[playerid][pLevel] = cache_get_field_content_int(i, "Level", MYSQL_ARG);//Чтение цифрового значение PlayerInfo[playerid][pKaord] = cache_get_field_content_float(i, "Kaord", MYSQL_ARG);//Чтение дробного значения cache_get_field_content(i, "Skype", PlayerInfo[playerid][pSkype], MYSQL_ARG, 20);//Чтение текстового значения //Дальше можно делать аналогично }
Код
stock Reg(playerid)//Сток для создания нового игрока в базе { format(PlayerInfo[playerid][pSkype], 20, "%s", "Qwerty");//Придумаем скайп игроку PlayerInfo[playerid][pKaord] = 190.13122;//Запишем в значение дробь 190.13122 mysql_function_query(MYSQL_ARG, asd, false, "", ""); mysql_format(MYSQL_ARG, asd, sizeof(asd), "INSERT INTO `"Baza"` (`Name`, `Password`,`Level`,`Kaord`,`Skype`) VALUES ('%e', '%e', '%d', '%f', '%e')", PlayerInfo[playerid][pName], PlayerInfo[playerid][pPassword], PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pKaord], PlayerInfo[playerid][pSkype] ); //Запишем в asd логин,пароль,деньги,координат 1,скайп mysql_function_query(MYSQL_ARG, asd, false, "", "");//Отправляем запрос
}
Код
stock Save(playerid)//Сток для сохранения данных { mysql_format(MYSQL_ARG, asd, sizeof(asd),"UPDATE `"Baza"` SET `Password` = '%e', `Level` = '%d', `Kaord` = '%f', `Skype` = '%e' WHERE `Name` = '%e'", PlayerInfo[playerid][pPassword], PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pKaord], PlayerInfo[playerid][pSkype], PlayerInfo[playerid][pName] );//Запишем в asd логин,пароль,деньги,координат 1,скайп mysql_tquery(MYSQL_ARG, asd, "", "");//Отправляем запрос }
Плагины,инклюд,и сам pwn - Скачать! Пароль - pawno-info
Вот и всё,с вами был Mr.Pawn С наступающим друзья!!! Всего хорошего вам!