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

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

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

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

Мануал Создание системы регистрации (MySQL ~R7~)

Jeff_Hardy

Изучающий
Пользователь
Регистрация
25 Июн 2011
Сообщения
523
Лучшие ответы
0
Репутация
437
И так доброго времени суток, представяю вам систему регистрации на новом MySQL плагине версия ~R7~

И так приступим:

1. ~ #include
PHP:
#include <a_mysql>
2. ~ #define
PHP:
#define mysql_host "localhost"
#define mysql_db "test"
#define mysql_user "root"
#define mysql_pass ""

#define send(%0,%1) SendClientMessage(%0, -1, %1)
3. ~ new
PHP:
new connectionHandle;
4. ~ enum
PHP:
enum pInfo
{
	Key[128],
	Level,
};
new PlayerInfo[MAX_PLAYERS][pInfo];
5. ~ public OnGameModeInit()
PHP:
    connectionHandle = mysql_connect(mysql_host, mysql_user, mysql_db, mysql_pass);
    if(mysql_ping() != 1) print("MySQL соединение, false.");
6. ~ public OnGameModeExit()
PHP:
mysql_close(connectionHandle);
7. ~ public OnPlayerConnect(playerid)
PHP:
	new str[128];
	mysql_real_escape_string(Name(playerid), Name(playerid));
	format(str, sizeof(str),"SELECT `Name` FROM `Accounts` WHERE `Name` = '%s'", Name(playerid));
	mysql_function_query(connectionHandle, str, true, "OnPlayerRegCheck","d", playerid);
8. ~ public OnPlayerSpawn(playerid)
PHP:
if(!GetPVarInt(playerid, "Logged")) return send(playerid, "Прежде чем заспавниться, нужно быть авторизированым.");
9. ~ public OnPlayerText(playerid, text[])
PHP:
if(!GetPVarInt(playerid, "Logged")) return send(playerid, "Что бы писать в чат, нужно быть авторизированым.");
10. ~ public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
PHP:
	switch(dialogid)
	{
 		case 1://Регистрация
		{
			if(!strlen(inputtext))return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Регистрация","Добро пожаловать на сервер!\nВаш аккаунт не зарегистрирован!\n\nВведите пароль:","Далее","Отмена");
		    OnPlayerRegister(playerid,inputtext);
		    return 1;
		}
		case 2://Авторизация
		{
			if(!strlen(inputtext))return ShowPlayerDialog(playerid,2,DIALOG_STYLE_PASSWORD,"Авторизация","Здравствуйте!\n\nВы зарегистрированы!\nВведите пароль:","Вход","Отмена");
		    OnPlayerLogin(playerid,inputtext);
		    return 1;
		}
	}
11 FINAL. ~ Можно в конец мода, ну вобщем куда вам удобней.
PHP:
stock Name(i) { new pl[24]; GetPlayerName(i, pl, 24); return pl; }

forward OnPlayerRegCheck(playerid);
public OnPlayerRegCheck(playerid)
{
	if(IsPlayerConnected(playerid))
	{
		new rows, fields;
		cache_get_data(rows, fields);
		if(rows)
        	ShowPlayerDialog(playerid,2,DIALOG_STYLE_PASSWORD,"Авторизация","Здравствуйте!\n\nВы зарегистрированы!\nВведите пароль:","Вход","Отмена");
        else
        	ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Регистрация","Добро пожаловать на сервер!\nВаш аккаунт не зарегистрирован!\n\nВведите пароль:","Далее","Отмена");
	}
	return 1;
}

stock OnPlayerRegister(p, password[])
{
    new str[128];
	format(str, sizeof(str), "INSERT INTO `Accounts` (`Name`, `Key`) VALUES ('%s', '%s')", Name(p), password);
	mysql_function_query(connectionHandle, str, false, "RegisterCallback","d", p);
	return 1;
}

forward RegisterCallback(playerid);
public RegisterCallback(playerid)
{
	send(playerid,"Регистрация прошла успешно!");
	SetPVarInt(playerid,"Logged", 1), SpawnPlayer(playerid);
	return 1;
}

stock SavePlayer(p)
{
	if(GetPVarInt(p,"Logged") > 0)
	{
	    new str[128];
		format(str,sizeof(str),"UPDATE `Accounts` SET `Key`, `Level` = '%d'",
		PlayerInfo[p][Key], PlayerInfo[p][Level]);
		format(str, sizeof(str),"%s WHERE `Name` = '%s'", str, Name(p));
		mysql_query(str, -1, 0, connectionHandle);
	}
 	return 1;
}

stock OnPlayerLogin(i, password[])
{
    new str[128];
	format(str, sizeof(str),"SELECT * FROM `Accounts` WHERE `Name` = '%s' AND `Key` = '%s'", Name(i), password);
	mysql_function_query(connectionHandle, str, true, "LoginCallback","ds", i, password);
	return 1;
}

forward LoginCallback(i, password[]);
public LoginCallback(i, password[])
{
	new rows, fields, string[144], maximum[128];
	cache_get_data(rows, fields);
	if(!rows)
	{
  		if(GetPVarInt(i, "wrongPass") == 2) return send(i,"Вы ввели 3 раза неверный пароль, поэтому были кикнуты сервером."), Kick(i);
     	SetPVarInt(i, "wrongPass", GetPVarInt(i, "wrongPass")+1);
     	format(string, sizeof(string), "Неверный пароль(осталось %i/3)\nВведите пароль:", 3 - GetPVarInt(i, "wrongPass"));
  		ShowPlayerDialog(i, 2, DIALOG_STYLE_PASSWORD, "Авторизация", string, "Вход", "Отмена");
	    return 1;
    }
	cache_get_field_content(0, "Level", maximum), PlayerInfo[i][Level] = strval(maximum);
	
	SetPVarInt(i, "Logged", 1);
	send(i, "Вы успешно авторизовались!");
	SpawnPlayer(i), SavePlayer(i);
	return 1;
}
>> Database <<
PHP:
CREATE TABLE IF NOT EXISTS `Accounts` (
  `Name` varchar(24) COLLATE cp1251_bin NOT NULL,
  `Key` varchar(30) CHARACTER SET utf8 NOT NULL,
  `Level` int(3) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin;


Автор урока: Jeff_Hardy(Jaws1)

---------- Post added at 01:22 ---------- Previous post was at 01:21 ----------

КОММЕНТИРУЕМ...
 
Последнее редактирование модератором:
Сверху Снизу