Доброго времени суток. Выкладываю готовую систему регистрации на MxINI. Вам остаётся только добавить свои параметры. Для начала скачайте инклуд mxini.inc (тык). Теперь копируем его в $ПАПКА_С_СЕРВЕРОМ$/gamemodes или в $ПАПКА_С_PAWNO$/includes. Открываем мод. Если Вы копировали в /gamemodes, то в самое начало мода вставьте:
[code]#include «mxINI»[/code]
Если в /includes, то:
[code]#include [/code]
* Подробнее — [url=/viewtopic.php?f=21&t=178]Директивы компилятора PawnC[/url]
Теперь создадим следующие переменные. Ко всем [color=#0000FF]new[/color]:
[code]new sendername[MAX_PLAYER_NAME];
enum pInfo {
pMoney,
pPassword[33],
pAdmin,
pSkin,
pEmail[64]
}
new Player[MAX_PLAYERS][pInfo];[/code]

Далее переменная с правилами сервера. Туда же:
[code]new Rules[][] = { // Страница 1
{«1. Игровой процесс
«},
{«Запрещено использование любых сторонних программ, скриптов и читов.
«},
{«Запрещено использование багов (ошибок, недоработок сервера и/или игры).
«},
{«Использовать ESC (паузу) в целях ухода от погони или смерти.
«},
{«Убивать игроков на спавне (место появления при входе на сервер/возрождения после смерти).
«},
{«Злоупотребление игровыми возможностями для создания неудобств игрокам.

«},
{«2. Ник в игре
«},
{«Запрещено использовать ники, содержащие нецензурные или оскорбительные слова.
«},
}
new Rules_2[][] = { // Страница 2
{«3. Чат
«},
{«Запрещено ругательство, оскорбления или нецензурная речь.
«},
{«Угрозы игрокам, не относящиеся к игровому процессу.
«},
{«Писать сообщения заглавными буквами.
«},
{«Писать одно и тоже сообщение слишком часто или посылать бессмысленные наборы букв (флуд).
«},
{«Реклама сторонних ресурсов.

«},
{«4. Администрация сервера
«},
{«Необходимо сообщать администрации о каких либо нарушениях из данных правил.
«},
{«Администрация самостоятельно выбирает штрафные санкции для каждого из случаев.
«},
{«Запрещено препятствовать администрации в работе.
«},
{«5. Торговля.
«},
{«Запрещены любые махинации реальными деньгами.
«},
{«Запрещена продажа/покупка чего-либо за реальные деньги.
«},
{«Запрещен обмен реальных предметов в любой форме на игровые.
«},
{«Запрещен обмен чего-либо между игровыми серверами (например, здесь ты мне даёшь машину бесплатно,
а на таком-то серве я тебе дом).
«},
};[/code]

В [color=#0000FF]public[/color] OnPlayerRequestClass(playerid, classid):
[code] if(GetPVarInt(playerid, «Logged») == 1) return SpawnPlayer(playerid);
SetPlayerInterior(playerid,0);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
GetPlayerName(playerid, sendername, sizeof(sendername));
new str[320], small[150];
switch(GetPVarInt(playerid, «Account»)) {
case 0: {
format(small, sizeof(small), «»);
strcat(str, small);
format(small, sizeof(small), «Добро пожаловать на сервер «SPawn Forum»!
Этот аккаунт ещё не зарегистрирован

• Длина пароля от 6 до 15 символов
• Пароль должен состоять только из букв английского алфавита

Придумайте пароль:»);
strcat(str, small);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, «Регистрация», str, «Готово», «Отмена»);
}
case 1:
ShowPlayerDialog(playerid, 5, DIALOG_STYLE_INPUT, «Вход», Добро пожаловать на сервер «SPawn Forum»! Этот аккаунт уже
зарегистрирован. Введите свой пароль:, «Войти», «Отмена»);
}
return true;[/code]

В [color=#0000FF]public[/color] OnPlayerConnect(playerid):
[code] new string[42];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), «players/%s.ini», sendername);
if(fexist(string)) SetPVarInt(playerid, «Account»,1);
else SetPVarInt(playerid, «Account»,0);
return true;[/code]

