Основной результат[]
Понятие очередности в «Ведьмаке» почти такое же, как в «NeverWinter Nights». Все действия будут выполнены в таком порядке, в каком они поставлены в очередь.
Пример[]
Рассмотрим этот небольшой скрипт:
// Геральт object SDPLAYER = GetFirstPC(); // Появится «Здравствуй, Мир!» над головой Геральта. AssignCommand(SDPLAYER,SpeakString("Привет всем")); // Заставит Геральта выпить пива. AssignCommand(SDPLAYER,ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK)); // Появится «Спасибо!!!» над головой Геральта. AssignCommand(SDPLAYER,SpeakString("Спасибо!!!"));
Здесь очередность содержит следующие три действия, и они будут выполнены в таком порядке:
- «Здравствуй, Мир!»
- Выпивание
- «Спасибо!!!»
В таком случае Геральт выпьет, прежде чем произнесет «Спасибо!!!», что является плохой идеей. Поэтому следующий скрипт лучше:
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);
Шаблон:Общая информация о скриптах