Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скрипты Morrowind.doc
Скачиваний:
92
Добавлен:
29.10.2018
Размер:
2.81 Mб
Скачать

Тестируем на присутствие другого мода

(от Ragnar_GD)

Некоторые люди хотят узнать из скрипта, загружен ли другой, особый плагин. Это возможно при некоторых обстоятельствах.

Это возможно если плагин, который вы хотите найти

  1. имеет совершенно уникальные глобальные переменные

  2. меняет эти переменные из скрипта

Если вы знаете такую переменную, вставьте ее в также в свой скрипт. Потом проверьте во время выполнения, принимает ли эта переменная другое значение, так, предполагая, что в другом моде есть переменная "ForeignGlobal", создайте ее и вы:

If (ForeignGlobal != 0)

MessageBox "Я обнаружил чужой плагин!"

endif

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

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

Я считаю, что возможность переписать Глобальные переменные другого плагина без предупреждения, это серьезная ошибка!

(Примечание от GBG: – еще одна причина тому, что люди должны использовать уникальные имена в собственных модах, если это возможно. Не называйте свою глобальную переменную "check", хотя бы назовите ее (ваши инициалы)_check, напр.: "YI_check" – это снимет множество проблем с совместимостью)

Безопасный старт глобальных скриптов — избегая скрипт main

С дополнениями это больше не является проблемой – просто добавьте желаемый скрипт в список "Start Scripts", выбрав пункт Edit Start Scripts из меню Gameplay. Этот скрипт будет запущен автоматически при загрузке, также как и основной скрипт. Для тех у кого нет Tribunal/Bloodmoon:

Многие моддеры любят добавлять строки в основной скрипт (main) (единственный скрипт, запускающийся по умолчанию, при старте новой игры, и работает всегда), чтобы быть уверенными в том, чтобы их глобальный скрипт, нужный для игры, запустился. Например:

StartScript "My_Script"

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

Begin Script_launcher

If ( ScriptRunning, My_Script == 0 )

StartScript, My_Script

; MessageBox "MyScript активирован" ; скажите об это игроку, если хотите

endif

End

Чтобы быть уверенным в том, что глобальный скрипт запустится в текущей игре, вы можете использовать подобный метод, поместив активаторы в наиболее посещаемые ячейки. Поместив их в Балмору, Вивек, Садрит Мору, Дагон Фел, Кальдеру и, дополнительно, в крепости Игрока, я уверен, что не пройдет много времени до запуска вашего скрипта. Также можно использовать объект, необходимый в вашем моде, чтобы запустить его. Например, для великолепного Банковского мода от Indestructibles, я сам сделал версию, в которой описанный выше скрипт присоединен к банковским вывескам и запускает скрипт "interest". Теперь скрипт запустится до того, как игрок войдет в банк.