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

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

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

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

Мануал Система регистрации на MySql R8 (r31) для РЛС

Сергей|DEMON91052

Компетентный
Всем привет дорогие друзья. Я знаю что уже много уроков по майскулу и переводу реги, но я хотел бы помочь обладателям великолепного мода РЛС в регистрации и загрузке аккаунта. Я долго думал какой префикс поставить вот решился мануал но на мануал это не тянет. И так начнем.
Для начала мы переведем регу:
Внимание! Здесь уже готовый код, его нужно заменить на свой код и переписать переменые:

PHP:
case 2:
		{
			if(response)
			{
				if(!strlen(inputtext)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"{FFFFFF}Регистрация","{FFFFFF}\n*\tДобро пожаловать на сервер {FF4500}"NameServer"{FFFFFF}\n*\tРегистрация нового персонажа\n*\tМы рады видеть вас на сервере\n*\tВведите пароль для регистрации:","Готово","Отмена");
				OnPlayerRegister(playerid,inputtext);
				ShowPlayerDialog(playerid,7815,DIALOG_STYLE_INPUT,"E-Mail","Пожалуйста введите действующий адрес электронной почты,\nесли вы забудите пароль на него будет выслан новый","Готово","Пропуск");	//следующий диалог
				return true;
			}
			else	Kick(playerid);
		}
И так когда мы вводим свой пароль при реге вызывается функция:
PHP:
stock OnPlayerRegister(playerid, password[])
{
	if(IsPlayerConnected(playerid))
	{
                new MySqlStr[256];
		mysql_format(mysql, MySqlStr, sizeof(MySqlStr), "INSERT INTO accounts (Name,Pass) VALUES('%s','%s')", PlayerName(playerid), password);//PlayerName узнаем ник игрока
		mysql_function_query(mysql, MySqlStr, true, "AffectUpdate", "i", playerid);
	}
	return true;
}
этим вызовом создается запись в базе данных. Свойственно Ваш аккаунт уже находится в базе данных но полностью он не зареган дальше вы уже сами (я про сохранения аккаунта).
Авторизация! Здесь принцип такой же только когда вы вводите свой пароль идет запрос в базу данных:

PHP:
	case 1:
		{
			if(response)
			{
				if(!strlen(inputtext))
				{
					ShowPlayerDialog(playerid,1,DIALOG_STYLE_PASSWORD,"Авторизация","\n*\t{FFFFFF}Добро пожаловать на сервер \n*\tЭтот аккаунт зарегестрирован на нашем сервере\n*\tЖелаем вам приятной игры на сервере\nВведите ваш пароль для входа:","Войти","Отмена");
					return true;
				}
                                new MySqlStr[256];
				mysql_format(mysql, MySqlStr, sizeof(MySqlStr), "SELECT * FROM  accounts WHERE `Name` LIKE  '%s' AND  `Pass` LIKE  '%s'", PlayerName(playerid),(inputtext));
				mysql_function_query(mysql, MySqlStr, true, "OnPlayerLogin", "is", playerid, (inputtext));
				return true;
			}
			else	Kick(playerid);
		}
Сам же запрос:
PHP:
mysql_format(mysql, MySqlStr, sizeof(MySqlStr), "SELECT * FROM  accounts WHERE `Name` LIKE  '%s' AND  `Pass` LIKE  '%s'", PlayerName(playerid),(inputtext));
mysql_function_query(mysql, MySqlStr, true, "OnPlayerLogin", "is", playerid, (inputtext));
Зарос на существование записи в БД в столбцах как Name and Pass
PHP:
public OnPlayerLogin(playerid,password[])
{
	new rows, fields;
	cache_get_data(rows, fields);
	if(!rows)
	{
                //Действие если пароль не верный
		return true;
	}
	else
	{
                 //действие если пароль верный обычно это сама загрузка аккаунта
		PlayerInfo[playerid][pLevel] = cache_get_field_content_int(0,"Level", mysql);
	}
        //Действие с аккаунтом 
	SpawnPlayer(playerid);
	return true;
}
Здесь обойдемся без коментов так как они уже есть в коде даже с примером.
в моде РЛС case 1: это авторизация а case:2 это рега.
Кому интересно от куда берутся диалоги ;)


PHP:
public OnPlayerRequestClass(playerid, classid)
{
	mysql_format(mysql, MySqlStr, sizeof(MySqlStr), "SELECT * FROM  accounts WHERE  `Name` LIKE  '%s'", PlayerName(playerid));
	mysql_function_query(mysql, MySqlStr, true, "CheckUser", "i", playerid);
	return true;
}
Здесь идет запрос на то что есть ли ник в базе данных
PHP:
forward  CheckUser(playerid);
public CheckUser(playerid)
{
	new rows, fields;
	cache_get_data(rows, fields);
	if(rows==1)//авторизация
	{   
		ShowPlayerDialog(playerid,1,DIALOG_STYLE_PASSWORD,"Авторизация","\n*\t{FFFFFF}Добро пожаловать на сервер \n*\tЭтот аккаунт зарегестрирован на нашем сервере\n*\tЖелаем вам приятной игры на сервере\nВведите ваш пароль для входа:","Войти","Отмена");
		return true;
	}
	if(rows==0)//рега
	{                 
		ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"{FFFFFF}Регистрация","{FFFFFF}\n*\tДобро пожаловать на сервер {FF4500}"NameServer"{FFFFFF}\n*\tРегистрация нового персонажа\n*\tМы рады видеть вас на сервере\n*\tВведите пароль для регистрации:","Готово","Отмена");
		return true;
	}
	return true;
}
Если есть авторизация, если нет то регистрация. Надо было начать с этого ну да ладно :) получиться перевести мод под базу даных только у тех кто дочитал эту тему.
Надеюсь хоть кому это пригодиться!



Скачать сам плагин и инклуид :)



Если будут проблемы то






В написании этой темы мне помогали:
Фильм: Полицейская акадения
Музыка:
Styles Of Beyond - Nine Thou
Tom Morello & Prodigy - One Man Army
Т9 - Вдох-выдох
Eminem - Without Me
Pitbull - Форсаж 2
2 Chainz ft. Wiz Khalifa - We Own It
The Black eyed peas - Let's get it started

Алкоголь: Вино - не помню название
 
Последнее редактирование:
Сверху Снизу