Последние Файлы GTA 4
Последние Файлы GTA-MP
Реклама
[Tutorial] Создание системы регистрации
MyatKO Дата: Четверг, 07.06.2012, 14:29 | Сообщение # 1
Уверенный в себе
Группа:
Продвинутые
Сообщений: 156
Награды:
2
Город: Казань
Репутация:
121
Замечания:
0%
Статус:
Здравствуйте пользователи портала samp-rus.com. Предлагаю вашему вниманию урок по созданию системы регистрации, используя Y_INI. Надеюсь, что эта статья кому-нибудь пригодится. Для начала давайте скачаем необходимые инклюды. Скачать Перед нами 5 папки: pawno , внутри нее папка include , внутри нее папка YSI ; PHP ; scriptfiles , внутри нее папка YSI . Теперь разместим файлы в папках своего сервера. Из архива берем папку YSI (которая лежит в pawno/include) и помещаем ее в свою папку pawno/includes . Дальше из архива в папке scriptfiles берем папку YSI (уже другую!) и помещаем ее в папку scriptfiles вашего сервера . И папку PHP помещаем в главную директорию вашего сервера . Все, с файлами мы закончили. Теперь открываем ваш мод и наверх ко всем инклюдам добавляем строку Приступим к основной части. Во-первых добавляем ко всем #define вот эти строки:
Код
#define DIALOG_REGISTER 1 #define DIALOG_LOGIN 2
Вот эту строчку: Код
#define PATH "/Users/%s.ini"
И цвета, которые нам еще понадобятся: Код
#define COL_WHITE "{FFFFFF}" #define COL_RED "{F81414}" #define COL_GREEN "{00FF22}" #define COL_LIGHTBLUE "{00CED1}"
Далее нам необходимо создать некий "хранитель" информации:
После всех new (если они у вас есть) добавляем вот это: Код
enum pInfo { pPass, pCash, pAdmin, pKills, pDeaths } new PlayerInfo[MAX_PLAYERS][pInfo];
Теперь нам необходимо создать stock , чтобы наша информация сохранялась (деньги, пароль, уровень админки, кол-во убийств и смертей) Код
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("Admin",PlayerInfo[playerid][pAdmin]); INI_Int("Kills",PlayerInfo[playerid][pKills]); INI_Int("Deaths",PlayerInfo[playerid][pDeaths]); return 1; }
Дальше создаем вот этот stock Код
stock UserPath(playerid) { new string[128],playername[MAX_PLAYER_NAME]; GetPlayerName(playerid,playername,sizeof(playername)); format(string,sizeof(string),PATH,playername); return string; }
И вот этот: Код
stock udb_hash(buf[]) { new length=strlen(buf); new s1 = 1; new s2 = 0; new n; for (n=0; n<length; n++) { s1 = (s1 + buf[n]) % 65521; s2 = (s2 + s1) % 65521; } return (s2 << 16) + s1; }
Теперь мы должны сделать так, чтобы при подключении игрока на сервер ему на экран выводилось диалоговое окно. В паблик Код
public OnPlayerConnect(playerid) { return 1; }
Перед return 1; добавить вот это Код
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"Пожалуйста, введите Ваш пароль, чтобы зарегистрировать аккаунт","Регистрация","Выход"); }
Чтобы наши диалоговые окна работали, мы должны в паблик Код
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { return 1; }
Перед return 1; добавить вот это: Код
switch( dialogid ) { case DIALOG_REGISTER: { if (!response) return Kick(playerid); if(response) { if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""COL_WHITE"Регистрация",""COL_RED"Вы ввели некорректный пароль.\n"COL_WHITE"Пожалуйста, введите Ваш пароль, чтобы зарегистрироваться.","Регистрация","Выход"); new INI:File = INI_Open(UserPath(playerid)); INI_SetTag(File,"data"); INI_WriteInt(File,"Password",udb_hash(inputtext)); INI_WriteInt(File,"Cash",0); INI_WriteInt(File,"Admin",0); INI_WriteInt(File,"Kills",0); INI_WriteInt(File,"Deaths",0); INI_Close(File); SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0); SpawnPlayer(playerid); } } case DIALOG_LOGIN: { if ( !response ) return Kick ( playerid ); if( response ) { 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_RED"Вы ввели некорректный пароль.\n"COL_WHITE"Пожалуйста, введите Ваш пароль","Вход","Выход"); } return 1; } } }
Теперь мы должны сделать так, чтобы при выходе наша статистика сохранялась: в паблик Код
public OnPlayerDisconnect(playerid, reason) { return 1; }
Код
new INI:File = INI_Open(UserPath(playerid)); INI_SetTag(File,"data"); INI_WriteInt(File,"Cash",GetPlayerMoney(playerid)); INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]); INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]); INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]); INI_Close(File);
Выходим на финишную прямую. Нам нужно добавить в паблик: Код
public OnPlayerDeath(playerid, killerid, reason) { return 1; }
Перед return 1; вот это Код
PlayerInfo[killerid][pKills]++; PlayerInfo[playerid][pDeaths]++;
Вот и все, теперь при входе на сервер вы сможете зарегистрировать аккаунт, сохранять статистику и заходить на свой аккаунт снова. Урок сделан пользователем портала sa-mp.com Kush .
Сообщение отредактировал MintBerryCrunch - Вторник, 12.06.2012, 10:53
Mckenzy Дата: Четверг, 07.06.2012, 15:29 | Сообщение # 2
Советчик
Группа:
I'm V.I.P.
Сообщений: 1212
Награды:
130
Город: Ярославль
Репутация:
2125
Замечания:
80%
Статус:
А чем это лучше mxINI?
Fortescue Дата: Вторник, 03.07.2012, 14:52 | Сообщение # 3
Освоившийся
Группа:
Продвинутые
Сообщений: 106
Награды:
1
Город: Харьков.
Репутация:
43
Замечания:
40%
Статус:
По-моему лучше юзать: "dini", который - медленный, но стабильнее чем: "mxINI".
ZiGGi Дата: Вторник, 03.07.2012, 18:40 | Сообщение # 4
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2652
Награды:
34
Город: St. Petersburg
Репутация:
2102
Замечания:
20%
Статус:
Quote (Fortescue )
По-моему лучше юзать: "dini", который - медленный, но стабильнее чем: "mxINI".
Медленнее в 200 раз. И MxINI стабильный Quote (Kämpfer )
По моему лучше "юзать" mysql, и не еб**ть себе мозги, неужели ещё не все это поняли?!
Не для всех нужна БД, некоторым достаточно и файлов.
Бложе [indent]Мой блог Уроки по Pawn [/indent] Open-GTO [indent]Блог разработчиков GitHub: https://github.com/Open-GTO/Open-GTO Сборки мода с сервером тут [/indent]
446_StiL Дата: Четверг, 02.08.2012, 17:03 | Сообщение # 5
Уверенный в себе
Группа:
Пользователи
Сообщений: 218
Награды:
1
Город: Kotovsk city
Репутация:
8
Замечания:
20%
Статус:
Отлично, 6 ошибок.... Помогите разобраться, всё делал по инструкции. Code
E:\G'z Up\Films Server\Village RP\gamemodes\Village.pwn(104) : error 017: undefined symbol "UserPath" E:\G'z Up\Films Server\Village RP\gamemodes\Village.pwn(106) : error 017: undefined symbol "UserPath" E:\G'z Up\Films Server\Village RP\gamemodes\Village.pwn(107) : error 017: undefined symbol "DIALOG_LOGIN" E:\G'z Up\Films Server\Village RP\gamemodes\Village.pwn(107) : error 017: undefined symbol "COL_WHITE" E:\G'z Up\Films Server\Village RP\gamemodes\Village.pwn(107) : warning 215: expression has no effect E:\G'z Up\Films Server\Village RP\gamemodes\Village.pwn(107) : error 001: expected token: "-string end-", but found "-identifier-" E:\G'z Up\Films Server\Village RP\gamemodes\Village.pwn(107) : fatal error 107: too many error messages on one line Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase 6 Errors.
Если помог ставь + [GM] Village RolePlay ~ 0% (старт проекта)
MyatKO Дата: Четверг, 02.08.2012, 18:56 | Сообщение # 6
Уверенный в себе
Группа:
Продвинутые
Сообщений: 156
Награды:
2
Город: Казань
Репутация:
121
Замечания:
0%
Статус:
Строчки 104-107 покажи.
AXE Дата: Понедельник, 11.02.2013, 15:45 | Сообщение # 7
Группа:
Администратор
Сообщений: 6575
Награды:
156
Город: Ильичёвск
Репутация:
3907
Статус:
Файл перезалит.
Love will set you free! Не совсем понятно что будет дальше, но ведь так во всём, даже бросая ровно в корзину бумагу, будучи уверенным на все 100%, что попадёшь, в последний момент дуновение ветра может сменить его траекторию. Только продолжая свой путь, ты можешь зацепиться за жизнь так, что успеешь сделать всё, что задумал. Главное ставить себе цели, которые тебя волную. Будь не тем, кем пытается сделать тебя жизнь, а тем, кем пытаешься сделать себя ты. Тогда жизнь поможет стать тем, кем хочешь.
massaoff Дата: Пятница, 15.02.2013, 11:48 | Сообщение # 8
Местный
Группа:
I'm V.I.P.
Сообщений: 535
Награды:
4
Город: Березники
Репутация:
187
Замечания:
40%
Статус:
Stil, делай по новой все, если пишет undefined symfol, значит не хватает какой то переменной, то есть ты что то пропустил.
- Учимся рипать сайт - Memfiso-RPG мод Оказываю платную помощь, в создании и редактировании(доработка, исправление багов, реализация ваших идей) ваших модов/скриптов выполненных в pawno. Обращайтесь в скайп: massaoff РАБОТАЮ ТОЛЬКО С 50% ПРЕДОПЛАТОЙ!
Dimka_Kartinka Дата: Понедельник, 19.05.2014, 22:17 | Сообщение # 9
Новенький
Группа:
Пользователи
Сообщений: 1
Награды:
0
Репутация:
0
Замечания:
0%
Статус:
[size=18][font=Arial][color=orange][bgcolor=red][b][i]Добавлено (19.05.2014, 22:17) --------------------------------------------- Люди мне пишет ошибка symbol is never used: "PlayerInfo" - символ никогда не используется: "PlayerInfo" ЧТО ДЕЛАТЬ?
TheFarmtor Дата: Воскресенье, 15.06.2014, 21:20 | Сообщение # 11
Новенький
Группа:
Пользователи
Сообщений: 3
Награды:
0
Репутация:
0
Замечания:
0%
Статус:
fatal error 100: cannot read from file: "YSI/y_ini"(Не удаётся прочитать файл) Всё получается, но тут завис... Помогите, пожалуйста
Weddew Дата: Понедельник, 16.06.2014, 16:41 | Сообщение # 12
Группа:
Ангел Хранитель
Сообщений: 1251
Награды:
19
Город: Казань
Репутация:
1740
Замечания:
0%
Статус:
TheFarmtor , проверь, есть ли файл y_ini в папке YSI, которая находится в include
www.weddew-shop.ru
TheFarmtor Дата: Понедельник, 16.06.2014, 22:15 | Сообщение # 13
Новенький
Группа:
Пользователи
Сообщений: 3
Награды:
0
Репутация:
0
Замечания:
0%
Статус:
Файл есть, но павно почему-то не может его найти.
Dima-kun Дата: Понедельник, 16.06.2014, 22:42 | Сообщение # 14
Группа:
Разработчики
Сообщений: 6269
Награды:
72
Репутация:
3512
Замечания:
0%
Статус:
TheFarmtor , файл в папке pawno? или pawno/includes/YSI ?
Мои работы: [INC] Сборник d_includes [LAST],[FS] New Demage Effect ,[FS]Авто-Поворотники , [FS]mp3player ,[FS] Fun Chat Game ,[FS] Car Buy Syst ,[FS] Anti-AirBrk ,[INC] d_setpos , [GM] Game Move v0.1 ,[FS+include]Super-Armour [0.3z] ,[FS + Include] Multi Checkpoints
TheFarmtor Дата: Вторник, 17.06.2014, 11:56 | Сообщение # 15
Новенький
Группа:
Пользователи
Сообщений: 3
Награды:
0
Репутация:
0
Замечания:
0%
Статус:
В папке Pawno/includes/YSY. Я его сам находил, после чего могу его открывать и тд, но мод всё равно не может найти