Данная запись является переводом статьи 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
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 accountSign in
Already have an account? Sign in here.
Sign In Now