Jump to content
  • Новые материалы

  • Странности скриптов в Oblivion


    Ed_MSL

    Данная запись является переводом статьи https://www.shrine-of-kynareth.de/scripting-oddities-in-oblivion.

    Я собираюсь использовать эту страницу для описания странностей, с которыми я столкнулся при попытке модифицировать Oblivion. В качестве базы я использую Elder Scrolls CS Wiki и буду записывать только то поведение, которое там не описано или прямо противоречит тому, что написано.

    RemoveMeIR

    Удаление элементов с помощью RemoveMeIR от игрока оставляет *что-то* после себя.
    Допустим, вы удалили яблоки из инвентаря с помощью RemoveMeIR. Если посмотреть инвентарь, яблок нет. Но если вы проверите инвентарь с помощью GetItemCount, он все равно вернет 1 яблоко, которые вы можете удалить с помощью RemoveItem, после чего GetItemCount вернет 0.
    Я еще не проверял, происходит ли то же самое с контейнерами.

    ResetInterior

    ResetInterior работает не так, как описано в вики.
    В вики написано: Помечает ячейку как просроченную, поэтому в следующий раз, когда игра будет сохранена или игрок войдет в ячейку, она будет очищена, как будто прошло несколько дней.
    Это не так. Эта ячейка будет полностью сброшена, удалено все, что вы бросите на пол, чего обычно не происходит, если ячейка сбрасывается после ожидания нескольких дней. Поэтому это хорошая функция для ячеек типа арены (фактически, арена — единственное место, где она используется), но плохая функция для домов игрока.

    SetDescription

    SetDescription имеет необязательный третий аргумент для установки текста перков, которые вы получаете при достижении уровня 25/50/75/100. Использование команды без третьего аргумента все равно установит все 5 текстов, обычное описание навыков, а также тексты всех четырех перков.
    Я не нашел способа установить только обычное описание навыков, не устанавливая при этом тексты уровня мастерства.

    OnSoulTrap

    Обработчик события OnSoulTrapможет вызвать сбои при использовании украденного камня души или, возможно, к которому прикреплена другая дополнительная информация, что делает его практически непригодным для использования.

    Примечание: В xOBSE этот баг был иправлен. Существует вероятность того, что в этом обработчике событий есть еще не исправленные ошибки.

    OnScriptedSkillUp

    OnScriptedSkillUp ведет себя странно. Если вы установите основные уровни навыков внутри обработчика события OnScriptedSkillUp, он будет игнорировать настройки игры для необходимых улучшений навыков. Если вы установите это значение на 100, как это делают многие моды уровней, чтобы иметь возможность отображать прогресс в %, любое значение, превышающее 9, все равно будет запускать повышение уровня.

    Используя точно такой же код внутри обработчика события OnSkillUp работает так, как ожидалось. Один из обходных путей, который я использовал, заключался в запуске квеста, который запускался и вносил желаемые изменения, а затем снова останавливался.

    Кроме того, получение перка с помощью скриптового повышения навыка (например, с помощью AdvSkill) не приведет к появлению обычного сообщения о перке со значком навыка и текстом, а создаст обычное окно сообщения.

    GetFirstRef

    Третий аргумент includeInactiveRefs в функциях GetFirstRef и GetNextRef не работает. Он никогда не найдет ссылки, которые были подставлены в него.

    SetHarvested

    В вики написано: Примечание: Изменения сохраняются в сэйве.

    После быстрого теста это, похоже, не так. После перезагрузки игры растения вернулись в прежнее состояние.  Дальше тестировать не стал, так как в любом случае для меня это было недостаточно надежно.

    Update3D

    В вики написано: Эта команда в данный момент работает некорректно при вызове на игроке.

    Update3D похоже, по большей части работает на игроке, с некоторыми оговорками:
    Его можно использовать только тогда, когда игрок находится в режиме от третьего лица.
    При использовании на игроке, когда он верхом, игра вылетает.

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

    ConScribe:DeleteLinesFromLog

    Функция DeleteLinesFromLog из мода ConScribe оставляет пустую строку в журнале всякий раз, когда она используется (я думаю, это было в конце журнала). Хорошей идеей может быть чтение всего журнала в массив, удаление всех пустых строк и последующее перестроение его время от времени (если вы регулярно удаляете из него строки).

    String Variables with %

    Возможно, это очевидно для других,к сожалению, не для меня: Если у вас есть строковая переменная, содержащая %,его нужно ввести как %%, чтобы распечатать как %.Если вы используете эту строковую переменную для создания другой строковой переменной, вам нужно удвоить ее.

    Допустим:
    let textPart := "I have a 100%%%% chance to mess that up"
    let textFull : "%z, and I don't like it" textPart
    Для этого даже есть хорошая функция, sv_Percentify, но, конечно, я обнаружил ее только после того, как целый час задавался вопросом, почему один из моих скриптов сломался.

    GoToJail

    Спасибо Кэт за то, что она выяснила это: эта функция работает только при использовании в результирующем скрипте диалога.  Если у игрока есть какие-либо предметы, оснащенные с помощью EquipItem 1 (установлен флаг отсутствия возможности снятия), это приведет к сбою игры.

    • Нравится 1

    User Feedback

    Recommended Comments

    There are no comments to display.



    Create an account or sign in to comment

    You need to be a member in order to leave a comment

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now

×
×
  • Create New...