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

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

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

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

Правильно ли сделана система регистрации/авторизации, а также оптимизация кода?

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

sekretovs

Умник
include:
PHP:
#include <a_samp>//
#include <mxINI>//
new:
PHP:
new gPlayerAccount[MAX_PLAYERS];//
new gPlayerLogged[MAX_PLAYERS];//
new RegistrationStep[MAX_PLAYERS];//
new KickPlayer[MAX_PLAYERS];//
define:
PHP:
#define COLOR_GOLD 0xFFD700AA// золотой
#define COLOR_RED 0xFF0000AA// красный
#define COLOR_WHITE 0xFFFFFFAA// белый
#define COLOR_LIGHTRED 0xFF6347AA//
forward:
PHP:
forward OnPlayerRegister(playerid, password[]);//
forward OnPlayerLogin(playerid,password[]);//
forward OnPlayerSave(playerid);//
forward PayDay();//
enum:
PHP:
enum pInfo
{
	pPassword,
	pAdmin,
	pCash,
};
new Player[MAX_PLAYERS][pInfo];
public OnPlayerRequestClass(playerid, classid):
PHP:
public OnPlayerRequestClass(playerid, classid)
{
    SendClientMessage(playerid, COLOR_GOLD, "Добро пожаловать на сервер");
	SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
	if (RegistrationStep[playerid] == 0 && gPlayerLogged[playerid] != 1)
	{
	    new bac[500];
		new name[MAX_PLAYER_NAME];
		new playername[MAX_PLAYER_NAME];
		GetPlayerName(playerid, name, sizeof(name));
		GetPlayerName(playerid, playername, sizeof(playername));
		format(bac, sizeof(bac), "%s.ini", playername);
		if(gPlayerAccount[playerid] != 0)
		{
			format(bac, sizeof(bac), "______________________________________\n\n  Добро пожаловать на сервер\n     Авторизация аккаунта\n\nЛогин: %s\nПароль:\n______________________________________", name);
			ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Авторизация", bac, "Принять", "Отменить");
		}
		else
		{
			gPlayerAccount[playerid] = 0;
			format(bac, sizeof(bac), "______________________________________\n\n  Добро пожаловать на сервер\n     Регистрация аккаунта\n\nЛогин: %s\nПароль:\n______________________________________", name);
			ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Регистрация", bac, "Принять", "Отменить");
		}
	}
	return 1;
}
public OnPlayerConnect(playerid):
PHP:
public OnPlayerConnect(playerid)
{
    gPlayerAccount[playerid] = 0;
	gPlayerLogged[playerid] = 0;
	RegistrationStep[playerid] = 0;
	KickPlayer[playerid] = 0;
	new string[MAX_PLAYER_NAME];
	if(fexist(string))
	{
		gPlayerAccount[playerid] = 1;
	}
	else
	{
		gPlayerAccount[playerid] = 0;
	}
	return 1;
}
public OnPlayerDisconnect(playerid, reason):
PHP:
public OnPlayerDisconnect(playerid, reason)
{
	OnPlayerSave(playerid);
	return 1;
}
public OnPlayerSpawn(playerid):
PHP:
public OnPlayerSpawn(playerid)
{
	if(gPlayerLogged[playerid] == 0)
	{
		SendClientMessage(playerid, COLOR_RED, "Необходимо зарегистрироваться либо авторизоваться");
		KickPlayer[playerid] = 1;
	}
	return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]):
