Триггеры в Аллодах 2

Самое подробное руководство о том, как пользоваться скриптами редактора карт.

Руководство по “Trigger Manager”
(v. 0.15)

Автор: scrackan

Быстрый переход (оглавление):
Чеки (Checks) События (Instances)
  1. How many units contains this group
  2. Is unit in a box
  3. Is unit in a circle
  4. Get unit parameter
  5. Is unit alive?
  6. Distance between units
  7. Distance from point to unit
  8. How many units this player have
  9. Constant Value
  10. Distance to nearest units of player
  11. TRUE
  12. FALSE
  13. Is unit make attack
  14. Get diplomacy
  15. Get sack
  16. Item to point
  17. Item in inventory
  18. VIP
  19. Return value of variable
  20. How many buildings this player have
  21. Health of building
  22. Teleportation
  23. Get Scenario Variable
  24. Get Subobjective
  25. Spell on Tile
  26. Spell on Unit
  27. Centered on Tile
  1. Increment mission stage
  2. Send message
  3. Set value to variable
  4. Force “Mission Complete” state
  5. Force “Mission Fail” state
  6. Set formation
  7. Increment variable
  8. Change diplomacy
  9. Group Command : Guard
  10. Group Command : Swarm
  11. Group Command : Stand Ground
  12. Group Command : Move
  13. Group Command : Swarm 2
  14. Group Command : Attack
  15. Group Command : Defend
  16. Group Command : Patrol
  17. Drop Location
  18. Outpost (Repopper)
  19. Change unit’s owner
  20. Drop all
  21. Make spell effect
  22. Change group’s owner
  23. Group Command : Follow
  24. Add item to unit’s inventory
  25. Remove item from unit’s inventory
  26. Give item from one unit to another
  27. Phase in unit
  28. Phase out unit
  29. Polymorph unit
  30. Give money to player
  31. Cast spell to unit
  32. Set trap
  33. Set building’s health
  34. Teleport unit
  35. Group Command : Roam
  36. Give All
  37. Tile Spell Duration
  38. Unit Spell Duration
  39. Repop Delay
  40. Phase Out Group
  41. Phase In Group
  42. Set Unit Parameter
  43. Change next music to
  44. Set Scenario Variable
  45. Group Command : Dwell
  46. Set Subobjective
  47. Set music node
  48. Remove item from everybody’s inventory
  49. Suspend group
Приложения:
  1. Номера предметов
  2. Скрипты в файлах “missionXX.txt”

 

Trigger Manager – мощнейший инструмент для написания игровых сценариев сингл-миссий. Как бы пафосно это ни звучало, но его возможности почти безграничны, а простор для фантазии – огромен. Каждый триггер состоит из чека (check) и события (instance), т.е. кратко можно выразить его суть так: при определенном чеке (проверка: выполняется ли ряд условий?) происходит какое-либо событие.

Создание триггера

Для начала триггер нужно озаглавить. Введите название в поле “Trigger Name”; разумеется, оно должно быть кратким и понятным (например, Start, Come to ogre first time). Во избежание проблем, пожалуйста, не используйте кириллицу! Затем необходимо выбрать соответствующий чек выполнения триггера: if условие = какому-либо значению (кстати, вместо знака “=” можно использовать “>”, “<“, “!=” (не равно), “>=” (больше или равно) и “<=” (меньше или равно)), происходят определенные события.

Примечание: на самом деле в Trigger Manager’е для трех понятий применяется только одно слово – “check”. Для удобства будем использовать несколько терминов: чек – это непосредственно проверка: равно (больше, меньше, не равно, больше или равно, меньше или равно) ли какое-то условие (верхнее поле) определенному значению (нижнее поле).

Максимальное количество чеков в одном триггере – три (объединяются флажком and), а событий может быть до четырех. Если необходимо выполнить более 4 событий, создается еще один триггер (для удобства к названию первого тригера добавляется “2” – например Start2) с аналогичнымы чеками – туда и входят события, которые “не поместились” в предыдущий. Кстати, у большинства чеков должен стоять флажок Run Once (выполнять один раз).

Создание чеков

Прежде чем выбрать необходимые условия и значения для какого-либо чека, их нужно создать. Делается это в Check Manager (кнопка Manage Checks). Там представлено 27 базовых типов условий и значений (Check types), которым можно присваивать свои названия и ряд параметров.

