Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Создание регистрации с 0 на Y_INI

Статус
В этой теме нельзя размещать новые ответы.

Doc_Slove

Умник
Здравствуйте.

Решил написать урок по созданию регистрации на 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;
}
Далее в OnPlayerConnect выведем диалог авторизации/регистрации

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"Придумайте пароль для вашего аккаунта:","Ок","Выход"); //Если нету, то выводим диалог регистрации
И в OnPlayerDisconnect сохранение аккаунта:

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); //Выведет за сколько сохранился аккаунт
Далее в OnPlayerDeath вставим:

PHP:
PlayerInfo[killerid][pKills]++; //Прибавит +1 к убийствам
В OnPlayerDialogResponse вставим:

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:





 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу