Обновлено: 03.09.12
И так представляю вам систему регистрации аккунта на новом плагине MySQL ~R7~ от BlueG'a
И так что исползуеться, MySQL ~R7~ и regex.
1. #include
PHP код:
#include <a_mysql> // MySQL ~R7~ плагин
#include <regex> // reGex плагин
2. #define
PHP код:
#define mysql_host "localhost"
#define mysql_db "mysql-R7"
#define mysql_user "root"
#define mysql_pass ""
#define TABLE_ACCOUNTS "Accounts" // Таблица с аккаунтами
#define send(%0,%1) SendClientMessage(%0, -1, %1)
3. new
PHP код:
new connectionHandle, RegEx:checkPass;
new mysql_query[80], mysql_splayer[144], rows, fields;
4. public OnGameModeInit()
PHP код:
connectionHandle = mysql_connect(mysql_host, mysql_user, mysql_db, mysql_pass);
if(mysql_ping() != 1) print("MySQL соединение, false.");
checkPass = regex_build("[A-Za-z0-9А-Яа-я]{6,25}");
5. public OnGameModeExit()
PHP код:
mysql_close(connectionHandle);
6. public OnPlayerRequestClass(playerid, classid) // Или можете поставить в OnPlayerConnect
PHP код:
mysql_format(connectionHandle, mysql_query, "SELECT `Name` FROM `"TABLE_ACCOUNTS"` WHERE `Name` = '%e'", Name(playerid));
mysql_function_query(connectionHandle, mysql_query, true, "OnPlayerRegCheck", "d", playerid);
7. public OnPlayerDisconnect(playerid, reason)
PHP код:
SavePlayer(playerid);
8. public OnPlayerSpawn(playerid)
PHP код:
if(!GetPVarInt(playerid, "Logged")) return send(playerid, "Прежде чем заспавниться, нужно быть авторизированым.");
SetPlayerScore(playerid, GetPVarInt(playerid, "Pl_Level"));
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Введите пароль:", "Далее", "Отмена");
if(!regex_match_exid(inputtext, checkPass)) 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. В конец мода, ну или куда вам удобно
PHP код:
stock Name(i) { new pl[24]; GetPlayerName(i, pl, 24); return pl; }
forward OnPlayerRegCheck(playerid);
public OnPlayerRegCheck(playerid)
{
if(IsPlayerConnected(playerid))
{
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(i, password[])
{
mysql_format(connectionHandle, mysql_query, "INSERT INTO `"TABLE_ACCOUNTS"` (`Name`, `Key`) VALUES ('%e', '%e')", Name(i), password);
mysql_function_query(connectionHandle, mysql_query, false, "RegisterCallback","d", i);
return 1;
}
forward RegisterCallback(playerid);
public RegisterCallback(playerid)
{
send(playerid,"Регистрация прошла успешно, теперь авторизуйтесь!");
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, "Авторизация", "Здравствуйте!\n\nВы зарегистрированы!\nВведите пароль:", "Войти", "Отмена");
return 1;
}
stock SavePlayer(i)
{
if(!GetPVarInt(i, "Logged")) return 1;
mysql_format(connectionHandle, mysql_splayer, "UPDATE `"TABLE_ACCOUNTS"` SET `Level` = '%d'",
GetPVarInt(i, "Pl_Level"));
mysql_format(connectionHandle, mysql_splayer, "%s WHERE `Name` = '%e'", mysql_splayer, Name(i));
mysql_function_query(connectionHandle, mysql_splayer, false, "","");
return 1;
}
stock OnPlayerLogin(i, password[])
{
mysql_format(connectionHandle, mysql_query, "SELECT * FROM `"TABLE_ACCOUNTS"` WHERE `Name` = '%e' AND `Key` = '%e'", Name(i), password);
mysql_function_query(connectionHandle, mysql_query, true, "LoginCallback","ds", i, password);
return 1;
}
forward LoginCallback(i, password[]);
public LoginCallback(i, password[])
{
new string[144], maximum[75];
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), "Здравствуйте!\n\nВы зарегистрированы!\n\n______________________________\n\nНеверный пароль(осталось %i/3)\nВведите пароль:", 3 - GetPVarInt(i, "wrongPass"));
ShowPlayerDialog(i, 2, DIALOG_STYLE_PASSWORD, "Авторизация", string, "Войти", "Отмена");
return 1;
}
cache_get_field_content(0, "Level", maximum), SetPVarInt(i, "Pl_Level", strval(maximum));
send(i, "Вы успешно авторизовались!");
SetPVarInt(i, "Logged", 1), SpawnPlayer(i);
return 1;
}
SQL(Таблица)
Автор урока: Jeff_Hardy(Jaws1)