FilterWML

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

Фильтрация в WML

filter - это специальный блок WML. Фильтры используются для описания группы юнитов, полей, оружия или чего-то ещё. Объект выбирается фильтром, если все ключи в фильтре соответствуют параметрам этого объекта. Например, если фильтр юнита содержит два ключа, то юнит должен соответствовать обоим ключам, чтобы соответствовать фильтру.

StandardUnit(Location, Side, ...)Filter - это место, где можно указать набор таких ключей и тегов. StandardFilter иногда требует соответствующих окружающих тегов, но зачастую можно обойтись и без них. Там, где в вики говорится, что Вы можете использовать StandardFilter, будет и указано, нужно ли окружить его тегами, или нет.

Фильтрация юнитов

Часто фильтры используются в тегах действий (см EventWML). В этом случае фраза "стандартный фильтр юнита" используется вместа набора стандартных ключей. Иногда фильтр используется для поиска первого юнита, соответствующего этом фильтру, например, тег [recall] вызовет этот юнит.

Стандартный фильтр юнитов так же используется в тегах [filter] и [filter_second]. Эти теги тега [event], которые описывают условия, когда событие должно быть вызвано. Большинство событий (см EventWML) содержат юниты, связанные с ними, называемые "primary unit" и "secondary unit". Для того, чтобы событие было вызвано, "primary unit" должен соответствовать фильтру [filter], а "secondary unit" - фильтру [filter_second].

Более подробно об этом написано в StandardUnitFilter.

Фильтрация локаций

Как Вы уже видели, стандартный фильтр юнита может содержать фильтр локации. Некоторые действия, такие как [terrain], так же используют фильтры локаций. Эти фильтры упоминаются в этой вики как "стандартный фильтр локации".

Более подробно об этом написано в StandardLocationFilter.

Фильтрация сторон

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

Более подробно об этом написано в StandardSideFilter.

Фильтр оружия

Иногда отфильтровать нужно оружие. Обратитесь так же к разделам EventWML, EffectWML, AnimationWML.

Следующие ключи используются в фильтрах оружия:

  • name: фильтрация по имени атаки
    Названия атак у стандартных бойцов можно глянуть в data/units/ или на http://www.wesnoth.org/units/.
  • range: фильтрация по дальности боя
    • melee: только контактные
    • ranged: только дистанционные
  • type: фильтрация по типу повреждений
    Допустимые значения: 'blade', 'pierce', 'impact', 'fire', 'cold', и 'arcane'.
  • damage: фильтрация по величине урона. Может быть числом или диапазоном, например 'damage=0-5,7-99'
  • special: фильтрация по особым свойствам. Значения перечислены в AbilitiesWML.

Фильтр территории

Этот раздел описывает практически то же самое, что и "фильтр локаций" выше, называемый StandardLocationFilter.

Используйте [filter_location] внутри [filter] , например:

[event]
    [filter]
        [filter_location]
            terrain=Ch 
        [/filter_location]
    [/filter]
[/event]

В некоторых случаях территория может быть отфильтрована по списку совпадения. Разделителем в этом списке служит точка с запятой. Поиск прекратится при первом совпадении строки территории. Есть один специальный знак !, который инвертирует совпадение. Строка территории может использовать * для обозначения 0 или более следующих символов; символы после * недопустимы и результат такой строки будет неопределён.

Пример 1:
ww* соответствует ww, www, wwW но не WWW
!, ww вернёт false если найдено ww и true если нет
!, ww, wa, !, aa вернёт false если найдено ww или wa found и true если найдено aa и false если ничего не найдено.


Пример 2:
*^V* соответствует всем деревням
Обратите внимание на то, что * может быть использовано для обоих слоёв (основа и overlay разделяются знаком ^).

Список типов территорий и их кодов см в TerrainCodesWML.

Фильтр обзора

Тег [filter_vision] позволяет фильтровать территорию на основе того, покрыта ли она туманом или нет для текущей стороны..

  • visible:
    • yes (по умолчанию): совпадение в случае если локация видна (и не покрыта туманом) viewing_side
    • no: совпадение в случае если локация не видна (или покрыта туманом) viewing_side
  • viewing_side: сторона, обзор которой фильтруется, или список таких сторон
    • Если перечислены несколько сторон, фильтр должен выполняться для всех сторон.
    • Если стороны не перечислены, фильтр должен выполняться для всех вражеских сторон.
  • StandardSideFilter (версия 1.11 и выше) теги и ключи; все совпадающие стороны должны быть способны видеть юнит/локацию. Если фильтр пустой, все стороны (не только вражеские) должны видеть юнита/локацию. viewing_side= переименован в сторону StandardSideFilter=.

Пример: Это событие будет вызвано, когда враг (сторона 2) перемещается в локацию, которая находится в зоне видимости игрока:

[event]
    name=moveto
    first_time_only=yes
    [filter]
        side=2
        [filter_vision]
            viewing_side=1 
        [/filter_vision]
    [/filter]
    [message]
        speaker=unit
        message="Я твой враг. Я знаю, что ты можешь меня тут видеть."
    [/message]
[/event]

Примечание: Этот фильтр полезен только тогда, когда поле зрения стороны ограничено. Вы можете ограничить зону видимости для AI. Это позволит Вам пользоваться этим фильтром для AI; хотя на данный момент это и не будет менять шаблон поведения компьютера, в будущем это может измениться.

См так же