Abilities Data Driven
Народ, правте, если умеете переводить. А то как 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
Примечание:
Пример
Тут показано, что при работе абилки возникло событие 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
- Юнит, имеющий модификатор, убил кого-то.OnHeroKilled
- Юнит, имеющий модификатор, убил героя.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
" не требуется.
- Звуковые эффекты требуют только название звукового события.
Подготовлено:Russia nekto (talk) 10:09, 24 July 2015 (UTC)