数据驱动类技能

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

几乎所有在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" "particles/econ/generic/generic_buff_1/generic_buff_1.vpcf"
                    "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)来重新定义他们的变量是可行的。
  • "AbilityBehavior" (技能行为)
技能行为通过一系列的常量来定义这个技能的属性,你能够使用|来分割不同的常量,比如说 "DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - 这些空格是很重要的!
在下面 技能行为 可以查看全部类型。
  • "ID"
ID是用来给跟踪技能状态的一个特定数值,在数据驱动类技能中不需要使用这个。
  • "AbilityTextureName" (技能图标名称)
是指在UI中显示的技能图标,你可以放一个其他技能的技能名称在此处来使用它。(或者你也可以引用 reource\flash3\images\spellicons文件夹中的.png文件名来定义自定义的图标 - 译者注)
  • "Modifiers"
是只有data-driven类技能才能使用的,这个区域定义了一系列的Modifiers(一般可以认为是Buff或者DeBuff),每个Modifier通过在其中定义的KV(KeyValues)来定义。
  • "Passive" (被动)
在Modifier中的被动字段,定义这个Modifier在这个技能被学习之后,将能自动施加给目标。
  • "OnCreated" (当创建时)
是一个出发区域,当这个Modifier被第一次施加给这个单位的时候会被触发,在本例中,我们在触发之后给施法者施加了一个粒子特效。

技能行为

"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, //这个技能是一个光环技能,Not really used other than to tag the ability as such.
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, //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, //这个技能能以神符为目标。

技能触发事件和操作

技能可以有各种游戏中的事件,这些事件可以触发操作。

一个关于事件和操作的范例。在这个范例中,当你开始释放技能,就会在施法者上播放音效。

"OnSpellStart"      // 事件
{
    "FireSound"     // 操作
    {
        "EffectName"    "SoundEventName"
        "Target"        "CASTER"
    }
}


事件

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

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

操作

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

操作名称 操作可用参数
AddAbility Target, AbilityName
添加技能 目标,技能名称
ActOnTargets Target, Action
使目标模型做出某个动作 目标,动作名称
ApplyModifier Target, ModifierName
应用Modifier 目标,Modifier名称
AttachEffect EffectName, EffectAttachType, Target, ControlPoints, EffectColorA, EffectColorB, EffectAlphaScale
附着点特效 特效名称,特效附着点类型,目标,控制点,特效颜色A,特效颜色B,特效不透明度比例
Blink Target
闪烁 目标
CleaveAttack CleavePercent, CleaveRadius
范围攻击 分裂伤害,分裂范围
CreateThinker Target, ModifierName
创建Thinker(定时器) 目标,Modifier名称
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
播放特效 特效名称,特效附着点类型,目标,控制点,目标点,特效范围,特效播放时间比例,特效存活时间比例,特效颜色A,特效颜色B
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
线性投射物 目标,特效名称,移动速度,开始范围,结束范围,固定距离,开始位置,目标队伍,目标类型,目标状态,HasFrontalCone,提供视野,视野范围
Random Chance, PseudoRandom, OnSuccess, OnFailure
几率 概率,伪随机,成功时,失败时
RemoveAbility Target, AbilityName
移除技能 目标,技能名称
RemoveModifier Target, ModifierName
移除Modifier 目标,Modifier名称
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注意:AddAbility (增加技能)将会给单位添加一个0级的技能。 RemoveAbility (移除技能)将会移除对应技能(哪怕它已经升级了),更复杂的技能管理,应当通过程序来制作。

操作目标

在操作之前,首先应该选中目标(Target)。以下有几种选择方式。

Note.png注意:在几乎所有操作中,都需要选中目标。这非常重要,直接影响到你的技能效果。

单体目标

小范例:

"Target"  "CASTER"

单体目标有以下这些值:

名称 描述
CASTER 施法者
TARGET 目标
POINT
ATTACKER 攻击者
UNIT 单位

在页面最上例子中,就是用"Target(目标)" "CASTER(施法者)",在施法者身上制造些特效。

Note.png注意:在不同的操作中,这些字段提供的是不同的目标,你需要自己实际使用一下才能明白。

多个目标

小范例:

"Target"
{
    "Center"    "POINT"
    "Teams"     "DOTA_UNIT_TARGET_TEAM_ENEMY"
    "Radius"    "300"
}

想要在某个区域里选中多个目标,就需要在 Target代码块 中填入下面的参数:

  • Center - 以目标为搜索范围的中心
中心目标 描述
CASTER 施法者
TARGET 目标
POINT
ATTACKER 攻击者
UNIT 单位
PROJECTILE 抛射物
  • 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.png注意:RandomMaxTargets 共同使用,将Random 设置为0将会使操作只影响目标区域内MaxTargets或者更少的单位。

Modifiers

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

名称 可用参数
Attributes MODIFIER_ATTRIBUTE_IGNORE_INVULNERABLE, MODIFIER_ATTRIBUTE_MULTIPLE, MODIFIER_ATTRIBUTE_NONE, MODIFIER_ATTRIBUTE_PERMANENT
属性 忽视无敌,可叠加,无,正常
Duration FloatValue
持续时间 浮点值
EffectAttachType follow_origin, follow_overhead, follow_chest, follow_head, start_at_customorigin, world_origin
特效附着点类型 原点,头顶,胸膛,头部,自定义原点,世界原点
EffectName StringValue
特效名称 字符串(路径+特效名)
IsBuff BooleanValue
是否增益魔法 布尔值(1为增益魔法)
IsDebuff BooleanValue
是否减益魔法 布尔值(1为减益魔法)
IsHidden BooleanValue
是否隐藏 布尔值(1为隐藏)
IsPurgable BooleanValue
能否被驱散 布尔值(1为可被驱散)
OverrideAnimation ACT_DOTA_ATTACK, ACT_DOTA_CAST_ABILITY_1 (2, 3, 4, 5, 6), ACT_DOTA_DISABLED, ACT_DOTA_SPAWN, ACT_DOTA_TELEPORT, ACT_DOTA_VICTORY
覆盖模型动作 攻击动作,技能释放动作(1~6),受伤动作,出生动作,回程动作,胜利动作
Passive BooleanValue
被动 布尔值(1为被动技能,会自动添加该Modifiers)
TextureName StringValue
图标名称 字符串
ThinkInterval FloatValue
Think间隔 浮点值

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_CONSTANT"      "-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_ATTACK_RANGE_BONUS_UNIQUE 攻击距离增益(不叠加)
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_CAST_RANGE_BONUS 施法距离增益
MODIFIER_PROPERTY_CHANGE_ABILITY_VALUE 改变技能数值
MODIFIER_PROPERTY_COOLDOWN_PERCENTAGE_STACKING 冷却时间百分比堆叠
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 禁止生命回复(1为禁止)
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_CONSTANT 所受物理伤害数值(数值物理伤害减免/增加)
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_MAGICDAMAGEOUTGOING_PERCENTAGE 魔法输出百分比(百分比法伤增益/减益)
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_MAX_ATTACK_RANGE 最大攻击距离增益
MODIFIER_PROPERTY_MIN_HEALTH 血量在设定值以下是不能杀死(斧王的斩杀依然有效)
MODIFIER_PROPERTY_MISS_PERCENTAGE 增加miss的几率
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_NEGATIVE_EVASION_CONSTANT 降低闪避概率
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_SUPER_ILLUSION_WITH_ULTIMATE VS A杖大招的那个幻象
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 事件

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

触发事件名称 描述
OnAttacked 当拥有modifier的单位被攻击时
OnAttackLanded 当拥有modifier的单位攻击到某个目标时
OnAttackStart 当拥有modifier的单位开始攻击某个目标
OnCreated 当modifier被创建时
OnDealDamage 当拥有modifier的单位施加伤害的时候
OnDeath 当拥有modifier的单位死亡的时候
OnDestroy 当这个modifier被移除的时候
OnOrbFire 当法球modifier的法球被释放的时候
OnOrbImpact 当法球modifier的法球命中目标之后
OnTakeDamage 当拥有modifier的单位受到伤害的时候
Orb 定义一个法球modifeir的特效等
OnIntervalThink 循环执行定时器操作。在CreateThinker(创建定时器)下使用,配合Duration(持续时间),ThinkInterval(间隔)。
新事件(14/08/26更新) 描述
OnAttack
OnAttackFailed 当拥有modifier的单位攻击失败时
OnAttackAllied 当拥有modifier的单位攻击盟友时
OnProjectileDodge 当拥有modifier的单位闪避弹道粒子特效时
OnEquip 当拥有modifier的单位装备物品
OnOrder 当拥有modifier的单位执行指令
OnUnitMoved 当拥有modifier的单位移动的时候
OnAbilityStart 当拥有modifier的单位开始使用技能
OnAbilityEndChannel 当拥有modifier的单位结束持续施法
OnStateChanged 当拥有modifier的单位状态改变时
OnRespawn 当拥有modifier的单位重生
OnSpentMana 当拥有modifier的单位花费魔法时
OnTeleporting 当拥有modifier的单位正在传送时
OnTeleported 当拥有modifier的单位传送结束时
OnHealthGained 当拥有modifier的单位获得生命值
OnManaGained 当拥有modifier的单位获得魔法值
OnHeroKilled 当拥有modifier的单位被英雄杀了
OnHealReceived 当拥有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 当单位移动时

技能范例

预载入

创建数据驱动类技能,"precache"(预载入)代码块 并不是必须的。也只有当 BaseClass(基类) 定义成ability_datadriven的技能才适用预载入。

注意
  • 粒子特效 预载入并不需要完整的路径,举个例子:
particles/econ/generic/generic_buff_1/generic_buff_1.vpcf
  • 音效只需要事件名称即可。