sekretovs
Умник
include:
new:
define:
forward:
enum:
public OnPlayerRequestClass(playerid, classid):
public OnPlayerConnect(playerid):
public OnPlayerDisconnect(playerid, reason):
public OnPlayerSpawn(playerid):
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]):
паблики, созданные за счёт форвардов:
Всё ли сделано в этой системе регистрации/авторизации?
Оптимизирован ли код?
При создании системы регистрации/авторизации основывался на Samp Real Life и Sense Game, а также уроки на основе mxINI.
С меня, конечно же, плюсы.
PHP:
#include <a_samp>//
#include <mxINI>//
PHP:
new gPlayerAccount[MAX_PLAYERS];//
new gPlayerLogged[MAX_PLAYERS];//
new RegistrationStep[MAX_PLAYERS];//
new KickPlayer[MAX_PLAYERS];//
PHP:
#define COLOR_GOLD 0xFFD700AA// золотой
#define COLOR_RED 0xFF0000AA// красный
#define COLOR_WHITE 0xFFFFFFAA// белый
#define COLOR_LIGHTRED 0xFF6347AA//
PHP:
forward OnPlayerRegister(playerid, password[]);//
forward OnPlayerLogin(playerid,password[]);//
forward OnPlayerSave(playerid);//
forward PayDay();//
PHP:
enum pInfo
{
pPassword,
pAdmin,
pCash,
};
new Player[MAX_PLAYERS][pInfo];
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;
}
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;
}
PHP:
public OnPlayerDisconnect(playerid, reason)
{
OnPlayerSave(playerid);
return 1;
}
PHP:
public OnPlayerSpawn(playerid)
{
if(gPlayerLogged[playerid] == 0)
{
SendClientMessage(playerid, COLOR_RED, "Необходимо зарегистрироваться либо авторизоваться");
KickPlayer[playerid] = 1;
}
return 1;
}
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.
С меня, конечно же, плюсы.
