Ewer
Ученик
Здравствуйте.
Решил написать урок по созданию регистрации на Y_INI.
Итак, для начала подключим инклуд (если конечно подключена библиотека YSI)
В начало мода, после #include <a_samp>
Далее, чуть ниже объявляем макросы:
Ещё ниже:
И в OnPlayerDisconnect сохранение аккаунта:
Далее в OnPlayerDeath вставим:
В OnPlayerDialogResponse вставим:
И в конец мода:
ВАЖНО!
В папке scriptfiles необходимо создать папку Accounts
Вот и всё, чуть позже выложу .pwn с табуляцией
Скачать с табуляцией в виде FS:
Решил написать урок по созданию регистрации на Y_INI.
Итак, для начала подключим инклуд (если конечно подключена библиотека YSI)
В начало мода, после #include <a_samp>
PHP:
#tryinclude YSI\y_ini //Подключает инклуд y_ini из библиотеки YSI
PHP:
#define DIALOG_REGISTER 1 //ID диалога регистрации
#define DIALOG_LOGIN 2 //ID диалога авторизации
#define PATH "/Accounts/%s.ini" //Путь до папки с аккаунтами, Accounts - папка
#define COL_WHITE "{FFFFFF}" //Объявляем белый цвет
PHP:
enum pInfo //Создадим enum, в котором будут храниться переменные для записи в файл
{
pPass, //Хранит в себе пароль
pCash, //Хранит кол-во денег игрока
pKills //Хранит кол-во убийств игрока
}
new PlayerInfo[MAX_PLAYERS][pInfo]; //Объявим переменную PlayerInfo, которая будет считывать всё из pInfo
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[]) //Сложно объяснить, но в целом подгружает данные из файла
{
INI_Int("Password",PlayerInfo[playerid][pPass]);
INI_Int("Cash",PlayerInfo[playerid][pCash]);
INI_Int("Kills",PlayerInfo[playerid][pKills]);
return 1;
}
PHP:
new tick = GetTickCount();
new INI:File = INI_Open(UserPath(playerid)); //Откроет файл
INI_SetTag(File,"data"); //Установит тег на data
INI_WriteInt(File,"Cash",GetPlayerMoney(playerid)); //Запишет в файл кол-во денег
INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]); //Запишет в файл кол-во убийств
INI_Close(File);//Закроет файл
tick = GetTickCount()-tick, printf("OnPlayerSave(%d); 3a %d мс", playerid, tick); //Выведет за сколько сохранился аккаунт
PHP:
PlayerInfo[killerid][pKills]++; //Прибавит +1 к убийствам
PHP:
switch(dialogid) //Конструкция switch, равная dialogid
{
case DIALOG_REGISTER: //Кейс с ID диалога
{
if(!response) return Kick(playerid); //Если нажал отмена, то кикнем
if(4 < strlen(inputtext) > 16) //Если введённый пароль меньше 4 и больше 16 символов длиной
return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Регистрация",""COL_WHITE"Пароль не меньше 4 и не больше 16 букв\nПридумайте пароль для вашего аккаунта:","Ок","Выход"); //Выведем диалог снова
new INI:File = INI_Open(UserPath(playerid)); //Откроем файл
INI_SetTag(File,"data"); //Установим тег
INI_WriteInt(File,"Password",udb_hash(inputtext)); //Зашифруем и запишем пароль
INI_WriteInt(File,"Cash", 10000); //Запишем кол-во денег и установим на 10.000
INI_WriteInt(File,"Kills",0);//Запишем кол-во убийств
INI_Close(File);//Закроем файл
//SpawnPlayer(playerid); //Раскомментируйте, если хотите заспавнить после регистрации
}
case DIALOG_LOGIN:
{
if(!response) return Kick (playerid); //Кикнет, если нажали кнопку "отмена"
if(udb_hash(inputtext) == PlayerInfo[playerid][pPass]) //Если пароль верный
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);//Считает информацию с файла
GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]);//Выдаст деньги
}
else ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Логин",""COL_WHITE"Введите пароль от вашего аккаунта:","Ок","Выход");
}
}
PHP:
UserPath(playerid)
{
new str[128],pname[MAX_PLAYER_NAME];
GetPlayerName(playerid,pname,sizeof(pname));
format(str,128,PATH,pname);
return str;
}
udb_hash(buf[]) { //Шифровка паролей
new length=strlen(buf);
new s1 = 1, s2 = 0;
for(new n; n<length; n++)
{
s1 = (s1 + buf[n]) % 65521;
s2 = (s2 + s1) % 65521;
}
return (s2 << 16)+s1;
}
В папке scriptfiles необходимо создать папку Accounts
Вот и всё, чуть позже выложу .pwn с табуляцией
Скачать с табуляцией в виде FS:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
( Прямая ссылка )
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
