ConditionalActionsWML

Материал из Wesnoth Life Wiki
Перейти к: навигация, поиск

< Данная статья еще недопереведена! Английский оригинал можно прочесть тут >

Часть ActionWML. Conditional Actions WML is used to describe container actions that create branching and flow control for WML. The conditional actions act as gatekeepers, encapsulating other actions with conditions which must be met before an action can take place. These conditional actions also contain the actions which will take place if those conditions are met and, in some cases, what actions will take place if they are not met.


Условные операции

Следующие теги позволяют выполнять различные операции в зависимости от условий.

[if]

Выполняет определенные операции только в случае соблюдения указанных условий.

  • теги условий: Условия, которые должны соблюдаться для запуска содержимого тега [then].
  • [then]: Содержит операции, выполняемые при соблюдении условий.
  • [else]: Содержит операции, выполняемые при несоблюдении условий.

Внимание: Тег [animation] также содержит дочерние теги [if] и [else], у которых другой синтаксис (см. AnimationWML).

[switch]

Выполняет различные наборы операций в зависимости от значения переменной.

  • variable: Имя проверяемой переменной.
  • [case]: Образует блок выполняемых действий:
    • value: Значение, которому должна соответствовать переменная для выполнения данного блока.
    • ActionWML: Выполняемые операции (вся остальная часть блока после атрибута value).
  • [else]: Блок, выполняемый, если значение переменной не подходит ни одному из [case].

Пример использования:

 [switch]
    variable=somevar
    [case]
       value="A"
       ... действия при somevar=A ...
    [/case]
    [case]
       value="B"
       ... действия при somevar=B ...
    [/case]
    [else]
       ... действия, выполняемые, если somevar не равняется ни A, ни B ...
    [/else]
 [/switch]

[while]

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


Упростить использование тега [while] могут макросы:

  • REPEAT, когда нужно выполнить какие-либо операции определенное число раз:
{REPEAT число_проходов выполняемые_операции}
{FOREACH массив счетчик}
    выполняемые операции
{NEXT счетчик}

[command]

А этот тег в основном служит безусловным контейнером — при его вызове все дочерние теги просто выполняются один раз. Он не несет особого смысла, но может быть использован для организации операций в логические группы — к примеру, для записи в переменную с последующим вызовом через [insert_tag]. Также используется в [set_menu_item] и в [option].


Теги условий

Базовые теги

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

[have_unit]
Проверяет, существует ли соответствующий фильтру боец.
  • StandardUnitFilter *: Критерии отбора. Тег [filter] использовать не нужно.
  • count (по умолчанию: "1-99999"): Количество найденных бойцов должно соответствовать указанному значению. В параметрах принимает отдельные числа, списки и диапазоны.
  • search_recall_list (по умолчанию: 'no'): При значение 'yes' включает в область поиска список призыва.
[have_location]
Проверяет, существует ли соответствующая фильтру местность.
  • StandardLocationFilter: Критерии отбора.
  • count (по умолчанию: "1-99999"): Количество найденных территорий должно соответствовать указанному значению. В параметрах принимает отдельные числа, списки и диапазоны.
[variable]
Сравнивает значение переменной с другим значением.
  • name: Имя рабочей переменной.
  • <условие>: Для сравнения используется один из следующих атрибутов:
    • contains: $name содержит указанную подстроку.
    • equals: Строковое значение $name равно указанному.
    • not_equals: Строковое значение $name не равно указанному.
    • numerical_equals: Числовое значение $name равно указанному.*
    • numerical_not_equals: Числовое значение $name не равно указанному.*
    • greater_than: $name больше, чем указанное значение.
    • greater_than_equal_to: $name больше или равно, чем указанное значение.
    • less_than: $name меньше, чем указанное значение.
    • less_than_equal_to: $name меньше или равно, чем указанное значение.
    • boolean_equals: Логическое значение $name равно указанному. *
    • boolean_not_equals: Логическое значение $name не равно указанному. *
      * Простое строковое сравнение работает быстрее, чем числовое или логическое, т.к. для этого не нужно ничего конвертировать. Но при этом значения "1" и "1.0", равные как числа, представляют из себя разные строки; так же, как "yes" и "true" имеют различные строковые значения, но одно логическое.

Логические значения

Когда значения интерпретируются как логические (boolean), они равняются либо false, либо true.

  • Значения, воспринимаемые как true (истина): "yes" и "true"
  • Значения, воспринимаемые как false (ложь): "no", "false" и ""(не задано)
    * Однако, в контексте, где значением по умолчанию является true, пустое значение так же интерпретируется как true.

Внимание: Не используйте в виде логических значений числа, строки "on" / "off" или что-то другое, отличное от вышеуказанного.

Комбинирование условий

Данные теги служат обертками над [variable], [have_unit] и [have_location] для создания различных комбинаций. Конструкции обрабатываются сверху вниз и могут до бесконечности вкладываться друг в друга. Только имейте в виду, что первый элемент связки "или" не должен оборачиваться тегом [or].

[and]
Добавляет дополнительное условие. Все условия, связанные через [and] должны быть соблюдены. Тег полезен как скобки для разных сложных структур, но не является необходимым для простой связи типа "и".
[or]
Добавляет альтернативное условие, позволяющее "забыть" о несоблюдении предыдущего. Т.е. из группы условий, связанных тегами [or] должно удовлетворяться хотя бы одно.
[not]
Тег, обратный тегу [and]. То есть заключенные в него условия должны возвращать false.
  • теги условий: Если возвращают true, тег [not] возвращает false; если false, то [not] возвращает true.

When multiple meta-conditions are encountered one after another in a containing tag, the evaluation order is as follows:

  1. the immediate contents of the containing tag are evaluated first to determine if there is a successful match known as a "true" condition
  2. this true or false result is combined with the top meta-condition to produce another true or false result
  3. this result is combined with the next meta-condition, and so on. However, if the engine recognizes that no remaining meta-conditions might reverse the result, it will cleverly skip them.
  4. if the final result is a successful match, then the action will take place.

Примеры создания связок

Пример 1. [(a&&b)||(c&&d)]

[if]
 #a
 #b
 [or]
  #c
  #d
 [/or]
 [then]
  #insert code
 [/then]
[/if]

Пример 2. [(a&&b)||(c&&(!e))]

[if]
 #a
 #b
 [or]
  #c
  [not]
   #e
  [/not]
 [/or]
 [then]
  #insert code
 [/then]
[/if]

Пример 3. [(a||b)&&(c||d))]

[if]
 #a
 [or]
  #b
 [/or]
 [and]
  #c
  [or]
   #d
  [/or]
 [/and]
 [then]
  #insert code
 [/then]
[/if]


Смотрите также