Доступ к готовым решениям

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

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

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

Урок Полноценная регистрация на mxINI.inc

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

I'm Cobra

Специалист
Здравствуйте, в связи с частыми вопросами на форуме, решил сделать полноценную регистрацию на mxINI.inc в диалоговых окнах.
Для начала скачиваем инклюд mxINI, если у вас его нету
Теперь, как скачали заходим в папку с сервом и шфыряем это в pawno/include.

Сделали? Отлично! Теперь приступим к уроку...

Прописываем в начале мода:
PHP:
#include <mxINI>
Теперь ко всем массивам добавляем

PHP:
enum pInfo {
    pMoney, // Сохраняет кол-во денег.
    Float:pHeal, // Сохраняет кол-во жизней.
    Float:pArmour, // Сохраняет кол-во брони.
    Kills,//сохраняет убийства
    Deaths//сохраняет смерти
};
new PlayerInfo[MAX_PLAYERS][pInfo];// создадим массив со статистикой
Теперь в public OnPlayerConnect(playerid):
PHP:
logged[playerid] = 0;      
new PlayerName[MAX_PLAYER_NAME]; 
             GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); // Получаем имя игрока 
             new account[128]; 
             format(account,sizeof(account),"users/%s.ini",PlayerName); //Создадим аккаунт 
             if(!fexist(account)) //Если такого аккаунта нет,то... 
             { 
             ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Регистрация", "Зарегистрируйся \nПароль ниже:", "Регистр", ""); //Выдаем диалог с регой 
             } 
             else 
             { 
             ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся \nПароль нижу:", "Логин", ""); //Если аккаунт существует, то выдаем авторизацию 
             }
Идем в паблик public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]):


PHP:
   if(dialogid == 1) //Регистрация
    {
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Ну зарегистрируйся ты уже! \nПароль ниже:", "Ок", "");
        if(response) 
        {
            new PlayerName[MAX_PLAYER_NAME];
            GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); //Узнаем имя игрока
            new account[128];
            format(account,sizeof(account),"users/%s.ini",PlayerName);//проверяем. Есть ли этот акк в папке users
            if(fexist(account)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся! \n Пароль ниже:", "Логин", ""); //авторизуем его, если есть акк
            new iniFile = ini_createFile(account); //создаем акк
            if(iniFile < 0) ini_openFile (account); //если файл пустой, то
            {
                ini_setString(iniFile,"Пароль",inputtext); //Пароль
                ini_setInteger(iniFile, "Money", 5000); // Создаем файл аккаунта с кол-вом денег 5000
                ini_setFloat(iniFile, "Heal", 100.0); // Создаем файл аккаунта с кол-вом Здоровья
                ini_setFloat(iniFile, "Armour", 100.0); // Создаем файл аккаунта с кол-вом Брони
                ini_setInteger(iniFile, "Kills", 0); // Ну тут убийства
                ini_setInteger(iniFile, "Deaths", 0); // Смерти
                ini_closeFile(iniFile); //закроем файл
                ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся:", "Логин", "");
            }
        }
        else //Если этот вася захочет обойти регу и нажмет на Esc, то даем ему опять диалог
        {
            ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Регистрируйся, червь:", "Ок", "");
        }
    }
    if(dialogid == 2)
    {
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся! \nПароль ниже:", "Логин", ""); 
        if(response)
        {
            new PlayerName[MAX_PLAYER_NAME], password[64];
            GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
            new account[128];
            format(account,sizeof(account),"users/%s.ini",PlayerName);
            if(IsPlayerNPC(playerid))return 1;
            new iniFile = ini_openFile(account);
            ini_getString(iniFile, "Пароль",password); // Узнаём пароль аккаунта.
            if(!strcmp(inputtext, password, true))
            {
                ini_getInteger(iniFile, "Money", PlayerInfo[playerid][pMoney]); // Записываем данные в переменную
                ini_getFloat(iniFile, "Heal", PlayerInfo[playerid][pHeal]); 
                ini_getFloat(iniFile, "Armour", PlayerInfo[playerid][pArmour]);
                ini_getInteger(iniFile,"Kills", PlayerInfo[playerid][Kills]);
                ini_getInteger(iniFile,"Deaths", PlayerInfo[playerid][Deaths]);
     	SetPlayerHealth(playerid, PlayerInfo[playerid][pHeal]);
     	SetPlayerArmour(playerid, PlayerInfo[playerid][pArmour]);
                GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
                ini_closeFile(iniFile);
                SpawnPlayer(playerid);
                return 1;
            }
            else
            {
                SendClientMessage(playerid, COLOR_RED, "Сервер: Пароль неверный");
                ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся ты наконец:", "Ок", "");
                return 1;
            }
        }
        else //Клавиша Esc
        {
            ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Авторизация", "Авторизовывайся,рачок:", "Ок", ""); // выдаем диалог, если нажмет на кнопку Esc
        }
    }
Теперь идем в public OnPlayerDeath(playerid, killerid, reason):
PHP:
PlayerInfo[killerid][Kills]++;// добавляем килл убийце
PlayerInfo[playerid][Deaths]++; //добавляем смерть убитому
Идем в начало мода вашего:
PHP:
forward SaveAccounts(playerid);//ко всем форвардам, сохранение акков
new saveacctimer;// ко всем массивам, созздадим таймер для сохранения акков
В public OnGameModeInit():
PHP:
saveacctimer = SetTimer("SaveAccounts", 200000, 1);// делаем таймер для сохранения акков
В public OnGameModeExit():
PHP:
 KillTimer(saveacctimer);
Ну и теперь создаем раздел для сохранения акков:
PHP:
public SaveAccounts(playerid)
{
    for(new i=0; i<MAX_PLAYERS; i++)
    {
        new PlayerName[MAX_PLAYER_NAME], account[128];
        GetPlayerName(i,PlayerName,sizeof(PlayerName));
        format(account,sizeof(account), "users/%s.ini", PlayerName);
        new iniFile = ini_openFile(account);
        ini_setInteger(iniFile, "Money", GetPlayerMoney(i));
        ini_setInteger(iniFile,"Kills", PlayerInfo[i][Kills]);
        ini_setInteger(iniFile,"Deaths", PlayerInfo[i][Deaths]);
        GetPlayerHealth(i,PlayerInfo[i][pHeal]);
        ini_setFloat(iniFile, "Heal", PlayerInfo[i][pHeal]);
        GetPlayerArmour(i,PlayerInfo[i][pArmour]);
        ini_setFloat(iniFile, "Armour", PlayerInfo[i][pArmour]);
        ini_closeFile(iniFile);
        SendClientMessage(i, COLOR_WHITE, "Аккаунт сохранен");// для теста добавим
    }
    return 1;
}
Теперь создадим проверку на логин, чтобы игрок не смог писать в чат.
В начало мода
PHP:
new logged[MAX_PLAYERS];// массив залогинности игрока=)
Далее вставляем в public OnPlayerDisconnect(playerid, reason)
PHP:
logged[playerid]=0;
А public OnPlayerSpawn(playerid)
PHP:
logged[playerid] = 1;
Теперь идем в public OnPlayerText(playerid, text[]) и делаем:
PHP:
if(logged[playerid] == 0)
{
    SendClientMessage(playerid, COLOR_GREY, "Сервер: Чтобы писать в чат, пожалуйста авторизуйтесь");
    return 0;
}
Теперь поясню.
logged[playerid] = 0 - когда игрок не залогинен
logged[playerid] = 1 - когда игрок залогинен


Ну вот и все. :)

Автор: HaWk69
(Автор: Swipos)
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу