Урок Перевод гайда от Noya по DataDriven способностям

I_GRIN_I

Друзья CG
15 Мар 2016
1,064
77
48
20
Реакции
76 0 1
#1
[size=20pt]DataDriven Способность.[/size]
DataDriven способность - это перечень значений KeyValues. KeyValues - это простая древовидная структура, используемая для хранения вложенных разделов, содержащих пары ключ/значение.

Способности DataDriven находятся в файле scripts/npc/npc_abilities_custom.txt внутри папки с вашим аддоном.

Эта способность, называемая "datadriven_skeleton" содержит в себе множество KeyValues, которые будут достаточно подробно рассмотрены в этом гайде.
Способность под спойлером:
Код:
"datadriven_skeleton"
{
  // General 
  // ----------------------------------------------------------------------------------------
  "BaseClass"       "ability_datadriven"
  "AbilityBehavior"    "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
  "AbilityTextureName"   "spellicon"
  "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
  "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
  "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES"
  "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL"

  "AbilityType"      "DOTA_ABILITY_TYPE_BASIC"
  "MaxLevel"        "7"
  "RequiredLevel"     "-4"
  "LevelsBetweenUpgrades" "7"

  "AbilityCastPoint"    "0.0"
  "AbilityCastAnimation"  "ACT_DOTA_ATTACK"
  "AnimationPlaybackRate" "1"
  "AnimationIgnoresModelScale" "1"

  // Stats
  //----------------------------------------------------------------------------------------
  "AbilityDamage"      "0 0 0 0"
  "AbilityManaCost"     "0 0 0 0"
  "AbilityCooldown"     "0.0 0.0 0.0 0.0"
  "AbilityCastRange"    "0"
  "AbilityCastRangeBuffer" "250"
  "AbilityChannelTime"   "0.0 0.0 0.0 0.0"
  "AbilityChannelledManaCostPerSecond" "30 35 40 45"
  "AbilityDuration"     "0.0 0.0 0.0 0.0"
  "AoERadius"        "250"

  // ...
}

[size=20pt]BaseClass.[/size]
BaseClass может иметь значение названия любой способности из доты, или же иметь значение "ability_datadriven", которое позволяет использовать все возможности DataDriven, данные нам Valve.

Используя способности в Dota как BaseClass, можно либо изменить значения способностей из обычной доты (изменения вносятся в файл scripts/npc/npc_abilities_override.txt), либо создать новую способность в npc_abilities_custom.txt которая получает выставленные переменные и значения. Однако нам недозволенно изменить/добавить свою внутреннюю структуру, так как этот код блокируется в коде C++ самой доты.

Здесь мы рассмотрим все, что касается написания собственных способностей с нуля, используя "BaseClass" "ability_datadriven.

[size=20pt]AbilityBehavior.[/size]
Это описывает, как способность работает, её общее поведение, выполняемое при её выполнении.

Вы можете использовать несколько значений, разделенных пробелами и такими | "трубами".

Пример:
Код:
"DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_NO_TARGET"
Список всех возможных значений AbilityBehavior:
Доступные флаги с ключом "AbilityBehavior".
[table]
[tr]
[td]AbilityBehavior[/td]
[td]Описание[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_NO_TARGET[/td]
[td]Не нужно цели или точки(на земле) для использования.
Способность срабатывает, как только нажата кнопка.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_UNIT_TARGET[/td]
[td]Нужна цель, на которую нужно прожать способность.
Требует AbilityUnitTargetTeam и AbilityUnitTargetType об этом далее...[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_POINT[/td]
[td]Можно использовать на точку на земле.
При нажатии на юнита способность используется на место, на котором стоял этот юнит.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_PASSIVE[/td]
[td]Не может быть прожата.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_CHANNELLED[/td]
[td]Прерываемая способность.
Если кастер двинется или будет обезмолвлен/застанен способность прервется.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_TOGGLE[/td]
[td]Можно включать и выключать.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_AURA[/td]
[td]Способность является аурой.
Не делает саму способность аурой.
Этот тег только покажет при наведении на способность, что она аура, но не сделает способность таковой.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_AUTOCAST[/td]
[td]Может быть активировано для автоматического использования.
Обычно не работает, если способность не автоатака(стрелы клинкза).
Тоесть ваша способность не будет использоваться по готовности как блудласт огра или броня лича.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_HIDDEN[/td]
[td]Не может быть скастована и не будет отображаться на HUD.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_AOE[/td]
[td]Будет показывать синюю область использования вокруг точки(стан Свена).
Использует AoERadius.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE[/td]
[td]Нельзя получить, нажав на HUD.
Пример: способности Invoker[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_ITEM[/td]
[td]Способность привязана к предмету. Нет необходимости использовать этот тег, игра сама назначит поведение для любого "item_datadriven"[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_DIRECTIONAL[/td]
[td]Имеет направление от героя.
Пример: Стрела Мираны или крюк Пуджа.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_IMMEDIATE[/td]
[td]Абилка будет использована немедленно (юнит остановит текущее действие и скастует), игнорируя последовательность действий (действия заданные через шифт).[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_NOASSIST[/td]
[td]А вот тут уже от меня... Вроде как эту способность нельзя применить на союзников, с включенным "без помощи" на вас. Точно не знаю, у Нойи в гайде тоже ничего не написано.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_ATTACK[/td]
[td]Это атака(стрелы клинкза) и эту способность нельзя применить на имунных к атакам юнитов.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES[/td]
[td]Не может быть использован, когда кастер находится в "корнях"(ульт трента или другая способность вещающая стату ROOTED).[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_UNRESTRICTED[/td]
[td]Способность можно использовать под салом.
Пример: "Вылезание" Lifestealer[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_DONT_ALERT_TARGET[/td]
[td]Не предупреждает врагов если способность использована на них.
Пример: разбег Spirit Breaker[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_DONT_RESUME_MOVEMENT[/td]
[td]После завершения, не продолжает движение кастера.
Подходит только для способностей без целей и не немедленных по действию.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK[/td]
[td]Способность не восстанавливает атаку после своего завершения.Подходит только для способностей без целей и не немедленных по действию и для целей типа юнита.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_NORMAL_WHEN_STOLEN[/td]
[td]Способность по-прежнему используется в точку каста, когда сбита.
Пример: пуф Мипо, телепорт Фуры.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING[/td]
[td]Способность игнорирует быстрый отказ(прожал способность и после нажал S).[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_IGNORE_PSEUDO_QUEUE[/td]
[td]Может быть скастована во время оглушения, каста другой способности или атаки. Применимо только к переключаемым способностям.
Пример: перекачка морфа[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_RUNE_TARGET[/td]
[td]Как цель может быть использована руна.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL[/td]
[td]Не отменяет _CHANNELLED способности.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_OPTIONAL_UNIT_TARGET[/td]
[td]Как ботл или варды, прожимается через ctrl.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_OPTIONAL_NO_TARGET[/td]
[td]Фигъ его знаетъ.[/td]
[/tr]
[/table]

[size=20pt]Подсказки Behavior.[/size]
Следующие теги будут генерировать подсказки по способности. Вы должны иметь, по крайней мере, один тег из этого списка. Остальные теги не несут никаких визуальных изменений.

Интерфейс может показывать только одну подсказку. Не используйте противоречащие друг другу теги(как например NO_TARGET с UNIT_TARGET).
[table]
[tr]
[td]AbilityBehavior[/td]
[td]Способность: подсказка[/td]
[td]Берет верх над[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_NO_TARGET[/td]
[td]Нет Цели[/td]
[td] [/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_UNIT_TARGET[/td]
[td]Цель - юнит[/td]
[td]_POINT[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_POINT[/td]
[td]Цель - точка[/td]
[td][/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_PASSIVE[/td]
[td]Пассивная[/td]
[td][/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_CHANNELLED[/td]
[td]Кастуемая[/td]
[td]_POINT и _UNIT[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_TOGGLE[/td]
[td]Переключаемая[/td]
[td]_POINT и _UNIT[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_AURA[/td]
[td]Аура[/td]
[td]_ PASSIVE[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_BEHAVIOR_AUTOCAST[/td]
[td]Авто-каст[/td]
[td]_UNIT_TARGET[/td]
[/tr]
[/table]

Например:
Код:
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED"
будет показано, как
proxy.php?image=http%3A%2F%2Fpuu.sh%2FdtrA7%2Fef45c12988.jpg&hash=824b7f9571fb831ccba62764af0bde65


[size=20pt]AbilityType.[/size]
Значение по умолчанию DOTA_ABILITY_TYPE_BASIC.
[table]
[tr]
[td]AbilityType[/td]
[td]Описание[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_TYPE_BASIC[/td]
[td]Нормальные способности, изучаемые на 1 уровне и качаемые каждые 2 уровня.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_TYPE_ULTIMATE[/td]
[td]5 уровней между обновлениями и требует уровень 6, чтобы провести первую прокачку.
Также показывает HUD, что это ультимативная способность.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_TYPE_ATTRIBUTES[/td]
[td]Используется для attribute_bonus.[/td]
[/tr]
[tr]
[td]DOTA_ABILITY_TYPE_HIDDEN[/td]
[td]Так же фиг знает зачем.[/td]
[/tr]
[/table]

Кроме того, интервалы прокачки и лимиты способности могут быть изменены этими keyvalues внутри основного блока способности:
[size=20pt]MaxLevel.[/size]
Интерфейс на данный момент поддерживает следующие уровни способности для отображения: 1, 3, 4, и 7.

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

Пример:
Код:
"MaxLevel" "10"
Демонстрация
[size=20pt]RequiredLevel.[/size]
На каком уровне эта способность может быть впервые прокачена. Значение может быть отрицательным, чтобы способность могла быть прокачана в любой момент, потому что следующее значение устанавливает уровень между прокачкой способности, в том числе одного первого.
[size=20pt]LevelsBetweenUpgrades.[/size]
Сколько уровней нужно ждать, чтобы поднять способность на следующий уровень.

Пример:
Код:
"MaxLevel" "7" "RequiredLevel" "-4" "LevelsBetweenUpgrades" "7"
Результаты: способность, которая может быть первый раз изучена на уровне 3, а затем прокачана каждые 7 уровней: 10/17/24/31/38/45

Максимальный уровень героев можно изменять с помощью Lua SetCustomHeroMaxLevel ( MAX_LEVEL ) функции API

[size=20pt]AbilityTextureName.[/size]
Имя файла значка, который будет отображаться в пользовательском интерфейсе для этой способности. Вы можете повторно использовать значок от другой способности. Внутреннее имя каждой дефолтной способности в Dota может быть получена здесь: Внутренние имена дефолтных способностей

Чтобы использовать свои собственные иконки, поместите их в resource\flash3\images\spellicons в папке вашего аддона и просто напишите имя вашей иконки, без пути и формата.

Формат иконки: 128х128 PNG

Пример:
Код:
"AbilityTextureName" "warchasers_buff"
proxy.php?image=https%3A%2F%2Fraw.githubusercontent.com%2FMNoya%2FWarchasers%2Fmaster%2Fgame%2Fdota_addons%2Fwarchasers%2Fresource%2Fflash3%2Fimages%2Fspellicons%2Fwarchasers_buff.png&hash=9ee829de681ac520d5998631cd6bfccc


[size=20pt]Reject Self Cast.[/size]
Добавлен вместе с Reborn.
Код:
"CastFilterRejectCaster" "1"
[size=20pt]Cast While Hidden.[/size]
Добавлен вместе с Reborn.
Код:
"IsCastableWhileHidden" "1"
[size=20pt]Targeting.[/size]
3 ключевых набора правил для выбора цели: Team, Type и Flags.
[size=16pt]Team.[/size]
[table]
[tr]
[td]AbilityUnitTargetTeam[/td]
[td]Описание[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_TEAM_BOTH[/td]
[td]Все[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_TEAM_ENEMY[/td]
[td]Враг[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_TEAM_FRIENDLY[/td]
[td]Союзники[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_TEAM_NONE[/td]
[td]Значение по умолчанию по умолчанию[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_TEAM_CUSTOM[/td]
[td]Фиг знает[/td]
[/tr]
[/table]

[size=16pt]Type.[/size].
Здесь в описании идут типы юнитов из npc_units_custom.txt, а так же из обычной доты. Так же обозначение типов юнитов в Lua.
[table]
[tr]
[td]AbilityUnitTargetType[/td]
[td]Цели[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_ALL[/td]
[td]Все, в том числе скрытые объекты[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_HERO[/td]
[td]npc_dota_hero героев
DOTA_NPC_UNIT_RELATIONSHIP_TYPE_HERO[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_BASIC[/td]
[td]Базовые юниты, в том числе призванные(summons)[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_MECHANICAL[/td]
[td]npc_dota_creep_siege
DOTA_NPC_UNIT_RELATIONSHIP_TYPE_SIEGE[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_BUILDING[/td]
[td]npc_dota_tower, npc_dota_building
DOTA_NPC_UNIT_RELATIONSHIP_TYPE_BUILDING[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_TREE[/td]
[td]ent_dota_tree
Например: Танго, Топорик(Quelling Blade)[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_CREEP[/td]
[td]npc_dota_creature, npc_dota_creep
Простые юниты, но может не принимать за цель некоторых призванных существ
Пример: ульт Клинкза[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_COURIER[/td]
[td]npc_dota_courier, npc_dota_flying_courier
DOTA_NPC_UNIT_RELATIONSHIP_TYPE_COURIER[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_NONE[/td]
[td]Ничего[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_OTHER[/td]
[td]Все, что не входит в предыдущие типы[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_CUSTOM[/td]
[td]Не выделяемые?
Например: Replicate, Sunder, Demonic Conversion, Tether, Infest...[/td]
[/tr]
[/table]

[size=16pt]Flags.[/size].
Флаги позволяют выбрать единицы, которые по умолчанию игнорируются (например, иммунитет к магии), или игнорировать определенные типы юнитов, которые в противном случае могут быть выбраны (как древние или союзники с иммунитетом к магии).
[table]
[tr]
[td]AbilityUnitTargetFlags[/td]
[td]Цели / Игнорируемые[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_NONE[/td]
[td]Значение по умолчанию[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_DEAD[/td]
[td]Мертвые единицы, которые в противном случае игнорируются.[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_MELEE_ONLY[/td]
[td]Юниты ближнего боя(Блоки у юнитов с AttackCapabilities DOTA_UNIT_CAP_MELEE_ATTACK)[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_RANGED_ONLY[/td]
[td]Юниты дальнего боя(Блоки у юнитов с AttackCapabilities DOTA_UNIT_CAP_RANGED_ATTACK)[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_MANA_ONLY[/td]
[td]Юниты с маной, без "StatusMana" "0" в npc_units файле.[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_CHECK_DISABLE_HELP[/td]
[td]Юниты с отключенной помощью
Не знаю, как сделать, чтобы datadriven использовал это?[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_NO_INVIS[/td]
[td]Игнорирует невидимых юнитов, с MODIFIER_STATE_INVISIBLE[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES[/td]
[td]Цели противника с MODIFIER_STATE_MAGIC_IMMUNE
Примеры: Ensnare, Culling Blade, Primal Roar...[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_NOT_MAGIC_IMMUNE_ALLIES[/td]
[td]Игнорирует союзников с MODIFIER_STATE_MAGIC_IMMUNE
Пример: Bane Nightmare[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_NOT_ATTACK_IMMUNE[/td]
[td]Юниты с MODIFIER_STATE_ATTACK_IMMUNE[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE[/td]
[td]Перерывается, когда цель уходит в туман войны
Примеры: Mana Drain, Life Drain[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_INVULNERABLE[/td]
[td]Юниты с MODIFIER_STATE_INVULNERABLE
Примеры: Assassinate, Recall, Boulder Smash..[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS[/td]
[td]Игнорирует юнитов с "IsAncient" "1"
Пример: Hand of Midas[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO[/td]
[td]Игнорирует юнитов с "ConsideredHero" "1"
Примеры: Astral Imprisonment, Disruption, Sunder[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_NOT_DOMINATED[/td]
[td]Юниты с MODIFIER_STATE_DOMINATED[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS[/td]
[td]Юниты с MODIFIER_PROPERTY_IS_ILLUSION[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_NOT_NIGHTMARED[/td]
[td]Юниты с MODIFIER_STATE_NIGHTMARED[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_NOT_SUMMONED[/td]
[td]Юниты, созданные ключом SpawnUnit[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_OUT_OF_WORLD[/td]
[td]Юниты с MODIFIER_STATE_OUT_OF_GAME[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_PLAYER_CONTROLLED[/td]
[td]Юниты управляемые игроком, можно менять в Lua IsControllableByAnyPlayer()[/td]
[/tr]
[tr]
[td]DOTA_UNIT_TARGET_FLAG_PREFER_ENEMIES[/td]
[td]Приоритеты юнитов за деревьями, когда оба кликабельны[/td]
[/tr]
[/table]

[size=16pt]Чистый список.[/size]

  • [li]DOTA_UNIT_TARGET_FLAG_NONE[/li]
    [li]DOTA_UNIT_TARGET_FLAG_DEAD[/li]
    [li]DOTA_UNIT_TARGET_FLAG_MELEE_ONLY[/li]
    [li]DOTA_UNIT_TARGET_FLAG_RANGED_ONLY[/li]
    [li]DOTA_UNIT_TARGET_FLAG_MANA_ONLY[/li]
    [li]DOTA_UNIT_TARGET_FLAG_CHECK_DISABLE_HELP[/li]
    [li]DOTA_UNIT_TARGET_FLAG_NO_INVIS[/li]
    [li]DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES[/li]
    [li]DOTA_UNIT_TARGET_FLAG_NOT_MAGIC_IMMUNE_ALLIES[/li]
    [li]DOTA_UNIT_TARGET_FLAG_NOT_ATTACK_IMMUNE[/li]
    [li]DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE[/li]
    [li]DOTA_UNIT_TARGET_FLAG_INVULNERABLE[/li]
    [li]DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS[/li]
    [li]DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO[/li]
    [li]DOTA_UNIT_TARGET_FLAG_NOT_DOMINATED[/li]
    [li]DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS[/li]
    [li]DOTA_UNIT_TARGET_FLAG_NOT_NIGHTMARED[/li]
    [li]DOTA_UNIT_TARGET_FLAG_NOT_SUMMONED[/li]
    [li]DOTA_UNIT_TARGET_FLAG_OUT_OF_WORLD[/li]
    [li]DOTA_UNIT_TARGET_FLAG_PLAYER_CONTROLLED[/li]
    [li]DOTA_UNIT_TARGET_FLAG_PREFER_ENEMIES[/li]

[size=16pt]Веселье с флагами.[/size]
Флаги были созданы для AbilityUnitTargetFlags, но это не единственное их применение:
То же самое относится и к Team и Types.

  • [li]В "Target" блока это дает контроль над тем, что за цель и какие флаги она имеет, чтобы применить что то к ним позже.[/li]
Код:
"Target" 
{
  "Center" "CASTER"
  "Flags" "DOTA_UNIT_TARGET_FLAG_DEAD"
}

  • [li]"TargetFlags" в "LinearProjectile" позволяет LinearProjectile игнорировать юнитов, на которых по умолчанию она была бы использована с Team+Type значения, например с MODIFIER_STATE_INVISIBLE.[/li]
    [li]"Aura_Flags" в модификаторе с другими "Aura" ключами могут быть использованы, например, чтобы сделать ауру, которая влияет только на Дальний бой, добавив DOTA_UNIT_TARGET_FLAG_RANGED_ONLY.[/li]
То же самое касается Teams и Types
Пример: прием всех дружественных юнитов в радиусе от кастера, в том числе курьеров, зданий и осадных юнитов, исключая героев, призванных юнитов и других управляемых игроками единиц.
Код:
"Target"
{
  "Center"  "CASTER"
  "Radius"  "%radius"

  //AbilityUnitTargetTeam values
  "Teams" "DOTA_UNIT_TARGET_TEAM_FRIENDLY"

  //AbilityUnitTargetTypes
  "Types" "DOTA_UNIT_TARGET_ALL"
  "ExcludeTypes" "DOTA_UNIT_TARGET_HERO"

  //AbilityUnitTargetFlags
  "Flags" "DOTA_UNIT_TARGET_FLAG_NOT_SUMMONED"
  "ExcludeFlags" "DOTA_UNIT_TARGET_FLAG_PLAYER_CONTROLLED"  
}
Пример: Переписанная стрела мираны, которая будет попадать только в героев, в том числе с иммунитетом к магии
Код:
"LinearProjectile"
{
  "Target" "POINT"
  "EffectName"   "particles/units/heroes/hero_mirana/mirana_spell_arrow.vpcf"
  "MoveSpeed"   "857"
  "StartRadius"  "115"
  "EndRadius"   "115"
  "StartPosition" "attach_attack1"
  "FixedDistance" "3000"
  "TargetTeams"  "DOTA_UNIT_TARGET_TEAM_ENEMY"
  "TargetTypes"  "DOTA_UNIT_TARGET_HERO"
  "TargetFlags"  "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES"
  "HasFrontalCone" "0"
  "ProvidesVision" "1"
  "VisionRadius"  "650"
}
С DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, и с DOTA_UNIT_TARGET_FLAG_NONE: Гифка для сравнения.
 
Последнее редактирование модератором:

Slavko

Продвинутый
22 Июн 2015
224
0
16
20
Реакции
0 0 0
#2
новичкам полезно будет, думаю. +реп
 
Реклама: