星际2技能系统分析(五)Effect(Damage)
星际2的技能还有一堆
如建造,升级,融合,变形等,就不一一看了,主要目的是为了分析ABE的逻辑,而不是实现,后面如有遇见再说。
效果系统
效果系统比较复杂,因为前面也提到,它可以包含子效果,子行为是一个树状结构,并且可以多个效果集合成一个效果,或者根据条件去Switch效果。
Effect的结构
CEffect:效果虚基类
CEffectResponse:响应效果虚基类,其子类为具体效果类
CEffectSwitch:条件选择效果基础类。用法类似于编程语言的Switch,用于条件分支效果。
CEffectSet:集合效果基础类。用于将一大堆效果打包成一个效果。
CEffect
属性
Chance:该效果被执行的机率(0,1),0表示永远不执行,1(默认)表示始终被执行。
AINotifyFlags:执行该效果发送给AI的通知
Alert:指定该效果被执行的警示信息
ValidatorArray:效果验证器
Maker : 指定效果验证器所使用的标记。标记通常用于分散一个玩家的多个单位对区域中所有敌人单位使用的效果。
XML定义
<CEffect default="1">
<Name value="Effect/Name/##id##"/>
<EditorCategories value="Race:Neutral"/>
<Chance value="1"/>
<Marker Link="Effect/##id##"/>
<DamageModifierSource Value="Unknown"/>
</CEffect>
CEffectResponse
响应效果基类
属性
CEffectDamage
伤害效果基类
属性
又是一堆
基本属性:伤害计算,伤害增益,伤害减免,伤害类型,伤害最大最小值,溅射伤害,验证器等设置
搜索属性:搜索类型过滤,搜索范围,搜索范围偏移量,搜索最大,最小目标数量等设置
目标属性:效果中心点,目标优先级,轰击单位过滤,发生位置等设置
XML定义
<CEffectDamage default="1">
<!--暴露攻击中的单位留下快照-->
<Visibility value="Snapshot"/>
<!--效果作用的目标最大个数-->
<MaxCount value="4294967295"/>
<!--该效果未获得所需最小数量,报CCantFindEnoughTargets错误-->
<MinCountError value="CantFindEnoughTargets"/>
<!--施放位置为SourceUnit-->
<LaunchLocation Value="SourceUnit"/>
<!--效果中心点位于TargetUnitOrPoint-->
<ImpactLocation Value="TargetUnitOrPoint"/>
<!--搜索区域标识为SameCliff,统一高度-->
<SearchFlags index="SameCliff" value="1"/>
</CEffectDamage>
实体类
机枪兵的攻击技能,造成伤害效果
机枪兵有个武器GuassRife,伤害效果是挂在武器上的
<CEffectDamage id="GuassRifle" parent="DU_WEAP">
<EditorCategories value="Race:Terran"/>
<!--伤害类型为 Ranged, 应该是远程的意思 -->
<Kind value="Ranged"/>
<!--伤害 6 -->
<Amount value="6"/>
</CEffectDamage>
GuassRifle的父类DU_WEAP
<CEffectDamage default="1" id="DU_WEAP">
<!--每一点护甲减伤1-->
<ArmorReduction value="1"/>
<!--近战-->
<Kind value="Melee"/>
<ResponseFlags index="Acquire" value="1"/>
<ResponseFlags index="Flee" value="1"/>
<Flags index="Notification" value="1"/>
<SearchFlags index="CallForHelp" value="1"/>
<SearchFlags index="OffsetAreaByAngle" value="1"/>
<SearchFlags index="OffsetByUnitRadius" value="1"/>
</CEffectDamage>
总的效果就是机枪兵攻击,基础伤害为6,对方拥有每一点护甲就减伤1.
攻击逻辑是
1. Unit(机枪兵)进行攻击
2. 找到机枪兵的武器
3. 执行武器效果
意味着星际2中,如果单位没有武器,该单位是不能进行攻击的。
如医疗运输机就是一个不能攻击的单位。
虽然它也有攻击技能,但是当游戏中点击A键显示的是搜索移动而不是攻击