Регистрация на mxINI 2

Описание: Уроки по скриптингу
Модератор: SJplayer

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 5 апреля 2013, 21:08

Простенькая регистрация на mxINI.

Скрины
1.jpg
1.jpg (53.04 КБ) 1954 просмотра
2 .jpg
2 .jpg (66.56 КБ) 1954 просмотра
4.png
4.png (542.96 КБ) 1954 просмотра
3.jpg
3.jpg (103.52 КБ) 1954 просмотра

Для начала подключаем сам инклуд - ко всем инклудам добавляем:

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

#include <mxini>                             


Далее создаём переменные для игрока:

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

enum pInfo {
pMoney, // Сохраняет кол-во денег.
pScore // Последняя строка без запятой
};
new PlayerInfo[MAX_PLAYERS][pInfo]; 


Добавляем форвард для нового паблика сохранения данных (его создадим позже):

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

forward SaveAccounts(); 


В паблик - public OnPlayerConnect(playerid) вставляем:

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

public OnPlayerConnect(playerid)
{
    new PlayerNick[500]; // Для админки
    GetPlayerName(playerid,PlayerNick,sizeof(PlayerNick)); // Узнаем ник игрока
    new users[128];
        format(users,sizeof(users),"users/%s.ini",PlayerNick); // Создаем аккаунт
            if(!fexist(users))   // Если такого ника нет,    то выводим окно с регистрацией
           {     
            ShowPlayerDialog
(playerid,7000,DIALOG_STYLE_INPUT, "Регистрация", "Введите пароль:", "Войти", ""); 
           
}
     else  // Если игрок найден, то авторизация
         {
         ShowPlayerDialog(playerid,7002,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", ""); 
        
}
     PlayerInfo[playerid][pMoney] = 0; // При регистрации 0 денег
     PlayerInfo[playerid][pScore] = 0; // 0 очков
return 1;


В паблик - public OnPlayerDisconnect(playerid,reason) добавим:

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

public OnPlayerDisconnect(playerid,reason)
{
    SaveAccount(playerid); // Сохранение аккаунтов
    return 1;
}


А теперь создаём действия для меню регистрации и авторизации. Для этого в паблик - public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) вставим:

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

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) // Менюха
{
    if(dialogid == 7000) // Регистрация
    {
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid,7000,DIALOG_STYLE_INPUT, "Регистрация", "Введите пароль:", "Войти", ""); // Регистрация
        if(response)
        {
            new PlayerNick2[MAX_PLAYER_NAME];
            GetPlayerName(playerid,PlayerNick2,sizeof(PlayerNick2)); // Узнаем ник
            new account[128];
            format(account,sizeof(account),"users/%s.ini",PlayerNick2); // Ищем аккаунт
            if(fexist(account)) return ShowPlayerDialog(playerid,7002,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", ""); // Авторизация
            new iniFile = ini_createFile(account); // Создаем аккаунт
            if(iniFile < 0) ini_openFile (account); // Если файл пустой, то...
            {
                ini_setString(iniFile,"Password",inputtext); // Запишем пароль для игрока
                ini_setInteger(iniFile, "Money", 5000); // Даём первоначальные денюжки - 5000, но можно и не давать - 0
                ini_setInteger(iniFile, "Score", 0); // Запишем очки для игрока
                ini_closeFile(iniFile); // Закроем файл
                SetPVarInt(playerid, "Logged", 0); // Создаем переменную авторизации
                new p[MAX_PLAYER_NAME];
                GetPlayerName(playerid,p,23);
                SendClientMessage(playerid, 0x21DD00FF, "Ты успешно зарегестрировался. Не забывай свой пароль.");
                ShowPlayerDialog(playerid,7002,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", ""); // Авторизация
            }
        }
        else // Проверка на вторую кнопку, но ее то мы не указали. Но если нажать Esc, то мы не регаемся. Так что мы ставим проверку на нажатие Esc'ейпа
        {
            ShowPlayerDialog(playerid,7000,DIALOG_STYLE_INPUT, "Регистрация", "Введите пароль:", "Войти", ""); // Регистрация
        }
    }
//------------------------------------------------------------------------------
    if(dialogid == 7002) // Авторизация
    {
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid,7002,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", ""); // Авторизация
        if(response) // Проверка на кнопку "ОК" и Enter
        {
            new PlayerNick4[MAX_PLAYER_NAME], password[64];
            GetPlayerName(playerid,PlayerNick4,sizeof(PlayerNick4));
            new account[128];
            format(account,sizeof(account),"users/%s.ini",PlayerNick4); // Загружаем данные
            if(IsPlayerNPC(playerid))return 1;
            new iniFile = ini_openFile(account);
            ini_getString(iniFile, "Password",password); // Узнаём пароль аккаунта.
            if(!strcmp(inputtext, password, true))
            {
                ini_getInteger(iniFile, "Money", PlayerInfo[playerid][pMoney]); // Запишем кол-во денег игроку
                ini_getInteger(iniFile,"Score",PlayerInfo[playerid][pScore]); // Запишем очки игроку

                SetPlayerScore(playerid, PlayerInfo[playerid][pScore]); // Количество очков у игрока
                GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]); // Количество денег у игрока
                SendClientMessage(playerid, 0x21DD00FF, "Ты вошёл в свой аккаунт.");
                ini_closeFile(iniFile);
                return 1;
            }
            else
            
{
                SendClientMessage(playerid, 0xF60000AA, "Неверный пароль. Попробуй ещё раз.");
                ShowPlayerDialog(playerid,7002,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", ""); // Авторизация
                return 1;
            }
        }
        else //Если нажать Esc, то...
        {
            ShowPlayerDialog(playerid,7002,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", ""); // Авторизация
        }
    }
    return 0;


А теперь создаём новый паблик - public SaveAccounts(), для которого ранее создавали форвард.

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

public SaveAccounts() // Сохраняет данные
{
    for(new f; f < GetMaxPlayers(); f++)
    {
    if(!IsPlayerConnected(f))continue;
    SaveAccount(f);
    }
}


Ну и в конце мода добавляем сток, который и будет выполнять все функции сохранения и записи данных.

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

stock SaveAccount(playerid) // Сохраняет данные
{
    new PlayerNick6[MAX_PLAYER_NAME], account[128];
    GetPlayerName(playerid,PlayerNick6,sizeof(PlayerNick6));
    format(account,sizeof(account), "users/%s.ini", PlayerNick6);
    new iniFile = ini_openFile(account);
    ini_setInteger(iniFile, "Money", GetPlayerMoney(playerid));
    ini_setInteger(iniFile, "Score", GetPlayerScore(playerid));
    ini_closeFile(iniFile);
    return 1;
}


Ну вот с модом работу мы закончили, теперь можно компилировать. Теперь открываем папку с сервером и в папке scriptfiles создаём новую папку users, в которой и будут сохраняться файлы игроков. Всё теперь у Вас есть простенькая регистрация с сохранением данных игрока.
[center]i love you [s]mxIni[/s] Mysql[/center]


Вернуться в «Уроки»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 5 гостей