В данной документации будут описаны все типы чеков, их параметры, примеры применения, а также возникающие проблемы и замеченные баги. Информация будет появляться постепенно (следите за версией руководства!), в зависимости от прогресса “анализа” сингл-миссий.

Check Types (типы чеков)

1. How many units contains this group

Сколько юнитов содержит группа (единственный параметр – номер группы). Если группа состоит из одного юнита, то чек “if ogres number (условие “How many units contains this group”) = FALSE” равнозначен чеку “if Is ogre alive? (условие “Is unit alive?”) = FALSE. По непонятным причинам разработчики “Аллодов” больше склоняются к первому варианту.

2. Is unit in a box

3. Is unit in a circle

4. Get unit parameter

Возвращает значение какого-либо параметра определенного юнита. Параметры условия:

  • Unit (ID юнита);
  • Parameter (номер параметра юнита; работает почему-то только “6” – это “жизнь”; остальные параметры = 0);

Например, чек “if Trolls health (условие “Get unit parameter”, Unit=23 (ID тролля на карте), Parameter=6 (“Жизнь”)) < 1229 – max trolls hp (значение “Constant Value”, Value=1229 (максимальная жизнь 4-го тролля))” означает “4-й тролль поврежден хотя бы на 1 единицу жизни”.

5. Is unit alive?

Проверка, жив ли какой-то конкретный юнит. Единственный параметр: Unit (ID юнита).

Это условие принимает значение TRUE (если жив) или FALSE (если мертв).

6. Distance between units

Расстояние между двумя юнитами. Параметры:

  • First unit – первый юнит (например, ID главного героя в кампании = 10001);
  • Second unit (ID – см. на карте);

В качестве второй части чека используется значение “Constant Value”. Дистанция для разговора, как правило, <= 4.

7. Distance from point to unit

Расстояние от точки на карте до юнита. Параметры:

  • Unit (ID юнита);
  • X (координаты по оси X);
  • Y (координаты по оси Y);

Например, чтобы создать условие “герой заходит на мост”, необходимо ввести: “if Hero to bridge distance (условие “Distance from point to unit”, Unit=10001, X=51, Y=39 (координаты точки на мосту)) <= 2 (значение “Constant Value”, Value=2)”.

8. How many units this player have

9. Constant Value

Постоянное значение (просто число). Используется в качестве второй части у большинства чеков. Для удобства его название делают таким же, как и само постоянное значение. Например, “if Hero to ogre distance (условие “Distance between units” между героем и людоедом) <= 4 (условие “Constant Value”)” означает “герой подошел к людоеду на 4 клетки или ближе”.

10. Distance to nearest units of player

Расстояние от точки с коодинатами X и Y до ближайшего юнита конкретного игрока. Параметры:

  • Player (номер игрока);
  • X;
  • Y;

11. TRUE

Без комментариев. 🙂

12. FALSE

Тоже без комментариев. 🙂 Хотя при создании триггера “start” иногда используется чек “if FALSE = FALSE“. С таким же успехом можно сделать и что-нибудь вроде “if 4 = 4” (т.е. в любом случае какой-то чек должен быть).

13. Is unit make attack

Очень странно работает. Единственный параметр: Unit (ID юнита). Если в качестве значения поставить =TRUE – ничего не пройзойдет (даже если юнит на кого-нибудь нападет), если поставить =FALSE – чек сработает в любом случае.

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

14. Get diplomacy

Проверка, нарушена ли изначально установленная дипломатия между игроками (players). Параметры:

  • Player 1 (номер 1-го игрока – см. в меню “Players” редактора карт; номер указан в поле “Color”);
  • Player 2 (номер 2-го игрока);

Get diplomacy принимает значения TRUE (если дипломатия изменилась) или FALSE. Кстати, не забывайте, что “!= FALSE” это то же самое, что и “= TRUE“.

Например, условие “if Skrakan is friendly (чек “Get diplomacy”, Player 1 = “1” (self), Player 2 = “8” (Skrakan)) = TRUE” будет нарушено, если герой нападет на Скракана.А последствия не заставят себя ждать. 🙂

15. Get sack

Проверка, поднял ли кто-нибудь мешок, лежащий в точке с координатами X и Y. Параметры:

  • X;
  • Y;

Обратите внимание на странную особенность: условие “Get sack = FALSE” сработает в том случае, если кто-нибудь поднимет мешок!

16. Item to point

Расстояние от точки с кординатами X и Y до юнита, который несет конкретный предмет. Параметры:

  • Unit (ID юнита, который несет какой-то конкретный предмет);
  • Item (номер предмета – см. Приложение 1);
  • X;
  • Y;

17. Item in inventory

Проверка, имеется ли у конкретного юнита необходимый предмет. Параметры:

Это условие принимает значение TRUE (если необходимый предмета у юнита есть) или FALSE (если предмета нет).

18. VIP

19. Return value of variable

Самый сложный для понимания чек, но и самый необходимый. Если перевести название, получится “Вернуть значение переменной”. Это не совсем так; правильнее было бы сказать “Значение, на которое возросла переменная”. Параметры:

  • Variable (переменная (обратите внимание: это не сама переменная, а лишь её номер!); почему-то разработчики всегда используют число 70 (тогда чек называют для удобства “v70”) и выше – возможно, чтобы не запутаться – но теоретически можно подставлять любое);

Данный чек работает в тесном сотрудничестве с событием Increment variable. Вместе они используются для того, чтобы проверить: был ли уже персонаж в определенном месте, сделал ли что-то до этого, и т.д.?

Объяснить их взаимодействие проще всего на примере – см. в описании события Increment variable.

20. How many buildings this player have

21. Health of building

22. Teleportation

23. Get Scenario Variable

24. Get Subobjective

25. Spell on Tile

26. Spell on Unit

27. Centered on Tile

Создание событий

Прежде чем выбрать необходимые события, их нужно создать. Делается это в Instance Manager (кнопка Manage Instances). Там представлено 49 базовых типов событий (Instance types), которым можно присваивать свои названия и ряд параметров.

В данной документации будут описаны все типы событий, их параметры, примеры применения, а также возникающие проблемы и замеченные баги. Информация будет появляться постепенно (следите за версией!), в зависимости от прогресса “анализа” сингл-миссий.

Instance Types (типы событий)

1. Increment mission stage

2. Send message

Вызвать определенный диалог, либо прочитать текст на дорожном указателе. Единственный параметр: Message number (номер диалога). Номер диалога прописывается в текстовом файле, который относится непосредственно к этой миссии (данному вопросу уделено отдельное внимание в Приложении 2); например, строка #event2 соответствует диалогу номер 2.

Если в качестве номера диалога поставить 250, в верхней части экрана вылетит сообщение “Вы получили дополнительную миссию!”

Чтобы присвоить надпись дорожному указателю, выберите конкретный указатель (Usable Pointer) в диалоге выбора здания, и нажмите кнопку “Special”. Затем выделите событие Send message, которое ему соответствует.

3. Set value to variable

4. Force “Mission Complete” state

Без параметров. Появляется табличка “Миссия выполнена”.

5. Force “Mission Fail” state

Появляется табличка “Миссия провалена”. Параметры: Cause number (номер причины проигрыша). Номер причины прописывается в текстовом файле, который относится непосредственно к этой миссии (данному вопросу уделено отдельное внимание в Приложении 2); например, строка #failure5 соответствует причине номер 5.

6. Set formation

7. Increment variable

Самое сложное для понимания событие, но и самое необходимое. Приращение переменной – переменная увеличивается на 1. Параметры:

  • Variable (переменная (обратите внимание: это не сама переменная, а лишь её номер!); почему-то разработчики всегда используют число 70 (тогда событие носит название “v70++”) и выше – возможно, чтобы не запутаться – но теоретически можно подставлять любое);

Данное событие работает в тесном сотрудничестве с чеком Return value of variable. Вместе они используются для того, чтобы проверить: был ли уже персонаж в определенном месте, сделал ли что-то до этого, и т.д.?

Объяснить их взаимодействие проще всего на примере. Возьмем “Аллоды 2”, 1-ю миссию – там есть мирный людоед.

Триггер 1: Come to ogre first time (подойти к людоеду первый раз)
Checks if Hero to ogre distance <= 4 Если герой подошел к людоеду на 4 клетки и ближе…
and v70 = FALSE …и приращения переменной номер 70 ещё не было (т.е. герой до этого не подходил к людоеду).
Instance Send message 4 – ogre first Людоед говорит “Оставь меня в покое!”…
v70++ …а переменная номер 70 увеличилась на 1.
Триггер 2: Go away from ogre (уйти от людоеда)
Checks if Hero to ogre distance > 4 Если герой отошел от людоеда на 4 клетки…
and v70 = 1 …и переменная номер70 уже увеличилась на 1 (она увеличилась в первом триггере, когда герой подошел к людоеду).
Instance v70++ Переменная номер 70 увеличивается еще на 1 (т.е. теперь уже на 2).
Триггер 3: Ogre annoyed (людоед раздражен)
Checks if Hero to ogre distance <= 4 Если герой подошел к людоеду на 4 клетки и ближе…
and v70 = 2 …и переменная номер70 уже увеличилась на 2 (она увеличилась на 2 во втором триггере, когда герой отошел от людоеда).
Instance Send message 5 – ogre attacks Людоед в ярости кричит “Где моя дубина?!”
Make ogre angry С помощью события Change diplomacy людоед становится врагом по отношению к герою.
v70++ Переменная номер 70 увеличивается еще на 1 (т.е. теперь уже на 3). Следовательно, тригерры 1,2,3 больше никогда не сработают…

8. Change diplomacy

Изменяет дипломатию одного игрока по отношению к другому. Параметры:

  • First player (номер игрока, чье отношение меняется);
  • Second Player (номер игрока, к которому меняется отношение);
  • Diplomacy (дипломатия: “0” означает, что 1й игрок относится ко 2-му нейтрально; “1” – враждебно; а “2” – это альянс);

Кстати, если вы ввели событие, в котором враг становится нейтральным к вам, сделайте и себя нейтральным по отношению к нему!

9. Group Command : Guard

10. Group Command : Swarm

Группа юнитов двигается в точку с координатами X и Y, уничтожая всех врагов на своём пути (т.е. “идет в боевой готовности”). Параметры:

  • X;
  • Y;
  • Group (номер группы на карте);

Чем это событие отличается от Group Command : Swarm 2 – я пока не понял.

11. Group Command : Stand Ground

Группа, которая получит такую команду, будет стоять на месте, и не сдвинется с места ни при каких обстоятельствах. Впрочем, атаковать слишком близко подошедших врагов (т.е. на расстояние выстрела или удара) они всё равно будут. Параметры:

  • Group (номер группы на карте);

Данная команда всегда отдаётся овцам на старте миссии. Это делается для того, чтобы при нападении на одну бедную овечку, ей на помощь не сбежалось всё стадо (т.к. весь скот на карте, как правило, объединен в одну группу).

12. Group Command : Move

Группа юнитов двигается в точку с координатами X и Y. Параметры:

  • X;
  • Y;
  • Group (номер группы на карте);

13. Group Command : Swarm 2

Группа юнитов двигается в точку с координатами X и Y, уничтожая всех врагов на своём пути (т.е. “идет в боевой готовности”). Параметры:

  • X;
  • Y;
  • Group (номер группы на карте);

Чем это событие отличается от Group Command : Swarm – я пока не понял.

14. Group Command : Attack

15. Group Command : Defend

Группа юнитов защищает другого юнита, т.е. если на него нападут, эта группа кинется убивать подлого негодяя. Параметры:

  • Unit to defend (ID юнита, которого будут защищать);
  • Follow range (расстояние, на котором защитники будут держаться от юнита);
  • Group (номер группы, которая будет защищать юнита);

16. Group Command : Patrol

Группа юнитов начинает патрулировать – т.е. перемещаться туда-сюда между какой-то отдаленной точкой (с координатами X и Y) и местом, в котором эта группа находилась непосредственно перед отдачей команды. Параметры:

  • X (координаты отдаленной точки);
  • Y (координаты отдаленной точки);
  • Group (номер группы на карте);

17. Drop Location

Место на карте, с которого будет начинать игру герой. Параметры: X и Y (соответствующие координаты). Несмотря на общую простоту, имеет ряд особенностей. Во-первых, для “Drop Location” не нужно вводить отдельный триггер (и, следовательно, чек) – достаточно всего лишь создать это событие в Instance Manager’е. Во-вторых, это единственное событие, использование которого обязательно в сетевых картах.

“Drop Location” может быть несколько – при заходе на карту место старта выберется случайным образом (в сетевой игре полезно против нуления на старте), – а может и не быть вовсе, но тогда игрока выкинет где попало (под монстра, над водой и т.п.), поэтому рекомендуется его все-таки ставить.

18. Outpost (Repopper)

19. Change unit’s owner

20. Drop all

21. Make spell effect

22. Change group’s owner

23. Group Command : Follow

24. Add item to unit’s inventory

Добавить какой-либо предмет в инвентарь юнита. Параметры:

  • Unit (ID юнита);
  • Item (номер предмета);

С помощью этого события в инвентарь юнита можно добавить только те предметы, которые нельзя надеть, т.е. книги, свитки, пузырьки и квестовые вещи. Номера этих предметов (всего – 96 штук) см. Приложение 1.

Обратите внимание, предмет можно дать любому юниту (даже монстру). Этот предмет, конечно же, не будет виден в инвентаре, но выпадет с трупа.

Для того, чтобы добавить в инвентарь остальные вещи (доспехи, оружие и т.п.), необходимо использовать событие Give All.

25. Remove item from unit’s inventory

Удаляет определенный предмет (если он есть) из инвентаря юнита. Параметры:

26. Give item from one unit to another

Удаляет определенный предмет из инвентаря одного юнита и добавляет его в инвентарь другого. Параметры:

  • From unit (ID юнита, который “отдает” предмет);
  • To unit (ID юнита, который получает предмет);
  • Item (номер предмета – см. Приложение 1);

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

27. Phase in unit

Исчезнувший (с помощью события Phase out unit) юнит появляется на карте. Параметр: Unit (ID юнита).

28. Phase out unit

Юнит исчезает с карты (т.е. он становится не просто невидимым, но и неосязаемым). Параметр: Unit (ID юнита).

29. Polymorph unit

На месте одного юнита появляется другой (т.е. первый как бы “превращается” во второго). Параметры:

  • Unit’s true form (ID юнита, который будет “превращаться”);
  • Unit’s polymorphed (ID юнита, который появится вместо первого);

Чтобы превращение выглядело более естественным, вторую “форму” юнита (Unit’s polymorphed) необходимо заранее убрать с карты с помощью события Phase out unit. Кстати “вторая форма” может принадлежать совершенно иной группе (и даже игроку), нежели “оригинал”, – т.о. можно, например, из доброго крестьянина сделать злобного орка! 🙂

30. Give money to player

Игрок получает деньги. Параметры:

  • Lucky Player (номер игрока-счастливчика);
  • Money (сумма в у.е.);

31. Cast spell to unit

32. Set trap

33. Set building’s health

34. Teleport unit

35. Group Command : Roam

36. Give All

Все вещи передаются от одного юнита к другому. Параметры:

  • Giving Unit (юнит, который теряет вещи);
  • Taking Unit (юнит, который получает вещи);

Не забывайте, добавить Giving Unit’у какие-то конкретные вещи можно в редакторе карт (в режиме Place Items) либо с помощью события Add item to unit’s inventory.

37. Tile Spell Duration

38. Unit Spell Duration

39. Repop Delay

40. Phase Out Group

Группа юнитов исчезает с карты (т.е. они становятся не просто невидимыми, но и неосязаемыми). Параметр: Group (номер группы).

41. Phase In Group

Исчезнувшая группа юнитов появляется на карте. Параметр: Group (номер группы).

42. Set Unit Parameter

Задает определенному юниту новое значение какого-либо параметра. Параметры события:

  • Unit (ID юнита);
  • Parameter (номер параметра юнита; работает почему-то только “6” – это “жизнь”; остальные параметры = 0);
  • New value (новое значение параметра);

Как правило, это событие используется для того, чтобы повергнуть определенного юнита (в самом начале миссии) в бессознательное состояние – т.е. Parameter = 6, New value = 0.

43. Change next music to

44. Set Scenario Variable

Сложное событие. Чтобы понять его полностью, необходимо копаться в исходниках. Приведу лишь пример его использования:

В миссии 20 разбойник расказывает герою о сокровище, т.е. персонаж получает дополнительную миссию. Для этого используется событие Set Scenario Variable (озаглавленное “Get mission 21“) с параметрами:

  • Variable to set: 772
  • Value: 1

А уже потом появляется надпись “Вы получили дополнительную миссию!” (см. Send message).

45. Group Command : Dwell

46. Set Subobjective

В списке заданий появляется новая подцель. Параметры:

  • Subobjective numb (номер подцели);
  • Value (“1” означает “подцель появилась”, “2” – подцель выполнена, “4” – подцель провалена);

Номер подцели прописывается в текстовом файле, который относится непосредственно к этой миссии (данному вопросу уделено отдельное внимание в Приложении 2); например, строка #subobjective2 соответствует подцели номер 2. Для удобства событие “Set Subobjective” со значением “1” (появилась подцель) называется Sub2+ или Sub2 – st, со значением “2” (подцель выполнена) – Sub2 – ok или Sub2!, а со значением “4” (подцель провалена) – Sub2-.

47. Set music node

48. Remove item from everybody’s inventory

49. Suspend group

 

Приложение 1: номера предметов

Книги (пустые)
Номер Книга Англ. название
-23 Воздух Book Air
-22 Вода Book Water
-21 Огонь Book Fire
-20 Земля Book Earth
-19 Астрал Book Astral

 

Свитки
 
Заклинание
Номер свитка
Обычного Эльфийского
Огненная стрела
-18
11
Огненный шар
-17
12
Огненная стена
-16
13
Защита от магии огня
-15
14
Ледяная стрела
-14
15
Ядовитый туман
-13
16
Град
-12
17
Защита от магии воды
-11
18
Кислотная атака
-10
19
Молния
-9
20
Радужная молния
-8
21
Невидимость
-7
22
Защита от магии воздуха
-6
23
Тьма
-5
24
Свечение
-4
25
Каменная стрела
-3
26
Каменная стена
-2
27
Каменное проклятие
-1
28
Защита от магии земли
0
29
Благословение
1
30
Ускорение
2
31
Перерождение
3
32
Телепорт
4
33
Исцеление
5
34
Зов
6
35
Вампиризм
7
36
Магический щит
8
37
Проклятие
9
38
Замедление
10
39

 

Зелья
Номер Зелье Англ. название
40 Зелье Неуязвимости Potion Antipoison
41 Зелье Силы Potion Body
42 Зелье Ловкости Potion Reaction
43 Зелье Разума Potion Mind
44 Зелье Духа Potion Spirit
45 Лечебная Мазь Potion Health Regeneration
46 Целебное Снадобье Potion Medium Healing
47 Сильнодействующее Целебное Снадобье Potion Big Healing
48 Магическая Мазь Potion Mana Regeneration
49 Запас Маны Potion Medium Mana
50 Большой Запас Маны Potion Big Mana
51 Снадобье для Воина Potion Fighter Bonus
52 Снадобье для Мага Potion Mage Bonus

 

Квестовые вещи
Номер Предмет Англ. название
53 Официальные Документы Quest Documents
54 Знамя Quest Banner
55 Часть короны Quest Crown1
56 Две части короны Quest Crown12
57 Две части короны Quest Crown13
58 Ингредиент Quest Ingredient
59 Сокровище !!! Quest Treasure
60 Загадочный Амулет Quest Amulet
61 Записки Звездочета Quest Map
62 Трофей Quest Head
63 Кристалл Quest Stone
64 Пустая Колба Quest Meta1
65 Наполненная Колба Quest Meta2
66 Элексир Превращения Quest Meta3
67 Элексир Драконьего Превращения Quest Meta4
68 Руна Воздуха Quest RuneA
69 Руна Земли Quest RuneE
70 Руна Огня Quest RuneF
71 Руна Воды Quest RuneW
72 Кольцо Quest Ring

Приложение 2: Скрипты в файлах “missionXX.txt”

Речь идет о файлах “missionXX.txt”, которые находятся в “main.res\text\”. “ХХ” в данном случае – номер конкретной миссии, которой соответствует этот текстовый файл.

