Проверка, влияет ли Мод на Объект
Fallout New Vegas G.E.C.K. глазами разработчиков
RJ
2145
0
Многие плагины (моды) затрагивают Объекты, которые существуют в оригинальном Мастер-файле, так же как и создают свои, новые Объекты. Так как редактирование существующих объектов является абсолютно естественным, возможность, что такое редактирование будет отвергнуто в процессе загрузки мода должна приниматься во внимание.
Если два мода редактируют один и тот же Объект, только одна версия этого объекта будет использована в игре. "Победит" то редактирование, мод которого загружается последним - это зависит от пользователя, и его отношения к автору мода. Основываясь на этом, авторы модов должны принимать во внимание тот факт, что одно или несколько их изменений может быть "перезаписано" другим модом!
Один из способов проверить "перезаписывается" ли Объект другим модом, это создать постоянную ссылку "IsAffectedRef" и присоединить ей скрипт, который будет проверять состояние переменной "rIsAffected":
ScriptName GenericIsAffectedSCRIPT
short rIsAffected BEGIN OnLoad Set rIsAffected To IsAffectedRef END |
Если к Объекту присоединен скрипт с блоком OnLoad, как показано выше, есть возможность проверить "перезаписывается" ли этот объект. Чтобы сделать это вам нужно создать пустую ячейку (просто скопировать одну из ячеек Dummy в Fallout3.esm) и поместить в нее объект, который вы редактировали.
Теперь, установите объект как постоянную ссылку (Persistent Reference) и дайте этом объекту свой ObjectRefID. Когда вы захотите проверить "перезаписывается" или нет этот Объект, используйте скрипт, похожий на следующий:
ScriptName GetIsAffectedSCRIPT
short sDoOnce BEGIN BlockName ; имеется ввиду "имя блока", например GameMode
END |
Если вы хотите провести проверку "перезаписи" объекта Модов в условии (например, для кнопки в сообщении), тогда вам нужно проделать небольшую работу. Так как такого рода условия не могут выполнить проверку переменной на соответствие с ссылкой, вам нужно сделать что-то типа переменной "sObjectIsAffected", объявленной в скрипте квеста и в результате получить скрипт, похожий на следующий:
Set sQuestName.sObjectIsAffected To (ObjectRefID.rIsAffected == IsAffectedRef) |
Теперь в условии вы можете проверить является ли "sQuestName.sObjectIsAffected == 1".
Смотрите также
Запуск блока OnLoad на объектах, выключенных функцией Disable