Question

Приветствую всех форумчан. Недавно столкнулся с проблемой, а именно...
 

Спойлер

c:\Users\heazy\Desktop\Vershina\mod\gamemodes\vrp.pwn(159) : error 003: declaration of a local variable must appear in a compound block
c:\Users\heazy\Desktop\Vershina\mod\gamemodes\vrp.pwn(159) : error 017: undefined symbol "string"
c:\Users\heazy\Desktop\Vershina\mod\gamemodes\vrp.pwn(159) : warning 215: expression has no effect
c:\Users\heazy\Desktop\Vershina\mod\gamemodes\vrp.pwn(159) : error 001: expected token: ";", but found "]"
c:\Users\heazy\Desktop\Vershina\mod\gamemodes\vrp.pwn(159) : fatal error 107: too many error messages on one line

Спойлер
stock ShowRegistration(playerid)
{
    if(!IsPlayerConnected(playerid))
    new string[400]; << тут ошибка
    format(string, sizeof(string),
    "Приветствуем тебя, {"COLOR_VERSHINA"}%s! Добро пожаловать на "SERVER_NAME"!\n\
    Ваш аккаунт не зарегистрирован на нашем сервере.\n\
    Для игры на нашем сервере вам необходимо пройти регистрацию.\n\
    Придумайте надёжный пароль для вашего будущего аккаунта.\n\
    {00416a}\t• Пароль должен быть от 6-ми до 16-ти символов.\n\
    \t• Пароль должен состоять только из чисел и латинских символов любого регистра."
    pName(playerid),
    SPD(playerid, D_REG, DIALOG_STYLE_PASSWORD, "{"COLOR_VERSHINA"}Регистрация", string, "Далее","Отмена");
}
Прошу срочной помощи :3

Share this post


Link to post

3 answers to this question

  • 0

@heazych, после условных операторов (и ряда других, но в данный момент это неважно) вы можете либо выполнить одну какую-нибудь команду (операцию), либо поставить фигурные и выполнить несколько команд. Поэтому в вашем случае правильными будут два решения:

 

Спойлер

stock ShowRegistration(playerid)
{
	if(!IsPlayerConnected(playerid)) return 0; // но можно и не писать ноль
	
	new string[400];
	format(string, sizeof(string),
	"Приветствуем тебя, {"COLOR_VERSHINA"}%s! Добро пожаловать на "SERVER_NAME"!\n\
	Ваш аккаунт не зарегистрирован на нашем сервере.\n\
	Для игры на нашем сервере вам необходимо пройти регистрацию.\n\
	Придумайте надёжный пароль для вашего будущего аккаунта.\n\
	{00416a}\t Пароль должен быть от 6-ми до 16-ти символов.\n\
	\t Пароль должен состоять только из чисел и латинских символов любого регистра.", 
	pName(playerid));
	SPD(playerid, D_REG, DIALOG_STYLE_PASSWORD, "{"COLOR_VERSHINA"}Регистрация", string, "Далее","Отмена");
}

 

Спойлер

stock ShowRegistration(playerid)
{
	if(IsPlayerConnected(playerid)) {	
		new string[400];
		format(string, sizeof(string),
		"Приветствуем тебя, {"COLOR_VERSHINA"}%s! Добро пожаловать на "SERVER_NAME"!\n\
		Ваш аккаунт не зарегистрирован на нашем сервере.\n\
		Для игры на нашем сервере вам необходимо пройти регистрацию.\n\
		Придумайте надёжный пароль для вашего будущего аккаунта.\n\
		{00416a}\t Пароль должен быть от 6-ми до 16-ти символов.\n\
		\t Пароль должен состоять только из чисел и латинских символов любого регистра.", 
		pName(playerid));
		SPD(playerid, D_REG, DIALOG_STYLE_PASSWORD, "{"COLOR_VERSHINA"}Регистрация", string, "Далее","Отмена");
	}
}

 

 

Плюс к предыдущему сообщению, обратите внимание, что при использовании функции format у вас было 3 открывающихся скобки и 2 закрывающихся, а также отсутствовала точка с запятой в конце команды вызова функции format. В приложенных мною выше двух вариантах проблема с этим исправлена.

Share this post


Link to post
  • 0

@heazych, у вас после условного оператора нет никаких действий.

 

    if(!IsPlayerConnected(playerid))

Вероятно, должно быть так:

Спойлер

stock ShowRegistration(playerid)
{
	if(!IsPlayerConnected(playerid)) {
		return;
	}
	
	new string[400];
	format(string, sizeof(string),
	"Приветствуем тебя, {"COLOR_VERSHINA"}%s! Добро пожаловать на "SERVER_NAME"!\n\
	Ваш аккаунт не зарегистрирован на нашем сервере.\n\
	Для игры на нашем сервере вам необходимо пройти регистрацию.\n\
	Придумайте надёжный пароль для вашего будущего аккаунта.\n\
	{00416a}\t Пароль должен быть от 6-ми до 16-ти символов.\n\
	\t Пароль должен состоять только из чисел и латинских символов любого регистра.", 
	pName(playerid),
	SPD(playerid, D_REG, DIALOG_STYLE_PASSWORD, "{"COLOR_VERSHINA"}Регистрация", string, "Далее","Отмена");
}

 

 

:3

Share this post


Link to post
  • 0

@Jawn, проблему с string решил. Но появились следующие ошибки...

Спойлер

c:\Users\heazy\Desktop\Vershina\mod\gamemodes\vrp.pwn(161 -- 167) : error 001: expected token: "-string end-", but found "-identifier-"
c:\Users\heazy\Desktop\Vershina\mod\gamemodes\vrp.pwn(167) : warning 215: expression has no effect
c:\Users\heazy\Desktop\Vershina\mod\gamemodes\vrp.pwn(167) : error 001: expected token: ";", but found "-string-"
c:\Users\heazy\Desktop\Vershina\mod\gamemodes\vrp.pwn(167) : warning 215: expression has no effect
c:\Users\heazy\Desktop\Vershina\mod\gamemodes\vrp.pwn(167 -- 168) : warning 215: expression has no effect
c:\Users\heazy\Desktop\Vershina\mod\gamemodes\vrp.pwn(168) : error 001: expected token: ";", but found ")"
c:\Users\heazy\Desktop\Vershina\mod\gamemodes\vrp.pwn(168) : fatal error 107: too many error messages on one line


 

Спойлер
stock ShowRegistration(playerid)
{
    if(!IsPlayerConnected(playerid)) return 1;
    {
        new string[400];
        format(string, sizeof(string), - 161 строка
        "Приветствуем тебя, {"COLOR_VERSHINA"}%s! Добро пожаловать на "SERVER_NAME"!\n\
        Ваш аккаунт не зарегистрирован на нашем сервере.\n\
        Для игры на нашем сервере вам необходимо пройти регистрацию.\n\
        Придумайте надёжный пароль для вашего будущего аккаунта.\n\
        {00416a}\t• Пароль должен быть от 6-ми до 16-ти символов.\n\
        \t• Пароль должен состоять только из чисел и латинских символов любого регистра.", - 167 строка
        pName(playerid)); - 168 строка
        SPD(playerid, D_REG, DIALOG_STYLE_PASSWORD, "{"COLOR_VERSHINA"}Регистрация", string, "Далее","Отмена");
    }
}

 

Share this post


Link to post
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.

  • Similar Content

    • Danny_Marcelo
      By Danny_Marcelo
      Всех приветствую. Сегодня я решил обновить систему мероприятий, т.к. на самом проекте Advance RP уже давно видоизменили систему, добавили нового функционала. Мы не должны стоять на месте и я решил тоже свою систему доработать. Вы можете использовать данную систему как аналог Advance RP или же доработать для своего проекта. Все в ваших руках как говорится.
       
      Что нового?
       
      Итак приступим:
      Находим свои переменные и вставляем:
       
      new settp = 0; // Флаг включения/выключения телепортации new Float:TeleportFloat[3]; // Координаты точки телепортации new TeleportInfo[2]; // Интерьер и виртуальный мир new Float:PlayerLastPos[MAX_PLAYERS][3]; // Последние координаты игрока new PlayerLastInt[MAX_PLAYERS]; // Последний интерьер игрока new PlayerLastVW[MAX_PLAYERS]; // Последний виртуальный мир игрока new PlayerWeapons[MAX_PLAYERS][13][2]; // Оружие игрока (слот и патроны) new PlayerUsedTP[MAX_PLAYERS]; // Флаг для отслеживания использования /tp  
      Далее идём в команды, мой случай на Pawn.CMD, но +/- везде одинаково, разве что меняется шапка
       
      CMD:settp(playerid, params[]) {     if (PlayerInfo[playerid][pAdmin] < 4) return 1;     new string[95];     if (settp == 0)     {         GetPlayerPos(playerid, TeleportFloat[0], TeleportFloat[1], TeleportFloat[2]);         TeleportInfo[0] = GetPlayerInterior(playerid);         TeleportInfo[1] = GetPlayerVirtualWorld(playerid);         settp = 1;         format(string, sizeof(string), "[A] %s[%d] установил точку телепорта для игроков. {00CC00}ТП включен.", PlayerInfo[playerid][pName], playerid);         SendAdminMessage(0x52B2B5FF, string);     }     else     {         format(string, sizeof(string), "[A] %s[%d] удалил точку телепорта для игроков. {FF6600}ТП отключен.", PlayerInfo[playerid][pName], playerid);         SendAdminMessage(0x52B2B5FF, string);         settp = 0;     }     return 1; } CMD:tp(playerid, params[]) {     if (settp == 0) return SendClientMessage(playerid, 0xCECECEFF, !"Функция отключена администратором.");     if (PlayerInfo[playerid][pJailed] >= 1) return SendClientMessage(playerid, 0xCECECEFF, !"Арестованным не разрешено покидать камеру.");     if (PlayerInfo[playerid][pRabota] != 0) return SendClientMessage(playerid, 0xCECECEFF, !"Необходимо завершить все начатые работы и активные действия.");     if (bolkam[playerid] == true) return SendClientMessage(playerid, 0xCECECEFF, !"Необходимо завершить все начатые работы и активные действия.");     GetPlayerPos(playerid, PlayerLastPos[playerid][0], PlayerLastPos[playerid][1], PlayerLastPos[playerid][2]);     PlayerLastInt[playerid] = GetPlayerInterior(playerid);     PlayerLastVW[playerid] = GetPlayerVirtualWorld(playerid);     for (new i = 0; i < 13; i++)     {         GetPlayerWeaponData(playerid, i, PlayerWeapons[playerid][i][0], PlayerWeapons[playerid][i][1]);     }     PlayerUsedTP[playerid] = 1;     ShowPlayerDialog(playerid, 22, DIALOG_STYLE_MSGBOX, !"{6699FF}Телепортация",         !"{FFFFFF}Вы уверены, что хотите попасть на место проведения мероприятия?\n{FFCD00}Ваше оружие будет изъято для хранения и возвращено позже.", !"Да", !"Нет");     return 1; }  
       
      CMD:back(playerid, params[]) {     if (!PlayerUsedTP[playerid])     {         return SendClientMessage(playerid, 0xCECECEFF, !"Эту функцию можно использовать после {FF9933}/tp, /go {CECECE}или по окончании {FF9933}мероприятий");     }     SetPlayerPos(playerid, PlayerLastPos[playerid][0], PlayerLastPos[playerid][1], PlayerLastPos[playerid][2]);     SetPlayerInterior(playerid, PlayerLastInt[playerid]);     SetPlayerVirtualWorld(playerid, PlayerLastVW[playerid]);     ResetPlayerWeapons(playerid);     for (new i = 0; i < 13; i++)     {         if (PlayerWeapons[playerid][i][0] != 0)         {             GivePlayerWeapon(playerid, PlayerWeapons[playerid][i][0], PlayerWeapons[playerid][i][1]);         }     }     PlayerUsedTP[playerid] = 0;     SendClientMessage(playerid, 0x3399FFFF, !"Вы вернулись туда, где были до телепортации");     return 1; } Ну и в OnDialogResponse:
      case 22: // Не забудьте проверить и при надобности изменить id диалога на вашу цифру или ID_NAME         {             if (response)             {                 SetPlayerPos(playerid, TeleportFloat[0], TeleportFloat[1], TeleportFloat[2]);                 SetPlayerInterior(playerid, TeleportInfo[0]);                 SetPlayerVirtualWorld(playerid, TeleportInfo[1]);                 ResetPlayerWeapons(playerid);                 SendClientMessage(playerid, 0x66CCFFFF, "Вы были доставлены на место проведения мероприятия");                 SendClientMessage(playerid, 0x66CCFFFF, "Чтобы вернуться обратно, введите {FF9900}/back");             }         } Скриншоты:
       
      Если игрок сидит в КПЗ и вводит /tp:

       
      При включенном /tp:

       
      При выключенном /tp:

       
      Сообщение администраторам:

       
      Если работаешь или лечишься в больнице:

       
      Текст после телепортации:

       
      При вводе /back 1 и более раз:

       
      P.S. Команду /tp на Advance можно нажимать бесконечно, по этому я не стал сюда пихать аналогичную проверку как в /back.
      Если что, не сложно будет добавить 1 строчку проверки. Просто имейте ввиду, что это не баг. Просто нужно же соответствовать названию темы "На 100% КОПИЯ"))
       
      Автор: Danny_Marcelo
      Размещая на другие порталы, обязательно указать автора
    • Wiggins
      By Wiggins
      Доброго времени суток, нуждаюсь в помощи. Если есть люди, которые шарят в pawno, нужна помощь. Короче, мод ART RP, там в донате есть строка "Уникальные аксессуары", когда на него нажмешь, открывается TextDraw менью, нужно переделать это на обычную менью (/mm например, там обычная менью), буду рад, если поможете, за ранее спасибо.

      Если не ошибаюсь, строка текстдрав аксессуаров начинается с 1416 до 1443.
      art4.pwn