главная турниры статьи wiki карта сайта логин

Автор Тема: EventWML  (Прочитано 1862 раз)

0 Пользователей и 1 Гость просматривают эту тему.


ShuricK

  • Эксперт
  • level 3
  • ***
  • Сообщений: 369
  • Shas'La Kel'Shan
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Opera 9.80 Opera 9.80
    • ICQ клиент - 574278280
    • Просмотр профиля

  • Раса: Механизм
EventWML
« : Июнь 10, 2010, 12:46:23 »
   Тег event используется для описания последовательности действий, который должны происходить в заранее определенный момент игры.Этот тег вкладывается в [scenario],[multiplayer],[tutorial],[test],[unit_type],[era].Внутри всех этих тегов, кроме unit_type, эвент будет работать в пределах только того сценария,в котором он обьявлен.Если эвент определен в теге [unit_type], то он будет срабатывать во всех всех сценариях, где используется данный юнит(но только после появления юнита этого типа в данном сценарии).Если используется в теге [era], то эвент будет триггериться во всех сценариях, где используется данная эра.

   Тег [event] может включать в себя ключи и подтеги, определяющие когда и в каком случае срабатывает данное событие.Самый важный элемент среди включаемых - ключ name.Без данного ключа эвент никогда не сработает И никаких сообщений об ошибке по этому поводу не будет.Поэтому данный ключ считается обязательным(хотя в теории в весноте нет обязательных ключей и тегов).Все остальные теги и ключи необязательны.

Ключ name

   name=<value>

   Данный ключ отличается от других тем, что он должен содержать как минимум одно из преопределенных значений.Этот ключ принимать как одно значение, так и несколько, разделенных запятой.По умолчанию, если не выставлен параметр first_time_only=no, то эвент срабатывает только один раз.

Предопределенные значение ключа name

prestart  - срабатывает перед отрисовкой экрана.Используется обычно для установки контроля над деревнями и т.п.Прим.: вне зависимости от значения параметра first_time_only срабатывает только один раз.

start - срабатывает после отрисовки карты, но до того, как игроки смогут что-либо сделать.Прим.игнорит занчение поля first_time_only, срабатывает только раз.

new turn - срабатывает когда последний игрок ЗАКАНЧИВАЕТ ход,НО после того, как параметр side_number,показывающий, чей ход, примет новое значение.Т.е. срабатывает ДО того, как восстановятся очки движения, произойдет лечение, до подсчета дохода.

side_turn - срабатывает в начале хода игрока контролирующего сторону Х, равную переменной side_number, до того как произойдет лечение, прирост денег и т.п.

ai_turn - срабатывает когда аи берет контроль над стороной.Срабатывает ПОСЛЕ эвента new turn.

turn refresh - аналогично new turn, случается до того, как игрок возьмет ход, НО после лечения, подсчета дохода и т.д.

turn X - срабатывает в начале Х хода.Х не может быть равно 1, в таком случае нужно использовать name=new turn и first_time_only=yes

time over - срабатывает когда ход заканчивается из-за условий сценария (Triggers on turn turns. (turns is specified in [scenario]) - ну как-то так ).

enemies defeated - срабатывает когда все несоюзные юниты с параметром canrecruit=yes убиты.

victory - все действия в эвенте с ключом victory будут выполнены перед выполнением тега [endlevel]result=victory[/endlevel] в данном сценарии.Используется для отладки сценариев.

defeat - аналогично victory для [endlevel]result=defeat[/endevel]


В эвентах со следующими значениями ключа name можно использовать фильтры

moveto - вызывает эвент после движения юнита.Обычно используется  с фильтром на локацию(на конечную!).
sighted - вызывает эвент когда целевой юнит становится видим для какого-либо другого,если перед этим был для этого же юнита невидим.Если на карте  нет тумана войны, эвент никогда не сработает.
attack - срабатывает перед атаке
attack end - срабатывает после атаки(до смерти любого из юнитов).
attacker hits - вызывает эвент когда атакующий юнит(primary unit) попадает в атакуемого(second unit)
attacker misses - аналогично при промахе
stone - срабатывает когда по юниту попала атака со свойством окаменение
last breath - после результов боя, после смерти юнита, но до отображения этого факта анимацией.
die - аналогично предыдущему но после анимации смерти(не уверен)
capture - вызывается когда юнит захватил деревню.
recruit - вызывается, когда юнит был нанят(подразумевается, что юнит попадает в действие фильтров)
prerecruit  - когда юнит куплен, но еще не отобразился на экране
recall  - когда юнит вернулся на карту
prerecall  - аналогично , но еще не отображено на экране
advance  - вызывается перед продвижением юнита  в новый тип юнита.
post advance - аналогично, после продвижения
select - когда юнит был выбран
menu item X - срабатывает когда выбран пункт меню с id=X.Заметьте, что если меню имеет вложенные теги[command],то данный эвент может сработать как до действий в теге [command],так и после.

Опциональные ключи и теги

[filter],[filter_second] - стандартные фильтры,все фильтры с приставкой здесь и далее подразумевают фильтр среди second unit
[filter_attack],[filter_second_attack] - фильтры на атаку со следующими дополнительными ключами
   - name: имя исплоьзуемой атаки
   - range: дальность
   - special: фильтр на наличие у используемой атаки спецсвойств

Список синхронизируемых эвентов в мультиплейере

moveto
sighted
attack
attack_end
attacker hits
attacker misses
defender hits
defender misses
stone
last breath
die
capture
recruit
prerecruit
recall
prerecall
advance
post_advance
events fired from WML event handler that is synchronous
new turn (Development version only)
side turn (Development version only)
turn X (Development version only)
turn refresh (Development version only)

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

Примеры

[event]
    name=die
    [message]
        speaker=second_unit
        message= _ "Hahaha! I finally killed you!"
    [/message]

    [message]
        speaker=unit
        message= _ "It's not over yet! I'll come back to haunt you!"
    [/message]
[/event]

[event]
    name=turn 10

    [event]
        name=moveto

        [filter]
            x,y=5,8
        [/filter]

        # moving to 5,8 will trigger this event only on turn 10 and after
    [/event]
[/event]

В данной статье временно не рассматриваются вложенные эвенты.