Abilities Data Driven

From Valve Developer Community
Jump to navigation Jump to search
English (en)Русский (ru)中文 (zh)Translate (Translate)

Народ, правте, если умеете переводить. А то как DDSUPER получится, который просто заменил слова по словарику убив смысл.

Что такое артефакт?

Если выстроить цепочку родословной то получится Артефакт-Абилка-Модификатор. Артефакт является папой всего. Артефакт это та же абилка, только артефакт можно передавать между героями, продавать через магазин. Абилки же, не могут переходить от одного объекта к другому. Сценарии поведения для артефактов, состоят из тех же самых, что и в абилках,но дополнительно добавляют такие настройки как цена, можно ли передавать и т.п. У артефактов есть все те же события , какие и у абилок. Еще разница в том, что описание ДДЛ для абилок и артефактов разнесено в разные файлы: npc_items_custom.txt (артефакты), npc_abilities_custom.txt(абилки).


Что такое абилка?

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

Далее у абилки определяется сценарий ее поведения(пассивка, вкл/выкл, каст и т.п.)- "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.pngПримечание:

Пример

Тут показано, что при работе абилки возникло событие 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(en).

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

  • 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 - Юнит, имеющий модификатор, убил кого-то.
  • OnHeroKilled - Юнит, имеющий модификатор, убил героя.
  • OnOrbFire
  • OnOrbImpact
  • OnTakeDamage - Юнит, имеющий модификатор, получил урон (любой урон).
  • Orb

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

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

Precaching

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

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

Подготовлено:Russia nekto (talk) 10:09, 24 July 2015 (UTC)