- 0
Войдите для возможности подписаться
Подписчики
0
Проблема с диалогами
-
Последние посетители 0 пользователей онлайн
Ни одного зарегистрированного пользователя не просматривает данную страницу

Гость 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; }Отредактировано пользователем DEST
Заметка от DEST , создано
3.2. Код больше 10 строк брать еще и под спойлер. Как это сделать рассказано в разделе "FAQ"
Устное предупреждение.
Поделиться сообщением
Ссылка на сообщение