Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Урок Регистрация на MySQL R8 (revision: 20)

Статус
В этой теме нельзя размещать новые ответы.

Rubick

Умник
Добрый день уважаемые пользователи Pawno-Info!

Я видел большое количество просьб написать нормальную регистрацию на MySQL R7, вот я решил это сделать но так сказать обновить регистрацию на актуальную версию MySQL R8 ревизии: 20.

Приступаем:

Для начала добавляем в new.pwn названия Include.

PHP:
#include a_samp
#include a_mysql
Далее добавляем переменные и #define:

PHP:
#define opublic%0(%1) forward %0(%1); public %0(%1)

new DATABASE;
new QUERY[512];
Создаём enumeration чуть ниже переменных и директивы #define:


PHP:
enum Data { Password[32], }; new User[MAX_PLAYERS][Data];
Добавляем public'и ниже мода:

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;
}
Добавляем Stock:

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, "", "");
Добавляем нестандартные Public:

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
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу