Все кто не читал 1-ый урок прошу прочитать, он очень важен и является основой. (читать) https://pawno-pro.mirbb.com/t12-topic
Вот и настало время 2 урока, сохранение аккаунтов и данных, это выражение можно заменить 1 простым: регистрация. Сегодня я покажу вам и расскажу как сделать простую регистрацию на сервер в диалоговых окнах.
Ну. собрались духом и начинаем *Ко всем #define добавляем: Код:
В public OnPlayerDisconnect(playerid, reason)
А теперь ка добавим команду /stats для просмотра статистики. Шукаем public OnPlayerCommandText(playerid, cmdtext[]) и пихаем туды гэты брэд)))
if(dialogid == player_RegLog_DialogID) < new filename[MAX_STRING]; format(filename, sizeof(filename), «%s%s.zg»,AccountsDB,oGetPlayerName(playerid)); if(response) // вход < if(PlayerInfo[playerid][pIsLogin] == true) return SendClientMessage(playerid, COLOR_GREY, » Вы уже вошли!»); new len = strlen(inputtext); if(len MAX_PASS_LEN) < SendClientMessage(playerid,COLOR_RED,»Длина пароля должна быть больше «#MIN_PASS_LEN» и меньше «#MAX_PASS_LEN» символов»); return show_RegLogDialog(playerid); > if(!fexist(filename)) < SendClientMessage(playerid,COLOR_RED,»Этот аккаунт не зарегистрирован!»); return show_RegLogDialog(playerid); >
switch( load_Player(playerid,inputtext,filename) ) < case 0: < SendClientMessage(playerid,COLOR_RED,»Неправильный пароль.»); show_RegLogDialog(playerid); > case 1: < SendClientMessage(playerid,COLOR_RED,»Вы успешно вошли!»); PlayerInfo[playerid][pIsLogin] = true; > > return 1; > else // рега < if(PlayerInfo[playerid][pIsLogin] == true) return SendClientMessage(playerid, COLOR_GREY, » Вы уже вошли!»); new len = strlen(inputtext); if(len MAX_PASS_LEN) < SendClientMessage(playerid,COLOR_RED,»Длина пароля должна быть больше «#MIN_PASS_LEN» и меньше «#MAX_PASS_LEN» символов»); return show_RegLogDialog(playerid); > if(fexist(filename)) < SendClientMessage(playerid,COLOR_RED,»Этот аккаунт уже зарегистрирован!»); return show_RegLogDialog(playerid); > create_Player(playerid,inputtext); SendClientMessage(playerid,COLOR_RED,»Регистрация прошла успешно!»); return show_RegLogDialog(playerid); > >
А теперь в любое место между пабликами вставляем.
stock show_RegLogDialog(playerid) < return ShowPlayerDialog(playerid,player_RegLog_DialogID,DIALOG_STYLE_INPUT, «Вход в аккаунт», «Введите пароль чтобы войти или зарегистрировать аккаунт.», «Войти»,»Зарегать» ); >
Теперь расскажу немного о добавлении переменных. Для примера я добавлю переменную level: в enum pInfo вставляем ещё 1 строку:
В stock load_Player находим столбик с переменными, последняя: load_param_int(«Deaths»,PlayerInfo[playerid][pDeaths]); Копируем её, вставляем на новой строчке и изменяем переменные на:
В create_Player добавляем новую строчку, её значение: при создании нового аккаунта данные считываются от сюдо, тоесть в этом стоке вы можете установить скин игроку, лвл, деньги и т.д. выдаваемые при регистрации.
Ну и последнее что надо добавить это в stock save_Player(playerid) новую строку с переменной. Функция save_Player отвечает за сохранение данных в уже созданном аккаунте.
Вот и всё! Мы добавили новую переменную. Так можете добавлять всё что угодно.
Примечание: мы не будем использовать никакие инклуды. Примечание’: Рега 100% рабочая, вписывал её себе в СТАЛКЕР мод.
ВАЖНО: Для сохранения аккаунтов вам необходимо создать папку accounts в scriptfiles, иначе аки сохраняться не будут.