Jeff_Hardy
Компетентный
Решил написать систему регистрации на новом плагине.
Автор: Jaws1(Jeff_Hardy)
database:
* Код:
Автор: Jaws1(Jeff_Hardy)
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
database:
PHP:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(24) COLLATE cp1251_bin NOT NULL,
`pass` varchar(30) CHARACTER SET utf8 NOT NULL,
`level` int(3) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin AUTO_INCREMENT=1 ;
PHP:
#include <a_mysql>
// ------------ Данные сервера в клиенте
#define mysql_host "localhost"
#define mysql_user "root"
#define mysql_base "newr34"
#define mysql_pass ""
// ----------- Прочее
#define serverNmae "MySQL R8 R34" // название
#define BASE_USERS "users" // название базы данных
#define isValidPass 30 // валидность пароля
#define getpl(%0) plname[%0]
#define send(%0,%1) SendClientMessage(%0, -1, %1)
// ----------- PVars
#define SPVI SetPVarInt
#define SPVS SetPVarString
#define SPVF SetPVarFloat
#define GPVI GetPVarInt
#define GPVS GetPVarString
#define GPVF GetPVarFloat
// ----------- Стили диалогов
#define ds_msg 0
#define ds_input 1
#define ds_list 2
#define ds_pass 3
new plname[MAX_PLAYERS][MAX_PLAYER_NAME]; // записываем ник игрока при коннекте
enum plInfo
{
ORM:ORMID,
plID, // ид аккаунта
name[MAX_PLAYER_NAME], // ник игрока
pass[isValidPass], // пароль игрока
level, // скин игрока
}
new Pi[MAX_PLAYERS][plInfo];
public OnGameModeInit()
{
/* MySQL R8 */
mysql_connect(mysql_host, mysql_user, mysql_base, mysql_pass);
mysql_log(LOG_DEBUG);
/* MySQL R8 */
SetGameModeText("MySQL R8 R34");
AddPlayerClass(0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerVirtualWorld(playerid, playerid), SetPlayerInterior(playerid, 0);
SetPlayerCameraPos(playerid, 1925.9149,-841.7464,150.9362);
SetPlayerCameraLookAt(playerid, 1595.1147,-1173.6073,167.9245);
SetPlayerPos(playerid, 1684.9298,-1216.7500,167.5547);
SetPlayerFacingAngle(playerid, 266.1046);
for(new i = 0; i < 21; i++) send(playerid, "");
return 1;
}
public OnPlayerConnect(playerid)
{
GetPlayerName(playerid, plname[playerid], MAX_PLAYER_NAME);
for(new plInfo:e; e < plInfo; ++e) Pi[playerid][e] = 0; // обнуляем числа при коннекте
GetPlayerName(playerid, Pi[playerid][name], MAX_PLAYER_NAME);
new ORM:ormid = Pi[playerid][ORMID] = orm_create(BASE_USERS);
orm_addvar_int(ormid, Pi[playerid][plID], "id");
orm_addvar_string(ormid, Pi[playerid][name], MAX_PLAYER_NAME+1, "name");
orm_addvar_string(ormid, Pi[playerid][pass], isValidPass, "pass");
orm_addvar_int(ormid, Pi[playerid][level], "level");
orm_setkey(ormid, "name"), orm_select(ormid, "onPlayerLoadUsers", "d", playerid); // загружаем все параметры с бд
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
if(GPVI(playerid, "isPlAutothed")) // если игрок авторизирован
{
orm_update(Pi[playerid][ORMID]); // сохраняет все параметры игрока при дисконнекте
for(new plInfo:e; e < plInfo; ++e) Pi[playerid][e] = 0; // обнуляем числа при дисконекте
orm_destroy(Pi[playerid][ORMID]);
}
return 1;
}
public OnPlayerSpawn(playerid)
{
new str[50];
if(!GPVI(playerid, "isPlAutothed")) return 1;
SetPlayerScore(playerid, Pi[playerid][level]);
SetPlayerSkin(playerid, 3), SetPlayerColor(playerid, -1);
SetPlayerPos(playerid, 1639.0121,-2239.9082,13.4998), SetPlayerFacingAngle(playerid, 129.8660);
SetPlayerInterior(playerid, 0), SetPlayerVirtualWorld(playerid, 0);
format(str, 50, "{3fda07}~ Добро пожаловать в наш штат, %s.", getpl(playerid)), send(playerid, str);
return 1;
}
public OnPlayerText(playerid, text[])
{
if(!GPVI(playerid, "isPlAutothed")) { send(playerid, "{ff6347}** Вы не авторизированы на сервере."); return 0; }
return 1;
}
public OnPlayerUpdate(playerid)
{
if(!GPVI(playerid, "isPlAutothed")) return 1;
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case 1:
{
if(!response) return Kick(playerid);
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 1, ds_input, "[ Авторизация игрового аккаунта ] ", " {ffffff}Добро пожаловать на сервер "serverNmae"\n{3fda07}Аккаунт с вашин ником уже зарегистрирован!", "Далее", "Закрыть"); // ERROR_OK Аккаунт зарегистрирован
if(!strcmp(inputtext, Pi[playerid][pass], false, isValidPass)) // спавним игрока при корректном вводе пароля
{
for(new i = 0; i < 40; i++) send(playerid, "");
SPVI(playerid, "isPlAutothed", true), SpawnPlayer(playerid);
}
else return ShowPlayerDialog(playerid, 1, ds_input, "[ Авторизация игрового аккаунта ] ", " {ffffff}Добро пожаловать на сервер "serverNmae"\n{3fda07}Аккаунт с вашин ником уже зарегистрирован!", "Далее", "Закрыть"); // ERROR_OK Аккаунт зарегистрирован
return 1;
}
case 2:
{
if(!response) return Kick(playerid);
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 2, ds_input, "[ Регистрация игрового аккаунта ]", " {ffffff}Добро пожаловать на сервер "serverNmae"\n{ff6347}Аккаунт с вашим ником не зарегистрирован, \n нажмите {3fda07}Далее {ff6347}чтобы продолжить.\n{ffffff}Введите пароль(от 1 до 30):", "Регистр.", "Закрыть"); // ERROR_NO_DATA Аккаунт в базе не найден
onPlayerRegister(playerid, inputtext);
return 1;
}
}
return 1;
}
stock onPlayerRegister(playerid, password[])
{
format(Pi[playerid][name], MAX_PLAYER_NAME, "%s", getpl(playerid)); // записываем ник при реестре
format(Pi[playerid][pass], isValidPass, "%s", password); // записываем пароль при реестре
Pi[playerid][level] = 1;
orm_insert(Pi[playerid][ORMID], "onPlayerRegisterCallback", "d", playerid);
return 1;
}
forward onPlayerLoadUsers(playerid);
public onPlayerLoadUsers(playerid)
{
switch(orm_errno(Pi[playerid][ORMID]))
{
case ERROR_OK: ShowPlayerDialog(playerid, 1, ds_input, "[ Авторизация игрового аккаунта ] ", " {ffffff}Добро пожаловать на сервер "serverNmae"\n{3fda07}Аккаунт с вашин ником уже зарегистрирован!", "Далее", "Закрыть"); // ERROR_OK Аккаунт зарегистрирован
case ERROR_NO_DATA: ShowPlayerDialog(playerid, 2, ds_input, "[ Регистрация игрового аккаунта ]", " {ffffff}Добро пожаловать на сервер "serverNmae"\n{ff6347}Аккаунт с вашим ником не зарегистрирован, \n нажмите {3fda07}Далее {ff6347}чтобы продолжить.\n{ffffff}Введите пароль(от 1 до 30):", "Регистр.", "Закрыть"); // ERROR_NO_DATA Аккаунт в базе не найден
}
orm_setkey(Pi[playerid][ORMID], "id");
return 1;
}
forward onPlayerRegisterCallback(playerid);
public onPlayerRegisterCallback(playerid) return SPVI(playerid, "isPlAutothed", true), SpawnPlayer(playerid);
Последнее редактирование:
