• 0
Sign in to follow this  
Followers 0
Guest Danil

Проблема с диалогами

Question

Тут такое дело, делаю мод по урокам одного чела на Ютюбе "Регистрация", и вот решил не добавлять выбор нации, а все остальное есть, ошибок нигде нет, а диалог выбора пола не появляется, все остальные диалоги показывает
 

Спойлер

#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

0 answers to this question

There have been no answers to this question yet

Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.