首先看盾的定义片段
special_combat = { talented="shield", accuracy_effect="staff", damrange = 1.2, no_offhand_penalty=true }
再看看链锯的片段
combat = { talented = "steamsaw", accuracy_effect="axe", damtype=DamageType.PHYSICALBLEED, damrange = 1.5, physspeed = 1, sound = {"actions/saw", pitch=1, vol=1}, sound_miss = {"actions/saw", pitch=1, vol=1}, use_resources={steam = 1}},
事实上盾没有combat这一属性,而链锯没有special_combat这一属性。
先来谈岩石守卫,可以看到盾牌攻击属性后面有no_offhand_penalty=true。
实际进行副手伤害判定时,执行的代码为
local offmult = self:getOffHandMult(o.combat, mult)
local combat = self:getObjectCombat(o, "offhand")
if o.special_combat and o.subtype == "shield" and self:knowTalent(self.T_STONESHIELD) then combat = o.special_combat end
此处的o就是存储相关武器的变量。可以看到,副手伤害乘数的判定在盾牌攻击类型判定之前,所以offmult并没有得到更新。
再来谈谈圣光沁盾,我们拿盾攻系T1作比较
shield pummel:
shield, shield_combat = self:hasShield()
...
self:attackTargetWith(target, shield_combat, nil, self:combatTalentWeaponDamage(t, 1, 1.7, self:getTalentLevel(self.T_SHIELD_EXPERTISE)))
local speed, hit = self:attackTargetWith(target, shield_combat, nil, self:combatTalentWeaponDamage(t, 1.2, 2.1, self:getTalentLevel(self.T_SHIELD_EXPERTISE)))
hasShield()这个函数返回判定为盾的武器以及武器攻击类型。总体来说,如果副手有盾,则使用副手作为盾;如果副手没盾主手有盾则使用主手作为盾。反正只会有一个判定为盾。然后如果判定为盾的有combat这个属性(比如链锯),则返回combat,否则返回special_combat。
shield pummel使用attackTargetWith函数,这时已经跳过了副手惩罚判断,直接使combatTalentWeaponDamage作为乘数
这也就是说,使用shield pummel时,如果用链锯,相当于造成技能说明百分比的主手链锯伤害。
现在对比圣光沁盾
...
self:attackTargetWith(target, shield.special_combat, DamageType.LIGHT, t.getShieldDamage(self, t))
...
可以看到,此处的类型直接使用了special_combat而没有调用hasShield。由于链锯没有此属性,经过其他的判断(这里省略)后最终会使用默认self.combat。。。
self.combat = self.combat or {
dam=1,
atk=1, apr=0,
physcrit=0,
physspeed =1,
dammod = { str=1 },
damrange=1.1,
}
所以太阳骑士还是远离电锯吧,盾攻系用电锯没问题。
另外岩石守卫的大地力量T3 shard这个技能也有bug,实际上会使用攻击者而非被攻击者的技能等级,导致算作0级,永远只有百分之40伤害。
special_combat = { talented="shield", accuracy_effect="staff", damrange = 1.2, no_offhand_penalty=true }
再看看链锯的片段
combat = { talented = "steamsaw", accuracy_effect="axe", damtype=DamageType.PHYSICALBLEED, damrange = 1.5, physspeed = 1, sound = {"actions/saw", pitch=1, vol=1}, sound_miss = {"actions/saw", pitch=1, vol=1}, use_resources={steam = 1}},
事实上盾没有combat这一属性,而链锯没有special_combat这一属性。
先来谈岩石守卫,可以看到盾牌攻击属性后面有no_offhand_penalty=true。
实际进行副手伤害判定时,执行的代码为
local offmult = self:getOffHandMult(o.combat, mult)
local combat = self:getObjectCombat(o, "offhand")
if o.special_combat and o.subtype == "shield" and self:knowTalent(self.T_STONESHIELD) then combat = o.special_combat end
此处的o就是存储相关武器的变量。可以看到,副手伤害乘数的判定在盾牌攻击类型判定之前,所以offmult并没有得到更新。
再来谈谈圣光沁盾,我们拿盾攻系T1作比较
shield pummel:
shield, shield_combat = self:hasShield()
...
self:attackTargetWith(target, shield_combat, nil, self:combatTalentWeaponDamage(t, 1, 1.7, self:getTalentLevel(self.T_SHIELD_EXPERTISE)))
local speed, hit = self:attackTargetWith(target, shield_combat, nil, self:combatTalentWeaponDamage(t, 1.2, 2.1, self:getTalentLevel(self.T_SHIELD_EXPERTISE)))
hasShield()这个函数返回判定为盾的武器以及武器攻击类型。总体来说,如果副手有盾,则使用副手作为盾;如果副手没盾主手有盾则使用主手作为盾。反正只会有一个判定为盾。然后如果判定为盾的有combat这个属性(比如链锯),则返回combat,否则返回special_combat。
shield pummel使用attackTargetWith函数,这时已经跳过了副手惩罚判断,直接使combatTalentWeaponDamage作为乘数
这也就是说,使用shield pummel时,如果用链锯,相当于造成技能说明百分比的主手链锯伤害。
现在对比圣光沁盾
...
self:attackTargetWith(target, shield.special_combat, DamageType.LIGHT, t.getShieldDamage(self, t))
...
可以看到,此处的类型直接使用了special_combat而没有调用hasShield。由于链锯没有此属性,经过其他的判断(这里省略)后最终会使用默认self.combat。。。
self.combat = self.combat or {
dam=1,
atk=1, apr=0,
physcrit=0,
physspeed =1,
dammod = { str=1 },
damrange=1.1,
}
所以太阳骑士还是远离电锯吧,盾攻系用电锯没问题。
另外岩石守卫的大地力量T3 shard这个技能也有bug,实际上会使用攻击者而非被攻击者的技能等级,导致算作0级,永远只有百分之40伤害。