В [color=#0000FF]public[/color] OnPlayerDisconnect(playerid, reason):
[code] if(GetPVarInt(playerid, «Logged») == 1) SavePlayer(playerid);
return true;[/code]

В [color=#0000FF]public[/color] OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]):
[code] new string[128];
switch(dialogid) {
case 1: {
if(!response) return Kick(playerid);
RegisterPlayer(playerid, inputtext);
}
case 2: {
if(!response) {
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), «players/%s.ini»,sendername);
fremove(string);
return true;
}
new Rules_2_str[1000];
format(Rules_2_str, sizeof(Rules_2_str), «%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s»,Rules_2[0],Rules_2[1],Rules_2[2],Rules_2[3],Rules_2[4],Rules_2[5],Rules_2[6],Rules_2[7],Rules_2[8],Rules_2[9],Rules_2[10],Rules_2[11],Rules_2[12],Rules_2[13],Rules_2[14],Rules_2[15],Rules_2[16],Rules_2[17],Rules_2[18],Rules_2[19],Rules_2[20],Rules_2[21]);
ShowPlayerDialog(playerid, 3, DIALOG_STYLE_MSGBOX, «Правила сервера», Rules_2_str, «Согласен», «Выйти»);
}
case 3: {
if(!response) {
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), «players/%s.ini»,sendername);
fremove(string);
return true;
}
ShowPlayerDialog(playerid, 4, DIALOG_STYLE_INPUT, «{FFFFFF}• Электронная почта •», «{FFFFFF}Пожалуйста введите действующий адрес электронной почты.
Если вы забудите пароль на него будет выслан новый», «Готово», «»);
}
case 4: {
if(!response) return Kick(playerid);
strmid(Player[playerid][pEmail],inputtext,0,strlen(inputtext),255);
GetPlayerName(playerid, sendername, sizeof(sendername));
new str[186];
ShowPlayerDialog(playerid, 5, DIALOG_STYLE_INPUT, «Вход», Добро пожаловать на сервер «SPawn Forum»! Этот аккаунт уже
зарегистрирован. Введите свой пароль:, «Войти», «Отмена»);
}
case 5: {
if(!response) return Kick(playerid);
LoginPlayer(playerid, inputtext);
}
}[/code]

Ну а теперь в самый-самый конец мода, на последнюю строку:
[code]stock RegisterPlayer(playerid, inputtext[]) {
if(!IsPlayerConnected(playerid)) return true;
new string[40];
GetPlayerName(playerid, sendername, sizeof(sendername));
Player[playerid][pMoney] = 500;
Player[playerid][pAdmin] = 0;
format(string,sizeof(string), «players/%s.ini», sendername);
new accountFile = ini_createFile(string);
if(accountFile < 0) { accountFile = ini_openFile(string); } if(accountFile >= 0) {
strmid(Player[playerid][pPassword],inputtext,0,strlen(inputtext),255);
ini_setString(accountFile,»Password»,Player[playerid][pPassword]);
ini_closeFile(accountFile);
}
new Rules_str[1000];
format(Rules_str, sizeof(Rules_str), «{FFFFFF}%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s»,Rules[0],Rules[1],Rules[2],Rules[3],Rules[4],Rules[5],Rules[6],Rules[7],Rules[8],Rules[9],Rules[10],Rules[11],Rules[12],Rules[13],Rules[14],Rules[15],Rules[16]);
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_MSGBOX, «Правила сервера», Rules_str, «Согласен», «Выйти»);
return true;
}
stock LoginPlayer(playerid, inputtext[]) {
new string[40],pass[32];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string,sizeof(string), «players/%s.ini», sendername);
new File = ini_openFile(string);
ini_getString(File,»Password»,pass,32);
if(strcmp(pass, inputtext, true) != 0) {
Kick(playerid);
} else {
ini_getInteger(File, «Money», Player[playerid][pMoney]);
ini_getInteger(File, «Admin», Player[playerid][pAdmin]);
ini_getInteger(File, «Skin», Player[playerid][pSkin]);
ini_getString(File, «Email», Player[playerid][pEmail], 64);
SpawnPlayer(playerid);
SetPVarInt(playerid, «Logged», 1);
}
return 1;
}
stock SavePlayer(playerid) {
if(!IsPlayerConnected(playerid) && GetPVarInt(playerid, «Logged») == 0) return true;
new string[40];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string,sizeof(string), «players/%s.ini», sendername);
new File = ini_openFile(string);
ini_setInteger(File, «Money», Player[playerid][pMoney]);
ini_setInteger(File,»Admin», Player[playerid][pAdmin]);
ini_setInteger(File,»Skin», Player[playerid][pSkin]);
ini_setString(File,»Email», Player[playerid][pEmail]);
ini_closeFile(File);
return 1;
}[/code]

Автор: EgorKa29
Переделал: [b][color=#BF0000]danilasar[/color][/b] (я)

От danilasar

Это я

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *