Rubick
Умник
Добрый день уважаемые пользователи Pawno-Info!
Я видел большое количество просьб написать нормальную регистрацию на MySQL R7, вот я решил это сделать но так сказать обновить регистрацию на актуальную версию MySQL R8 ревизии: 20.
Приступаем:
Для начала добавляем в new.pwn названия Include.
Далее добавляем переменные и #define:
Создаём enumeration чуть ниже переменных и директивы #define:
Добавляем public'и ниже мода:
Добавляем Stock:
Добавляем нестандартные Public:
База данных:
К сожалению функции cache_get_row не были использованы т.к не было нужды в этом, регистрация чисто на MySQL без всяких Level'ов и Exp.
В случае обнаружения ошибок пишите, ошибки могут быть т.к у меня глючит клавиатуры и мышка.
Автор урока: Rubick
Я видел большое количество просьб написать нормальную регистрацию на MySQL R7, вот я решил это сделать но так сказать обновить регистрацию на актуальную версию MySQL R8 ревизии: 20.
Приступаем:
Для начала добавляем в new.pwn названия Include.
PHP:
#include a_samp
#include a_mysql
PHP:
#define opublic%0(%1) forward %0(%1); public %0(%1)
new DATABASE;
new QUERY[512];
PHP:
enum Data { Password[32], }; new User[MAX_PLAYERS][Data];
PHP:
public OnGameModeInit() return DATABASE = mysql_connect("Название хостинга", "Название логина", "Название базы данных", "Пароль");
public OnGameModeExit() return mysql_close(DATABASE);
public OnPlayerRequestClass(playerid, classid) { mysql_format(DATABASE, QUERY, sizeof(QUERY), "SELECT `Name` FROM `Users` WHERE `Name` = '%e'", USER(playerid)), mysql_function_query(DATABASE, QUERY, true, "Register", "d", playerid);
public OnPlayerSpawn(playerid) return SetPlayerSkin(playerid, GetPVarInt(playerid, "New"));
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case 1:
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 1, 1, "{FFFFFF}РЕГИСТРАЦИЯ АККАУНТА", "\t{FFFFFF}Добро пожаловать на сервер!\n\tДля того чтобы создать аккаунт введите Ваш пароль:", "ОК", "");
return SwitchRegister(playerid, inputtext);
}
case 2:
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 2, 1, "{FFFFFF}ВХОД В АККАУНТ", "\t{FFFFFF}Добро пожаловать на сервер!\n\tДля того чтобы войти в аккаунт введите Ваш пароль:", "ОК", "");
return SwitchLogin(playerid, inputtext);
}
}
return true;
}
PHP:
stock USER(i) { static N[24]; GetPlayerName(i, N, 24); return N; }
stock SwitchRegister(i, passkey[])
{
mysql_format(DATABASE, QUERY, "INSERT INTO `Users` (`Name`, `PassKey`) VALUES ('%e', '%e')", USER(i), passkey); return mysql_function_query(DATABASE, QUERY, sizeof(QUERY), false, "OnRegister", "d", i);
}
stock SwitchLogin(i, passkey[]) return mysql_format(DATABASE, QUERY, sizeof(QUERY), "SELECT * FROM `Users` WHERE `Name` = '%e' AND `Key` = '%e'", USER(i), passkey), mysql_function_query(DATABASE, QUERY, true, "OnLogin", "ds", i, passkey);
stock OnSave(i) return mysql_format(DATABASE, QUERY, sizeof(QUERY), "UPDATE `Users` SET `New` = '%d'", GetPVarInt(i, "New")), mysql_format(DATABASE, QUERY, sizeof(QUERY), "%s WHERE `Name` = '%e'", QUERY, User(i)), mysql_function_query(DATABASE, QUERY, false, "", "");
PHP:
opublic Register(playerid)
{
new r, f;
cache_get_data(r, f);
if(!r)
{ ShowPlayerDialog(playerid, 2, 1, "{FFFFFF}ВХОД В АККАУНТ", "\t{FFFFFF}Добро пожаловать на сервер!\n\tДля того чтобы войти в аккаунт введите ваш пароль:", "ОК", "");
}
else
{
ShowPlayerDialog(playerid, 1, 1, "{FFFFFF}РЕГИСТРАЦИЯ АККАУНТА", "'\t{FFFFFF}Добро пожаловать на сервер!\n\tДля того чтобы создать аккаунт введите ваш пароль:", "ОК", "");
}
return true;
}
opublic OnRegister(playerid) return 1; // Введите ваши диалоги, данные в окно этот Public.
opublic OnLogin(i, passkey[]) return SpawnPlayer(i), OnSave(i);
Регистрация будет дорабатываться по мере времени и по желанию пользователей!CREATE TABLE IF NOT EXISTS `Users` (
`Name` varchar(24) COLLATE utf8 NOT NULL,
`PassKey` varchar(30) CHARACTER SET utf8 NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8;
К сожалению функции cache_get_row не были использованы т.к не было нужды в этом, регистрация чисто на MySQL без всяких Level'ов и Exp.
В случае обнаружения ошибок пишите, ошибки могут быть т.к у меня глючит клавиатуры и мышка.
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Автор урока: Rubick
Последнее редактирование:
