Регистрация mxINI - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Phoenixxx_Czar, Getbackthere, [CM]OlegEhtler  
Регистрация mxINI
iRussel Дата: Суббота, 19.04.2014, 07:22 | Сообщение # 1
Новичок
Сообщений: 5
Статус: Offline
Для начала скачиваем инклуд mxINI, если у вас его нету то скачайте.
Теперь, как скачали заходим в папку с сервером и кладем это в pawno/include.

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

Прописываем в начале мода:
Код
#include <mxINI>

Теперь ко всем массивам добавляем
Код
enum pInfo {
      pMoney, // Сохраняет кол-во денег.
      Float:pHeal, // Сохраняет кол-во жизней.
      Float:pArmour, // Сохраняет кол-во брони.
      Kills,//сохраняет убийства
      Deaths//сохраняет смерти
};
new PlayerInfo[MAX_PLAYERS][pInfo];// создадим массив со статистикой


Теперь в public OnPlayerConnect(playerid):

Код
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[]):

Код
   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):

Код
PlayerInfo[killerid][Kills]++;// добавляем килл убийце
PlayerInfo[playerid][Deaths]++; //добавляем смерть убитому


Идем в начало мода вашего:

Код
forward SaveAccounts(playerid);//ко всем форвардам, сохранение акков
new saveacctimer;// ко всем массивам, созздадим таймер для сохранения акков


В public OnGameModeInit():

Код
saveacctimer = SetTimer("SaveAccounts", 200000, 1);// делаем таймер для сохранения акков


В public OnGameModeExit():

Код
KillTimer(saveacctimer);


Теперь создадим проверку на логин, чтобы игрок не смог писать в чат.
В начало мода

Код
new logged[MAX_PLAYERS];// массив залогинности игрока=)


Далее вставляем в public OnPlayerDisconnect(playerid, reason)

Код
logged[playerid]=0;


А public OnPlayerSpawn(playerid)

Код
logged[playerid] = 1;


Теперь идем в public OnPlayerText(playerid, text[]) и делаем:

Код
if(logged[playerid] == 0)
{
      SendClientMessage(playerid, COLOR_GREY, "Сервер: Чтобы писать в чат, пожалуйста авторизуйтесь");
      return 0;
}


Теперь поясню.
logged[playerid] = 0 - когда игрок не залогинен
logged[playerid] = 1 - когда игрок залогинен

И ещё чуть не забыл в папке scriptfiles создайте папку users

Автор: Rozmes


Сообщение отредактировал iRussel - Суббота, 19.04.2014, 08:29
STy1e Дата: Суббота, 19.04.2014, 08:13 | Сообщение # 2
Боец
Сообщений: 51
Статус: Offline
Автора укажи, слито с pa**-w**i

###adeaf6944f49fac015d35e9d3eb34516###
iRussel Дата: Суббота, 19.04.2014, 08:30 | Сообщение # 3
Новичок
Сообщений: 5
Статус: Offline
Добавил.
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума