Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Общие сведения о типах скриптов.

Поиск

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

  • Локальные (Reference scripts) - скрипты на объектах игрового мира.
  • Нелокальные скрипты (Non-reference scripts).

Локальные скрипты.

Локальные скрипты (Reference scripts) - это скрипты, которые запускаются на объектах. Они разделяются на два типа:

  • Скрипты, прикрепленные к объектам - объектные скрипты (References object scripts)
  • Скрипты в поле "result" диалогов (dialogue results)

В таких скриптах некоторые локальные функции (Reference functions) могут использоваться без явного указания ID объекта (ID_NameObject) – в этом случае они будут нацелены на объект, с которым этот скрипт связан (с объектом, на который он “повешен”).
Другими словами, локальные скрипты – это скрипты, в которых функции могут использовать неявные обращения к объекту, к которому они прикреплены. Например, если к NPC прикреплен локальный скрипт, то функция additem в этом скрипте добавит ему 100 золотых:

 

additem gold_001 100

 

Нелокальные скрипты.

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

  • Квестовые скрипты – скрипт можно сделать квестовым, если указать его тип "Quest" в окне редактирования скриптов.
  • Скрипты в поле результата стадии квеста.

 

С другой стороны, все скрипты можно разделить на:

  • Именованные скрипты (Named Scripts)
  • Результирующие (Result scripts).

Именованные скрипты.

Именованные скрипты – это полные скрипты, которые могут быть связаны с объектами, квестами или магическими эффектами и которые могут использовать переменные и begin/end блоки.
Именованные скрипты создаются с использованием окна редактирования скриптов. Эти скрипты могут в полной мере использовать все возможности скриптового языка. Командой scriptname им обязательно нужно дать имя.
Именованные скрипты могут быть трех типов:

· скрипты на объектах (объектные скрипты);

· квестовые скрипты;

· скрипты для магических эффектов;

и могут быть присоединены к объектам, квестам или магическим эффектам соответственно. Когда заскриптованный объект помещается в игровой мир (то есть, создается новая копия объекта), этот объект будет иметь собственные копии переменных, объявленных в скрипте. Таким образом, один и тот же скрипт может быть использован для контроля за состоянием нескольких копий объекта или даже к различным объектам.

 

Объектные скрипты.

 

Скрипты, “повешенные” на объектах - это именованные скрипты, которые могут быть прикреплены к любому объекту. Это всегда локальные скрипты и они могут использовать любые функции, кроме специализированных команд для магических эффектов.

Квестовые скрипты.

 

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

 

Основные положения:

§ Квестовые скрипты выполняются только тогда, когда выполняется квест (вы можете определить это в игре, напечатав в консоли sqv QUEST_NAME). Квесты начинаются и заканчиваются с помощью команд StartQuest и StopQuest. Эти команды не зависят от того, завершен квест или нет. Завершение квеста означает, что он перемещается на панель завершенных квестов (Completed Quest tab) в журнале игрока – но скрипт все равно будет исполняться, пока квест не будет переведен в пассивное состояние командой StopQuest.

§ Квест автоматически начинается, когда в журнал игрока записывается запись от этого квеста. Поэтому команда SetStage QUESTNAME 10 (если запись 10 содержит текст) автоматически начнет квест.

§ В общем, вы должны останавливать квест, когда он завершен, чтобы скрипт, прикрепленный к квесту, перестал исполняться. Если по какой-то причине квест должен оставаться активным (у вас есть диалог или скрипт, необходимый после окончания квеста), создайте второй квест (например, MS38 и MS38FIN).

§ Значения квестовых переменных можно запрашивать и изменять, даже когда квест не активен. Когда квест останавливается, его скрипт перестает исполняться, но он все равно существует и его переменные также остаются в целости.

Как изменить частоту выполнения квестового скрипта:

§ Объявите "магическую переменную" float fQuestDelayTime в вашем квестовом скрипте.

§ Присвойте переменной fQuestDelayTime число, определяющее требуемое время между циклами выполнения скрипта, в секундах. Чем меньше это значение, тем чаще будет выполняться ваш скрипт. Если число будет очень мало, например, 0.01 сек, то это будет соответствовать частоте исполнения скрипта 100 раз в секунду. Поскольку частота смены кадров (фреймов) на экране (fps) намного меньше, то ваш скрипт будет выполняться в каждом фрейме.
Если вы установите его в 0, скрипт будет выполняться каждые 5 секунд (время по умолчанию). Используйте эту возможность с осторожностью и в особых случаях – значение fQuestDelayTime должно быть меньше 5-ти секунд.

 

Скрипты для магических эффектов.

 

Скрипты для магических эффектов – это особые скрипты, которые можно использовать для создания заскриптованных магических эффектов. Они создаются в окне редактирования скриптов, но у них должен быть тип Magic Effect, иначе использовать магические эффекты не удастся. Такой скрипт будет выполняться, если игрок находится рядом, и будет останавливаться вместе с игрой при вызове какого-либо меню.
Эти скрипты не используют обычные типы блоков begin/end, поскольку выполняются до тех пор, пока эффект заклинания активен на цели. Для них существуют три специальных блока и одна особая функция.
Типы блоков для магических эффектов:

· ScriptEffectStart

· ScriptEffectFinish

· ScriptEffectUpdate

Другие типы блоков использовать нельзя (они будут скомпилированы, но код внутри них выполняться не будет).
Специальная функция для магических эффектов:

· ScriptEffectElapsedSeconds

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

Примечание (Visman): Некоторые плагиностроители умудряются, кроме блоков для магических эффектов, использовать в магических скриптах и блок GameMode, и такие скрипты нормально работают.

Результирующие скрипты.

 

Результирующие скрипты (Result scripts) – фрагменты скриптов, которые связаны с диалогами или стадиями квестов и возвращающие некий результат в поле result диалогового окна.
Скрипты в поле “result” (Result scripts) диалоговых окон конструктора – это скриптовые фрагменты, которые выполняются один раз, когда наступает определенное событие.

Существует два типа таких скриптов:

§ Скрипты в поле result диалога выполняются, когда NPC говорит связанное со скриптом сообщение. Такие скрипты, как и скрипты, прикрепленные к объектам, являются локальными скриптами.

§ Скрипты в поле result стадии квеста выполняются, когда достигнута определенная стадия квеста, и НУЖНЫЙ ПАРАМЕТР предмета или сам предмет стадии квеста (stage item) соответствует заданным условиям. Эти скрипты относятся к нелокальным скриптам.

Скрипты в поле result имеют следующие ограничения по сравнению с именованными скриптами:

§ В них нельзя объявлять переменные.

§ В них нельзя использовать блоки begin/end.

§ В диалоговых скриптах нельзя использовать неявное обращение к переменным локального скрипта NPC.

В остальном, скрипты в поле result могут использовать все обычные функции и команды.



Поделиться:


Последнее изменение этой страницы: 2016-07-11; просмотров: 433; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.135.206.212 (0.007 с.)