Д'жинни Вики
Advertisement

Основной результат[]

Понятие очередности в «Ведьмаке» почти такое же, как в «NeverWinter Nights». Все действия будут выполнены в таком порядке, в каком они поставлены в очередь.

Пример[]

Рассмотрим этот небольшой скрипт:

// Геральт
object SDPLAYER = GetFirstPC();
// Появится «Здравствуй, Мир!» над головой Геральта.
AssignCommand(SDPLAYER,SpeakString("Привет всем"));
// Заставит Геральта выпить пива.
AssignCommand(SDPLAYER,ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK));
// Появится «Спасибо!!!» над головой Геральта.
AssignCommand(SDPLAYER,SpeakString("Спасибо!!!"));

Здесь очередность содержит следующие три действия, и они будут выполнены в таком порядке:

  1. «Здравствуй, Мир!»
  2. Выпивание
  3. «Спасибо!!!»

В таком случае Геральт выпьет, прежде чем произнесет «Спасибо!!!», что является плохой идеей. Поэтому следующий скрипт лучше:

object SDPLAYER = GetFirstPC();
AssignCommand(SDPLAYER,SpeakString("Здравствуй, Мир!"));
AssignCommand(SDPLAYER,SpeakString("Спасибо!!!"));
AssignCommand(SDPLAYER,ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK));

Очерёдность функций[]

  • Все функции, которые начинаются с Action*, подвергаются очерёдности, и их выполнение будет проходить в определённой последовательности.
  • Большинство функций с очерёдностью также имеет версию без очерёдности, которая немедленно выполняет действие вне зависимости от очереди.

Пример:

PlayAnimation()
vs
ActionPlayAnimation()
  • Большинство функций работает таким путём, кроме некоторых специальных.

Пример классической очерёдности функций[]

  • ActionPlayAnimation
  • ActionSpeakString
  • ActionCastSpellAtObject
  • и так далее

Специальная очерёдность функций[]

  • ActionJumpToLocation
// Объект немедленно перепрыгнет на lLocation (даже между областями).
// Если lLocation ошибочна, то ничего не произойдёт.
void ActionJumpToLocation(location lLocation);

Данное действие будет поставлено в очередь как первый элемент на выполнение. Все остальные действия всё ещё существуют, но будут выполнены позже.

  • ClearAllActions
// Очищает все действия.
// * Возвращаемого значения нет, но в случае ошибки в журнале ошибок будет записано
// «ClearAllActions failed.»
// - nClearCombatState: если так, то это немедленно остановит возможность
// сражаться с монстрами, что остановит боевую музыку, и позволит им спокойно
// стоять друг с другом, разговаривать и так далее.
void ClearAllActions(int nClearCombatState=FALSE, object oSubject=OBJECT_INVALID);

Очищает очерёдность определённого персонажа.

  • Полезная функция для того, чтобы очистить очерёдность и произвести выполнение определённого действия.

Присвоение действия[]

Последнее, хотя и не менее важное: для того чтобы действие было корректно поставлено в очередь, оно должно быть назначено на РС или NPC. Функция AssignCommand сделает эту работу.

// Присваивает aActionToAssign к oActionSubject.
// * Возвращаемого значения нет, но в случае ошибки в журнале ошибок будет записано
// «AssignCommand failed.».
// (Если объект не существует, ничего не произойдёт)
void AssignCommand(object oActionSubject,action aActionToAssign);


Шаблон:Общая информация о скриптах

Advertisement