Abilities Data Driven
Что такое предмет?
Предмет - это тоже самое что и способность только с дополнительнымы функциями.
Предмет это та же способность, только артефакт можно передавать между героями, продавать через магазин. Способности же, не могут переходить от одного объекта к другому. Сценарии поведения для предметов, состоят из тех же самых, что и в способностях,но дополнительно добавляют такие настройки как цена, можно ли передавать и т.п. У артефактов есть все те же события , какие и у абилок. Еще разница в том, что описание DataDriven для абилок и артефактов разнесено в разные файлы: npc_items_custom.txt (предметы), npc_abilities_custom.txt(способности).
Что такое способнось?
Способность в каторой может быть модификатор . Способность в которой может содержать множество модификаторов. Модификатор это эффект который он вам будет давать.
Далее у способности определяется тип ее поведения("AbilityBehavior")
Многие встроенные способности созданы в коде игры. У них есть только незначительные метаданные, которые можно изменить и находятся они в файле npc_abilities.txt. Формат файл представляет из себя Дерево Данных с Листьями(ДДЛ) в форме "Название" - "Значение".
Пример фрагмента из файла DataDriven:
...
"fx_test_ability" //Точка ветвления
{
    // Основное
    //-------------------------------------------------------------------------------------------------------------
    "BaseClass"             "ability_datadriven" // Стандартный Класс"
    "AbilityBehavior"       "DOTA_ABILITY_BEHAVIOR_PASSIVE" //Поведения"
    "AbilityTextureName"    "axe_battle_hunger" //Рисунок на способносте розмером 64 х 64"
    // Модификаторы
    //-------------------------------------------------------------------------------------------------------------
    "Modifiers" //Точка ветвления
Чтобы создавать новые абилки, можно использовать ДДЛ файлы.
Перейдем сразу к простому примеру, создания абилки с помощью ability_datadriven формата.
Пример способности с ипользованием Эффектов Частиц
Это пример пассивной способности, которая создает визуальный эффект над головой юнита.
"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, //Способность не имеет поддержки при прицеле.
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_BACKSWING            = 1 << 25  //Способность применяется только передним ходом
DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING     = 1 << 26, //Способность игнорирует задний ход.
DOTA_ABILITY_BEHAVIOR_RUNE_TARGET          = 1 << 27, //Способности используется на руны в качестве цели в игровом мире.
События и Действия абилок
Абилки благодаря своему сценарию , рождают в игровом мире различные события. Эти события предлагают создателю абилки сделать еще какие либо действия в игровом мире.
События
- 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
 
Примечание:
Пример
Тут показано, что при работе абилки возникло событие 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_FLYING_FOR_PATHING_PURPOSES_ONLY
 
- 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
 
События которые вызывает сам модификатор
Модификатор может создавать события в зависимости от того, в каком состоянии он находится или в каком состоянии находится цель к которой он применен. Мы можем в ответ на это событие сделать еще что либо, то есть по сути модификатор в модификаторе.
OnAbilityExecutedOnAttacked- Юнит, имеющий модификатор, был атакован.OnAttackLanded- Юнит, имеющий модификатор, ударил цель.OnAttackStart- Юнит, имеющий модификатор, начал атаковать цель (момент начала анимации атаки).OnCreated- Модификатор был создан.OnDealDamage- Юнит, имеющий модификатор, нанёс урон.OnDeathOnDestroy- Модификатор был уничтожен.OnIntervalThinkOnKill- Юнит, имеющий модификатор, убил кого-то.OnHeroKilled- Юнит, имеющий модификатор, убил героя.OnOrbFireOnOrbImpactOnTakeDamage- Юнит, имеющий модификатор, получил урон (любой урон).Orb
Полный список событий модификатора modifier events. Не все события доступны для ДДЛ формата или для LUA скриптов.
Дополнительные примеры
Precaching
При создании data-driven абилок блок "precache" не обязателен. Это используется только для тех data-driven абилок, у которых BaseClass установлено значение ability_datadriven .
- Примечания
 
- Визуальные эффекты требуют полный путь с именем файла включая расширение файла. Например:
 
particles/econ/generic/generic_buff_1/generic_buff_1.vpcf- "_c" не требуется.
- Звуковые эффекты требуют только название звукового события.
 
Основное в Item DataDriven
Предметы, нечем почти не отличаются от способностей.
В Item DataDriven например: Предмет, можна купить, использовать, передать.
- ItemCost -- Стоимость предмета
 - ItemPermament -- Ли будет он расходуемый?
 - ItemRecipe -- Название Рецепта. После item обязательно добавить recipe item_recipe
 - MaxUpgradeLevel -- Максимальный уровень, вашего оружия
 - ItemBaseLevel -- Базовый уровень, вашего предмета
 - ItemStackable -- Ли будет предмет складываться (стакаться)
 - ItemShareAbility -- ITEM_FULLY_SHAREABLE, ITEM_NOT_SHAREABLE, ITEM_FULLY_SHAREABLE_STACKBLE
 - ItemIntialCharges -- Скольк будет стаков при покупке?
 - ItemSellable -- Будет возможность, продать предмет?
 - ItemKillable -- Будет возможность, убить предмет?
 - ItemQuality -- Какая будет, редкость предмета?
 - ItemShopTags -- Тэги, вашего предметы
 - SideShop -- Будет возможность, покупать в боковой лавке?
 - SecretShop -- Будет возможность, покупать в секретной лавке
 
 "item_stun"
  {
    "BaseClass" "item_datadriven" // В предмете обязательно нужен item_datadriven
    "AbilityTextureName" "item_ghost"
    "Model" ""models/props_gameplay/red_box.vmdl" // Обычная модель предмета
    "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
    "AbilityCooldown" "5"
    "AbilityManaCost" "120"
    "ItemCost" "800"
    "ItemPermanent" "1" // Будет ли расходуемый предмет?
    "OnSpellStart"
    {
      "Stun"
      {
         "Duration" "3"
         "Target" "TARGET"
      }
   }
}