Система регистрации на MxINI (DM сервер)

Уроки по созданию сервера и готовые решения
Ответить
Аватара пользователя
danilasar
Сообщения: 202
Зарегистрирован: 17 июл 2018, 09:55
Откуда: Саратов, Россия
Контактная информация:

Система регистрации на MxINI (DM сервер)

Сообщение danilasar » 28 июл 2018, 19:04

Доброго времени суток. Выкладываю готовую систему регистрации на MxINI. Вам остаётся только добавить свои параметры. Для начала скачайте инклуд mxini.inc (тык). Теперь копируем его в $ПАПКА_С_СЕРВЕРОМ$/gamemodes или в $ПАПКА_С_PAWNO$/includes. Открываем мод. Если Вы копировали в /gamemodes, то в самое начало мода вставьте:

Код: Выделить всё

#include "mxINI"
Если в /includes, то:

Код: Выделить всё

#include <mxINI>
* Подробнее - Директивы компилятора PawnC
Теперь создадим следующие переменные. Ко всем new:

Код: Выделить всё

new sendername[MAX_PLAYER_NAME];
enum pInfo {
    pMoney,              
    pPassword[33],
    pAdmin,
    pSkin,
    pEmail[64]
}
new Player[MAX_PLAYERS][pInfo];
Далее переменная с правилами сервера. Туда же:

Код: Выделить всё

new Rules[][] = { // Страница 1
{"1. Игровой процесс\n"},
{"Запрещено использование любых сторонних программ, скриптов и читов.\n"},
{"Запрещено использование багов (ошибок, недоработок сервера и/или игры).\n"},
{"Использовать ESC (паузу) в целях ухода от погони или смерти.\n"},
{"Убивать игроков на спавне (место появления при входе на сервер/возрождения после смерти).\n"},
{"Злоупотребление игровыми возможностями для создания неудобств игрокам.\n\n"},
{"2. Ник в игре\n"},
{"Запрещено использовать ники, содержащие нецензурные или оскорбительные слова.\n"},
}
new Rules_2[][] = { // Страница 2
{"3. Чат\n"},
{"Запрещено ругательство, оскорбления или нецензурная речь.\n"},
{"Угрозы игрокам, не относящиеся к игровому процессу.\n"},
{"Писать сообщения заглавными буквами.\n"},
{"Писать одно и тоже сообщение слишком часто  или посылать бессмысленные наборы букв (флуд).\n"},
{"Реклама сторонних ресурсов.\n\n"},
{"4. Администрация сервера\n"},
{"Необходимо сообщать администрации о каких либо нарушениях из данных правил.\n"},
{"Администрация самостоятельно выбирает штрафные санкции для каждого из случаев.\n"},
{"Запрещено препятствовать администрации в работе.\n"},
{"5. Торговля.\n"},
{"Запрещены любые махинации реальными деньгами.\n"},
{"Запрещена продажа/покупка чего-либо за реальные деньги.\n"},
{"Запрещен обмен реальных предметов в любой форме на игровые.\n"},
{"Запрещен обмен чего-либо между игровыми серверами (например, здесь ты мне даёшь машину бесплатно,\n  а на таком-то серве я тебе дом).\n"},
};
В public OnPlayerRequestClass(playerid, classid):

Код: Выделить всё

    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"!\nЭтот аккаунт ещё не зарегистрирован\n\n• Длина пароля от 6 до 15 символов\n• Пароль должен состоять только из букв английского алфавита\n\nПридумайте пароль:");
            strcat(str, small);
            ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", str, "Готово", "Отмена");
        }
        case 1:
            ShowPlayerDialog(playerid, 5, DIALOG_STYLE_INPUT, "Вход", Добро пожаловать на сервер "SPawn Forum"! Этот аккаунт уже\nзарегистрирован. Введите свой пароль:, "Войти", "Отмена");
    }
    return true;
В public OnPlayerConnect(playerid):

Код: Выделить всё

    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;
В public OnPlayerDisconnect(playerid, reason):

Код: Выделить всё

    if(GetPVarInt(playerid, "Logged") == 1) SavePlayer(playerid);
    return true;
В public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]):

Код: Выделить всё

    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}Пожалуйста введите действующий адрес электронной почты.\nЕсли вы забудите пароль на него будет выслан новый", "Готово", "");
        }
        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"! Этот аккаунт уже\nзарегистрирован. Введите свой пароль:, "Войти", "Отмена");
        }
        case 5: {
            if(!response) return Kick(playerid);
            LoginPlayer(playerid, inputtext);
        }
    }
Ну а теперь в самый-самый конец мода, на последнюю строку:

Код: Выделить всё

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;
}
Автор: EgorKa29
Переделал: danilasar (я)

Ответить