Доступ к архиву

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

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

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

Простая система регистрации аккаунта [MySQL R8 R34 ORM]

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

Jeff_Hardy

Компетентный
Решил написать систему регистрации на новом плагине.
Автор: 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);
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу