Difference between revisions of "Dota 2 Workshop Tools:ru/Scripting:ru/Abilities Data Driven:ru"

From Valve Developer Community
Jump to: navigation, search
(Полный перевод.)
Line 2: Line 2:
 
|zh-cn = Dota_2_Workshop_Tools:zh-cn/Scripting:zh-cn/Abilities_Data_Driven:zh-cn
 
|zh-cn = Dota_2_Workshop_Tools:zh-cn/Scripting:zh-cn/Abilities_Data_Driven:zh-cn
 
}}
 
}}
__TOC__В Dota 2 большинство способностей определено кодом игры (C++). Если посмотреть на способности в KV-файле npc_abilities.txt можно заметить что в описании способностей задаются некоторые значения, однако вся основная информация о поведении стандартных способностей задаётся непосредственно кодом игры. Система Data Driven Abilities это способ создания собственных способностей Dota 2 и использования специальных свойств и событий.
+
__TOC__
 +
Что такое абилка?
 +
Абилка это как русская матрешка, в которую можно упаковать модификаторы.
 +
Абилка это всегда одна матрешка, а вот внутри ее может быть много модификаторов матрешек.
 +
Модификатор это описание, что и как изменить в игровом мире.У него могут быть разные цели в игровом мире и достаточно большой перечень действий, которыми модификатор изменяет игровой мир и объекты в нем.
  
== Пример Data Driven Ability ==
+
Далее у абилки определяется сценарий ее поведения(пассивка, вкл/выкл, каст и т.п.)- "AbilityBehavior".
Простая способность может выглядеть примерно так.  Это пример пассивной способности которая даёт визуальный эффект юниту обладающему данной способностью.
+
Также можно сказать, что абилка это расширенный модификатор, которому позволено держать в себе простые модификаторы.
 +
 
 +
Абилка прикрепляется к объекту в игре в явном виде или скрытом. Модификаторы подобны гонцам, которые рассылает абилка другим объектам или самому себе, и когда гонцы доходят до объекта назначения, они на некоторое время становятся абилками этих объектов, внося присланные изменения объекту.
 +
 
 +
Многие встроенные абилки созданы в коде игры. У них есть только незначительные метаданные, которые можно изменить и находятся они в файле npc_abilities.txt. Формат файл представляет из себя Дерево Данных с Листьями(ДДЛ) в форме "Название" - "Значение".
 +
 
 +
Пример фрагмента из файла ДДЛ:
 +
<source lang="text">
 +
//Где-то раньше есть корень дерева. Этот пример лишь вырезка из дерева.
 +
...
 +
"fx_test_ability" //Точка ветвления
 +
{
 +
    // Основное
 +
    //-------------------------------------------------------------------------------------------------------------
 +
    "BaseClass"            "ability_datadriven" //Листья в формате "Название" - "Значение"
 +
    "AbilityBehavior"      "DOTA_ABILITY_BEHAVIOR_PASSIVE" //Листья в формате "Название" - "Значение"
 +
    "AbilityTextureName"    "axe_battle_hunger" //Листья в формате "Название" - "Значение"
 +
 
 +
    // Модификаторы
 +
    //-------------------------------------------------------------------------------------------------------------
 +
    "Modifiers" //Точка ветвления
 +
</source>
 +
Чтобы создавать новые абилки, можно использовать ДДЛ файлы.
 +
 
 +
Перейдем сразу к простому примеру, создания абилки с помощью ДДЛ формата.
 +
== Пример абилки с ипользованием Деревьев Данных с Листьями (ДДЛ) ==
 +
Это пример пассивной абилки, которая создает визуальный эффект над головой юнита.
  
 
<source lang="text">
 
<source lang="text">
Line 25: Line 55:
 
             "OnCreated"
 
             "OnCreated"
 
             {
 
             {
                 "AttachEffect"
+
                 "AttachEffect" //Действие модификатора
 
                 {
 
                 {
 
                     "Target" "CASTER"
 
                     "Target" "CASTER"
Line 39: Line 69:
 
</source>
 
</source>
  
Ключи <code>BaseClass</code>, <code>AbilityBehavior</code> и <code>AbilityTextureName</code> являются общими для всех способностей.
+
Названия <code>BaseClass</code>, <code>AbilityBehavior</code> и <code>AbilityTextureName</code> являются общими для всех способностей.
  
 
=== Описание примера ===
 
=== Описание примера ===
  
 
;<code>BaseClass</code>
 
;<code>BaseClass</code>
:Обычно Dota определяет C++ класс по имени способности (в данном случае "fx_test_ability"). Ключ <code>BaseClass</code> позволяет указать класс отличный от имени. В этом примере мы используем класс <code>ability_datadriven</code> чтобы соединить способность с системой Data Driven Ability. Также можно использовать класс любой другой способности Dota 2 чтобы создать собственную на её основе с изменением KV-опций.
+
Нужен, чтобы игра, понимала какой код соединить с абилкой.
 +
В этом примере мы используем имя <code>ability_datadriven</code>. Также можно использовать другие имена.
  
 
;<code>AbilityBehavior</code>
 
;<code>AbilityBehavior</code>
:Набор флагов описывающий различные свойства способности. Можно использовать несколько флагов разделяя их пробелами и <code>|</code>. К примеру <code>"DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_NO_TARGET"</code> Пробелы обязательны!
+
Установка сценария поведения абилки.
 +
К примеру <code>"DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_NO_TARGET"</code> Пробелы обязательны!
  
 
;<code>ID</code>
 
;<code>ID</code>
:Не используется. Этот ключ используется только основными способностями Dota 2, он не нужен при создании собственных.  Поэтому в примере этого ключа нет, а в описании стандартных способностей Dota 2 - есть. Однако в описании собственных ''предметов'' ID должен быть.
+
:Не используется для вновь создаваемых абилок.
  
 
;<code>AbilityTextureName</code>
 
;<code>AbilityTextureName</code>
:Имя файла изображения которое будет использоваться в пользовательском интерфейсе для данной способности. Также можно использовать иконки других способностей просто указав имя способности.
+
:Имя текстуры, которое будет отображаться в HUD.
  
 
;<code>Modifiers</code>
 
;<code>Modifiers</code>
:Unique to data-driven abilities. This block describes a set of modifiers (commonly seen as buffs/debuffs in game when visible) that are unique to this ability.  Each modifier is named by the name of the keyvalues block that defines the modifier.
+
Ветвь с модификаторами. Вложенные матрешки абилки.
  
 
;<code>Passive</code>
 
;<code>Passive</code>
:Flags the modifier as a passive modifier that should automatically be applied to the ability owner in this example.
+
Сценарий поведения модификатора. В данном случае пассивный, то есть работающий сразу без каких либо действий.
  
 
;<code>OnCreated</code>
 
;<code>OnCreated</code>
:The action block that is triggered when the modifier is first attached to the owner. In the above example, we attach a visual effect to the ability caster.
+
Событие, OnCreated, возникает, когда абилка запускает модификатор. У данного модификатора в качестве цели в игровом мире указан кастующий эта абилку.
  
== Флаги Поведения ==
+
== Сценарии поведений ==
Флаги доступные для использования с <code>"AbilityBehavior"</code>. Именно они в большинстве своем определяют механику способности.
+
<code>"AbilityBehavior"</code> заполняется одним из представленных имен.
  
 
<source lang="text">
 
<source lang="text">
DOTA_ABILITY_BEHAVIOR_HIDDEN              = 1 << 0, //Может принадлежать юниту, но не может быть использована и не будет показываться в HUD.
+
DOTA_ABILITY_BEHAVIOR_HIDDEN              = 1 << 0, //Может принадлежать юниту, но не может кастоваться и не будет показываться в HUD.
DOTA_ABILITY_BEHAVIOR_PASSIVE              = 1 << 1, //Не может быть использована, но отображается в HUD.
+
DOTA_ABILITY_BEHAVIOR_PASSIVE              = 1 << 1, //Не может кастоваться, но отображается в HUD.
DOTA_ABILITY_BEHAVIOR_NO_TARGET            = 1 << 2, //Для каста не требуется цель, способность срабатывает, как только будет нажата кнопка.
+
DOTA_ABILITY_BEHAVIOR_NO_TARGET            = 1 << 2, //Для абилки не требуется цель, способность срабатывает, как только будет нажата кнопка.
 
DOTA_ABILITY_BEHAVIOR_UNIT_TARGET          = 1 << 3, //Для каста способности в качестве цели требуется юнит (герой, крип и т.д.).
 
DOTA_ABILITY_BEHAVIOR_UNIT_TARGET          = 1 << 3, //Для каста способности в качестве цели требуется юнит (герой, крип и т.д.).
DOTA_ABILITY_BEHAVIOR_POINT                = 1 << 4, //Способность будет использована в месте где находился курсор.  
+
DOTA_ABILITY_BEHAVIOR_POINT                = 1 << 4, //Абилка будет использована в месте, где находился курсор.  
DOTA_ABILITY_BEHAVIOR_AOE                  = 1 << 5, //Механизм применения похож на POINT, но вокруг курсора будет выделена область в которой способность имеет эффект.
+
DOTA_ABILITY_BEHAVIOR_AOE                  = 1 << 5, //Механизм применения похож на POINT, но вокруг курсора будет выделена область в которой абилка будет работать.
DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE        = 1 << 6, //Probably can be cast or have a casting scheme but cannot be learned (these are usually abilities that are temporary like techie's bomb detonate).
+
DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE        = 1 << 6, //Абилка видна,доступна,уже изучена (применяется у минера как взрыватель бомб).
DOTA_ABILITY_BEHAVIOR_CHANNELLED          = 1 << 7, //Прерываемая способность. Если юнит будет оглушен или обезмолвлен - каст прервется.
+
DOTA_ABILITY_BEHAVIOR_CHANNELLED          = 1 << 7, //Прерываемая абилка. Если юнит будет оглушен или обезмолвлен - каст прервется.
DOTA_ABILITY_BEHAVIOR_ITEM                = 1 << 8, //Ability is tied up to an item.
+
DOTA_ABILITY_BEHAVIOR_ITEM                = 1 << 8, //Абилка связана с артефактом.
DOTA_ABILITY_BEHAVIOR_TOGGLE              = 1 << 9, //Способность можно включать и выключать.
+
DOTA_ABILITY_BEHAVIOR_TOGGLE              = 1 << 9, //Абилка можно включать и выключать.
DOTA_ABILITY_BEHAVIOR_DIRECTIONAL          = 1 << 10, //Has a direction from the hero, such as miranas arrow or pudge's hook.
+
DOTA_ABILITY_BEHAVIOR_DIRECTIONAL          = 1 << 10, //Работает по наравлению взгляда героя.
DOTA_ABILITY_BEHAVIOR_IMMEDIATE            = 1 << 11, //Способность будет использованна немедленно (юнит остановит текущее действие и скастует), игнорируя последовательность действий (действия заданные через шифт)
+
DOTA_ABILITY_BEHAVIOR_IMMEDIATE            = 1 << 11, //Абилка будет использованна немедленно (юнит остановит текущее действие и скастует), игнорируя последовательность действий (действия заданные через шифт)
DOTA_ABILITY_BEHAVIOR_AUTOCAST            = 1 << 12, //Способность имеет автокаст.
+
DOTA_ABILITY_BEHAVIOR_AUTOCAST            = 1 << 12, //Абилка имеет автокаст.
DOTA_ABILITY_BEHAVIOR_NOASSIST            = 1 << 13, //Ability has no reticle assist.
+
DOTA_ABILITY_BEHAVIOR_NOASSIST            = 1 << 13, //Ability has no reticle assist. Без перевода.
DOTA_ABILITY_BEHAVIOR_AURA                = 1 << 14, //Способность - аура.  В основом используется для обозначения способности как Аура, и ничего более.
+
DOTA_ABILITY_BEHAVIOR_AURA                = 1 << 14, //Абилка в виде ауры.
DOTA_ABILITY_BEHAVIOR_ATTACK              = 1 << 15, //Is an attack and cannot hit attack-immune targets.
+
DOTA_ABILITY_BEHAVIOR_ATTACK              = 1 << 15, //Работает как обычная атака и не может атаковать неатакуемые цели.
DOTA_ABILITY_BEHAVIOR_DONT_RESUME_MOVEMENT = 1 << 16, //Should not resume movement when it completes. Only applicable to no-target, non-immediate abilities.
+
DOTA_ABILITY_BEHAVIOR_DONT_RESUME_MOVEMENT = 1 << 16, //После завершения, не продолжает движение кастера. Подходит только для абилок без целей и не немедленных по действию.
DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES        = 1 << 17, //Cannot be used when rooted
+
DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES        = 1 << 17, //Не может быть использована , когда кастер в корнях.(Ульт Дерева)
DOTA_ABILITY_BEHAVIOR_UNRESTRICTED        = 1 << 18, //Ability is allowed when commands are restricted
+
DOTA_ABILITY_BEHAVIOR_UNRESTRICTED        = 1 << 18, //Абилка может быть использована под салом.
DOTA_ABILITY_BEHAVIOR_IGNORE_PSEUDO_QUEUE  = 1 << 19, //Can be executed while stunned, casting, or force-attacking. Only applicable to toggled abilities.
+
DOTA_ABILITY_BEHAVIOR_IGNORE_PSEUDO_QUEUE  = 1 << 19, //АБилка может быть использована, когда кастер под станом, кастует или атакует. Подходит только для абилок с вкл/выкл сценарием.
DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL      = 1 << 20, //Can be executed without interrupting channels.
+
DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL      = 1 << 20, //Может использоваться без прерывания прерываемых абилок.
DOTA_ABILITY_BEHAVIOR_DONT_CANCEL_MOVEMENT = 1 << 21, //Doesn't cause certain modifiers to end, used for courier and speed burst.
+
DOTA_ABILITY_BEHAVIOR_DONT_CANCEL_MOVEMENT = 1 << 21, //Не дает некоторым модификаторам закончить своё действие. Используеться на курьере у модификатора ускорение.
DOTA_ABILITY_BEHAVIOR_DONT_ALERT_TARGET    = 1 << 22, //Способность не привлекает внимание крипов когда использована на них.
+
DOTA_ABILITY_BEHAVIOR_DONT_ALERT_TARGET    = 1 << 22, //Абилка не агрит внимание крипов когда использована на них.
DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK  = 1 << 23, //Ability should not resume command-attacking the previous target when it completes. Only applicable to no-target, non-immediate abilities and unit-target abilities.
+
DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK  = 1 << 23, //Абилка не восстанавливает атаку после своего завершения.Подходит только для абилок без целей и не немедленных по действию и для целей типа юнита.
DOTA_ABILITY_BEHAVIOR_NORMAL_WHEN_STOLEN  = 1 << 24, //Ability still uses its normal cast point when stolen.
+
DOTA_ABILITY_BEHAVIOR_NORMAL_WHEN_STOLEN  = 1 << 24, //Абилка работает в точке каста, когда сбита.
DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING    = 1 << 25, //Ability ignores backswing psuedoqueue.
+
DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING    = 1 << 25, //Абилка игнорирует быстрый отказ(типа начал и отказался техника не сработает).
DOTA_ABILITY_BEHAVIOR_RUNE_TARGET          = 1 << 26, //Способность может быть использована на рунах.
+
DOTA_ABILITY_BEHAVIOR_RUNE_TARGET          = 1 << 26, //Абилка используется руны в качестве цели в игровом мире.
 
</source>
 
</source>
  
== События и Действия спелов ==
+
== События и Действия абилок ==
Способности могут иметь различные внутриигровые события, которые могут вызвать действия.
+
Абилки благодаря своему сценарию , рождают в игровом мире различные события.
 +
Эти события предлагают создателю абилки сделать еще какие либо действия в игровом мире.
  
 
=== События ===
 
=== События ===
Каждое из этих событий, может вызвать действия.
 
 
 
<code>
 
<code>
 
*OnChannelFinish
 
*OnChannelFinish
Line 141: Line 172:
 
=== Действия ===
 
=== Действия ===
 
Каждое действие содержит один или несколько параметров.
 
Каждое действие содержит один или несколько параметров.
 
+
Помните, чтобы абилки это как расширенные модификаторы, и поэтому они тоже могут делать действия в игровом мире. Далее дан список действий и их параметров.
 
<code>
 
<code>
 
*AddAbility
 
*AddAbility
Line 219: Line 250:
  
  
{{note|<code>AddAbility</code> adds a new ability at level 0.  <code>RemoveAbility</code> deletes the ability even if it has been leveledMore complex ability management should be done through script as opposed to the data driven system.}}
+
{{note|<code>AddAbility</code> добавляет абилку на уровне героя = 0.  <code>RemoveAbility</code> удаляет абилку, только если она была прокачанаБолее сложное управление абилками делается через LUA скрипты.}}
  
 
=== Пример ===
 
=== Пример ===
В примере, когда происходит событие - начало работы способности, ответным будет действие - воспроизведение звука.
+
Тут показано, что при работе абилки возникло событие OnSpellStart, тут Spell слово, хотя логичнее слово Ability. Далее определено действие FireSound, которое восроизводит звук в игровом мире. У этого действия есть свои параметры,
 +
параметр Target "Цель в игровом мире" и название звука.
  
 
<source lang="text">
 
<source lang="text">
Line 234: Line 266:
 
}
 
}
 
</source>
 
</source>
 
+
=== Значение точечных целей для Target ===
== Action Target Values ==
 
Within an action the <code>Target</code> key can be given a value to specify what it is that the target is.  This exposes some choices to make as to what you may want to target.
 
 
 
=== Single Target ===
 
Valid target values are as follows for single-target selection:
 
 
 
 
<code>
 
<code>
 
* CASTER
 
* CASTER
Line 249: Line 275:
 
</code>
 
</code>
  
In the above example where a sound is being played, notice that <code>Target</code> is set to <code>CASTER</code>. It will play the sound on the caster of the spell when it starts.
+
=== Многоцелевые значения для Target ===
 +
Чтобы указать сразу несколько целей в игровом мире для действия, используем следующие значения в Target.
 +
Далее перечислены значения, которые описывают область в которой нужно искать цели и каким образом фильтровать цели.  
  
{{note|These names mean different things in different events.  It may require some experimentation to discover exactly what in each case.}}
+
* <code>Center</code> - Где будет находится центр области(Круга).То есть на кастующем, на цели, на клике, на ракете, на юните, на атакующем.
 
 
=== Multiple Targets ===
 
For selecting multiple targets in an area, make the <code>Target</code> key a block with the following subkeys:
 
* <code>Center</code> - Center point of the circle.
 
 
: <code>CASTER, TARGET, POINT, PROJECTILE, UNIT, ATTACKER</code>
 
: <code>CASTER, TARGET, POINT, PROJECTILE, UNIT, ATTACKER</code>
* <code>Radius</code> - Number in units defining the radius to search for target(s) in.
+
* <code>Radius</code> - длина радиуса в юнитах(ед.изм Hammer редактора)
 
: <code>IntegerValue</code>
 
: <code>IntegerValue</code>
* <code>Teams</code> - Affect which teams.
+
* <code>Teams</code> - Фильтр по команде.
 
<code>
 
<code>
 
: DOTA_UNIT_TARGET_TEAM_BOTH
 
: DOTA_UNIT_TARGET_TEAM_BOTH
Line 267: Line 291:
 
: DOTA_UNIT_TARGET_TEAM_NONE
 
: DOTA_UNIT_TARGET_TEAM_NONE
 
</code>
 
</code>
* <code>Types, ExcludeTypes</code> - Target units of specified type or exclude units of specified type.
+
* <code>Types, ExcludeTypes</code> - Фильтр по типу объектов в игровом мире.
 
<code>  
 
<code>  
 
: DOTA_UNIT_TARGET_ALL
 
: DOTA_UNIT_TARGET_ALL
Line 281: Line 305:
 
: DOTA_UNIT_TARGET_TREE
 
: DOTA_UNIT_TARGET_TREE
 
</code>
 
</code>
* <code>Flags, ExcludeFlags</code> - Target units with specific flags or reject units with specific flag.
+
* <code>Flags, ExcludeFlags</code> - Фильтр по флагам, которые установлены у объектов игрового мира.
 
<code>
 
<code>
 
: DOTA_UNIT_TARGET_FLAG_CHECK_DISABLE_HELP
 
: DOTA_UNIT_TARGET_FLAG_CHECK_DISABLE_HELP
Line 304: Line 328:
 
: DOTA_UNIT_TARGET_FLAG_RANGED_ONLY
 
: DOTA_UNIT_TARGET_FLAG_RANGED_ONLY
 
</code>
 
</code>
* <code>MaxTargets</code> - Maximum number of targets to select.
+
* <code>MaxTargets</code> -Максимум найденных целей в области.
 
: <code>IntegerValue</code>
 
: <code>IntegerValue</code>
* <code>Random</code> - Whether to select a random unit if more than MaxTargets exist.
+
* <code>Random</code> - Добавить ли еще один рандомный объект из игрового мира сверх максимума.
 
: <code>BooleanValue</code>
 
: <code>BooleanValue</code>
* <code>ScriptSelectPoints</code>
+
* <code>ScriptSelectPoints</code> - Поиск в области делается через LUA скрипт.
 
: <code>ScriptFile, Function, Radius, Count</code>
 
: <code>ScriptFile, Function, Radius, Count</code>
  
{{note|<code>Random</code> set to 0 in conjunction with a <code>MaxTargets</code> value will cause the ability to only function if there is <code>MaxTargets</code> or less targets in the area.}}
+
== Модификаторы ==
 
+
Перечень "Название"-"Значение" для модификаторов:
== Modifiers ==
 
Modifiers may have following keys:
 
 
<code>
 
<code>
 
* Attributes
 
* Attributes
Line 344: Line 366:
  
 
* OverrideAnimation
 
* OverrideAnimation
Other actions can be found at [[Dota 2 Workshop Tools/Actions List|the action list]], but these are the most commonly available ones.
+
 
 
:ACT_DOTA_ATTACK
 
:ACT_DOTA_ATTACK
 
:ACT_DOTA_CAST_ABILITY_1 (2, 3, 4, 5, 6)
 
:ACT_DOTA_CAST_ABILITY_1 (2, 3, 4, 5, 6)
Line 352: Line 374:
 
:ACT_DOTA_TELEPORT
 
:ACT_DOTA_TELEPORT
 
:ACT_DOTA_VICTORY
 
:ACT_DOTA_VICTORY
 +
Дан не полный список действий, которые может выполнять модификатор. Остальные смотрим тут [[Dota 2 Workshop Tools/Actions List|the action list]].
  
 +
Ниже уже дополнительные метаданные из "Название"-"Значение":
 
* Passive
 
* Passive
 
:BooleanValue
 
:BooleanValue
Line 363: Line 387:
 
</code>
 
</code>
  
=== Modifier Properties ===
+
=== Свойства игровых объектов мира доступных модификаторам ===
Свойства модификатора, это игровые значения которые модификатор изменяет при применении на юнита. Использованный здесь пример замедляет скорость атаки и передвижения(этот фрагмент является частью блока <code>"Modifiers"</code> в коде способности) .
+
Свойства игровых объектов мира это почти, все что можно изменить у игрового объекта(в основном это влияет на баланс игры). Использованный здесь пример замедляет скорость атаки и передвижения(этот фрагмент является частью блока <code>"Modifiers"</code> в дереве абилки) .
  
Чтобы задать числовые значения , вы можете написать число или использовать формат %name чтобы использовать значения из блока <code>"AbilitySpecial"</code> вашей способности. Преимущество использования <code>%name</code> в том, что значения могут меняться при повышении уровня способности, а также эти данные можно использовать при создании описания способности.
+
Чтобы задать числовые значения , вы можете написать число или использовать формат %name чтобы использовать значения из блока <code>"AbilitySpecial"</code> вашей абилки. Преимущество использования <code>%name</code> в том, что значения могут меняться при повышении уровня абилки, а также эти данные можно использовать при создании описания абилки.
  
 
В данном примере, длительность замедления зависит от значения в блоке <code>"AbilitySpecial"</code> , а сила замедления просто цифры.
 
В данном примере, длительность замедления зависит от значения в блоке <code>"AbilitySpecial"</code> , а сила замедления просто цифры.
Line 382: Line 406:
 
</source>
 
</source>
  
==== Доступные Свойства Модификаторов ====
+
==== Доступные Свойства игровых объектов мира для модификаторов ====
 
<code>
 
<code>
 
* MODIFIER_PROPERTY_ABSOLUTE_NO_DAMAGE_MAGICAL
 
* MODIFIER_PROPERTY_ABSOLUTE_NO_DAMAGE_MAGICAL
Line 481: Line 505:
 
</code>
 
</code>
  
=== Modifier States ===
+
=== Статусы у свойств игровых объектов мира  ===
Состояния довольно схожи со свойствами , за исключением того что они имеют всего 3 значения. Состояние может иметь значение -  
+
Некоторые свойства такие как стан, регулируются не цифрами, а статусной строкой. Состояние может иметь значение -  
"MODIFIER_STATE_VALUE_NO_ACTION", "MODIFIER_STATE_VALUE_ENABLED" or "MODIFIER_STATE_VALUE_DISABLED".
+
"MODIFIER_STATE_VALUE_NO_ACTION", "MODIFIER_STATE_VALUE_ENABLED" или "MODIFIER_STATE_VALUE_DISABLED".
Данный пример модификатора добавляет эффект оглушения, изменяет анимацию юнита и присваивает юниту состояние оглушения:
+
Данный пример модификатора добавляет эффект оглушения, изменяет анимацию юнита и изменяет свойство юнита "Под станом" в состояние "Включено":
  
 
<source lang="text">
 
<source lang="text">
Line 501: Line 525:
 
</source>
 
</source>
  
==== Доступные Состояния Модификаторов ====
+
==== Перечень статусов у свойвств игровых объектов мира ====
Список всех состояний доступных для использования:
 
 
<code>
 
<code>
 
*MODIFIER_STATE_ATTACK_IMMUNE
 
*MODIFIER_STATE_ATTACK_IMMUNE
Line 538: Line 561:
 
</code>
 
</code>
  
=== Modifier Events ===
+
=== События которые вызывает сам модификатор  ===
Модификаторы могут также описывать действия которые должны произойти при определенных игровых условиях.  Каждый из этих ключей является блоком, описывающим действия. Принцип работы Действий вы можете найти на этой странице.
+
Модификатор может создавать события в зависимости от того, в каком состоянии он
 +
находится или в каком состоянии находится цель к которой он применен.
 +
Мы можем в ответ на это событие сделать еще что либо, то есть по сути модификатор в модификаторе.
  
 
*<code>OnAbilityExecuted</code>
 
*<code>OnAbilityExecuted</code>
Line 556: Line 581:
 
*<code>Orb</code>
 
*<code>Orb</code>
  
A full list of [[Dota 2 Workshop Tools/Scripting/Abilities Data Driven/Modifier Events|modifier events]] is available but not all have been exposed to the data driven system and are unsupported at this time. These events are used by the modifier events data driven system and cannot be called directly.
+
Полный список событий модификатора [[Dota 2 Workshop Tools/Scripting/Abilities Data Driven/Modifier Events|modifier events]]. Не все события доступны для ДДЛ формата или для LUA скриптов.
  
 
== Дополнительные примеры ==
 
== Дополнительные примеры ==
Line 562: Line 587:
  
 
== Precaching ==
 
== Precaching ==
При создании data-driven способностей блок <code>"precache"</code> не обязателен. Это используется ТОЛЬКО для тех data-driven способнойстей, у которых <code>BaseClass</code> имеет значение <code>ability_datadriven</code> .
+
При создании data-driven абилок блок <code>"precache"</code> не обязателен. Это используется только для тех data-driven абилок, у которых <code>BaseClass</code> установлено значение <code>ability_datadriven</code> .
  
 
;Примечания
 
;Примечания

Revision as of 12:16, 23 July 2015

简体中文

Что такое абилка? Абилка это как русская матрешка, в которую можно упаковать модификаторы. Абилка это всегда одна матрешка, а вот внутри ее может быть много модификаторов матрешек. Модификатор это описание, что и как изменить в игровом мире.У него могут быть разные цели в игровом мире и достаточно большой перечень действий, которыми модификатор изменяет игровой мир и объекты в нем.

Далее у абилки определяется сценарий ее поведения(пассивка, вкл/выкл, каст и т.п.)- "AbilityBehavior". Также можно сказать, что абилка это расширенный модификатор, которому позволено держать в себе простые модификаторы.

Абилка прикрепляется к объекту в игре в явном виде или скрытом. Модификаторы подобны гонцам, которые рассылает абилка другим объектам или самому себе, и когда гонцы доходят до объекта назначения, они на некоторое время становятся абилками этих объектов, внося присланные изменения объекту.

Многие встроенные абилки созданы в коде игры. У них есть только незначительные метаданные, которые можно изменить и находятся они в файле npc_abilities.txt. Формат файл представляет из себя Дерево Данных с Листьями(ДДЛ) в форме "Название" - "Значение".

Пример фрагмента из файла ДДЛ:

//Где-то раньше есть корень дерева. Этот пример лишь вырезка из дерева.
...
"fx_test_ability" //Точка ветвления
{
    // Основное
    //-------------------------------------------------------------------------------------------------------------
    "BaseClass"             "ability_datadriven" //Листья в формате "Название" - "Значение"
    "AbilityBehavior"       "DOTA_ABILITY_BEHAVIOR_PASSIVE" //Листья в формате "Название" - "Значение"
    "AbilityTextureName"    "axe_battle_hunger" //Листья в формате "Название" - "Значение"

    // Модификаторы
    //-------------------------------------------------------------------------------------------------------------
    "Modifiers" //Точка ветвления

Чтобы создавать новые абилки, можно использовать ДДЛ файлы.

Перейдем сразу к простому примеру, создания абилки с помощью ДДЛ формата.

Пример абилки с ипользованием Деревьев Данных с Листьями (ДДЛ)

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

"fx_test_ability"
{
    // Основное
    //-------------------------------------------------------------------------------------------------------------
    "BaseClass"             "ability_datadriven"
    "AbilityBehavior"       "DOTA_ABILITY_BEHAVIOR_PASSIVE"
    "AbilityTextureName"    "axe_battle_hunger"

    // Модификаторы
    //-------------------------------------------------------------------------------------------------------------
    "Modifiers"
    {
        "fx_test_modifier"
        {
            "Passive" "1"
            "OnCreated"
            {
                "AttachEffect" //Действие модификатора
                {
                    "Target" "CASTER"
                    "EffectName" "particles/econ/generic/generic_buff_1/generic_buff_1.vpcf"
                    "EffectAttachType" "follow_overhead"
                    "EffectLifeDurationScale" "1"
                    "EffectColorA" "255 255 0"
                }
            }
        }
    }
}

Названия BaseClass, AbilityBehavior и AbilityTextureName являются общими для всех способностей.

Описание примера

BaseClass

Нужен, чтобы игра, понимала какой код соединить с абилкой. В этом примере мы используем имя ability_datadriven. Также можно использовать другие имена.

AbilityBehavior

Установка сценария поведения абилки. К примеру "DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_NO_TARGET" Пробелы обязательны!

ID
Не используется для вновь создаваемых абилок.
AbilityTextureName
Имя текстуры, которое будет отображаться в HUD.
Modifiers

Ветвь с модификаторами. Вложенные матрешки абилки.

Passive

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

OnCreated

Событие, OnCreated, возникает, когда абилка запускает модификатор. У данного модификатора в качестве цели в игровом мире указан кастующий эта абилку.

Сценарии поведений

"AbilityBehavior" заполняется одним из представленных имен.

DOTA_ABILITY_BEHAVIOR_HIDDEN               = 1 << 0, //Может принадлежать юниту, но не может кастоваться и не будет показываться в HUD.
DOTA_ABILITY_BEHAVIOR_PASSIVE              = 1 << 1, //Не может кастоваться, но отображается в HUD.
DOTA_ABILITY_BEHAVIOR_NO_TARGET            = 1 << 2, //Для абилки не требуется цель, способность срабатывает, как только будет нажата кнопка.
DOTA_ABILITY_BEHAVIOR_UNIT_TARGET          = 1 << 3, //Для каста способности в качестве цели требуется юнит (герой, крип и т.д.).
DOTA_ABILITY_BEHAVIOR_POINT                = 1 << 4, //Абилка будет использована в месте, где находился курсор. 
DOTA_ABILITY_BEHAVIOR_AOE                  = 1 << 5, //Механизм применения похож на POINT, но вокруг курсора будет выделена область в которой абилка будет работать.
DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE        = 1 << 6, //Абилка видна,доступна,уже изучена (применяется у минера как взрыватель бомб).
DOTA_ABILITY_BEHAVIOR_CHANNELLED           = 1 << 7, //Прерываемая абилка. Если юнит будет оглушен или обезмолвлен - каст прервется.
DOTA_ABILITY_BEHAVIOR_ITEM                 = 1 << 8, //Абилка связана с артефактом.
DOTA_ABILITY_BEHAVIOR_TOGGLE               = 1 << 9, //Абилка можно включать и выключать.
DOTA_ABILITY_BEHAVIOR_DIRECTIONAL          = 1 << 10, //Работает по наравлению взгляда героя.
DOTA_ABILITY_BEHAVIOR_IMMEDIATE            = 1 << 11, //Абилка будет использованна немедленно (юнит остановит текущее действие и скастует), игнорируя последовательность действий (действия заданные через шифт)
DOTA_ABILITY_BEHAVIOR_AUTOCAST             = 1 << 12, //Абилка имеет автокаст.
DOTA_ABILITY_BEHAVIOR_NOASSIST             = 1 << 13, //Ability has no reticle assist. Без перевода.
DOTA_ABILITY_BEHAVIOR_AURA                 = 1 << 14, //Абилка в виде ауры.
DOTA_ABILITY_BEHAVIOR_ATTACK               = 1 << 15, //Работает как обычная атака и не может атаковать неатакуемые цели.
DOTA_ABILITY_BEHAVIOR_DONT_RESUME_MOVEMENT = 1 << 16, //После завершения, не продолжает движение кастера. Подходит только для абилок без целей и не немедленных по действию.
DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES        = 1 << 17, //Не может быть использована , когда кастер в корнях.(Ульт Дерева)
DOTA_ABILITY_BEHAVIOR_UNRESTRICTED         = 1 << 18, //Абилка может быть использована под салом.
DOTA_ABILITY_BEHAVIOR_IGNORE_PSEUDO_QUEUE  = 1 << 19, //АБилка может быть использована, когда кастер под станом, кастует или атакует. Подходит только для абилок с вкл/выкл сценарием.
DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL       = 1 << 20, //Может использоваться без прерывания прерываемых абилок.
DOTA_ABILITY_BEHAVIOR_DONT_CANCEL_MOVEMENT = 1 << 21, //Не дает некоторым модификаторам закончить своё действие. Используеться на курьере у модификатора ускорение.
DOTA_ABILITY_BEHAVIOR_DONT_ALERT_TARGET    = 1 << 22, //Абилка не агрит внимание крипов когда использована на них.
DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK   = 1 << 23, //Абилка не восстанавливает атаку после своего завершения.Подходит только для абилок без целей и не немедленных по действию и для целей типа юнита.
DOTA_ABILITY_BEHAVIOR_NORMAL_WHEN_STOLEN   = 1 << 24, //Абилка работает в точке каста, когда сбита.
DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING     = 1 << 25, //Абилка игнорирует быстрый отказ(типа начал и отказался техника не сработает).
DOTA_ABILITY_BEHAVIOR_RUNE_TARGET          = 1 << 26, //Абилка используется руны в качестве цели в игровом мире.

События и Действия абилок

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

События

  • OnChannelFinish
  • OnChannelInterrupted
  • OnChannelSucceeded
  • OnOwnerDied
  • OnOwnerSpawned
  • OnProjectileFinish
  • OnProjectileHitUnit
  • OnSpellStart
  • OnToggleOff
  • OnToggleOn
  • OnUpgrade

New:

  • OnAbilityEndChannel
  • OnAbilityStart
  • OnAttack
  • OnAttackAllied
  • OnAttackFailed
  • OnCreated
  • OnEquip
  • OnHealReceived
  • OnHealthGained
  • OnHeroKilled
  • OnManaGained
  • OnOrder
  • OnProjectileDodge
  • OnRespawn
  • OnSpentMana
  • OnStateChanged
  • OnTeleported
  • OnTeleporting
  • OnUnitMoved

Действия

Каждое действие содержит один или несколько параметров. Помните, чтобы абилки это как расширенные модификаторы, и поэтому они тоже могут делать действия в игровом мире. Далее дан список действий и их параметров.

  • AddAbility
Target, AbilityName
  • ActOnTargets
Target, Action
  • ApplyModifier
Target, ModifierName
  • AttachEffect
EffectName, EffectAttachType, Target, ControlPoints,
TargetPoint, EffectRadius, EffectDurationScale, EffectLifeDurationScale ,EffectColorA, EffectColorB, EffectAlphaScale
  • Blink
Target
  • CleaveAttack
CleavePercent, CleaveRadius
  • CreateThinker
Target, ModifierName
  • Damage
Target, Type, MinDamage/MaxDamage, Damage, CurrentHealthPercentBasedDamage, MaxHealthPercentBasedDamage
  • DelayedAction
Delay, Action
  • DestroyTrees
Target, Radius
  • FireEffect
EffectName, EffectAttachType, Target, ControlPoints
TargetPoint, EffectRadius, EffectDurationScale, EffectLifeDurationScale ,EffectColorA, EffectColorB, EffectAlphaScale
  • FireSound
EffectName, Target
  • Heal
HealAmount, Target
  • Knockback
Target, Center, Duration, Distance, Height, IsFixedDistance, ShouldStun
  • LevelUpAbility
Target, AbilityName
  • Lifesteal
Target, LifestealPercent
  • LinearProjectile
Target, EffectName, MoveSpeed, StartRadius, EndRadius, FixedDistance, StartPosition, TargetTeams, TargetTypes, TargetFlags, HasFrontalCone, ProvidesVision, VisionRadius
  • Random
Chance, PseudoRandom, OnSuccess, OnFailure
  • RemoveAbility
Target, AbilityName
  • RemoveModifier
Target, ModifierName
  • RunScript
Target, ScriptFile, Function
  • SpawnUnit
UnitName, UnitCount, UnitLimit, SpawnRadius, Duration, Target, GrantsGold, GrantsXP
  • Stun
Target, Duration
  • TrackingProjectile
Target, EffectName, Dodgeable, ProvidesVision, VisionRadius, MoveSpeed, SourceAttachment


Note:{{{1}}}

Пример

Тут показано, что при работе абилки возникло событие OnSpellStart, тут Spell слово, хотя логичнее слово Ability. Далее определено действие FireSound, которое восроизводит звук в игровом мире. У этого действия есть свои параметры, параметр Target "Цель в игровом мире" и название звука.

"OnSpellStart"      // Событие
{
    "FireSound"     // Действие
    {
        "EffectName"    "SoundEventName"
        "Target"        "CASTER"
    }
}

Значение точечных целей для Target

  • CASTER
  • TARGET
  • POINT
  • ATTACKER
  • UNIT

Многоцелевые значения для Target

Чтобы указать сразу несколько целей в игровом мире для действия, используем следующие значения в Target. Далее перечислены значения, которые описывают область в которой нужно искать цели и каким образом фильтровать цели.

  • Center - Где будет находится центр области(Круга).То есть на кастующем, на цели, на клике, на ракете, на юните, на атакующем.
CASTER, TARGET, POINT, PROJECTILE, UNIT, ATTACKER
  • Radius - длина радиуса в юнитах(ед.изм Hammer редактора)
IntegerValue
  • Teams - Фильтр по команде.

DOTA_UNIT_TARGET_TEAM_BOTH
DOTA_UNIT_TARGET_TEAM_CUSTOM
DOTA_UNIT_TARGET_TEAM_ENEMY
DOTA_UNIT_TARGET_TEAM_FRIENDLY
DOTA_UNIT_TARGET_TEAM_NONE

  • Types, ExcludeTypes - Фильтр по типу объектов в игровом мире.

DOTA_UNIT_TARGET_ALL
DOTA_UNIT_TARGET_BASIC
DOTA_UNIT_TARGET_BUILDING
DOTA_UNIT_TARGET_COURIER
DOTA_UNIT_TARGET_CREEP
DOTA_UNIT_TARGET_CUSTOM
DOTA_UNIT_TARGET_HERO
DOTA_UNIT_TARGET_MECHANICAL
DOTA_UNIT_TARGET_NONE
DOTA_UNIT_TARGET_OTHER
DOTA_UNIT_TARGET_TREE

  • Flags, ExcludeFlags - Фильтр по флагам, которые установлены у объектов игрового мира.

DOTA_UNIT_TARGET_FLAG_CHECK_DISABLE_HELP
DOTA_UNIT_TARGET_FLAG_DEAD
DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE
DOTA_UNIT_TARGET_FLAG_INVULNERABLE
DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES
DOTA_UNIT_TARGET_FLAG_MANA_ONLY
DOTA_UNIT_TARGET_FLAG_MELEE_ONLY
DOTA_UNIT_TARGET_FLAG_NO_INVIS
DOTA_UNIT_TARGET_FLAG_NONE
DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS
DOTA_UNIT_TARGET_FLAG_NOT_ATTACK_IMMUNE
DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO
DOTA_UNIT_TARGET_FLAG_NOT_DOMINATED
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS
DOTA_UNIT_TARGET_FLAG_NOT_MAGIC_IMMUNE_ALLIES
DOTA_UNIT_TARGET_FLAG_NOT_NIGHTMARED
DOTA_UNIT_TARGET_FLAG_NOT_SUMMONED
DOTA_UNIT_TARGET_FLAG_OUT_OF_WORLD
DOTA_UNIT_TARGET_FLAG_PLAYER_CONTROLLED
DOTA_UNIT_TARGET_FLAG_RANGED_ONLY

  • MaxTargets -Максимум найденных целей в области.
IntegerValue
  • Random - Добавить ли еще один рандомный объект из игрового мира сверх максимума.
BooleanValue
  • ScriptSelectPoints - Поиск в области делается через LUA скрипт.
ScriptFile, Function, Radius, Count

Модификаторы

Перечень "Название"-"Значение" для модификаторов:

  • Attributes
MODIFIER_ATTRIBUTE_IGNORE_INVULNERABLE
MODIFIER_ATTRIBUTE_MULTIPLE
MODIFIER_ATTRIBUTE_NONE
MODIFIER_ATTRIBUTE_PERMANENT
  • Duration
FloatValue
  • EffectAttachType
follow_origin, follow_overhead, start_at_customorigin, world_origin
  • EffectName
StringValue
  • IsBuff
BooleanValue
  • IsDebuff
BooleanValue
  • IsHidden
BooleanValue
  • IsPurgable
BooleanValue
  • OverrideAnimation
ACT_DOTA_ATTACK
ACT_DOTA_CAST_ABILITY_1 (2, 3, 4, 5, 6)
ACT_DOTA_DISABLED
ACT_DOTA_RUN
ACT_DOTA_SPAWN
ACT_DOTA_TELEPORT
ACT_DOTA_VICTORY

Дан не полный список действий, которые может выполнять модификатор. Остальные смотрим тут the action list.

Ниже уже дополнительные метаданные из "Название"-"Значение":

  • Passive
BooleanValue
  • TextureName
StringValue
  • ThinkInterval
FloatValue

Свойства игровых объектов мира доступных модификаторам

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

Чтобы задать числовые значения , вы можете написать число или использовать формат %name чтобы использовать значения из блока "AbilitySpecial" вашей абилки. Преимущество использования %name в том, что значения могут меняться при повышении уровня абилки, а также эти данные можно использовать при создании описания абилки.

В данном примере, длительность замедления зависит от значения в блоке "AbilitySpecial" , а сила замедления просто цифры.

"creature_slithereen_crush_slow"
{
    "Duration"      "%slow_duration"
    "Properties"
    {
        "MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE"      "-20"
        "MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT"      "-20"
    }
}

Доступные Свойства игровых объектов мира для модификаторов

  • MODIFIER_PROPERTY_ABSOLUTE_NO_DAMAGE_MAGICAL
  • MODIFIER_PROPERTY_ABSOLUTE_NO_DAMAGE_PHYSICAL
  • MODIFIER_PROPERTY_ABSOLUTE_NO_DAMAGE_PURE
  • MODIFIER_PROPERTY_ABSORB_SPELL
  • MODIFIER_PROPERTY_ATTACK_RANGE_BONUS
  • MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT
  • MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT_POWER_TREADS
  • MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT_SECONDARY
  • MODIFIER_PROPERTY_AVOID_CONSTANT
  • MODIFIER_PROPERTY_AVOID_SPELL
  • MODIFIER_PROPERTY_BASEATTACK_BONUSDAMAGE
  • MODIFIER_PROPERTY_BASE_ATTACK_TIME_CONSTANT
  • MODIFIER_PROPERTY_BASEDAMAGEOUTGOING_PERCENTAGE
  • MODIFIER_PROPERTY_BASE_MANA_REGEN
  • MODIFIER_PROPERTY_BONUS_DAY_VISION
  • MODIFIER_PROPERTY_BONUS_NIGHT_VISION
  • MODIFIER_PROPERTY_BONUS_VISION_PERCENTAGE
  • MODIFIER_PROPERTY_CHANGE_ABILITY_VALUE
  • MODIFIER_PROPERTY_COOLDOWN_REDUCTION_CONSTANT
  • MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE
  • MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE_ILLUSION
  • MODIFIER_PROPERTY_DEATHGOLDCOST
  • MODIFIER_PROPERTY_DISABLE_AUTOATTACK
  • MODIFIER_PROPERTY_DISABLE_HEALING
  • MODIFIER_PROPERTY_DISABLE_TURNING
  • MODIFIER_PROPERTY_EVASION_CONSTANT
  • MODIFIER_PROPERTY_EXTRA_HEALTH_BONUS
  • MODIFIER_PROPERTY_EXTRA_MANA_BONUS
  • MODIFIER_PROPERTY_EXTRA_STRENGTH_BONUS
  • MODIFIER_PROPERTY_FORCE_DRAW_MINIMAP
  • MODIFIER_PROPERTY_HEALTH_BONUS
  • MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT
  • MODIFIER_PROPERTY_HEALTH_REGEN_PERCENTAGE
  • MODIFIER_PROPERTY_IGNORE_CAST_ANGLE
  • MODIFIER_PROPERTY_INCOMING_DAMAGE_PERCENTAGE
  • MODIFIER_PROPERTY_INCOMING_PHYSICAL_DAMAGE_PERCENTAGE
  • MODIFIER_PROPERTY_INCOMING_SPELL_DAMAGE_CONSTANT
  • MODIFIER_PROPERTY_INVISIBILITY_LEVEL
  • MODIFIER_PROPERTY_IS_ILLUSION
  • MODIFIER_PROPERTY_IS_SCEPTER
  • MODIFIER_PROPERTY_LIFETIME_FRACTION
  • MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS
  • MODIFIER_PROPERTY_MAGICAL_RESISTANCE_DECREPIFY_UNIQUE
  • MODIFIER_PROPERTY_MAGICAL_RESISTANCE_ITEM_UNIQUE
  • MODIFIER_PROPERTY_MANA_BONUS
  • MODIFIER_PROPERTY_MANA_REGEN_CONSTANT
  • MODIFIER_PROPERTY_MANA_REGEN_CONSTANT_UNIQUE
  • MODIFIER_PROPERTY_MANA_REGEN_PERCENTAGE
  • MODIFIER_PROPERTY_MANA_REGEN_TOTAL_PERCENTAGE
  • MODIFIER_PROPERTY_MIN_HEALTH
  • MODIFIER_PROPERTY_MISS_PERCENTAGE
  • MODIFIER_PROPERTY_MODEL_CHANGE
  • MODIFIER_PROPERTY_MODEL_SCALE // не работает
  • MODIFIER_PROPERTY_MOVESPEED_ABSOLUTE
  • MODIFIER_PROPERTY_MOVESPEED_BASE_OVERRIDE
  • MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT
  • MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE
  • MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE_UNIQUE
  • MODIFIER_PROPERTY_MOVESPEED_BONUS_UNIQUE
  • MODIFIER_PROPERTY_MOVESPEED_LIMIT // не работает
  • MODIFIER_PROPERTY_MOVESPEED_MAX // не работает
  • MODIFIER_PROPERTY_OVERRIDE_ANIMATION
  • MODIFIER_PROPERTY_OVERRIDE_ANIMATION_RATE
  • MODIFIER_PROPERTY_OVERRIDE_ANIMATION_WEIGHT
  • MODIFIER_PROPERTY_OVERRIDE_ATTACK_MAGICAL
  • MODIFIER_PROPERTY_PERSISTENT_INVISIBILITY
  • MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS
  • MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS_ILLUSIONS
  • MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS_UNIQUE
  • MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS_UNIQUE_ACTIVE
  • MODIFIER_PROPERTY_PHYSICAL_CONSTANT_BLOCK
  • MODIFIER_PROPERTY_POST_ATTACK
  • MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE
  • MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE_POST_CRIT
  • MODIFIER_PROPERTY_PREATTACK_CRITICALSTRIKE
  • MODIFIER_PROPERTY_PROCATTACK_BONUS_DAMAGE_COMPOSITE
  • MODIFIER_PROPERTY_PROCATTACK_BONUS_DAMAGE_MAGICAL
  • MODIFIER_PROPERTY_PROCATTACK_BONUS_DAMAGE_PHYSICAL
  • MODIFIER_PROPERTY_PROCATTACK_BONUS_DAMAGE_PURE
  • MODIFIER_PROPERTY_PROCATTACK_FEEDBACK
  • MODIFIER_PROPERTY_PROVIDES_FOW_POSITION
  • MODIFIER_PROPERTY_REINCARNATION
  • MODIFIER_PROPERTY_RESPAWNTIME
  • MODIFIER_PROPERTY_RESPAWNTIME_PERCENTAGE
  • MODIFIER_PROPERTY_RESPAWNTIME_STACKING
  • MODIFIER_PROPERTY_STATS_AGILITY_BONUS
  • MODIFIER_PROPERTY_STATS_INTELLECT_BONUS
  • MODIFIER_PROPERTY_STATS_STRENGTH_BONUS
  • MODIFIER_PROPERTY_TOOLTIP
  • MODIFIER_PROPERTY_TOTAL_CONSTANT_BLOCK
  • MODIFIER_PROPERTY_TOTAL_CONSTANT_BLOCK_UNAVOIDABLE_PRE_ARMOR
  • MODIFIER_PROPERTY_TOTALDAMAGEOUTGOING_PERCENTAGE // не работает
  • MODIFIER_PROPERTY_TRANSLATE_ACTIVITY_MODIFIERS
  • MODIFIER_PROPERTY_TRANSLATE_ATTACK_SOUND
  • MODIFIER_PROPERTY_TURN_RATE_PERCENTAGE

Статусы у свойств игровых объектов мира

Некоторые свойства такие как стан, регулируются не цифрами, а статусной строкой. Состояние может иметь значение - "MODIFIER_STATE_VALUE_NO_ACTION", "MODIFIER_STATE_VALUE_ENABLED" или "MODIFIER_STATE_VALUE_DISABLED". Данный пример модификатора добавляет эффект оглушения, изменяет анимацию юнита и изменяет свойство юнита "Под станом" в состояние "Включено":

"creature_bash_ministun"
{
    "Duration"              "%duration"
    "EffectName"            "generic_stunned"
    "EffectAttachType"      "follow_overhead"
    "Duration"              "%stun_duration"
    "OverrideAnimation"     "ACT_DOTA_DISABLED"
    "States"
    {
        "MODIFIER_STATE_STUNNED" "MODIFIER_STATE_VALUE_ENABLED"
    }         
}

Перечень статусов у свойвств игровых объектов мира

  • MODIFIER_STATE_ATTACK_IMMUNE
  • MODIFIER_STATE_BLIND
  • MODIFIER_STATE_BLOCK_DISABLED
  • MODIFIER_STATE_CANNOT_MISS
  • MODIFIER_STATE_COMMAND_RESTRICTED
  • MODIFIER_STATE_DISARMED
  • MODIFIER_STATE_DOMINATED
  • MODIFIER_STATE_EVADE_DISABLED
  • MODIFIER_STATE_FLYING
  • MODIFIER_STATE_FROZEN
  • MODIFIER_STATE_HEXED
  • MODIFIER_STATE_INVISIBLE
  • MODIFIER_STATE_INVULNERABLE
  • MODIFIER_STATE_LOW_ATTACK_PRIORITY
  • MODIFIER_STATE_MAGIC_IMMUNE
  • MODIFIER_STATE_MUTED
  • MODIFIER_STATE_NIGHTMARED
  • MODIFIER_STATE_NO_HEALTH_BAR
  • MODIFIER_STATE_NO_TEAM_MOVE_TO
  • MODIFIER_STATE_NO_TEAM_SELECT
  • MODIFIER_STATE_NOT_ON_MINIMAP
  • MODIFIER_STATE_NOT_ON_MINIMAP_FOR_ENEMIES
  • MODIFIER_STATE_NO_UNIT_COLLISION
  • MODIFIER_STATE_OUT_OF_GAME
  • MODIFIER_STATE_PASSIVES_DISABLED
  • MODIFIER_STATE_PROVIDES_VISION
  • MODIFIER_STATE_ROOTED
  • MODIFIER_STATE_SILENCED
  • MODIFIER_STATE_SOFT_DISARMED
  • MODIFIER_STATE_SPECIALLY_DENIABLE
  • MODIFIER_STATE_STUNNED
  • MODIFIER_STATE_UNSELECTABLE

События которые вызывает сам модификатор

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

  • OnAbilityExecuted
  • OnAttacked - Юнит, имеющий модификатор, был атакован.
  • OnAttackLanded - Юнит, имеющий модификатор, ударил цель.
  • OnAttackStart - Юнит, имеющий модификатор, начал атаковать цель (момент начала анимации атаки).
  • OnCreated - Модификатор был создан.
  • OnDealDamage - Юнит, имеющий модификатор, нанёс урон.
  • OnDeath
  • OnDestroy - Модификатор был уничтожен.
  • OnIntervalThink
  • OnKill
  • OnOrbFire
  • OnOrbImpact
  • OnTakeDamage - Юнит, имеющий модификатор, получил урон (любой урон).
  • Orb

Полный список событий модификатора modifier events. Не все события доступны для ДДЛ формата или для LUA скриптов.

Дополнительные примеры

Precaching

При создании data-driven абилок блок "precache" не обязателен. Это используется только для тех data-driven абилок, у которых BaseClass установлено значение ability_datadriven .

Примечания
  • Визуальные эффекты требуют полный путь с именем файла включая расширение файла. Например:
particles/econ/generic/generic_buff_1/generic_buff_1.vpcf - "_c" не требуется.
  • Звуковые эффекты требуют только название звукового события.