@@ -3104,26 +3104,27 @@ function calcs.offence(env, actor, activeSkill)
31043104 end
31053105 globalOutput .AncestralCryCalculated = true
31063106 elseif value .activeEffect .grantedEffect .name == " Infernal Cry" and not globalOutput .InfernalCryCalculated then
3107+ globalOutput .CreateWarcryOffensiveCalcSection = true
31073108 globalOutput .InfernalCryDuration = calcSkillDuration (value .skillModList , value .skillCfg , value .skillData , env , enemyDB )
31083109 globalOutput .InfernalCryCooldown = calcSkillCooldown (value .skillModList , value .skillCfg , value .skillData )
31093110 globalOutput .InfernalCryCastTime = calcWarcryCastTime (value .skillModList , value .skillCfg , value .skillData , actor )
31103111 if activeSkill .skillTypes [SkillType .Melee ] then
3111- globalOutput .InfernalExertsCount = env . modDB :Sum (" BASE" , nil , " NumInfernalExerts " ) or 0
3112- local baseUptimeRatio = m_min ((globalOutput .InfernalExertsCount / globalOutput .Speed ) / (globalOutput .InfernalCryCooldown + globalOutput .InfernalCryCastTime ), 1 ) * 100
3112+ globalOutput .InfernalEmpoweredCount = ( modDB :Override ( nil , " WarcryPower " ) or value . skillModList : Sum (" BASE" , nil , " WarcryPowerCap " )) / value . skillModList : Sum ( " BASE " , nil , " WarcryPowerPer " )
3113+ local baseUptimeRatio = m_min ((globalOutput .InfernalEmpoweredCount / globalOutput .Speed ) / (globalOutput .InfernalCryCooldown + globalOutput .InfernalCryCastTime ), 1 ) * 100
31133114 local storedUses = value .skillData .storedUses or 0 + value .skillModList :Sum (" BASE" , value .skillCfg , " AdditionalCooldownUses" )
3114- globalOutput .InfernalUpTimeRatio = m_min (100 , baseUptimeRatio * storedUses )
3115- globalOutput .GlobalWarcryUptimeRatio = globalOutput .GlobalWarcryUptimeRatio + globalOutput .InfernalUpTimeRatio
3115+ globalOutput .InfernalCryUptimeRatio = m_min (100 , baseUptimeRatio * storedUses )
3116+ globalOutput .GlobalWarcryUptimeRatio = globalOutput .GlobalWarcryUptimeRatio + globalOutput .InfernalCryUptimeRatio
31163117 if globalBreakdown then
3117- globalBreakdown .InfernalUpTimeRatio = { }
3118- t_insert (globalBreakdown .InfernalUpTimeRatio , s_format (" (%d ^8(number of exerts )" , globalOutput .InfernalExertsCount ))
3119- t_insert (globalBreakdown .InfernalUpTimeRatio , s_format (" / %.2f) ^8(attacks per second)" , globalOutput .Speed ))
3118+ globalBreakdown .InfernalCryUptimeRatio = { }
3119+ t_insert (globalBreakdown .InfernalCryUptimeRatio , s_format (" (%.2f ^8(number of empowered )" , globalOutput .InfernalEmpoweredCount ))
3120+ t_insert (globalBreakdown .InfernalCryUptimeRatio , s_format (" / %.2f) ^8(attacks per second)" , globalOutput .Speed ))
31203121 if globalOutput .InfernalCryCastTime > 0 then
3121- t_insert (globalBreakdown .InfernalUpTimeRatio , s_format (" / (%.2f ^8(warcry cooldown)" , globalOutput .InfernalCryCooldown ))
3122- t_insert (globalBreakdown .InfernalUpTimeRatio , s_format (" + %.2f) ^8(warcry casttime )" , globalOutput .InfernalCryCastTime ))
3122+ t_insert (globalBreakdown .InfernalCryUptimeRatio , s_format (" / (%.2f ^8(warcry cooldown)" , globalOutput .InfernalCryCooldown ))
3123+ t_insert (globalBreakdown .InfernalCryUptimeRatio , s_format (" + %.2f) ^8(warcry cast time )" , globalOutput .InfernalCryCastTime ))
31233124 else
3124- t_insert (globalBreakdown .InfernalUpTimeRatio , s_format (" / %.2f ^8(average warcry cooldown)" , globalOutput .InfernalCryCooldown ))
3125+ t_insert (globalBreakdown .InfernalCryUptimeRatio , s_format (" / %.2f ^8(average warcry cooldown)" , globalOutput .InfernalCryCooldown ))
31253126 end
3126- t_insert (globalBreakdown .InfernalUpTimeRatio , s_format (" = %d%%" , globalOutput .InfernalUpTimeRatio ))
3127+ t_insert (globalBreakdown .InfernalCryUptimeRatio , s_format (" = %d%%" , globalOutput .InfernalCryUptimeRatio ))
31273128 end
31283129 end
31293130 globalOutput .InfernalCryCalculated = true
@@ -3287,7 +3288,7 @@ function calcs.offence(env, actor, activeSkill)
32873288 -- Calculate Exerted Attack Uptime
32883289 -- There are various strategies a player could use to maximize either warcry effect stacking or staggering
32893290 -- 1) they don't pay attention and therefore we calculated exerted attack uptime as just the maximum uptime of any enabled warcries that exert attacks
3290- local warcryList = {" AncestralUpTimeRatio" , " InfernalUpTimeRatio " , " IntimidatingUpTimeRatio" , " RallyingUpTimeRatio" , " SeismicUpTimeRatio" , " BattlemageUpTimeRatio" }
3291+ local warcryList = {" AncestralUpTimeRatio" , " InfernalCryUptimeRatio " , " IntimidatingUpTimeRatio" , " RallyingUpTimeRatio" , " SeismicUpTimeRatio" , " BattlemageUpTimeRatio" }
32913292 for _ , cryTimeRatio in ipairs (warcryList ) do
32923293 globalOutput .ExertedAttackUptimeRatio = m_max (globalOutput .ExertedAttackUptimeRatio or 0 , globalOutput [cryTimeRatio ] or 0 )
32933294 end
@@ -3373,16 +3374,23 @@ function calcs.offence(env, actor, activeSkill)
33733374 -- dynamic way of calcing the Ancestral Boost from a single source without duplicating the code
33743375 -- uptimeOverride: Ancestral Empowerment
33753376 -- combinedCalcs: ignore INC AoE as we will run that in calcCombinedAncestralBoost
3376- local function calcAncestralBoost (skillName , moreDmg , incArea , uptimeOverride , combinedCalcs )
3377+ -- empowered: for non-ancestrally boosted empowered skills
3378+ local function calcAncestralBoost (skillName , moreDmg , incArea , uptimeOverride , combinedCalcs , empowered )
33773379 globalOutput .CreateWarcryOffensiveCalcSection = true -- labels for the CalcSection
33783380 local skillNameVar = skillName :gsub (" " , " " ) -- Fist Of War -> FistOfWar
33793381 local skillNameLabel = skillName :lower ()
33803382
3383+ if empowered then
3384+ ancestrallyBoostedIncArea = 0
3385+ ancestrallyBoostedIncDamageMulti = 0
3386+ end
3387+
33813388 if moreDmg then
33823389 globalOutput [skillNameVar .. " DamageMultiplier" ] = moreDmg * (1 + ancestrallyBoostedIncDamageMulti )
33833390 else
33843391 globalOutput [skillNameVar .. " DamageMultiplier" ] = ancestrallyBoostedIncDamageMulti
33853392 end
3393+
33863394 globalOutput [skillNameVar .. " UptimeRatio" ] = uptimeOverride or m_min ( (1 / globalOutput .Speed ) / globalOutput [skillNameVar .. " Cooldown" ], 1 ) * 100
33873395 if globalBreakdown then
33883396 globalBreakdown [skillNameVar .. " UptimeRatio" ] = {
@@ -3500,6 +3508,13 @@ function calcs.offence(env, actor, activeSkill)
35003508 else
35013509 output .AncestralCallDamageEffect = 1
35023510 end
3511+
3512+ -- Warcries
3513+ -- Infernal Cry
3514+ if globalOutput .InfernalCryCooldown ~= 0 then
3515+ output .InfernalCryDamageEffect = 1
3516+ end
3517+
35033518 end
35043519
35053520 -- Calculate maximum sustainable fuses and explosion rate for Explosive Arrow
0 commit comments