From ca5b6d7b660e3ce9fa2076ecc42b1009f7102a94 Mon Sep 17 00:00:00 2001 From: itsGamz <165324152+itsGamz@users.noreply.github.com> Date: Fri, 5 Jun 2026 14:58:41 +0000 Subject: [PATCH] [Balance] porting live apl to ptr dreamgrove/Dreamgrove@8f3a417 Co-authored-by: Dreamgrove --- .../apl/druid/balance_apl_ptr.inc | 202 ++++++++++-------- 1 file changed, 113 insertions(+), 89 deletions(-) diff --git a/engine/class_modules/apl/druid/balance_apl_ptr.inc b/engine/class_modules/apl/druid/balance_apl_ptr.inc index d61cfb75981..4656661ebcb 100644 --- a/engine/class_modules/apl/druid/balance_apl_ptr.inc +++ b/engine/class_modules/apl/druid/balance_apl_ptr.inc @@ -1,106 +1,130 @@ action_priority_list_t* precombat = get_action_priority_list( "precombat" ); action_priority_list_t* def = get_action_priority_list( "default" ); -action_priority_list_t* kotg_st = get_action_priority_list( "kotg_st" ); -action_priority_list_t* ec_st = get_action_priority_list( "ec_st" ); action_priority_list_t* aoe = get_action_priority_list( "aoe" ); +action_priority_list_t* ec_st = get_action_priority_list( "ec_st" ); +action_priority_list_t* kotg_st = get_action_priority_list( "kotg_st" ); +action_priority_list_t* opener_aoe = get_action_priority_list( "opener_aoe" ); +action_priority_list_t* opener_ec = get_action_priority_list( "opener_ec" ); +action_priority_list_t* opener_kotg = get_action_priority_list( "opener_kotg" ); +precombat->add_action( "variable,name=no_cd_talent,value=!talent.celestial_alignment&!talent.incarnation_chosen_of_elune|druid.no_cds","Executed before combat begins. Accepts non-harmful actions only." ); +precombat->add_action( "variable,name=opener,op=set,value=1" ); +precombat->add_action( "variable,name=ec,op=set,value=1,if=talent.boundless_moonlight" ); precombat->add_action( "variable,name=on_use_trinket,value=0" ); precombat->add_action( "variable,name=on_use_trinket,op=add,value=trinket.1.has_use_buff" ); precombat->add_action( "variable,name=on_use_trinket,op=add,value=(trinket.2.has_use_buff)*2" ); +precombat->add_action( "variable,name=prio,op=set,value=0" ); +precombat->add_action( "variable,name=inc_charge,op=set,value=0" ); precombat->add_action( "moonkin_form" ); precombat->add_action( "wrath" ); precombat->add_action( "wrath" ); -precombat->add_action( "wrath,if=hero_tree.keeper_of_the_grove" ); -precombat->add_action( "starfire,if=hero_tree.elunes_chosen" ); +precombat->add_action( "wrath,if=talent.dream_surge&enemies=1" ); +precombat->add_action( "starfire,if=hero_tree.elunes_chosen|enemies>2" ); -def->add_action( "variable,name=eclipse_condition,value=(variable.starweaver&buff.starlord.stack<3|!variable.starweaver&astral_power>=60)&((buff.touch_the_cosmos.up|buff.starweavers_weft.up|buff.starweavers_warp.up)|(cooldown.force_of_nature.remains>15|buff.harmony_of_the_grove.up))|fight_remains<20","ECLIPSE & CA CONDITIONS" ); -def->add_action( "variable,name=kotg_cd_condition,value=hero_tree.keeper_of_the_grove&!buff.ca_inc.up&variable.eclipse_down&buff.harmony_of_the_grove.up&(cooldown.convoke_the_spirits.remains<4|!talent.convoke_the_spirits)|fight_remains<10" ); -def->add_action( "variable,name=ec_cd_condition,value=!buff.eclipse_lunar.up&hero_tree.elunes_chosen&!buff.ca_inc.up&(!talent.convoke_the_spirits&hero_tree.elunes_chosen&(trinket.1.cooldown.duration<=100&trinket.1.cooldown.remains>cooldown.ca_inc.full_recharge_time-cooldown.ca_inc.duration|trinket.1.cooldown.duration>=100&cooldown.ca_inc.charges_fractional=1&(trinket.1.cooldown.duration>?cooldown.ca_inc.full_recharge_time)))|fight_remains<10" ); -def->add_action( "variable,name=starweaver,value=talent.starweaver&talent.hail_of_stars&talent.touch_the_cosmos","VARIABLES" ); -def->add_action( "variable,name=eclipse_remains,value=buff.eclipse_lunar.remainsadd_action( "variable,name=eclipse_down,value=!buff.eclipse_lunar.up|!buff.eclipse_solar.up" ); -def->add_action( "variable,name=passive_asp,value=6%spell_haste+talent.natures_balance+talent.orbit_breaker*dot.moonfire.ticking*(buff.orbit_breaker.stack>(27-2*buff.solstice.up))*24" ); -def->add_action( "variable,name=boat_stacks,value=buff.balance_of_all_things_arcane.stack+buff.balance_of_all_things_nature.stack" ); -def->add_action( "use_item,slot=trinket1,if=buff.ca_inc.up&cooldown.convoke_the_spirits.ready" ); -def->add_action( "use_item,slot=trinket2,if=buff.ca_inc.up&cooldown.convoke_the_spirits.ready" ); -def->add_action( "use_items","ITEMS" ); -def->add_action( "potion,if=fight_remains<=30" ); -def->add_action( "run_action_list,name=kotg_st,if=hero_tree.keeper_of_the_grove&spell_targets=1","RUN APL" ); +def->add_action( "use_items,if=(!trinket.1.is.wraps_of_cosmic_madness|!trinket.2.is.wraps_of_cosmic_madness)&buff.ca_inc.up&(buff.harmony_of_the_grove.up|variable.ec)|fight_remains<20","Executed every time the actor is available." ); +def->add_action( "use_item,name=wraps_of_cosmic_madness,if=!buff.eclipse.up" ); +def->add_action( "potion,if=buff.harmony_of_the_grove.up&buff.ca_inc.up&!variable.ec|buff.ca_inc.up&variable.ec|variable.opener&prev_gcd.1.solar_eclipse|fight_remains<=30" ); +def->add_action( "berserking,if=buff.ca_inc.up&(buff.harmony_of_the_grove.up|!talent.dream_surge)|fight_remainsadd_action( "invoke_external_buff,name=power_infusion,if=buff.ca_inc.up" ); +def->add_action( "variable,name=passive_asp,value=(2+2*set_bonus.mid1_2pc*buff.eclipse.down)*(dot.moonfire.ticking+dot.sunfire.ticking+buff.solstice.up*((active_dots.moonfire>4)+(active_dots.moonfire>16)+(active_dots.sunfire>4)+(active_dots.sunfire>16)))%spell_haste+talent.natures_balance+buff.fury_of_elune.up*((floor(buff.fury_of_elune.remains%0.5)>?4)*2.5+talent.the_eternal_moon*(buff.fury_of_elune.remains<2)*6)+buff.sundered_firmament.up*((floor(buff.sundered_firmament.remains%0.5)>?4)*0.6+talent.the_eternal_moon*(buff.sundered_firmament.remains<2)*6)" ); +def->add_action( "variable,name=inc_charge,op=set,value=1,if=cooldown.ca_inc.charges_fractional<1" ); +def->add_action( "variable,name=opener,op=set,value=0,if=buff.ca_inc.up" ); +def->add_action( "variable,name=eclipse_down,value=!buff.eclipse_lunar.up&!buff.eclipse_solar.up" ); +def->add_action( "variable,name=cd_window,value=cooldown.force_of_nature.remains>15|cooldown.ca_inc.remains<44" ); +def->add_action( "variable,name=cd_window_narrow,value=cooldown.force_of_nature.remains>30|cooldown.ca_inc.remains>10&cooldown.ca_inc.remains<20" ); +def->add_action( "variable,name=no_weaver_procs,value=!buff.touch_the_cosmos.react&!buff.starweavers_warp.react" ); +def->add_action( "variable,name=ca_soon,value=cooldown.ca_inc.remains<3|cooldown.ca_inc.charges_fractional>1" ); +def->add_action( "run_action_list,name=opener_aoe,if=variable.opener&spell_targets>1" ); +def->add_action( "run_action_list,name=opener_kotg,if=variable.opener&spell_targets=1&talent.dream_surge" ); +def->add_action( "run_action_list,name=opener_ec,if=variable.opener&spell_targets=1" ); def->add_action( "run_action_list,name=ec_st,if=hero_tree.elunes_chosen&spell_targets=1" ); +def->add_action( "run_action_list,name=kotg_st,if=spell_targets=1" ); def->add_action( "run_action_list,name=aoe,if=spell_targets>1" ); -kotg_st->add_action( "moonfire,target_if=remains<3|refreshable|(variable.eclipse_condition&dot.moonfire.durationadd_action( "sunfire,target_if=remains<3|refreshable|(variable.eclipse_condition&dot.sunfire.durationadd_action( "fury_of_elune,if=5+variable.passive_aspadd_action( "solar_eclipse,if=cooldown.eclipse.charges_fractional=2" ); -kotg_st->add_action( "celestial_alignment,if=variable.kotg_cd_condition" ); -kotg_st->add_action( "incarnation,if=variable.kotg_cd_condition" ); -kotg_st->add_action( "use_item,slot=trinket1,if=buff.ca_inc.up" ); -kotg_st->add_action( "use_item,slot=trinket2,if=buff.ca_inc.up" ); -kotg_st->add_action( "potion,if=buff.ca_inc.up" ); -kotg_st->add_action( "force_of_nature,if=variable.eclipse_down&(cooldown.ca_inc.ready|cooldown.eclipse.ready)|fight_remains<20" ); -kotg_st->add_action( "solar_eclipse,if=variable.eclipse_condition" ); -kotg_st->add_action( "starfall,if=variable.starweaver&(buff.touch_the_cosmos.up|buff.starweavers_warp.up)" ); -kotg_st->add_action( "starsurge,if=buff.ascendant_stars.up|variable.eclipse_remains>5|buff.starlord.stack<3&cooldown.eclipse.remains>10" ); -kotg_st->add_action( "sunfire,target_if=refreshable" ); -kotg_st->add_action( "moonfire,target_if=refreshable&(!talent.treants_of_the_moon|cooldown.force_of_nature.remains>3&!buff.harmony_of_the_grove.up)" ); -kotg_st->add_action( "starsurge,if=talent.convoke_the_spirits&cooldown.convoke_the_spirits.ready&buff.ca_inc.up" ); -kotg_st->add_action( "convoke_the_spirits,if=buff.ca_inc.up&buff.harmony_of_the_grove.up" ); -kotg_st->add_action( "wrath,if=buff.ascendant_fires.up&buff.starlord.stack=3" ); -kotg_st->add_action( "new_moon,if=astral_power.deficit>variable.passive_asp+energize_amount&((buff.harmony_of_the_grove.up&!buff.ca_inc.up|buff.ca_inc.up&!cooldown.ca_inc.ready)|cooldown.new_moon.full_recharge_timeadd_action( "half_moon,if=astral_power.deficit>variable.passive_asp+energize_amount&((buff.harmony_of_the_grove.up&!buff.ca_inc.up|buff.ca_inc.up&!cooldown.ca_inc.ready)|cooldown.new_moon.full_recharge_timeadd_action( "full_moon,if=astral_power.deficit>variable.passive_asp+energize_amount&((buff.harmony_of_the_grove.up&!buff.ca_inc.up|buff.ca_inc.up&!cooldown.ca_inc.ready)|cooldown.new_moon.full_recharge_timeadd_action( "starsurge,if=buff.starweavers_weft.up|buff.touch_the_cosmos.up" ); -kotg_st->add_action( "starsurge,if=astral_power.deficitadd_action( "wild_mushroom,if=!prev_gcd.1.wild_mushroom&dot.fungal_growth.remains<2" ); -kotg_st->add_action( "wrath" ); +aoe->add_action( "celestial_alignment,if=(prev_gcd.1.force_of_nature&!variable.ec|variable.ec&buff.eclipse.down&(cooldown.eclipse.charges_fractional<1.5|(fight_style.dungeonroute|fight_style.dungeonslice))&(variable.on_use_trinket=0|trinket.1.cooldown.remains>60|trinket.1.cooldown.ready|fight_remains60|trinket.2.cooldown.ready|fight_remains(20*talent.incarnation+15*!talent.incarnation)|fight_remains<20" ); +aoe->add_action( "eclipse,if=cooldown.eclipse.full_recharge_timeadd_action( "moonfire,target_if=refreshable&(target.time_to_die-remains)>6&active_dots.moonfire<10&(!talent.treants_of_the_moon|spell_targets-active_dots.moonfire>6|cooldown.force_of_nature.remains>3&!buff.harmony_of_the_grove.up)" ); +aoe->add_action( "sunfire,target_if=(remains<2|refreshable&variable.eclipse_down)&target.time_to_die>5" ); +aoe->add_action( "fury_of_elune,if=variable.ec|!variable.ec&(buff.harmony_of_the_grove.up|cooldown.force_of_nature.remains20)" ); +aoe->add_action( "force_of_nature,if=((buff.eclipse.down&!talent.early_spring|talent.early_spring)&(cooldown.eclipse.remainsadd_action( "wrath,if=eclipse.lunar&spell_targets<=2&talent.dream_surge&buff.eclipse.down" ); +aoe->add_action( "starfire,if=eclipse.solar&spell_targets>2&talent.dream_surge&buff.eclipse.down" ); +aoe->add_action( "solar_eclipse,if=spell_targets<=2&(cooldown.solar_eclipse.charges_fractional>1.5&variable.cd_window|cooldown.solar_eclipse.ready&variable.cd_window_narrow)&target.time_to_die>5|fight_remains<15" ); +aoe->add_action( "lunar_eclipse,if=(!variable.prio&spell_targets>2&!variable.ec&(cooldown.lunar_eclipse.charges_fractional>1.5&variable.cd_window|cooldown.lunar_eclipse.ready&variable.cd_window_narrow)|variable.ec&(cooldown.ca_inc.full_recharge_time>15))&target.time_to_die>5|fight_remains<15" ); +aoe->add_action( "convoke_the_spirits,if=buff.ca_inc.up&astral_power<40|cooldown.ca_inc.remains>50&buff.harmony_of_the_grove.up&buff.ca_inc.down" ); +aoe->add_action( "sunfire,target_if=!talent.aetherial_kindling&dot.sunfire.remains<10&variable.ca_soon&cooldown.eclipse.charges<1.5&buff.eclipse.remains<1&(cooldown.force_of_nature.remains<3|variable.ec),line_cd=10" ); +aoe->add_action( "starsurge,if=buff.starweavers_weft.react" ); +aoe->add_action( "starfall,if=(astral_power>80-79*variable.ec|buff.eclipse.up&action.starfall.cost>1|buff.touch_the_cosmos.react|buff.starweavers_warp.react)&target.time_to_die>5" ); +aoe->add_action( "starfire,if=buff.ascendant_fires.up&buff.eclipse_lunar.up" ); +aoe->add_action( "new_moon,if=astral_power.deficit>energize_amount&debuff.atmospheric_exposure.remainsadd_action( "half_moon,if=astral_power.deficit>energize_amount&debuff.atmospheric_exposure.remainsadd_action( "full_moon,if=astral_power.deficit>energize_amount&debuff.atmospheric_exposure.remainsadd_action( "wild_mushroom,if=buff.eclipse_solar.up|cooldown.wild_mushroom.full_recharge_timeadd_action( "starfire,if=variable.ec|variable.eclipse_down&spell_targets.starfire>2|buff.eclipse_lunar.up&(spell_targets.starfire>2&buff.ca_inc.up|!buff.ca_inc.up)" ); +aoe->add_action( "wrath" ); -ec_st->add_action( "moonfire,target_if=remains<3|(variable.eclipse_condition&dot.moonfire.durationadd_action( "sunfire,target_if=remains<3|(variable.eclipse_condition&dot.sunfire.durationadd_action( "fury_of_elune,if=5+variable.passive_aspadd_action( "celestial_alignment,if=variable.ec_cd_condition" ); -ec_st->add_action( "incarnation,if=variable.ec_cd_condition" ); -ec_st->add_action( "use_item,slot=trinket1,if=buff.ca_inc.up" ); -ec_st->add_action( "use_item,slot=trinket2,if=buff.ca_inc.up" ); -ec_st->add_action( "potion,if=buff.ca_inc.up" ); -ec_st->add_action( "lunar_eclipse,if=variable.eclipse_condition" ); -ec_st->add_action( "starfall,if=buff.starweavers_warp.up" ); -ec_st->add_action( "starfall,if=buff.touch_the_cosmos.up&talent.hail_of_stars&talent.starweaver&!buff.ascendant_stars.up" ); -ec_st->add_action( "starsurge,if=buff.ascendant_stars.up|buff.starlord.stack<3&cooldown.eclipse.remains>10" ); -ec_st->add_action( "sunfire,target_if=refreshable" ); -ec_st->add_action( "moonfire,target_if=refreshable&(!talent.treants_of_the_moon|cooldown.force_of_nature.remains>3&!buff.harmony_of_the_grove.up)" ); -ec_st->add_action( "convoke_the_spirits,if=buff.ca_inc.up&buff.harmony_of_the_grove.up" ); -ec_st->add_action( "wrath,if=buff.ascendant_fires.up&buff.starlord.stack=3" ); -ec_st->add_action( "new_moon,if=astral_power.deficit>variable.passive_asp+energize_amount&((buff.harmony_of_the_grove.up&!buff.ca_inc.up|buff.ca_inc.up&!cooldown.ca_inc.ready)|cooldown.new_moon.full_recharge_timeadd_action( "half_moon,if=astral_power.deficit>variable.passive_asp+energize_amount&((buff.harmony_of_the_grove.up&!buff.ca_inc.up|buff.ca_inc.up&!cooldown.ca_inc.ready)|cooldown.new_moon.full_recharge_timeadd_action( "full_moon,if=astral_power.deficit>variable.passive_asp+energize_amount&((buff.harmony_of_the_grove.up&!buff.ca_inc.up|buff.ca_inc.up&!cooldown.ca_inc.ready)|cooldown.new_moon.full_recharge_timeadd_action( "starsurge,if=buff.starweavers_weft.up|buff.touch_the_cosmos.up" ); -ec_st->add_action( "starsurge,if=astral_power.deficitadd_action( "wild_mushroom,if=!prev_gcd.1.wild_mushroom&dot.fungal_growth.remains<2" ); -ec_st->add_action( "starfire,if=talent.lunar_calling" ); +ec_st->add_action( "celestial_alignment,if=buff.ca_inc.down&buff.eclipse.down&(cooldown.convoke_the_spirits.remains<5&talent.convoke_the_spirits|cooldown.eclipse.charges_fractional<1.5&!talent.convoke_the_spirits|!talent.elunes_guidance&talent.convoke_the_spirits)&(target.time_to_die>(20*talent.incarnation+15*!talent.incarnation))|fight_remains<20" ); +ec_st->add_action( "moonfire,target_if=remains<2|refreshable&buff.eclipse.down&target.time_to_die>10" ); +ec_st->add_action( "sunfire,target_if=remains<2|refreshable&buff.eclipse.down&target.time_to_die>10" ); +ec_st->add_action( "convoke_the_spirits,if=buff.ca_inc.up&astral_power<40|cooldown.ca_inc.remains>30&buff.ca_inc.down|fight_remainsadd_action( "lunar_eclipse,if=target.time_to_die>5" ); +ec_st->add_action( "starfall,if=buff.starweavers_warp.react" ); +ec_st->add_action( "starfall,if=(talent.starweaver&(buff.ca_inc.down&talent.meteorites&talent.stellar_amplification&(talent.aetherial_kindling|!talent.power_of_goldrinn)|buff.eclipse.down&(talent.meteorites|talent.aetherial_kindling|talent.stellar_amplification&!talent.power_of_goldrinn))|buff.ca_inc.down&talent.incarnation_chosen_of_elune&talent.meteorites&talent.stellar_amplification&talent.aetherial_kindling&!talent.power_of_goldrinn|buff.eclipse.down&(talent.meteorites|talent.incarnation_chosen_of_elune&talent.aetherial_kindling))&buff.touch_the_cosmos.react&!buff.starweavers_weft.react" ); +ec_st->add_action( "starsurge,if=astral_power>80|buff.eclipse.up&action.starsurge.cost>1|buff.starweavers_weft.react|buff.touch_the_cosmos.react" ); +ec_st->add_action( "fury_of_elune,if=!talent.sundered_firmament|debuff.atmospheric_exposure.remains<2&buff.eclipse.remains>5|!talent.convoke_the_spirits|fight_remains<20" ); +ec_st->add_action( "force_of_nature" ); +ec_st->add_action( "new_moon,if=astral_power.deficit>energize_amount&debuff.atmospheric_exposure.remainsadd_action( "half_moon,if=astral_power.deficit>energize_amount&debuff.atmospheric_exposure.remainsadd_action( "full_moon,if=astral_power.deficit>energize_amount&debuff.atmospheric_exposure.remainsadd_action( "wild_mushroom,if=buff.eclipse_solar.up|cooldown.wild_mushroom.full_recharge_timeadd_action( "starfire,if=action.starfire.execute_timeadd_action( "wrath" ); -aoe->add_action( "starfall,if=astral_power.deficit<=variable.passive_asp+6" ); -aoe->add_action( "moonfire,target_if=refreshable&(target.time_to_die-remains)>6&(!talent.treants_of_the_moon|spell_targets-active_dot.moonfire_dmg>6|cooldown.force_of_nature.remains>3&!buff.harmony_of_the_grove.up),if=fight_style.dungeonroute|fight_style.dungeonslice" ); -aoe->add_action( "sunfire,target_if=refreshable&(target.time_to_die-remains)>6-(spell_targets%2)" ); -aoe->add_action( "moonfire,target_if=refreshable&(target.time_to_die-remains)>6&(!talent.treants_of_the_moon|spell_targets-active_dot.moonfire_dmg>6|cooldown.force_of_nature.remains>3&!buff.harmony_of_the_grove.up),if=!fight_style.dungeonroute&!fight_style.dungeonslice" ); -aoe->add_action( "force_of_nature,if=variable.eclipse_down&(cooldown.ca_inc.ready|cooldown.eclipse.ready)|fight_remains<20" ); -aoe->add_action( "fury_of_elune,if=5+variable.passive_aspadd_action( "solar_eclipse,if=hero_tree.keeper_of_the_grove&variable.eclipse_down&spell_targets<4&cooldown.eclipse.charges_fractional=2&cooldown.ca_inc.charges_fractional=1" ); -aoe->add_action( "lunar_eclipse,if=spell_targets>=3&cooldown.eclipse.charges_fractional=2&cooldown.ca_inc.full_recharge_time>=15" ); -aoe->add_action( "celestial_alignment,if=variable.kotg_cd_condition|variable.ec_cd_condition" ); -aoe->add_action( "incarnation,if=variable.kotg_cd_condition|variable.ec_cd_condition" ); -aoe->add_action( "solar_eclipse,if=spell_targets<4&buff.starlord.stack<3&((buff.touch_the_cosmos.up|buff.starweavers_warp.up|buff.starweavers_weft.up)|cooldown.force_of_nature.ready|cooldown.eclipse.charges_fractional=2)" ); -aoe->add_action( "lunar_eclipse,if=spell_targets>3&buff.starlord.stack<3&((buff.touch_the_cosmos.up|buff.starweavers_warp.up|buff.starweavers_weft.up)|cooldown.force_of_nature.ready|cooldown.eclipse.charges_fractional=2)" ); -aoe->add_action( "starfire,if=buff.ascendant_fires.up&spell_targets>2&buff.eclipse_lunar.up" ); -aoe->add_action( "starfall,if=buff.starweavers_warp.up|buff.touch_the_cosmos.up" ); -aoe->add_action( "starsurge,if=buff.starweavers_weft.up" ); -aoe->add_action( "starfall" ); -aoe->add_action( "convoke_the_spirits,if=(!buff.dreamstate.up&!buff.umbral_embrace.up&spell_targets.starfire<7|spell_targets.starfire=1)&(fight_remains<5|(buff.ca_inc.up|cooldown.ca_inc.remains>40)&(!hero_tree.keeper_of_the_grove|buff.harmony_of_the_grove.up|cooldown.force_of_nature.remains>15))" ); -aoe->add_action( "new_moon" ); -aoe->add_action( "half_moon" ); -aoe->add_action( "full_moon" ); -aoe->add_action( "wild_mushroom,if=!prev_gcd.1.wild_mushroom&!dot.fungal_growth.ticking" ); -aoe->add_action( "force_of_nature,if=!hero_tree.keeper_of_the_grove" ); -aoe->add_action( "starfire,if=talent.lunar_calling|spell_targets.starfire>3-(talent.umbral_intensity|talent.soul_of_the_forest)" ); -aoe->add_action( "wrath" ); +kotg_st->add_action( "celestial_alignment,if=prev_gcd.1.force_of_nature&buff.ca_inc.down&(target.time_to_die>(20*talent.incarnation+15*!talent.incarnation+20*(in_boss_encounter&(fight_style.dungeonroute|fight_style.dungeonslice))))|fight_remains<20" ); +kotg_st->add_action( "moonfire,target_if=buff.harmony_of_the_grove.down&(remains<2|refreshable&!buff.eclipse.up&!cooldown.force_of_nature.remains10" ); +kotg_st->add_action( "sunfire,target_if=remains<2|refreshable&buff.eclipse.down&target.time_to_die>10" ); +kotg_st->add_action( "fury_of_elune,if=(buff.harmony_of_the_grove.up|cooldown.force_of_nature.remains20)&target.time_to_die>10" ); +kotg_st->add_action( "solar_eclipse,if=(cooldown.solar_eclipse.charges_fractional>1.5&variable.cd_window|cooldown.solar_eclipse.ready&variable.cd_window_narrow)|fight_remains<20+(20*cooldown.ca_inc.ready)" ); +kotg_st->add_action( "force_of_nature,if=((buff.eclipse.down&!talent.early_spring|talent.early_spring)&(cooldown.eclipse.remains10)|fight_remains<21" ); +kotg_st->add_action( "convoke_the_spirits,if=(buff.ca_inc.up&astral_power<40|cooldown.ca_inc.remains>50&buff.harmony_of_the_grove.up&buff.ca_inc.down&astral_power<50)&target.time_to_die>5|fight_remainsadd_action( "sunfire,target_if=dot.sunfire.remains<10&variable.ca_soon&cooldown.force_of_nature.remains<3&target.time_to_die>10,line_cd=10" ); +kotg_st->add_action( "starfall,if=buff.starweavers_warp.react" ); +kotg_st->add_action( "starfall,if=(talent.starweaver&(talent.meteorites&(talent.incarnation_chosen_of_elune&talent.meteor_storm&!talent.power_of_goldrinn|buff.ca_inc.down&(talent.incarnation_chosen_of_elune|talent.stellar_amplification|!talent.power_of_goldrinn))|buff.eclipse.down&(talent.meteorites|talent.aetherial_kindling|talent.stellar_amplification&!talent.power_of_goldrinn))|buff.ca_inc.down&talent.meteorites&talent.aetherial_kindling&talent.stellar_amplification&!talent.power_of_goldrinn|buff.eclipse.down&talent.meteorites&(talent.aetherial_kindling|talent.stellar_amplification|!talent.power_of_goldrinn))&buff.touch_the_cosmos.react&!buff.starweavers_weft.react" ); +kotg_st->add_action( "starsurge,if=buff.eclipse.down&astral_power.deficit<20|buff.eclipse.up&action.starsurge.cost>1&(astral_power.deficit<10|cooldown.force_of_nature.remains>20|buff.ascendant_stars.up)|buff.touch_the_cosmos.react|buff.starweavers_weft.react" ); +kotg_st->add_action( "starfire,if=buff.ascendant_fires.up&buff.eclipse_lunar.up" ); +kotg_st->add_action( "new_moon,if=astral_power.deficit>energize_amount" ); +kotg_st->add_action( "half_moon,if=astral_power.deficit>energize_amount" ); +kotg_st->add_action( "full_moon,if=astral_power.deficit>energize_amount" ); +kotg_st->add_action( "wild_mushroom,if=buff.eclipse.up|cooldown.wild_mushroom.full_recharge_timeadd_action( "wrath" ); + +opener_aoe->add_action( "moonfire,target_if=refreshable" ); +opener_aoe->add_action( "sunfire,target_if=refreshable" ); +opener_aoe->add_action( "potion" ); +opener_aoe->add_action( "eclipse,if=cooldown.eclipse.charges=2" ); +opener_aoe->add_action( "starsurge,if=buff.starweavers_weft.react&buff.ascendant_stars.up&target.time_to_die>cooldown.ca_inc.duration+10" ); +opener_aoe->add_action( "starfall,if=(action.starfall.cost>1|buff.touch_the_cosmos.react|buff.starweavers_warp.react)&buff.ascendant_stars.up&target.time_to_die>cooldown.ca_inc.duration+10" ); +opener_aoe->add_action( "starfire,if=(buff.ascendant_stars.up&astral_power.deficit>40-(20*talent.fury_of_elune+20*talent.force_of_nature))&buff.eclipse_lunar.up" ); +opener_aoe->add_action( "wrath,if=buff.ascendant_stars.up&astral_power.deficit>40-(20*talent.fury_of_elune+20*talent.force_of_nature)" ); +opener_aoe->add_action( "sunfire,line_cd=10,target_if=!talent.aetherial_kindling|remains<5" ); +opener_aoe->add_action( "fury_of_elune" ); +opener_aoe->add_action( "force_of_nature" ); +opener_aoe->add_action( "use_items,check_existing=0" ); +opener_aoe->add_action( "celestial_alignment,add_queue_lag=1" ); + +opener_ec->add_action( "moonfire,target_if=remains<2|refreshable&variable.eclipse_down" ); +opener_ec->add_action( "sunfire,target_if=remains<2|refreshable&variable.eclipse_down" ); +opener_ec->add_action( "eclipse" ); +opener_ec->add_action( "starfall,if=buff.starweavers_warp.react" ); +opener_ec->add_action( "starsurge,if=(action.starsurge.cost>1|buff.touch_the_cosmos.react)&talent.convoke_the_spirits" ); +opener_ec->add_action( "starfire,if=astral_power<80&!talent.convoke_the_spirits" ); +opener_ec->add_action( "fury_of_elune" ); +opener_ec->add_action( "celestial_alignment" ); + +opener_kotg->add_action( "sunfire,target_if=refreshable" ); +opener_kotg->add_action( "moonfire,target_if=refreshable&!talent.natures_balance&!talent.convoke_the_spirits" ); +opener_kotg->add_action( "eclipse,if=!talent.natures_balance&!talent.convoke_the_spirits" ); +opener_kotg->add_action( "wrath,if=astral_power<100-20*talent.fury_of_elune&!talent.natures_balance&!talent.convoke_the_spirits" ); +opener_kotg->add_action( "fury_of_elune" ); +opener_kotg->add_action( "force_of_nature" ); +opener_kotg->add_action( "celestial_alignment" );