Abilities Data Driven:zh-cn

From Valve Developer Community
Jump to: navigation, search
几乎所有在DOTA2中的技能都是使用C++来编写的,当查看所有这些技能的时候,npc_abilities.txt包含了一些技能元数据的KV(Key-Values)文件,暴露出了一些技能的键值,这里包含了几乎所有的元数据,使用数据驱动类技能系统能够为DOTA2创造一些自定义技能,能够为他们赋予特殊的数值和特定的触发事件。

一个简单的例子

这是一个非常简单的技能,他是一个被动技能,给单位添加了一个粒子特效。

"fx_test_ability"
{
 // General
 //-------------------------------------------------------------------------------------------------------------
 "BaseClass"			"ability_datadriven"
 "AbilityBehavior"		"DOTA_ABILITY_BEHAVIOR_PASSIVE"
 "AbilityTextureName"		"axe_battle_hunger"
 // Modifiers
 //-------------------------------------------------------------------------------------------------------------
 "Modifiers"
 {
  "fx_test_modifier"
  {
   "Passive" "1"
   "OnCreated"
   {
    "AttachEffect"
    {
     "Target" "CASTER"
     "EffectName" "generic_buff_1"
     "EffectAttachType" "follow_overhead"
     "EffectLifeDurationScale" "1"
     "EffectColorA" "255 255 0"
    }
   }
  }
 }
}


其中,基类("BaseClass"),技能类型("AbilityBehavior")和技能图标名称("AbilityTextureName")在所有技能中都是类似的:

基类("BaseClass") - 一般来说,DOTA通过技能的名字(在这里是"fx_test_ability")来将技能连接到C++中对应的类,如果你想让DOTA强制使用不同的C++类,这个基类("BaseClass")键将能完成这项工作 - 我们在这个技能中将基类定义为 ability_datadriven,来将技能连接到数据驱动技能类,将技能连接到其他已经存在的技能,通过修改KV(KeyValues)来重新定义他们的变量是可行的。

"ID" - ID是用来给跟踪技能状态的一个特定数值,在数据驱动类技能中不需要使用这个。

技能类型("AbilityBehavior") - 技能类型通过一系列的常量来定义这个技能的属性,你能够使用|来分割不同的常量,比如说 "DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - 这些空格是很重要的!

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, //这个技能将会显示技能释放的范围,有点像DOTA_ABILITY_BEHAVIOR_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_AUTOCAST配合使用。
DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL		= 1 << 20, //这个技能即使施法被中断也能继续释放。
DOTA_ABILITY_BEHAVIOR_DONT_CANCEL_MOVEMENT  = 1 << 21, //This ability doesn't cause certain modifiers to end,目前未知,只在信使的速度爆发有见到。
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, //这个技能能以神符为目标。


技能图标名称"AbilityTextureName" 是指在UI中显示的技能图标,你可以放一个其他技能的技能名称在此处来使用它,(或者你也可以引用 reource\flash3\images\spellicons文件夹中的.png文件名来定义自定义的图标 - 译者注)

"Modifiers" 是只有data-driven类技能才能使用的,这个区域定义了一系列的Modifiers(一般可以认为是Buff或者DeBuff),每个Modifier通过在其中定义的KV(KeyValues)来定义。

被动("Passive") 在Modifier中的被动字段,定义这个Modifier在这个技能被学习之后,将能自动施加给目标。

当创建时("OnCreated")是一个出发区域,当这个Modifier被第一次施加给这个单位的时候会被触发,在本例中,我们在触发之后给施法者施加了一个粒子特效。

技能触发事件和动作

引擎为技能提供了一系列触发事件,这些事件将能够在技能中触发:

"OnChannelFinish"      //当持续性施法完成
"OnChannelInterrupted" //当持续性施法被中断
"OnChannelSucceeded"   //当持续性施法成功
"OnOwnerDied"          //当拥有者死亡
"OnOwnerSpawned"       //当拥有者出生
"OnProjectileFinish"   //当弹道粒子特效结束
"OnProjectileHitUnit"  //当弹道粒子特效命中单位
"OnSpellStart"         //当技能施法开始
"OnToggleOff"          //当切换为关闭状态
"OnToggleOn"           //当切换为开启状态
"OnUpgrade"            //当升级


以下是你在技能中能够在动作中使用的一些Key:

"AddAbility" 
   "Target", "AbilityName"
"ActOnTargets"
   "Target", "Action"
"ApplyModifier"
   "Target", "ModifierName"
"AttachEffect"
   "EffectName", "EffectAttachType", "Target", "ControlPoints"
"Blink"
   "Target" (position to blink to)
"CreateThinker"
   "Target", "ModifierName"
"Damage"
   "Target", "Type", "MinDamage"/"MaxDamage" or "Damage"
"DestroyTrees"
   "Target", "Radius"
"FireEffect"
   "EffectName", "EffectAttachType", "Target", "ControlPoints"
"FireSound"
   "EffectName", "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"
"SpawnUnit"
   "UnitName", "UnitCount", "UnitLimit", "SpawnRadius", "Duration", "Target", "GrantsGold", "GrantsXP"
"Stun"
   "Target", "Duration"
"TrackingProjectile"
   "EffectName", "Dodgeable", "ProvidesVision", "VisionRadius", "MoveSpeed", "SourceAttachment"
Note:AddAbility (增加技能)将会给单位添加一个0级的技能。 RemoveAbility (移除技能)将会移除对应技能(哪怕它已经升级了),更复杂的技能管理,应当通过程序来制作。

动作目标

目标选择将会给动作提供一系列目标,一个目标("Target")键将能够使用 "CASTER"(施法者), "TARGET"(目标), "POINT"(点), "ATTACKER"(攻击者)或者 "UNIT" (单位)来提供一个单体目标的的选择,在不同的动作中,这些字段提供的是不同的目标,你需要自己实际使用一下才能明白。

为了选择多个目标,应该为"Target"键提供以下子键:

"Center" - "CASTER", "TARGET", "POINT", "PROJECTILE", "UNIT", "ATTACKER"
"Radius" - 搜索目标的范围
"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" - 最多目标数量
"Random" - (布尔值)在指定了最多目标数量之后,是否额外随机多选择一个单位。
"ScriptSelectPoints"
     "ScriptFile", "Function", "Radius", "Count"
Note:RandomMaxTargets 共同使用,将Random 设置为0将会使动作只影响目标区域内MaxTargets或者更少的单位。

Modifier 属性

Modifier属性能够改变对应Modifier影响的单位的游戏相关数值,以下示例定义的是一个降低目标攻击和移动速度的modifier(写在技能的Modifiers区域内),对于数值,你可以直接在区域直接写入数值,也可以使用 %name 来引用 AbilitySpecial区域内定义的数值,使用%name的好处是你能够针对不同的技能等级定义不同的数值,也可以在技能的说明中直接引用这个数值,在本示例中,Modifier的持续时间("Duration")引用了AbilitySpecial中的数值,减速的数值是直接写的数字。

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

以下是能够使用的Modifier属性:

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 状态

Modifier状态和Modifier属性十分类似,只不过他们是只有三个数值:"MODIFIER_STATE_VALUE_NO_ACTION", "MODIFIER_STATE_VALUE_ENABLED" 或者 "MODIFIER_STATE_VALUE_DISABLED"。以下的modifier示例给单位添加了一个简单的眩晕粒子特效,覆盖了单位的模型动作,让单位进入了眩晕状态。

"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状态:

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 事件

以下是可以使用的Modifier事件:

MODIFIER_EVENT_ON_ABILITY_END_CHANNEL
MODIFIER_EVENT_ON_ABILITY_EXECUTED
MODIFIER_EVENT_ON_ABILITY_START
MODIFIER_EVENT_ON_ATTACK
MODIFIER_EVENT_ON_ATTACK_ALLIED
MODIFIER_EVENT_ON_ATTACKED
MODIFIER_EVENT_ON_ATTACK_FAIL
MODIFIER_EVENT_ON_ATTACK_LANDED
MODIFIER_EVENT_ON_ATTACK_START
MODIFIER_EVENT_ON_BREAK_INVISIBILITY
MODIFIER_EVENT_ON_DEATH
MODIFIER_EVENT_ON_HEAL_RECEIVED
MODIFIER_EVENT_ON_HEALTH_GAINED
MODIFIER_EVENT_ON_HERO_KILLED
MODIFIER_EVENT_ON_MANA_GAINED
MODIFIER_EVENT_ON_ORB_EFFECT
MODIFIER_EVENT_ON_ORDER
MODIFIER_EVENT_ON_PROCESS_UPGRADE
MODIFIER_EVENT_ON_PROJECTILE_DODGE
MODIFIER_EVENT_ON_REFRESH
MODIFIER_EVENT_ON_RESPAWN
MODIFIER_EVENT_ON_SPENT_MANA
MODIFIER_EVENT_ON_STATE_CHANGED
MODIFIER_EVENT_ON_TAKEDAMAGE
MODIFIER_EVENT_ON_TAKEDAMAGE_REAPERSCYTHE
MODIFIER_EVENT_ON_TELEPORTED
MODIFIER_EVENT_ON_TELEPORTING
MODIFIER_EVENT_ON_UNIT_MOVED

Modifiers也可以定义一些触发事件,以下的这些事件能够在modifier中定义 - 动作在本页面其他位置已经提及了时

OnAttacked - 当拥有modifier的单位被攻击时
OnAttackLanded - 当拥有modifier的单位攻击到某个目标时
OnAttackStart -当拥有modifier的单位开始攻击某个目标
OnCreated -当modifier被创建时
OnDealDamage - 当拥有modifier的单位施加伤害的时候
OnDeath - 当拥有modifier的单位死亡的时候
OnDestroy - 当这个modifier被移除的时候
OnOrbFire - 当法球modifier的法球被释放的时候
OnOrbImpact - 当法球modifier的法球命中目标之后
OnTakeDamage - 当拥有modifier的单位受到伤害的时候
Orb - 定义一个法球modifeir的特效等

一个更复杂的例子

本示例在技能被添加之后,将会等到拥有者死亡之后触发,当拥有者死亡的时候,一个带有酸雾特效和一个降低目标区域的单位护甲并施加伤害的计时器将会被创建。

//=================================================================================================================
// Creature: Acid Spray
//=================================================================================================================
"creature_acid_spray"
{
 // General
 //-------------------------------------------------------------------------------------------------------------
 "BaseClass" 					"ability_datadriven"
 "AbilityBehavior"				"DOTA_ABILITY_BEHAVIOR_AOE"
 "AbilityUnitDamageType"			"DAMAGE_TYPE_COMPOSITE"
 "AbilityTextureName"			"alchemist_acid_spray"
 // Casting
 //-------------------------------------------------------------------------------------------------------------
 "AbilityCastPoint"				"0.2"
 "AbilityCastRange"				"900"
 "OnOwnerDied"
 {
   "CreateThinker"
   {
    "ModifierName" "creature_acid_spray_thinker"
    "Target" "CASTER"
   }
 }
 "Modifiers"
 {
  "creature_acid_spray_thinker"
  {
   "Aura" "create_acid_spray_armor_reduction_aura"
   "Aura_Radius" "%radius"
   "Aura_Teams" "DOTA_UNIT_TARGET_TEAM_ENEMY"
   "Aura_Types" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP | DOTA_UNIT_TARGET_MECHANICAL"
   "Aura_Flags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES"
   "Duration" "%duration"
   "OnCreated"
   {
    "AttachEffect"
    {
      "EffectName" "alchemist_acid_spray"
      "EffectAttachType" "follow_origin"
      "Target" "TARGET"
      "ControlPoints"
      {
       "00" "0 0 0"
       "01" "%radius 1 1"
      }
     }
    }
   }
   "create_acid_spray_armor_reduction_aura"
   {
    "IsDebuff" "1"
    "IsPurgable" "0"
    "EffectName" "alchemist_acid_spray_debuff"				
    "ThinkInterval" "%tick_rate"
    "OnIntervalThink"
    {
      "Damage"
      {
       "Type" "DAMAGE_TYPE_COMPOSITE"
       "Damage" "%damage"
       "Target" "TARGET"
      }
     }
     "Properties"
     {
       "MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS" "%armor_reduction"
     }
    }
   }
 // Special	
 //-------------------------------------------------------------------------------------------------------------
 "AbilitySpecial"
 {
  "01"
  {
   "var_type"				"FIELD_INTEGER"
   "radius"				"250"
  }
  "02"
  {
   "var_type"				"FIELD_FLOAT"
   "duration"				"16.0"
  }
  "03"
  {
   "var_type"				"FIELD_INTEGER"
   "damage"				"118 128 138 158"
  }
  "04"
  {
   "var_type"				"FIELD_INTEGER"
   "armor_reduction"		        "-3 -4 -5 -6"
  }
  "05"
  {
   "var_type"				"FIELD_FLOAT"
   "tick_rate"				"1.0"
  }
 }
}