Итак, в файле “missionXX.txt” описываются:

  1. Задание на миссию;
  2. Разные подцели, появляющиеся в ходе выполнения миссии (этот пункт может и отсутствовать);
  3. Сообщения, которые выводятся в окошке “Миссия провалена” при различных вариантах проигрыша (герой погиб, нападение на мирных крестьян и т.п.);
  4. Диалоги и надписи на дорожных указателях.

Слова, начинающиеся с символа “#” (например, #briefing, #failure2, #subobjective1, #event5), будем условно называть открывающими тэгами (т.к. некоторое сходство с HTML-тэгами всё-таки имеется), а отдельно стоящий символ “#” – закрывающим тэгом. Всё, что находится между ними (основной текст), как раз и представляет интерес для нас (подробнее – см. ниже). Кстати, закрывающий тэг можно не ставить, если сразу после основного текста (т.е. со следующей строки) начинается новый открывающий тэг.

Текст, начинающийся после символа “=” является комментарием. Комментарии, естественно, никак не влияют на игру, и создаются только для удобства разработчиков. Для еще большего удобства (точнее, для большей заметности) несколько знаков “=” ставятся и до, и после текста комментария (например, ===Герой погиб===).

Все тэги, комментарии, а также основной текст должны начинаться с новой строки!

1. Задание на миссию

Начинается с тэга #briefing . Всё, что написано между ним и закрывающим тэгом, будет выводиться в окошке “Задание на миссию”.

2. Подцели

Открывающий тэг имеет вид #subobjectiveX, где X – номер соответствующей подцели (начиная с #subobjective1). Текст, находящийся между открывающим и закрывающим тэгами, будет выводиться в окошке “Задание на миссию” при получении дополнительных подцелей в ходе выполнения миссии (см. событие Set Subobjective).

3. Сообщения о провале миссии

Открывающий тэг имеет вид #failureX, где X – номер соответствующей причины проигрыша. Текст, находящийся между открывающим и закрывающим тэгами, будет выводиться в окошке “Миссия провалена”, в зависимости от того, какую ошибку допустил игрок (см. событие Force “Mission Fail” state).

По умолчанию, тэг #failure2 соответствует смерти главного героя, #failure3 – Иглеза, #failure4 – Дайны (т.е их смерть не нужно дополнительно прописывать в триггерах миссии).

4. Диалоги и надписи на указателях

Диалоги

Структура всех диалогов такова. Сначала идёт открывающий тэг #eventX (где X – номер соответствующего диалога), затем – специальная строка, выделенная угловыми скобками, затем – текст первого сообщения (под “сообщением” понимается часть диалога, помещающаяся в одном окошке), затем опять специальная строка, затем – текст второго сообщения и т.д. А уже потом – закрывающий тэг.

Рассмотреть эту самую строчку в угловых скобках проще всего на примере:

<npc=21, iammale, iamfighter, part=1>

21” в приведённом примере – это номер персонажа, который “говорит” в данный момент. Обратите внимание: это не ID юнита на карте!!! Это всего лишь номер картинки соответствующего NPC (но он обязан присутствовать на карте)! Например, на карте может находиться несколько безоружных мужчин-крестьян (одинаковых); для всех них используется один и тот же номер – 2108, т.к. в окошке диалога показывается не сам персонаж, а его картинка.

Итак, 21 – номер главного героя, 22 – Иглеза, 23 – Дайны. Номера монстров (кроме 5-го уровня) и некоторых NPC можно посмотреть здесь http://home.peterstar.ru/boris/files/npc_numbers.xls, остальные номера на данный момент уточняются.

iammale” (“iamfemale“) означает, что сообщение будет выводиться только в том случае, если главный герой – мужчина (женщина).

iamfighter” (“iammage“) означает, что сообщение будет выводиться только в том случае, если главный герой – воин (маг).

Использование iammale (iamfemale) и iamfighter (iammage) необязательно.

part=1” – порядковый номер сообщения в данном диалоге.

Как вызвать определенный диалог в ходе миссии – см. событие Send message.

Надписи на дорожных указателях

Структура такая же как у диалогов. Всё тот же тэг #eventX, всё та же строчка в угловых скобках (но в ней присутствует только “part=“). Пример:

=======Указатель к башне=======
#event19
<part=1>
Башня Великого Скракана
#

Как присвоить определенному указателю конкретную надпись – см. событие Send message.