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

    Статус
    Оффлайн
    Регистрация
    22.05.2021
    Сообщений
    18
    Репутация:
    0 ±

    Выполнение невозможного кода

    Есть некий мод. В нем есть некий код. Собсна ближе к проблеме, есть некоторые условия, допустим:
    1. Где-то там в моде есть переменная test которая равна 0. Имеем следующее условие:
    2. if(test) { ... }

    Собсна вопрос, каким образом может проходить данное условие? Если переменная не равна 1 и выше.
    Из особенностей - использование YSI.

    - - - Добавлено - - -

    Переменная test представлена в виде двухмерного массива.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    1. if(test)

    Данное условие равносильно
    1. if(test != 0)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    22.05.2021
    Сообщений
    18
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    1. if(test)

    Данное условие равносильно
    1. if(test != 0)
    Без экспертов знаем чему это равносильно. Вопрос вообще в другом, а именно: почему проходит условие вида:
    1. new test = 0;
    2. if(test) { // этот код выполнится }

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

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

    Так ты значение проверяемой переменной логировал?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    22.05.2021
    Сообщений
    18
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А, не так понял суть вопроса.

    Так ты значение проверяемой переменной логировал?
    Да, там 0, проверка должна пройти при любом положительном, но оно все равно проходит.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну с тем, что ты дал в теме, вряд ли тебе кто-то сможет помочь.
    Как минимум, стоит дать реальный код, в котором имеется проблема. А ещё лучше - взять чистую сборку сервера и воссоздать проблему там, а после скинуть на форум архив с получившимся модом.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    22.05.2021
    Сообщений
    18
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну с тем, что ты дал в теме, вряд ли тебе кто-то сможет помочь.
    Как минимум, стоит дать реальный код, в котором имеется проблема. А ещё лучше - взять чистую сборку сервера и воссоздать проблему там, а после скинуть на форум архив с получившимся модом.
    Вряд ли получится дать мод. Мне хотя бы приблизительное направление куда копать. Сам проверял что мог, вроде все ок.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Для начала попробуй обновить YSI до последней версии.

    Если не поможет - как и говорил, вырезать проблемный код в чистый мод и посмотреть, будет ли и там воспроизводиться проблема.

    Если не будет, то, во-первых, внимательно перепроверить весь код, связанный с массивом (на случай каких-то собственных ошибок, которые мимо глаз пропустил), а, во-вторых, сделать бэкап мода и начать отрубать один за другим сторонние инклуды, комментируя весь код, который зависим от них. Собственно, так ты сможешь локализовать проблему.

    Ну и я всё ещё советую тебе хотя бы скрин реального кода предоставить, ибо с таким описанием тебе остаётся только надеяться на то, что кто-то уже сталкивался с подобным (но лично я, например, не припомню случаев, когда кто-то о подобном писал).
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  9. #9
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Добавлю свои 10 копеек:
    • Откомпилируй скрипт в отладочном режиме (в pawn.cfg добавить параметры "-d2" и "-O0") и подключи к серверу плагин CrashDetect. Если имеет место выход за пределы массива, плагин поможет найти проблемное место.
    • Если вышеописанное не помогает, попробуй прологировать значение переенной внутри if, т.е.
      1. if (test)
      2. {
      3. printf("test: %d", test);
      4. }

      Если выведенное значение меньше 256 и является кодом символа в ASCII, то следует смотреть на использование строковых функций. Суть в том, что если указать строковой функции неправильный размер целевого массива, можно легко получить выход за его пределы, который даже никаким крашдетектом не отловишь - потому и нужно вручную выверять места использования таких функций.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

 

 

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

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

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

Ваши права

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