PHP:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	new string[512];
	if(dialogid == 1)
	{
	    new bac[500];
		new name[MAX_PLAYER_NAME];
		GetPlayerName(playerid, name, sizeof(name));
		if(response)
		{
			if(!strlen(inputtext))
			{
			format(bac, sizeof(bac), "{FFFFFF}______________________________________\n\n  Добро пожаловать на сервер\n     Авторизация аккаунта\n\nЛогин: %s\nПароль:\n______________________________________", name);
			ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Авторизация", bac, "Войти", "Отмена");
			return 1;
			}
			new password[256];
			new playername[MAX_PLAYER_NAME];
			GetPlayerName(playerid, playername, sizeof(playername));
			format(bac, sizeof(bac), "%s.ini", playername);
			new iniFile = ini_openFile(name);
			ini_getString(iniFile, "Password", password);
			ini_closeFile(iniFile);
            if(strcmp(bac, password, true, 10) == 0)
            {
				OnPlayerLogin(playerid, password);
            }
            else
            {
				format(bac, sizeof(bac), "Вы ввели неверный пароль");
				ShowPlayerDialog(playerid, 3, DIALOG_STYLE_MSGBOX, "Неверный пароль", bac, "Повтор", "Выйти");
				ShowPlayerDialog(playerid, 4, DIALOG_STYLE_MSGBOX, "Пароль введён неверно", "Вы были кикнуты с сервера\nПричина: Неверный пароль\nВведите /quit, чтобы выйти", "Принять", "");
				Kick(playerid);
			}
		}
		else
		{
			Kick(playerid);
		}
	}
	if(dialogid == 2)
	{
		new name[MAX_PLAYER_NAME];
		new playername[MAX_PLAYER_NAME];
		new bac[500];
		GetPlayerName(playerid, name, sizeof(name));
    	GetPlayerName(playerid, playername, sizeof(playername));
		if(response)
		{
			if(!strlen(inputtext))
			{
				format(bac, sizeof(bac),"______________________________________\n\n  Добро пожаловать на сервер\n     Регистрация нового персонажа\n\nЛогин: %s\nПароль:\n______________________________________", name);
				ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Регистрация", bac, "Принять", "Отмена");
				return 1;
			}
				format(string, sizeof(string), "%s.ini", playername);
				ini_createFile(string);
				OnPlayerRegister(playerid, inputtext);
				PlayerPlaySound(playerid, 1183, 0.0, 0.0, 0.0);
				return 1;
		}
		else
		{
			Kick(playerid);
		}
	}
	if(dialogid == 3)
    {
        if(response)
        {
           	new bac[500];
           	new name[MAX_PLAYER_NAME];
           	GetPlayerName(playerid, name, sizeof(name));
            format(bac, sizeof(bac), "______________________________________\n\n  Добро пожаловать на сервер\n     Авторизация аккаунта\n\nЛогин: %s\nПароль:\n______________________________________", name);
           	ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Авторизация", bac, "Принять", "Отмена");
       		return 1;
        }
        else
        {
			SendClientMessage(playerid, COLOR_LIGHTRED, "Для выхода из игры используйте {FFFFFF}/q(uit)");
        	Kick(playerid);
        }
    }
	if(dialogid == 5)
    {
		if(response)
		{
			new bac[500];
    		new name[MAX_PLAYER_NAME];
    		GetPlayerName(playerid, name, sizeof(name));
		    format(bac, sizeof(bac), "______________________________________\n\n   Добро пожаловать на сервер\n     Регистрация аккаунта\n\nЛогин: %s\nПароль:\n______________________________________", name);
    		ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT,"Регистрация", bac, "Принять", "Отмена");
    	 	PlayerPlaySound(playerid, 1183, 0.0, 0.0, 0.0);
			return 1;
		}
        else
        {
		return 1;
        }
 	}
 	if(dialogid == 6)
    {
        if(response)
        {
 			new bac[500];
    		new name[MAX_PLAYER_NAME];
    		GetPlayerName(playerid, name,sizeof(name));
		    format(bac, sizeof(bac),"______________________________________\n\n  Добро пожаловать на сервер\n     Регистрация аккаунта\n\nЛогин: %s\nПароль:\n______________________________________", name);
    		ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Регистрация", bac,"Принять", "Отмена");
    	 	PlayerPlaySound(playerid, 1183, 0.0, 0.0, 0.0);
			return 1;
		}
        else
        {
		return 1;
        }
 	}
	return 1;
}
паблики, созданные за счёт форвардов:
PHP:
public OnPlayerRegister(playerid, password[])
{
	if(IsPlayerConnected(playerid))
	{
		new string[256];
		new playername[MAX_PLAYER_NAME];
		GetPlayerName(playerid, playername, sizeof(playername));
		format(string, sizeof(string), "%s.ini", playername);
		new iniFile = ini_createFile(string);
		if(iniFile < 0)
		iniFile = ini_openFile(string);
		ini_setString(iniFile, "Password", password);
 		ini_setInteger(iniFile, "Admin", Player[playerid][pAdmin]);
 		ini_setInteger(iniFile, "Cash", Player[playerid][pCash]);
		ini_closeFile(iniFile);
		OnPlayerLogin(playerid, password);
	}
	return 1;
}

public OnPlayerLogin(playerid, password[])
{
	new string[256];
	new playername[MAX_PLAYER_NAME];
 	GetPlayerName(playerid, playername, sizeof(playername));
  	format(string, sizeof(string), "%s.ini", playername);
	new iniFile = ini_openFile (string);
	ini_getString(iniFile, "Password", string);
	if(strcmp(string, password, true, 10) == 0)
 	{
        ini_getInteger(iniFile, "Admin", Player[playerid][pAdmin]);
		ini_getInteger(iniFile, "Cash", Player[playerid][pCash]);
        ini_closeFile(iniFile);
    }
    return 1;
}
public OnPlayerSave(playerid)
{
	if(IsPlayerConnected(playerid))
	{
		if(gPlayerLogged[playerid] == 1)
		{
			new string[256];
			new playername[MAX_PLAYER_NAME];
			GetPlayerName(playerid, playername, sizeof(playername));
			format(string, sizeof(string), "%s.ini", playername);
			new iniFile = ini_openFile(string);
			ini_setInteger(iniFile,"Admin",Player[playerid][pAdmin]);
			ini_setInteger(iniFile,"Cash",Player[playerid][pCash]);
			ini_closeFile(iniFile);
		}
	}
	return 1;
}
Всё ли сделано в этой системе регистрации/авторизации?
Оптимизирован ли код?
При создании системы регистрации/авторизации основывался на Samp Real Life и Sense Game, а также уроки на основе mxINI.
С меня, конечно же, плюсы.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу