Abilities Data Driven:ru

From Valve Developer Community
Jump to: navigation, search
简体中文
В Dota 2 большинство способностей определено кодом игры (C++). Если посмотреть на способности в KV-файле npc_abilities.txt можно заметить что в описании способностей задаются некоторые значения, однако вся основная информация о поведении стандартных способностей задаётся непосредственно кодом игры. Система Data Driven Abilities это способ создания собственных способностей Dota 2 и использования специальных свойств и событий.

Пример Data Driven Ability

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

"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
Обычно Dota определяет C++ класс по имени способности (в данном случае "fx_test_ability"). Ключ BaseClass позволяет указать класс отличный от имени. В этом примере мы используем класс ability_datadriven чтобы соединить способность с системой Data Driven Ability. Также можно использовать класс любой другой способности Dota 2 чтобы создать собственную на её основе с изменением KV-опций.
AbilityBehavior
Набор флагов описывающий различные свойства способности. Можно использовать несколько флагов разделяя их пробелами и |. К примеру "DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_NO_TARGET" Пробелы обязательны!
ID
Не используется. Этот ключ используется только основными способностями Dota 2, он не нужен при создании собственных. Поэтому в примере этого ключа нет, а в описании стандартных способностей Dota 2 - есть. Однако в описании собственных предметов ID должен быть.
AbilityTextureName
Имя файла изображения которое будет использоваться в пользовательском интерфейсе для данной способности. Также можно использовать иконки других способностей просто указав имя способности.
Modifiers
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.
Passive
Flags the modifier as a passive modifier that should automatically be applied to the ability owner in this example.
OnCreated
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.

Флаги Поведения

Флаги доступные для использования с "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, //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_CHANNELLED           = 1 << 7, //Прерываемая способность. Если юнит будет оглушен или обезмолвлен - каст прервется.
DOTA_ABILITY_BEHAVIOR_ITEM                 = 1 << 8, //Ability is tied up to an item.
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_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, //Is an attack and cannot hit attack-immune targets.
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_ROOT_DISABLES        = 1 << 17, //Cannot be used when rooted
DOTA_ABILITY_BEHAVIOR_UNRESTRICTED         = 1 << 18, //Ability is allowed when commands are restricted
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_CHANNEL       = 1 << 20, //Can be executed without interrupting channels.
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_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_NORMAL_WHEN_STOLEN   = 1 << 24, //Ability still uses its normal cast point when stolen.
DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING     = 1 << 25, //Ability ignores backswing psuedoqueue.
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:AddAbility adds a new ability at level 0. RemoveAbility deletes the ability even if it has been leveled. More complex ability management should be done through script as opposed to the data driven system.

Пример

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

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

Action Target Values

Within an action the Target 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:

  • CASTER
  • TARGET
  • POINT
  • ATTACKER
  • UNIT

In the above example where a sound is being played, notice that Target is set to CASTER. It will play the sound on the caster of the spell when it starts.

Note:These names mean different things in different events. It may require some experimentation to discover exactly what in each case.

Multiple Targets

For selecting multiple targets in an area, make the Target key a block with the following subkeys:

  • Center - Center point of the circle.
CASTER, TARGET, POINT, PROJECTILE, UNIT, ATTACKER
  • Radius - Number in units defining the radius to search for target(s) in.
IntegerValue
  • Teams - Affect which 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 - Target units of specified type or exclude units of specified type.

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 - Target units with specific flags or reject units with specific flag.

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 - Maximum number of targets to select.
IntegerValue
  • Random - Whether to select a random unit if more than MaxTargets exist.
BooleanValue
  • ScriptSelectPoints
ScriptFile, Function, Radius, Count
Note:Random set to 0 in conjunction with a MaxTargets value will cause the ability to only function if there is MaxTargets or less targets in the area.

Modifiers

Modifiers may have following keys:

  • 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

Other actions can be found at the action list, but these are the most commonly available ones.

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
  • Passive
BooleanValue
  • TextureName
StringValue
  • ThinkInterval
FloatValue

Modifier Properties

Свойства модификатора, это игровые значения которые модификатор изменяет при применении на юнита. Использованный здесь пример замедляет скорость атаки и передвижения(этот фрагмент является частью блока "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 States

Состояния довольно схожи со свойствами , за исключением того что они имеют всего 3 значения. Состояние может иметь значение - "MODIFIER_STATE_VALUE_NO_ACTION", "MODIFIER_STATE_VALUE_ENABLED" or "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

Modifier Events

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

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

A full list of 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.

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

Precaching

При создании data-driven способностей блок "precache" не обязателен. Это используется ТОЛЬКО для тех data-driven способнойстей, у которых BaseClass имеет значение ability_datadriven .

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