Skip to content

Commit f592c04

Browse files
andyli00Wires77
authored andcommitted
[PATCH] fix negative impale dps for dual wield simultaneous attacks
1 parent a22a781 commit f592c04

1 file changed

Lines changed: 36 additions & 13 deletions

File tree

src/Modules/CalcOffence.lua

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5435,7 +5435,15 @@ function calcs.offence(env, actor, activeSkill)
54355435
output.CombinedAvgToMonsterLife = output.CombinedAvg / monsterLife * 100
54365436
end
54375437
if skillFlags.impale then
5438-
output.ImpaleDPS = output.PhysicalStoredCombinedAvg * ((output.ImpaleModifier or 1) - 1) * output.HitChance / 100 * skillData.dpsMultiplier
5438+
local mainHandImpaleDPS, offHandImpaleDPS
5439+
if skillFlags.attack and skillData.doubleHitsWhenDualWielding and skillFlags.bothWeaponAttack then
5440+
-- separately combine
5441+
mainHandImpaleDPS = output.MainHand.impaleStoredHitAvg * ((output.MainHand.ImpaleModifier or 1) - 1) * output.MainHand.HitChance / 100 * skillData.dpsMultiplier
5442+
offHandImpaleDPS = output.OffHand.impaleStoredHitAvg * ((output.OffHand.ImpaleModifier or 1) - 1) * output.OffHand.HitChance / 100 * skillData.dpsMultiplier
5443+
output.ImpaleDPS = mainHandImpaleDPS + offHandImpaleDPS
5444+
else
5445+
output.ImpaleDPS = output.PhysicalStoredCombinedAvg * ((output.ImpaleModifier or 1) - 1) * output.HitChance / 100 * skillData.dpsMultiplier
5446+
end
54395447
if skillData.showAverage then
54405448
output.WithImpaleDPS = output.AverageDamage + output.ImpaleDPS
54415449
output.CombinedAvg = output.CombinedAvg + output.ImpaleDPS
@@ -5450,19 +5458,34 @@ function calcs.offence(env, actor, activeSkill)
54505458
output.CombinedDPS = output.CombinedDPS + output.ImpaleDPS
54515459
if breakdown then
54525460
breakdown.ImpaleDPS = {}
5453-
t_insert(breakdown.ImpaleDPS, s_format("%.2f ^8(average physical hit before mitigation)", output.PhysicalStoredCombinedAvg))
5454-
t_insert(breakdown.ImpaleDPS, s_format("x %.2f ^8(chance to hit)", output.HitChance / 100))
5455-
if skillFlags.notAverage then
5456-
t_insert(breakdown.ImpaleDPS, output.HitSpeed and s_format("x %.2f ^8(hit rate)", output.HitSpeed) or s_format("x %.2f ^8(%s rate)", output.Speed, skillFlags.attack and "attack" or "cast"))
5457-
end
5458-
t_insert(breakdown.ImpaleDPS, s_format("x %.2f ^8(impale damage multiplier)", ((output.ImpaleModifier or 1) - 1)))
5459-
if skillData.dpsMultiplier ~= 1 then
5460-
t_insert(breakdown.ImpaleDPS, s_format("x %g ^8(dps multiplier for this skill)", skillData.dpsMultiplier))
5461-
end
5462-
if quantityMultiplier > 1 then
5463-
t_insert(breakdown.ImpaleDPS, s_format("x %g ^8(quantity multiplier for this skill)", quantityMultiplier))
5461+
if skillFlags.attack and skillData.doubleHitsWhenDualWielding and skillFlags.bothWeaponAttack then
5462+
t_insert(breakdown.ImpaleDPS, s_format("Main Hand:"))
5463+
t_insert(breakdown.ImpaleDPS, s_format("%.2f ^8(MH average physical hit before mitigation)", output.MainHand.impaleStoredHitAvg))
5464+
t_insert(breakdown.ImpaleDPS, s_format("x %.2f ^8(MH chance to hit)", output.MainHand.HitChance / 100))
5465+
t_insert(breakdown.ImpaleDPS, s_format("x %.2f ^8(MH impale damage multiplier)\n", ((output.MainHand.ImpaleModifier or 1) - 1)))
5466+
t_insert(breakdown.ImpaleDPS, s_format("= %.2f", mainHandImpaleDPS))
5467+
t_insert(breakdown.ImpaleDPS, s_format("Off Hand:"))
5468+
t_insert(breakdown.ImpaleDPS, s_format("%.2f ^8(OH average physical hit before mitigation)", output.OffHand.impaleStoredHitAvg))
5469+
t_insert(breakdown.ImpaleDPS, s_format("x %.2f ^8(OH chance to hit)", output.OffHand.HitChance / 100))
5470+
t_insert(breakdown.ImpaleDPS, s_format("x %.2f ^8(OH impale damage multiplier)", ((output.OffHand.ImpaleModifier or 1) - 1)))
5471+
t_insert(breakdown.ImpaleDPS, s_format("= %.2f", offHandImpaleDPS))
5472+
t_insert(breakdown.ImpaleDPS, s_format("Combined total:"))
5473+
t_insert(breakdown.ImpaleDPS, s_format("%.2f + %.2f", mainHandImpaleDPS, offHandImpaleDPS))
5474+
else
5475+
t_insert(breakdown.ImpaleDPS, s_format("%.2f ^8(average physical hit before mitigation)", output.PhysicalStoredCombinedAvg))
5476+
t_insert(breakdown.ImpaleDPS, s_format("x %.2f ^8(chance to hit)", output.HitChance / 100))
5477+
t_insert(breakdown.ImpaleDPS, s_format("x %.2f ^8(impale damage multiplier)", ((output.ImpaleModifier or 1) - 1)))
54645478
end
5465-
t_insert(breakdown.ImpaleDPS, s_format("= %.1f", output.ImpaleDPS))
5479+
if skillFlags.notAverage then
5480+
t_insert(breakdown.ImpaleDPS, output.HitSpeed and s_format("x %.2f ^8(hit rate)", output.HitSpeed) or s_format("x %.2f ^8(%s rate)", output.Speed, skillFlags.attack and "attack" or "cast"))
5481+
end
5482+
if skillData.dpsMultiplier ~= 1 then
5483+
t_insert(breakdown.ImpaleDPS, s_format("x %g ^8(dps multiplier for this skill)", skillData.dpsMultiplier))
5484+
end
5485+
if quantityMultiplier > 1 then
5486+
t_insert(breakdown.ImpaleDPS, s_format("x %g ^8(quantity multiplier for this skill)", quantityMultiplier))
5487+
end
5488+
t_insert(breakdown.ImpaleDPS, s_format("= %.1f", output.ImpaleDPS))
54665489
end
54675490
end
54685491

0 commit comments

Comments
 (0)