Doc_Slove
Умник
Здравствуйте.
Решил написать урок по созданию регистрации на Y_INI.
Итак, для начала подключим инклуд (если конечно подключена библиотека YSI)
В начало мода, после #include <a_samp>
Далее, чуть ниже объявляем макросы:
Ещё ниже:
Далее в OnPlayerConnect выведем диалог авторизации/регистрации
И в OnPlayerDisconnect сохранение аккаунта:
Далее в OnPlayerDeath вставим:
В OnPlayerDialogResponse вставим:
И в конец мода:
ВАЖНО!
В папке scriptfiles необходимо создать папку Accounts
Вот и всё, чуть позже выложу .pwn с табуляцией (********* не даёт мне юзать табуляцию)
Кредиты:
• Dope D.O.D
• Барри (FanHamMer)
Скачать с табуляцией в виде FS:
Решил написать урок по созданию регистрации на Y_INI.
Итак, для начала подключим инклуд (если конечно подключена библиотека YSI)
В начало мода, после #include <a_samp>
PHP:
#tryinclude YSI\y_ini //Подключает инклуд y_ini из библиотеки YSI
PHP:
#define DIALOG_REGISTER (1) // 1 - ID диалога регистрации
#define DIALOG_LOGIN (DIALOG_REGISTER + 0b1) // 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:
if(!fexist(UserPath(playerid))) //Если аккаунт есть
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid); //Считываем данные с аккаунта
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Логин",""COL_WHITE"Введите пароль от вашего аккаунта:","Ок","Выход"); //Выводим диалог
}
else ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Регистрация",""COL_WHITE"Придумайте пароль для вашего аккаунта:","Ок","Выход"); //Если нету, то выводим диалог регистрации
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 с табуляцией (********* не даёт мне юзать табуляцию)
Кредиты:
• Dope D.O.D
• Барри (FanHamMer)
Скачать с табуляцией в виде FS:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
