Первым делом удаляем лишний код из мода:
- Лишний код
Code: Select all
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
print("\n--------------------------------------");
print(" Blank Filterscript by your name here");
print("--------------------------------------\n");
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
#else
main()
{
print("\n----------------------------------");
print(" Blank Gamemode by your name here");
print("----------------------------------\n");
}
#endif
Потом подключаем инкуд mxini, для этого ко всем #include добавляем:
Code: Select all
#include <mxini>
Далее создаём переменные для игрока, для этого после всех инклудов вставляем;
Code: Select all
enum pInfo { //если надо меняйте на свои
pMoney, // Сохраняет кол-во денег.
pHouse,// ID первого дома (переменные делайте свои)
pHouse1,// ID второго дома
pHouse2,// ID третьего дома
pNHouse // кол-во домов у игрока (Последняя строка без запятой)
};
new PlayerInfo[MAX_PLAYERS][pInfo];
forward SaveAccounts();// форвард для паблика который создадим позднее.
Для вывода меню, в паблик - public OnPlayerConnect(playerid)
Code: Select all
public OnPlayerConnect(playerid)
{
new PlayerName[500];
GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); //узнаем ник
new account[128];
format(account,sizeof(account),"Users/%s.ini",PlayerName); // ищем аккаунт
// Если нашли, то выводим окно "Авторизация"
if(fexist(account)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль", "Войти", "");
else // Если игрок найден, то авторизация
{
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Регистрация", "Введите пароль:", "Войти", "");
}
PlayerInfo[playerid][pMoney] = 0; // При регистрации 0 денег
PlayerInfo[playerid][pHouse] = 0; // 0 домов...
PlayerInfo[playerid][pHouse1] = 0;
PlayerInfo[playerid][pHouse2] = 0;
PlayerInfo[playerid][pNHouse] = 0;
return true;
}
А теперь создаём действия для этих меню.
В паблик public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
Code: Select all
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));// Узнаем ник игрока
new account[128];
format(account,sizeof(account),"Users/%s.ini",PlayerName);// Создаем аккаунт
if(dialogid == 1) // Регистрация
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Регистрация", "Придумайте себе пароль", "Войти", "");
if(response)
{
GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); //узнаем ник
format(account,sizeof(account),"Users/%s.ini",PlayerName);//ищем акк
if(fexist(account)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль", "Войти", "");
new iniFile = ini_createFile(account); // Создаем аккаунт
if(iniFile < 0) ini_openFile (account); // Если файл пустой, то откроем и ...
{
ini_setString(iniFile,"Password",inputtext); // Запишем пароль для игрока
ini_setInteger(iniFile, "Money", 0); // Запишем кол-во денег для игрока
ini_setInteger(iniFile, "House", 0); //дома
ini_setInteger(iniFile, "House1", 0);
ini_setInteger(iniFile, "House2", 0);
ini_setInteger(iniFile, "NHouse", 0);
ini_closeFile(iniFile); // Закроем файл
}
}
else //проверка Esc'ейпа
{
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Регистрация", "Придумайте себе пароль", "Войти", "");
}
}
if(dialogid == 2)
{
if(!strlen(inputtext))return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", "");
if(response)// Проверка на кнопку "ОК" и Enter
{
new password[64];
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
format(account,sizeof(account),"Users/%s.ini",PlayerName);
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,"House",PlayerInfo[playerid][pHouse]); // дома
ini_getInteger(iniFile,"House1",PlayerInfo[playerid][pHouse1]);
ini_getInteger(iniFile,"House2",PlayerInfo[playerid][pHouse2]);
ini_getInteger(iniFile,"NHouse",PlayerInfo[playerid][pNHouse]);
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]); // Количество денег у игрока
format(account, sizeof(account), "Вы вошли в свой аккаунт: "%s".",PlayerName);
SendClientMessage(playerid, 0xFFFF00FF,account);// Напишет в чат
ini_closeFile(iniFile);// закроем файл
}
else//проверка Esc'ейпа
{
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", "");
SendClientMessage(playerid, 0xF60000AA, "Неверный пароль. Попробуйте ещё раз.");
}
}
}
else//проверка Esc'ейпа
{
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", "");
}
}
return true;
}
Создаём новый паблик - public SaveAccounts(), ко всем пабликам добавим
Code: Select all
public SaveAccounts()
{
for(new f; f < GetMaxPlayers(); f++)
{
if(!IsPlayerConnected(f))continue;
SaveAccount(f);
}
}
В конце мода добавляем сток, который и будет выполнять все функции сохранения и записи данных
Code: Select all
stock SaveAccount(playerid) // Сохраняет данные
{
new PlayerName[MAX_PLAYER_NAME], account[128];
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
format(account,sizeof(account), "Users/%s.ini", PlayerName);
new iniFile = ini_openFile(account);// откр. файл
ini_setInteger(iniFile, "Money", GetPlayerMoney(playerid));// записываем
ini_setInteger(iniFile, "House", PlayerInfo[playerid][pHouse]);
ini_setInteger(iniFile, "House1", PlayerInfo[playerid][pHouse1]);
ini_setInteger(iniFile, "House2", PlayerInfo[playerid][pHouse2]);
ini_setInteger(iniFile, "NHouse", PlayerInfo[playerid][pNHouse]);
ini_closeFile(iniFile);// закрываем
return 1;
}
Для сохранения при выходе из игры, в паблик public OnPlayerDisconnect(playerid, reason)
Code: Select all
public OnPlayerDisconnect(playerid, reason)
{
SaveAccount(playerid); // Сохранение аккаунтов
return true;
}
С модом работу мы закончили, теперь открываем папку с сервером и в папке scriptfiles создаём новую папку Users, в которой и будут сохраняться файлы игроков.
Всё! Заходим в игру регистрируемся, выходим из игры. Открываем папку scriptfiles --> Users и видим там файлик ваш ник.ini.
Code: Select all
Password = 123
Money = 0
House = 0
House1 = 0
House2 = 0
NHouse = 0