@@ -4157,11 +4157,7 @@ function calcs.offence(env, actor, activeSkill)
41574157 end
41584158 end
41594159
4160- local invertChance = m_max (m_min (skillModList :Sum (" CHANCE" , cfg , " HitsInvertEleResChance" ), 1 ), 0 )
4161- if isElemental [damageType ] and invertChance > 0 then
4162- -- resist = (1 - invertChance) * resist + invertChance * (-1 * resist)
4163- resist = resist - 2 * invertChance * resist
4164- end
4160+ local invertChance = isElemental [damageType ] and m_max (m_min (skillModList :Sum (" CHANCE" , cfg , " HitsInvertEleResChance" ), 1 ), 0 ) or 0
41654161 sourceRes = env .modDB :Flag (nil , " Enemy" .. sourceRes .. " ResistEqualToYours" ) and " Your " .. sourceRes .. " Resistance" or (env .partyMembers .modDB :Flag (nil , " Enemy" .. sourceRes .. " ResistEqualToYours" ) and " Party Member " .. sourceRes .. " Resistance" or sourceRes )
41664162 if skillFlags .projectile then
41674163 takenInc = takenInc + enemyDB :Sum (" INC" , nil , " ProjectileDamageTaken" )
@@ -4174,23 +4170,33 @@ function calcs.offence(env, actor, activeSkill)
41744170 end
41754171 local effMult = (1 + takenInc / 100 ) * takenMore
41764172 local useRes = useThisResist (damageType )
4173+ local effectiveResist = resist
4174+ local calcPenResist = function (resist )
4175+ return resist > minPen and m_max (resist - pen , minPen ) or resist
4176+ end
41774177 if skillModList :Flag (cfg , isElemental [damageType ] and " CannotElePenIgnore" or nil ) then
4178- effMult = effMult * (1 - resist / 100 )
4178+ effectiveResist = (isElemental [damageType ] and invertChance > 0 ) and (resist - 2 * invertChance * resist ) or resist
4179+ effMult = effMult * (1 - effectiveResist / 100 )
41794180 elseif useRes then
4180- effMult = effMult * (1 - (resist > minPen and m_max (resist - pen , minPen ) or resist ) / 100 )
4181+ if isElemental [damageType ] and invertChance > 0 then
4182+ effectiveResist = calcPenResist (resist ) * (1 - invertChance ) + calcPenResist (- resist ) * invertChance
4183+ else
4184+ effectiveResist = calcPenResist (resist )
4185+ end
4186+ effMult = effMult * (1 - effectiveResist / 100 )
41814187 end
41824188 damageTypeHitMin = damageTypeHitMin * effMult
41834189 damageTypeHitMax = damageTypeHitMax * effMult
41844190 damageTypeHitAvg = damageTypeHitAvg * effMult
41854191 if env .mode == " CALCS" then
41864192 output [damageType .. " EffMult" ] = effMult
41874193 end
4188- if pass == 2 and breakdown and (effMult ~= 1 or sourceRes ~= damageType ) and skillModList :Flag (cfg , isElemental [damageType ] and " CannotElePenIgnore" or nil ) then
4194+ if pass == 2 and breakdown and (effMult ~= 1 or sourceRes ~= damageType or invertChance > 0 ) and skillModList :Flag (cfg , isElemental [damageType ] and " CannotElePenIgnore" or nil ) then
41894195 t_insert (breakdown [damageType ], s_format (" x %.3f ^8(effective DPS modifier)" , effMult ))
4190- breakdown [damageType .. " EffMult" ] = breakdown .effMult (damageType , resist , 0 , takenInc , effMult , takenMore , sourceRes , useRes , invertChance , minPen )
4191- elseif pass == 2 and breakdown and (effMult ~= 1 or (resist - pen ) < minPen or sourceRes ~= damageType ) then
4196+ breakdown [damageType .. " EffMult" ] = breakdown .effMult (damageType , resist , 0 , takenInc , effMult , takenMore , sourceRes , useRes , invertChance , minPen , effectiveResist )
4197+ elseif pass == 2 and breakdown and (effMult ~= 1 or (resist - pen ) < minPen or sourceRes ~= damageType or invertChance > 0 ) then
41924198 t_insert (breakdown [damageType ], s_format (" x %.3f ^8(effective DPS modifier)" , effMult ))
4193- breakdown [damageType .. " EffMult" ] = breakdown .effMult (damageType , resist , pen , takenInc , effMult , takenMore , sourceRes , useRes , invertChance , minPen )
4199+ breakdown [damageType .. " EffMult" ] = breakdown .effMult (damageType , resist , pen , takenInc , effMult , takenMore , sourceRes , useRes , invertChance , minPen , effectiveResist )
41944200 end
41954201 end
41964202 if pass == 2 and breakdown then
0 commit comments