Skip to content

Commit

Permalink
Merge pull request #4368 from Hekili/resolved-live-into-ptr
Browse files Browse the repository at this point in the history
Merge live changes into PTR branch
  • Loading branch information
Hekili authored Feb 15, 2025
2 parents ae975f4 + 1ae1bcf commit 39a8fd1
Show file tree
Hide file tree
Showing 23 changed files with 290 additions and 441 deletions.
11 changes: 7 additions & 4 deletions Core.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1503,7 +1503,10 @@ local aoeDisplayRule = function( p )
local spec = rawget( p.specs, state.spec.id )
if not spec or not class.specs[ state.spec.id ] then return false end

if Hekili:GetToggleState( "mode" ) == "reactive" and ns.getNumberTargets() < ( spec.aoe or 3 ) then
local mode = Hekili:GetToggleState( "mode" )

if mode == "dual" then return true end
if mode == "reactive" and ns.getNumberTargets() < ( spec.aoe or 3 ) then
if HekiliDisplayAOE.RecommendationsStr then
HekiliDisplayAOE.RecommendationsStr = nil
HekiliDisplayAOE.NewRecommendations = true
Expand All @@ -1515,17 +1518,17 @@ local aoeDisplayRule = function( p )
end

local displayRules = {
Interrupts = { function( p ) return p.toggles.interrupts.value and p.toggles.interrupts.separate end, true, "Defensives" },
Interrupts = { function( p ) return p.toggles.interrupts.value and p.toggles.interrupts.separate end, true , "Defensives" },
Defensives = { function( p ) return p.toggles.defensives.value and p.toggles.defensives.separate end, false, "Cooldowns" },
Cooldowns = { function( p ) return p.toggles.cooldowns.value and p.toggles.cooldowns.separate end, false, "Primary" },
Primary = { function( ) return true end, false, "AOE" },
AOE = { aoeDisplayRule , false, "Interrupts" },
AOE = { aoeDisplayRule , true , "Interrupts" },
}

local hasSnapped
local lastSnapshot = {}

function Hekili.Update( initial )
function Hekili.Update()
if not Hekili:ScriptsLoaded() then
Hekili:LoadScripts()
return
Expand Down
2 changes: 1 addition & 1 deletion TheWarWithin/DeathKnightFrost.lua

Large diffs are not rendered by default.

3 changes: 1 addition & 2 deletions TheWarWithin/DeathKnightUnholy.lua

Large diffs are not rendered by default.

320 changes: 78 additions & 242 deletions TheWarWithin/DruidBalance.lua

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion TheWarWithin/EvokerAugmentation.lua

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion TheWarWithin/Items.lua
Original file line number Diff line number Diff line change
Expand Up @@ -556,7 +556,7 @@ all:RegisterAbilities( {
mad_queens_mandate = {
cast = 0,
cooldown = 120,
gcd = "off",
gcd = "spell",

item = 212454,
toggle = "cooldowns",
Expand Down
1 change: 0 additions & 1 deletion TheWarWithin/MageArcane.lua
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ local class, state = Hekili.Class, Hekili.State

local FindUnitBuffByID, FindUnitDebuffByID = ns.FindUnitBuffByID, ns.FindUnitDebuffByID

local GetItemCooldown = GetItemCooldown
local strformat = string.format

local spec = Hekili:NewSpecialization( 62 )
Expand Down
100 changes: 47 additions & 53 deletions TheWarWithin/MageFire.lua
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,7 @@ spec:RegisterAuras( {
},
-- Your next Fireball, Flamestrike, or Pyroblast has a 40% reduced cast time.
flame_accelerant = {
id = 203277,
id = 453283,
duration = 3600,
max_stack = 1
},
Expand Down Expand Up @@ -717,7 +717,7 @@ spec:RegisterAuras( {
sun_kings_blessing = {
id = 383882,
duration = 30,
max_stack = 10,
max_stack = 9,
copy = 333314
},
-- Talent: Your next non-instant Pyroblast will grant you Combustion.
Expand Down Expand Up @@ -979,6 +979,31 @@ spec:RegisterHook( "advance", function ( time )
if Hekili.ActiveDebug then Hekili:Debug( "\n*** Hot Streak (Advance) ***\n Heating Up: %.2f\n Hot Streak: %.2f\n", state.buff.heating_up.remains, state.buff.hot_streak.remains ) end
end )


local ConsumeHotStreak = setfenv( function()

removeBuff( "hot_streak" )
-- Sunfury
if talent.spellfire_spheres.enabled then
if buff.next_blast_spheres.stacks == 5 then
removeBuff( "next_blast_spheres" )
addStack( "spellfire_spheres" )
applyBuff( "burden_of_power" )
else addStack( "next_blast_spheres" )
end
end
-- SKB
if talent.sun_kings_blessing.enabled then
if buff.sun_kings_blessing.stack == buff.sun_kings_blessing.max_stack then
removeBuff( "sun_kings_blessing" )
applyBuff( "sun_kings_blessing_ready" )
else
addStack( "sun_kings_blessing" )
end
end

end, state )

spec:RegisterStateFunction( "hot_streak", function( willCrit )
willCrit = willCrit or buff.combustion.up or stat.crit >= 100

Expand Down Expand Up @@ -1318,6 +1343,7 @@ spec:RegisterAbilities( {
if talent.explosivo.enabled then applyBuff( "lit_fuse" ) end
if talent.spontaneous_combustion.enabled then gainCharges( "fire_blast", min( 3, action.fire_blast.charges ) ) end
if talent.wildfire.enabled or azerite.wildfire.enabled then applyBuff( "wildfire" ) end
if talent.flash_freezeburn.enabled then applyBuff( "frostfire_empowerment" ) end
if set_bonus.tww2 >= 2 then
reduceCooldown( "combustion", 4 )
if set_bonus.tww2 >= 4 then
Expand Down Expand Up @@ -1439,7 +1465,7 @@ spec:RegisterAbilities( {
spendType = "mana",

startsCombat = false,
velocity = 45,
velocity = function() return talent.frostfire_bolt.enabled and 40 or 45 end,

usable = function ()
if moving and settings.prevent_hardcasts and action.fireball.cast_time > buff.ice_floes.remains then return false, "prevent_hardcasts during movement and ice_floes is down" end
Expand Down Expand Up @@ -1469,7 +1495,7 @@ spec:RegisterAbilities( {
impact = function ()
if hot_streak( firestarter.active or stat.crit + buff.fireball.stack * 10 >= 100 ) then
removeBuff( "fireball" )
if talent.kindling.enabled then setCooldown( "combustion", max( 0, cooldown.combustion.remains - 1 ) ) end
if talent.kindling.enabled then reduceCooldown( "combustion", 1 ) end
else
addStack( "fireball" )
if conduit.flame_accretion.enabled then addStack( "flame_accretion" ) end
Expand Down Expand Up @@ -1542,6 +1568,10 @@ spec:RegisterAbilities( {
removeStack( "sparking_cinders" )
if buff.majesty_of_the_phoenix.up then removeStack( "majesty_of_the_phoenix" ) end

if buff.burden_of_power.up then -- Has to be processed before handling hotstreak
removeBuff( "burden_of_power" )
applyBuff( "glorious_incandescence" )
end
if hardcast or cast_time > 0 then
removeBuff( "flame_accelerant" )
if buff.sun_kings_blessing_ready.up then
Expand All @@ -1551,36 +1581,16 @@ spec:RegisterAbilities( {
applyBuff( "sun_kings_blessing_ready_expiration_delay" )
state:QueueAuraExpiration( "sun_kings_blessing_ready_expiration_delay", ExpireSKB, buff.sun_kings_blessing_ready_expiration_delay.expires )
end

else
if buff.expanded_potential.up then removeBuff( "expanded_potential" )
else -- instant cast
if buff.expanded_potential.up then removeBuff( "expanded_potential" ) -- Legendary
else
if buff.hot_streak.up then
removeBuff( "hot_streak" )
if talent.spellfire_spheres.enabled then
if buff.next_blast_spheres.stacks == 5 then
removeBuff( "next_blast_spheres" )
addStack( "spellfire_spheres" )
applyBuff( "burden_of_power" )
else addStack( "next_blast_spheres" )
end
end
end
if buff.majesty_of_the_phoenix.up then removeStack( "majesty_of_the_phoenix" ) end -- Consumed on instant cast?
if talent.sun_kings_blessing.enabled then
addStack( "sun_kings_blessing" )
if buff.sun_kings_blessing.stack == 8 then
removeBuff( "sun_kings_blessing" )
applyBuff( "sun_kings_blessing_ready" )
end
ConsumeHotStreak( false )
end
if buff.majesty_of_the_phoenix.up then removeStack( "majesty_of_the_phoenix" ) end
end
end

if buff.burden_of_power.up then
removeBuff( "burden_of_power" )
applyBuff( "glorious_incandescence" )
end
if buff.hyperthermia.up then applyBuff( "hot_streak" ) end
applyDebuff( "target", "ignite" )
applyDebuff( "target", "flamestrike" )
Expand Down Expand Up @@ -1828,6 +1838,11 @@ spec:RegisterAbilities( {
handler = function ()
removeStack( "sparking_cinders" )

if buff.burden_of_power.up then -- Process before hot streak
removeBuff( "burden_of_power" )
applyBuff( "glorious_incandescence" )
end

if hardcast or cast_time > 0 then
removeBuff( "flame_accelerant" )
if buff.sun_kings_blessing_ready.up then
Expand All @@ -1836,31 +1851,13 @@ spec:RegisterAbilities( {
applyBuff( "sun_kings_blessing_ready_expiration_delay" )
state:QueueAuraExpiration( "sun_kings_blessing_ready_expiration_delay", ExpireSKB, buff.sun_kings_blessing_ready_expiration_delay.expires )
end
else
else -- Instant cast
if buff.hot_streak.up then
if buff.expanded_potential.up then removeBuff( "expanded_potential" )
else
removeBuff( "hot_streak" )
if talent.spellfire_spheres.enabled then
if buff.next_blast_spheres.stacks == 5 then
removeBuff( "next_blast_spheres" )
addStack( "spellfire_spheres" )
applyBuff( "burden_of_power" )
else addStack( "next_blast_spheres" )
end
end
if talent.sun_kings_blessing.enabled then
if buff.sun_kings_blessing.stack == 9 then
removeBuff( "sun_kings_blessing" )
applyBuff( "sun_kings_blessing_ready" )
else
addStack( "sun_kings_blessing" )
end
end
if buff.expanded_potential.up then removeBuff( "expanded_potential" ) -- Legendary
else ConsumeHotStreak( true )
end
end
end

removeBuff( "molten_skyfall_ready" )

if talent.firefall.enabled then
Expand All @@ -1872,10 +1869,7 @@ spec:RegisterAbilities( {
end

if talent.unleashed_inferno.enabled and buff.combustion.up then reduceCooldown( "combustion", 1.25 ) end
if buff.burden_of_power.up then
removeBuff( "burden_of_power" )
applyBuff( "glorious_incandescence" )
end
-- Legacy
if set_bonus.tier30_4pc > 0 and debuff.charring_embers.up then
if buff.calefaction.stack == 19 then
removeBuff( "calefaction" )
Expand Down
7 changes: 4 additions & 3 deletions TheWarWithin/MonkWindwalker.lua
Original file line number Diff line number Diff line change
Expand Up @@ -854,7 +854,7 @@ spec:RegisterGear( "the_wind_blows", 151811 )

spec:RegisterStateTable( "combos", {
blackout_kick = true,
celestial_conduit,
celestial_conduit = true,
chi_burst = true,
chi_wave = true,
crackling_jade_lightning = true,
Expand Down Expand Up @@ -992,7 +992,8 @@ spec:RegisterHook( "reset_precast", function ()

chiSpent = 0

if actual_combo == "tiger_palm" and chi.current < 2 and now - action.tiger_palm.lastCast > 0.2 then
-- If your chi decays out of combat below the amount to cast something, let the user start combat with tiger palm
if not InCombatLockdown() and actual_combo == "tiger_palm" and chi.current < 2 then
actual_combo = "none"
end

Expand All @@ -1005,7 +1006,7 @@ spec:RegisterHook( "reset_precast", function ()

spinning_crane_kick.count = nil

virtual_combo = actual_combo or "no_action"
virtual_combo = actual_combo or "none"
-- reverse_harm_target = nil

if buff.weapons_of_order_ww.up then
Expand Down
6 changes: 3 additions & 3 deletions TheWarWithin/PaladinProtection.lua
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ local class, state = Hekili.Class, Hekili.State
local FindUnitBuffByID = ns.FindUnitBuffByID

local spec = Hekili:NewSpecialization( 66 )

local QueenGlyphed = IsSpellKnownOrOverridesKnown
local strformat = string.format

local GetSpellInfo = ns.GetUnpackedSpellInfo
Expand Down Expand Up @@ -494,7 +494,7 @@ spec:RegisterAuras( {
-- Talent: Damage taken reduced by $86657s2%.
-- https://wowhead.com/beta/spell=86659
guardian_of_ancient_kings = {
id = 86659,
id = function() return QueenGlyphed( 212641 ) and 212641 or 86659 end,
duration = 8,
max_stack = 1
},
Expand Down Expand Up @@ -1454,7 +1454,7 @@ spec:RegisterAbilities( {

-- Talent: Empowers you with the spirit of ancient kings, reducing all damage you take by 50% for 8 sec.
guardian_of_ancient_kings = {
id = 86659,
id = function() return QueenGlyphed( 212641 ) and 212641 or 86659 end,
cast = 0,
cooldown = function () return 300 - ( conduit.royal_decree.mod * 0.001 ) end,
gcd = "off",
Expand Down
2 changes: 1 addition & 1 deletion TheWarWithin/Priorities/DeathKnightFrost.simc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Evaluates a trinkets cooldown, divided by pillar of frost, empower rune weapon, or breath of sindragosa's cooldown. If it's value has no remainder return 1, else return 0.5.
## Evaluates a trinkets cooldown, divided by pillar of frost, empower rune weapon, or breath of sindragosa's cooldown. If it's value has no remainder return 1, else return 0.5.
actions.precombat+=/variable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=trinket.1.has_use_buff&(talent.pillar_of_frost&!talent.breath_of_sindragosa&(trinket.1.cooldown.duration%%cooldown.pillar_of_frost.duration=0)|talent.breath_of_sindragosa&(cooldown.breath_of_sindragosa.duration%%trinket.1.cooldown.duration=0))
actions.precombat+=/variable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=trinket.2.has_use_buff&(talent.pillar_of_frost&!talent.breath_of_sindragosa&(trinket.2.cooldown.duration%%cooldown.pillar_of_frost.duration=0)|talent.breath_of_sindragosa&(cooldown.breath_of_sindragosa.duration%%trinket.2.cooldown.duration=0))
actions.precombat+=/variable,name=trinket_1_buffs,value=trinket.1.has_cooldown&(trinket.1.has_use_buff|trinket.1.has_buff.strength|trinket.1.has_buff.mastery|trinket.1.has_buff.versatility|trinket.1.has_buff.haste|trinket.1.has_buff.crit)|trinket.1.is.treacherous_transmitter
Expand Down
5 changes: 3 additions & 2 deletions TheWarWithin/Priorities/DeathKnightUnholy.simc
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,8 @@ actions.cds_aoe+=/apocalypse,cycle_targets=1,if=active_enemies>1&rune<=3
actions.cds_aoe+=/abomination_limb,if=active_enemies>1

# San'layn AoE Cooldowns
actions.cds_aoe_san+=/dark_transformation,if=active_enemies>1&buff.death_and_decay.up
# [edited] - active_enemies > 1 in the first line is replacing a SIMC variable, leave in place
actions.cds_aoe_san+=/dark_transformation,if=active_enemies>1&(buff.death_and_decay.up|active_enemies<=3)
actions.cds_aoe_san+=/unholy_assault,cycle_targets=1,if=active_enemies>1&(cooldown.vile_contagion.remains<6|cooldown.vile_contagion.remains>40|!talent.vile_contagion)|boss&fight_remains<20
actions.cds_aoe_san+=/vile_contagion,cycle_targets=1,if=debuff.festering_wound.stack>=4&(raid_event.adds.remains>4|!raid_event.adds.exists&fight_remains>4)&(raid_event.adds.exists&raid_event.adds.remains<=11|cooldown.any_dnd.remains<3|buff.death_and_decay.up&debuff.festering_wound.stack>=4)|active_enemies>1&debuff.festering_wound.stack=6
actions.cds_aoe_san+=/outbreak,if=(dot.virulent_plague.refreshable|talent.morbidity&!buff.gift_of_the_sanlayn.up&talent.superstrain&dot.frost_fever.refreshable&dot.blood_plague.refreshable)&(!talent.unholy_blight|talent.unholy_blight&cooldown.dark_transformation.remains>15%((2*talent.superstrain)+(2*talent.ebon_fever)+(2*talent.plaguebringer)))&(!talent.raise_abomination|talent.raise_abomination&cooldown.raise_abomination.remains>15%((2*talent.superstrain)+(2*talent.ebon_fever)+(2*talent.plaguebringer)))
Expand Down Expand Up @@ -172,4 +173,4 @@ actions.trinkets+=/use_item,slot=trinket1,if=variable.trinket_1_buffs&(variable.
actions.trinkets+=/use_item,slot=trinket2,if=variable.trinket_2_buffs&(variable.trinket_priority=2|!trinket.1.has_cooldown|trinket.1.cooldown.remains>20&(!talent.apocalypse&buff.dark_transformation.up|pet.apoc_ghoul.active&pet.apoc_ghoul.remains<=variable.trinket_2_duration&pet.apoc_ghoul.remains>5))&(talent.army_of_the_dead&!talent.raise_abomination&pet.army_ghoul.active&pet.army_ghoul.remains<=variable.trinket_2_duration&pet.army_ghoul.remains>10|talent.raise_abomination&pet.abomination.active&pet.abomination.remains<=variable.trinket_2_duration&pet.abomination.remains>10|talent.apocalypse&pet.apoc_ghoul.active&pet.apoc_ghoul.remains<=variable.trinket_2_duration+3&pet.apoc_ghoul.remains>5|!talent.raise_abomination&!talent.apocalypse&buff.dark_transformation.up|trinket.1.cooldown.remains)|fight_remains<=variable.trinket_2_duration&boss
actions.trinkets+=/use_item,slot=trinket1,if=!variable.trinket_1_buffs&(variable.damage_trinket_priority=1|trinket.2.cooldown.remains|!trinket.2.has_cooldown|!talent.summon_gargoyle&!talent.army_of_the_dead&!talent.raise_abomination|!talent.summon_gargoyle&talent.army_of_the_dead&(!talent.raise_abomination&cooldown.army_of_the_dead.remains>20|talent.raise_abomination&cooldown.raise_abomination.remains>20)|!talent.summon_gargoyle&!talent.army_of_the_dead&!talent.raise_abomination&cooldown.dark_transformation.remains>20|talent.summon_gargoyle&cooldown.summon_gargoyle.remains>20&!pet.gargoyle.active)|boss&fight_remains<15
actions.trinkets+=/use_item,slot=trinket2,if=!variable.trinket_2_buffs&(variable.damage_trinket_priority=2|trinket.1.cooldown.remains|!trinket.1.has_cooldown|!talent.summon_gargoyle&!talent.army_of_the_dead&!talent.raise_abomination|!talent.summon_gargoyle&talent.army_of_the_dead&(!talent.raise_abomination&cooldown.army_of_the_dead.remains>20|talent.raise_abomination&cooldown.raise_abomination.remains>20)|!talent.summon_gargoyle&!talent.army_of_the_dead&!talent.raise_abomination&cooldown.dark_transformation.remains>20|talent.summon_gargoyle&cooldown.summon_gargoyle.remains>20&!pet.gargoyle.active)|boss&fight_remains<15
actions.trinkets+=/use_item,slot=main_hand,if=(!variable.trinket_1_buffs&!variable.trinket_2_buffs|trinket.1.cooldown.remains&!variable.trinket_2_buffs|trinket.2.cooldown.remains&!variable.trinket_1_buffs|trinket.1.cooldown.remains&trinket.2.cooldown.remains)&(pet.apoc_ghoul.active&pet.apoc_ghoul.remains<=18|!talent.apocalypse&buff.dark_transformation.up)&(!talent.raise_abomination&!talent.army_of_the_dead|!talent.raise_abomination&talent.army_of_the_dead&pet.army_ghoul.active|talent.raise_abomination&pet.abomination.active)
actions.trinkets+=/use_item,slot=main_hand,if=(!variable.trinket_1_buffs&!variable.trinket_2_buffs|trinket.1.cooldown.remains&!variable.trinket_2_buffs|trinket.2.cooldown.remains&!variable.trinket_1_buffs|trinket.1.cooldown.remains&trinket.2.cooldown.remains)&(pet.apoc_ghoul.active&pet.apoc_ghoul.remains<=18|!talent.apocalypse&buff.dark_transformation.up)&((trinket.1.cooldown.duration=90|trinket.2.cooldown.duration=90)|!talent.raise_abomination&!talent.army_of_the_dead|!talent.raise_abomination&talent.army_of_the_dead&pet.army_ghoul.active|talent.raise_abomination&pet.abomination.active)
Loading

0 comments on commit 39a8fd1

Please sign in to comment.