数据驱动类技能
Contents
几乎所有在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 |
跟踪投射物 | 目标,特效名称,是否可闪避,提供视野,视野范围,移动速度,起源附着点 |
AddAbility
(增加技能)将会给单位添加一个0级的技能。 RemoveAbility
(移除技能)将会移除对应技能(哪怕它已经升级了),更复杂的技能管理,应当通过程序来制作。操作目标
在操作之前,首先应该选中目标(Target)。以下有几种选择方式。
单体目标
小范例:
"Target" "CASTER"
单体目标有以下这些值:
名称 描述 CASTER 施法者 TARGET 目标 POINT 点 ATTACKER 攻击者 UNIT 单位
在页面最上例子中,就是用"Target(目标)" "CASTER(施法者)"
,在施法者身上制造些特效。
多个目标
小范例:
"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
Random
和 MaxTargets
共同使用,将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
- 音效只需要事件名称即可。