tome4吧 关注:8,444贴子:80,006
  • 9回复贴,共1

岩石守卫副手惩罚bug以及链锯圣光沁盾伤害bug原因

只看楼主收藏回复

首先看盾的定义片段
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伤害。


IP属地:湖北1楼2017-06-25 01:45回复
    更正:岩石守卫副手伤害惩罚bug问题并不在顺序,而是local offmult = self:getOffHandMult(o.combat, mult)这段指令中,o.combat应该改为 o.combat or o.special_combat。由于普通盾牌的combat属性不存在导致getOffHandMult(combat, mult)函数中
    if combat and combat.no_offhand_penalty then offmult = math.max(1, offmult) end
    这个判断没发成立


    IP属地:湖北2楼2017-06-25 02:45
    回复
      其实我想搞清楚这是dg故意为之,还是说更新盾牌无副手惩罚后忘记了这块,如果是忘记了,倒想给他提一下下版本修复这个啊


      IP属地:江苏来自Android客户端3楼2017-06-25 03:05
      收起回复
        一定是写代码不加注释,更新一个版本自己都认不得


        来自Android客户端4楼2017-06-25 07:57
        回复
          大神给他修复下,出个贴吧版?


          IP属地:浙江5楼2017-06-25 09:29
          回复
            是链锯不能触发圣光沁盾的意思吗?


            IP属地:广东6楼2017-07-27 21:28
            收起回复