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

Нацеленные скрипты: запуск «глобальных» скриптов, привязанных к объекту

"Object_ID" -> StartScript "Script_ ID"

Возможно, использовать функцию StartScript, чтобы запускать глобальные скрипты, привязав их к объекту или Актеру. Эти скрипты напоминают и локальные скрипты (тем, что вызываемые функции действуют по умолчанию на «целевой» объект или Актера), так и глобальные скрипты (тем, что постоянно работают). Вот выдержка из письма FreshFish, который нашел этот воистину замечательный способ:

Вот что говориться в файле справки о StartScript:

Эта функция запускает скрипт на исполнение. Это будет Глобальный скрипт. Он не присоединен ни к одному объекту, так что функции, отвечающие за передвижение, вращение, проверку дистанции и т.д. не работают в них. Это чушь. Пробовали запускать такой скрипт из диалога? Или из скрипта с NPC? Все отлично работает, любые команды AiTravel или PositionCell в скрипте применяются к объектам, с которого он был запущен. Я назвал это 'нацеленные' скрипты. Нацеленные скрипты работают все время, как и глобальные, так что вы можете заставить вашего NPC делать что-то, пока вы в другой ячейке. А если вы запустите еще один скрипт из целевого, тогда этот скрипт унаследует ту же цель, так что можно делать ветвления, цепочки, что угодно.

Так что, похоже, ограничение на один маленький скрипт на объект больше не действует. Я должен указать, что целевые скрипты все-таки отличаются от 'локальных' тем, что переменные, объявленные в нацеленном скрипте не считаются локальными для объекта с точки зрения диалога и других скриптов.

Если скрипт останавливается, а затем перезапускается, любые переменные в нем сохранят свои значения, включая переменные doOnce, так что, если вы планируете использовать скрипт вновь, вам, возможно, придется переинициализировать кое-что самостоятельно. Я не знаю, что произойдет, если запустить один и тот же целевой скрипт более чем на одной цели одновременно, но сомневаюсь, что выйдет что-нибудь хорошее46".

>можно запустить один скрипт на объекте, а после его остановки, запустить второй, >другой скрипт на том же объекте?

Вы можете запустить другой скрипт на одном объекте в любое время, нет нужды ждать, когда завершиться первый. Будут ли конфликты — зависит от того, какие действия прописаны в скриптах. Например, NPC не может идти одновременно в двух направлениях.

>что с объектами, к которым присоединен "локальный" скрипт? >будут ли конфликты?

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

И еще немного информации из сообщения Riiak на форуме Morrowind Mods:

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

  2. Целевые скрипты можно запускать из общего диалога для группы NPC. Таким образом, можно написать диалог, например "Крестоносцы" и запустить скрипт с него, не заботясь о ID персонажа. (Это может привести к интересным ситуациям). Тот же путь предлагает Cortex: Вы можете использовать стандартные голосовые ответы (например, звуки, издаваемые Актерами, когда вы близко, когда они начинают бой, или когда по ним попадают), чтобы стартовать эти скрипты, так как у всех диалогов есть поле result. Это открывает много новых возможностей!

  3. Нацеленные скрипты могут получать доступ к инвентарю NPC (с теми же ограничениями, что и обычный доступ к инвентарю NPC, т.е. знание ID предмета, и т.д...)

  4. (Насколько я знаю) Не может использоваться для создания компаньонов в Трибунале, но может использоваться для скрипта простого последователя.

  5. (Насколько я знаю) Можно запускать несколько копий одного скрипта на одного NPC. (может быть полезно, но может и порождать проблемы)

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

При использовании нацеленных скриптов из диалога, скрипт всегда присоединяется к NPC, вызывающему отклик диалога, а не к указываемому объекту: Object_ID -> StartScript "script_name" не сработает, скрипт будет привязан к NPC, говорившему в диалоге (Информация с форумов / Argent).

Осторожнее с использованием нацеленных скриптов на неуникальных предметах. Это будет работать некоторое время, но после загрузки игры, скрипт будет присоединен к первой копии объекта, вместо того объекта, на котором он был изначально (Информация с форумов / MentalElf).