- 0
Sign in to follow this
Followers
0
Проблема с диалогами
-
Recently Browsing 0 members
No registered users viewing this page.
No registered users viewing this page.
Вы видите это сообщение, так как вы не вошли или не зарегистрировались. Чтобы получить более расширенные возможности войдите или зарегистрируйтесь.
Однако без регистрации Вы также сможете пользоваться форумом.
Guest Danil Новичок
Тут такое дело, делаю мод по урокам одного чела на Ютюбе "Регистрация", и вот решил не добавлять выбор нации, а все остальное есть, ошибок нигде нет, а диалог выбора пола не появляется, все остальные диалоги показывает
#include <a_samp> #include <fix> #include <a_mysql> #include <streamer> #include <Pawn.Cmd> #include <sscanf2> #include <foreach> #include <Pawn.Regex> #include <crashdetect> #define MYSQL_HOST "localhost" #define MYSQL_USER "root" #define MYSQL_PASS "" #define MYSQL_BASE "newbd" #define SCM SendClientMessage #define SCMTA SendClientMessageToAll #define SPD ShowPlayerDialog #define COLOR_WHITE 0xFFFFFFF #define COLOR_RED 0xFF0000FF main() { print("\n----------------------------------"); print(" New Project Started "); print("----------------------------------\n"); } //================================ ПЕРЕМЕННЫЕ ============================== //--------------------------------- Мусорка -------------------------------- new MySQL:dbHandle; //------------------------------------------------------------------------------ //============================================================================== enum player() { ID, NAME[MAX_PLAYER_NAME], PASSWORD[32], EMAIL[64], REF, SEX, AGE, } new player_info[MAX_PLAYERS] [player]; enum dialogs { DLG_NONE, DLG_REG, DLG_REGEMAIL, DLG_LOG, DLG_REGREF, DLG_REGSEX, DLG_REGAGE, } public OnGameModeInit() { ConnectMySQL(); return 1; } stock ConnectMySQL() { dbHandle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_BASE); switch (mysql_errno()) { case 0: print("Подключение к MySQL Успешно!"); default: print("MySQL НЕ РАБОТАЕТ"); } mysql_log(ERROR | WARNING); mysql_set_charset("cp1251"); } public OnGameModeExit() { return 1; } public OnPlayerRequestClass(playerid, classid) { return 1; } public OnPlayerConnect(playerid) { GetPlayerName(playerid, player_info[playerid][NAME], MAX_PLAYER_NAME); static const fmt_query[] = "SELECT `id` FROM `users` WHERE `name` = '%s'"; new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)]; format(query, sizeof(query), fmt_query, player_info[playerid][NAME]); mysql_tquery(dbHandle, query, "CheckRegistration", "i", playerid); return 1; } forward CheckRegistration(playerid); public CheckRegistration(playerid) { new rows; cache_get_row_count(rows); if(rows) ShowLogin(playerid); else ShowRegistration(playerid); } stock ShowLogin(playerid) { SCM(playerid, COLOR_WHITE, "Игрок зарегистрирован"); } stock ShowRegistration(playerid) { new dialog[403+(-2+MAX_PLAYER_NAME)]; format(dialog, sizeof(dialog), "{FFFFFF}Уважаемый {8cff00}%s{FFFFFF}, мы рады видеть вас на {ff9300}Sand RolePlay{FFFFFF}\n\ Аккаунт с таким именем не зарегистрирован\n\ Для игры на сервере вы должны пройти регистрацию\n\n\ Придумайте сложный пароль для вашего будущего аккаунта и нажмите\"Далее\"\n\ {ff9300}\t*Пароль должен быть от 8-ми до 32-ух символов\n\ \t*Пароль должен состоять только из цифр и латинских символов любого регистра", player_info[playerid][NAME] ); SPD(playerid, DLG_REG, DIALOG_STYLE_INPUT, "{8cff00}Регистрация{FFFFFF} + Ввод пароля", dialog, "Далее", "Выход"); } public OnPlayerDisconnect(playerid, reason) { return 1; } public OnPlayerSpawn(playerid) { return 1; } public OnPlayerDeath(playerid, killerid, reason) { return 1; } public OnVehicleSpawn(vehicleid) { return 1; } public OnVehicleDeath(vehicleid, killerid) { return 1; } public OnPlayerText(playerid, text[]) { return 1; } public OnPlayerCommandText(playerid, cmdtext[]) { return 0; } public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) { return 1; } public OnPlayerExitVehicle(playerid, vehicleid) { return 1; } public OnPlayerStateChange(playerid, newstate, oldstate) { return 1; } public OnPlayerEnterCheckpoint(playerid) { return 1; } public OnPlayerLeaveCheckpoint(playerid) { return 1; } public OnPlayerEnterRaceCheckpoint(playerid) { return 1; } public OnPlayerLeaveRaceCheckpoint(playerid) { return 1; } public OnRconCommand(cmd[]) { return 1; } public OnPlayerRequestSpawn(playerid) { return 1; } public OnObjectMoved(objectid) { return 1; } public OnPlayerObjectMoved(playerid, objectid) { return 1; } public OnPlayerPickUpPickup(playerid, pickupid) { return 1; } public OnVehicleMod(playerid, vehicleid, componentid) { return 1; } public OnVehiclePaintjob(playerid, vehicleid, paintjobid) { return 1; } public OnVehicleRespray(playerid, vehicleid, color1, color2) { return 1; } public OnPlayerSelectedMenuRow(playerid, row) { return 1; } public OnPlayerExitedMenu(playerid) { return 1; } public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid) { return 1; } public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { return 1; } public OnRconLoginAttempt(ip[], password[], success) { return 1; } public OnPlayerUpdate(playerid) { return 1; } public OnPlayerStreamIn(playerid, forplayerid) { return 1; } public OnPlayerStreamOut(playerid, forplayerid) { return 1; } public OnVehicleStreamIn(vehicleid, forplayerid) { return 1; } public OnVehicleStreamOut(vehicleid, forplayerid) { return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch(dialogid) { case DLG_REG: { if(response) { if(!strlen(inputtext)) { ShowRegistration(playerid); return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Введите пароль в поле ниже и нажмите \"Далее\""); } if(strlen(inputtext) < 8 || strlen(inputtext) > 32) { ShowRegistration(playerid); return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Длина пароля должна быть от 8-ми до 32-ух символов"); } new regex:rg_passwordcheck = regex_new("^[a-zA-Z09]{1,}$"); if(regex_check(inputtext, rg_passwordcheck)) { strmid(player_info[playerid][PASSWORD], inputtext, 0, strlen(inputtext), 32); SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, "{8cff00}Регистрация{FFFFFF} + Ввод Email", "{FFFFFF}Введите ваш Email адрес\n\ Если вы потеряете доступ к аккаунту то вы сможете его востановить через Email\n\ Введите его в поле ниже и нажмите \"Далее\"", "Далее", ""); } else { ShowRegistration(playerid); return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Пароль может состоять только из чисел и латинских символов любого регистра"); } regex_delete(rg_passwordcheck); } else { SCM(playerid, COLOR_RED, "Используйте \"/q\", чтобы выйти"); SPD(playerid, -1, 0, "", "", "", ""); return Kick(playerid); } } case DLG_REGEMAIL: { if(!strlen(inputtext)) { SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, "{8cff00}Регистрация{FFFFFF} + Ввод Email", "{FFFFFF}Введите ваш Email адрес\n\ Если вы потеряете доступ к аккаунту то вы сможете его востановить через Email\n\ Введите его в поле ниже и нажмите \"Далее\"", "Далее", ""); return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Введите Email в поле ниже и нажмите \"Далее\""); } new regex:rg_emailcheck = regex_new("^[a-zA-Z0-9._-]{1,43}@[a-zA-Z]{1,12}.[a-zA-Z]{1,8}$"); if(regex_check(inputtext, rg_emailcheck)) { strmid(player_info[playerid][EMAIL], inputtext, 0, strlen(inputtext), 64); SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, "{8cff00}Регистрация{FFFFFF} + Ввод пригласившего", "{FFFFFF}Если ты зашел на сервер по приглашению, то\n\ можешь указать ник пригласившего в поле ниже:", "Далее", "Пропустить"); } else { SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, "{8cff00}Регистрация{FFFFFF} + Ввод Email", "{FFFFFF}Введите ваш Email адрес\n\ Если вы потеряете доступ к аккаунту то вы сможете его востановить через Email\n\ Введите его в поле ниже и нажмите \"Далее\"", "Далее", ""); return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Укажите правильно ваш Email адрес"); } regex_delete(rg_emailcheck); } case DLG_REGREF: { if(response) { new regex:rg_refcheck = regex_new("^[a-zA-Z_]{4,24}$"); if(regex_check(inputtext, rg_refcheck)) { static const fmt_query[] = "SELECT * FROM `users` WHERE `name` = '%s'"; new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)]; format(query, sizeof(query), fmt_query, inputtext); mysql_tquery(dbHandle, query, "CheckReferal", "is", playerid, inputtext); } else { SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, "{8cff00}Регистрация{FFFFFF} + Ввод пригласившего", "{FFFFFF}Если ты зашел на сервер по приглашению, то\n\ можешь указать ник пригласившего в поле ниже:", "Далее", "Пропустить"); return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Введите ник игрока пригласившего вас"); } regex_delete(rg_refcheck); } else { SPD(playerid, DLG_REGSEX, DIALOG_STYLE_MSGBOX, "", "{FFFFFF}Выбирите пол вашего персонажа", "Мужской", "Женский"); } } case DLG_REGSEX: { if(response) player_info[playerid][SEX] = 1; else player_info[playerid][SEX] = 2; SPD(playerid, DLG_REGAGE, DIALOG_STYLE_INPUT, "{8cff00}Регистрация{FFFFFF} + Выбор возраста персонажа", "{FFFFFF}Введите возраст будущего персонажа:\n\ {8cff00}\t* Введите возраст от 18-ти до 60-ти", "Далее", ""); } case DLG_REGAGE: { if(!strlen(inputtext)) { SPD(playerid, DLG_REGAGE, DIALOG_STYLE_INPUT, "{8cff00}Регистрация{FFFFFF} + Выбор возраста персонажа", "{FFFFFF}Введите возраст будущего персонажа:\n\ {8cff00}\t* Введите возраст от 18-ти до 60-ти", "Далее", ""); return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Введите ваш возраст в полениже и нажмите \"Далее\""); } if(strval(inputtext) < 18 || strval(inputtext) > 60) { SPD(playerid, DLG_REGAGE, DIALOG_STYLE_INPUT, "{8cff00}Регистрация{FFFFFF} + Выбор возраста персонажа", "{FFFFFF}Введите возраст будущего персонажа:\n\ {8cff00}\t* Введите возраст от 18-ти до 60-ти", "Далее", ""); return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Введите ваш возраст от 18-ти до 60-ти"); } player_info[playerid][AGE] = strval(inputtext); SCM(playerid, COLOR_WHITE, "Регистр завершен"); } } return 1; } forward CheckReferal(playerid, referal[]); public CheckReferal(playerid, referal[]) { new rows; cache_get_row_count(rows); if(rows) { new refid; cache_get_value_name_int(0, "id", refid); player_info[playerid][REF] = refid; SPD(playerid, DLG_REGSEX, DIALOG_STYLE_MSGBOX, "", "{FFFFFF}Выбирите пол вашего персонажа", "Мужской", "Женский"); } else { SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, "{8cff00}Регистрация{FFFFFF} + Ввод пригласившего", "{FFFFFF}Если ты зашел на сервер по приглашению, то\n\ можешь указать ник пригласившего в поле ниже:", "Далее", "Пропустить"); return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Аккаунта с таким ником не существует!"); } return 1; } public OnPlayerClickPlayer(playerid, clickedplayerid, source) { return 1; }Edited by DEST
Заметка от DEST , создано
3.2. Код больше 10 строк брать еще и под спойлер. Как это сделать рассказано в разделе "FAQ"
Устное предупреждение.
Share this post
Link to post