Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7
  1. #1
    Аватар для execution
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±

    ошибка 033: массив должен быть проиндексирован (переменная "-unknown-")

    Не понимаю в чём может быть причина.
    1. #define Name(%0) PlayerInfo[%0][pNames]
    2.  
    3. enum _:e_BATTLE_RESULT
    4. {
    5. BATTLE_PLAYER_LOSS = 0,
    6. BATTLE_PLAYER_WIN,
    7. BATTLE_PLAYER_TIME_OUT,
    8. BATTLE_PLAYER_DISCONNECT,
    9. BATTLE_PLAYER_LEAVE
    10. }
    11.  
    12. stock FinishPlayer_Battle(playerid, type)
    13. {
    14. new
    15. BATTLE_RESULT[e_BATTLE_RESULT][/PHP],
    16. _result[][] =
    17. {
    18. "Поражение над",
    19. "Победили",
    20. "Не найден соперник",
    21. "Вышел из игры",
    22. "Зону сражения покинул"
    23. };
    24.  
    25. switch(type)
    26. {
    27. case 0: _enemy_cout = 1;
    28. case 1: _enemy_cout = 0;
    29. case 3: _enemy_cout = 3;
    30. case 4: _enemy_cout = 4;
    31. }
    32.  
    33. format(string, 100, "[PVP]: Сражение подошло к концу. Результат: {FFFFFF}%s %s", _result[_enemy_cout], type == BATTLE_RESULT[BATTLE_PLAYER_TIME_OUT] ? (Name(playerid)) : ("")); // Тут ошибка. Когда убираю тернарник - всё норм.
    34. return SendClientMessage(plaeyerid, -1, string);
    35. }


    Использую так:
    1. FinishPlayer_Battle(playerid, BATTLE_RESULT[BATTLE_PLAYER_DISCONNECT]);


    UPD: Когда юзаю так, всё нормально:
    1. new
    2. reason[MAX_PLAYER_NAME + 1];
    3.  
    4. if(type == BATTLE_RESULT[BATTLE_PLAYER_TIME_OUT])
    5. strcat(reason, Name(playerid));
    6. else
    7. reason = "";
    8.  
    9. format(string, 144, "[PVP]: Сражение подошло к концу. Результат: {FFFFFF}%s %s", _result[_enemy_cout], reason);
    10. return SendClientMessage(playerid, 0xE5C62DFF, string);
    Последний раз редактировалось execution; 26.04.2018 в 08:20.

  2. #2
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    1. format(string, 100, "[PVP]: Сражение подошло к концу. Результат: {FFFFFF}%s %s", _result[_enemy_cout], (type == BATTLE_RESULT[BATTLE_PLAYER_TIME_OUT]) ? Name(playerid) : (""));

  3. #3
    Аватар для execution
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    Не, всё равно.

  4. #4
    Аватар для pawnoholic
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.01.2018
    Сообщений
    128
    Репутация:
    15 ±
    У перечислений не может быть тэгов.

    Не правильно
    PHP код:
    enum _:e_BATTLE_RESULT
    {
        ...

    Правильно:

    PHP код:
    enum e_BATTLE_RESULT
    {
        ...


  5. #5
    Аватар для execution
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    Цитата Сообщение от pawnoholic Посмотреть сообщение
    У перечислений не может быть тэгов.

    Не правильно
    PHP код:
    enum _:e_BATTLE_RESULT
    {
        ...

    Правильно:

    PHP код:
    enum e_BATTLE_RESULT
    {
        ...

    Дело не в этом, всё равно такая же ошибка.

  6. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
      Открыть/закрыть
    Цитата Сообщение от pawnoholic Посмотреть сообщение
    У перечислений не может быть тэгов.

    Не правильно
    PHP код:
    enum _:e_BATTLE_RESULT
    {
        ...

    Правильно:

    PHP код:
    enum e_BATTLE_RESULT
    {
        ...

    Вообще может :) Точнее, когда ты делаешь вот так:
    PHP код:
    enum e_BATTLE_RESULT
    {
        ...

    ты, по сути, делаешь вот так:
    PHP код:
    enum e_BATTLE_RESULT:e_BATTLE_RESULT
    {
        ...

    Вот такой код:
    PHP код:
    enum e_BATTLE_RESULT
    {
        ...
    };
    new 
    test[e_BATTLE_RESULT];

    main()
    {
        
    printf("%d"test[1]);

    Выдаст предупреждение о несовпадении тэгов. А если явно указать целочисленный тэг, как это делает автор, то уже предупреждения не будет


    Автор, что-то не совсем понятно как ты можешь вызывать функцию таким образом:
    PHP код:
    FinishPlayer_Battle(playeridBATTLE_RESULT[BATTLE_PLAYER_DISCONNECT]); 
    Если массив BATTLE_RESULT объявлен внутри функции FinishPlayer_Battle

    Собрал код в new.pwn и всё прекрасно компилируется после добавления недостающих переменных и испраления одной опечатки с "plaeyerid"
      Открыть/закрыть
    Последний раз редактировалось DeimoS; 26.04.2018 в 12:31.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  7. #7
    Аватар для execution
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
      Открыть/закрыть


    Вообще может :) Точнее, когда ты делаешь вот так:
    PHP код:
    enum e_BATTLE_RESULT
    {
        ...

    ты, по сути, делаешь вот так:
    PHP код:
    enum e_BATTLE_RESULT:e_BATTLE_RESULT
    {
        ...

    Вот такой код:
    PHP код:
    enum e_BATTLE_RESULT
    {
        ...
    };
    new 
    test[e_BATTLE_RESULT];

    main()
    {
        
    printf("%d"test[1]);

    Выдаст предупреждение о несовпадении тэгов. А если явно указать целочисленный тэг, как это делает автор, то уже предупреждения не будет


    Автор, что-то не совсем понятно как ты можешь вызывать функцию таким образом:
    PHP код:
    FinishPlayer_Battle(playeridBATTLE_RESULT[BATTLE_PLAYER_DISCONNECT]); 
    Если массив BATTLE_RESULT объявлен внутри функции FinishPlayer_Battle

    Собрал код в new.pwn и всё прекрасно компилируется после добавления недостающих переменных и испраления одной опечатки с "plaeyerid"
      Открыть/закрыть
    Массив BATTLE_RESULT обьявил глобальео, просто тут так получилось.

    На счет проблем с тернарником - подсказали, что это баг компилятора. Использую VS Code в котоом компилятор от Zeex, но как видимо старая версия. Спасибо.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •