Skip to content

File tree

engine/class_modules/apl/warlock.cpp

Lines changed: 64 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -41,21 +41,21 @@ void affliction( player_t* p )
4141
{
4242
action_priority_list_t* default_ = p->get_action_priority_list( "default" );
4343
action_priority_list_t* precombat = p->get_action_priority_list( "precombat" );
44-
action_priority_list_t* end_of_fight = p->get_action_priority_list( "end_of_fight" );
45-
action_priority_list_t* items = p->get_action_priority_list( "items" );
46-
action_priority_list_t* ogcd = p->get_action_priority_list( "ogcd" );
47-
action_priority_list_t* variables = p->get_action_priority_list( "variables" );
4844
action_priority_list_t* soul_harvester = p->get_action_priority_list( "soul_harvester" );
4945
action_priority_list_t* hellcaller = p->get_action_priority_list( "hellcaller" );
46+
action_priority_list_t* items = p->get_action_priority_list( "items" );
47+
action_priority_list_t* ogcd = p->get_action_priority_list( "ogcd" );
5048
action_priority_list_t* SH_st = p->get_action_priority_list( "SH_st" );
51-
action_priority_list_t* SH_cleave = p->get_action_priority_list( "SH_cleave" );
5249
action_priority_list_t* SH_aoe = p->get_action_priority_list( "SH_aoe" );
50+
action_priority_list_t* SH_cleave = p->get_action_priority_list( "SH_cleave" );
5351
action_priority_list_t* HC_st = p->get_action_priority_list( "HC_st" );
54-
action_priority_list_t* HC_cleave = p->get_action_priority_list( "HC_cleave" );
5552
action_priority_list_t* HC_aoe = p->get_action_priority_list( "HC_aoe" );
53+
action_priority_list_t* HC_cleave = p->get_action_priority_list( "HC_cleave" );
54+
action_priority_list_t* end_of_fight = p->get_action_priority_list( "end_of_fight" );
55+
action_priority_list_t* variables = p->get_action_priority_list( "variables" );
5656

5757
precombat->add_action( "summon_pet" );
58-
precombat->add_action( "grimoire_of_sacrifice,if=talent.grimoire_of_sacrifice.enabled" );
58+
precombat->add_action( "grimoire_of_sacrifice,if=talent.grimoire_of_sacrifice" );
5959
precombat->add_action( "snapshot_stats" );
6060
precombat->add_action( "seed_of_corruption,if=(hero_tree.soul_harvester&active_enemies>1)|active_enemies>2" );
6161
precombat->add_action( "haunt,if=active_enemies<2|(hero_tree.hellcaller&active_enemies<3)" );
@@ -67,9 +67,6 @@ void affliction( player_t* p )
6767
default_->add_action( "call_action_list,name=soul_harvester,if=hero_tree.soul_harvester" );
6868
default_->add_action( "call_action_list,name=hellcaller,if=hero_tree.hellcaller" );
6969
default_->add_action( "seed_of_corruption,if=talent.nocturnal_yield&active_enemies>1&buff.nightfall.react&(buff.nightfall.react=buff.nightfall.max_stack|buff.nightfall.remains<execute_time*buff.nightfall.max_stack)" );
70-
default_->add_action( "malefic_grasp,if=talent.malefic_grasp&pet.darkglare.active&buff.nightfall.react&(buff.nightfall.react=buff.nightfall.max_stack|buff.nightfall.remains<execute_time*buff.nightfall.max_stack)" );
71-
default_->add_action( "drain_soul,if=buff.nightfall.react&(buff.nightfall.react=buff.nightfall.max_stack|buff.nightfall.remains<execute_time*buff.nightfall.max_stack)" );
72-
default_->add_action( "shadow_bolt,if=buff.nightfall.react&(buff.nightfall.react=buff.nightfall.max_stack|buff.nightfall.remains<execute_time*buff.nightfall.max_stack)" );
7370
default_->add_action( "malefic_grasp,chain=1,early_chain_if=buff.nightfall.react,if=pet.darkglare.active" );
7471
default_->add_action( "drain_soul,chain=1,early_chain_if=buff.nightfall.react,interrupt_if=tick_time>0.5" );
7572
default_->add_action( "shadow_bolt" );
@@ -82,83 +79,87 @@ void affliction( player_t* p )
8279
hellcaller->add_action( "call_action_list,name=HC_cleave,if=active_enemies=2" );
8380
hellcaller->add_action( "call_action_list,name=HC_aoe,if=active_enemies>2" );
8481

85-
SH_st->add_action( "haunt,if=buff.nightfall.react<2" );
86-
SH_st->add_action( "agony,if=!ticking|refreshable" );
87-
SH_st->add_action( "corruption,if=!ticking|refreshable" );
88-
SH_st->add_action( "summon_darkglare,if=soul_shard<3|cooldown.dark_harvest.remains" );
89-
SH_st->add_action( "dark_harvest,if=soul_shard<3&execute_time<(dot.agony.remains<?dot.corruption.remains)&buff.cascading_calamity.remains" );
90-
SH_st->add_action( "malefic_grasp,if=talent.malefic_grasp&pet.darkglare.active&pet.darkglare.remains<gcd" );
82+
items->add_action( "use_item,use_off_gcd=1,slot=trinket1,if=variable.cds_active" );
83+
items->add_action( "use_item,use_off_gcd=1,slot=trinket2,if=variable.cds_active" );
84+
85+
ogcd->add_action( "potion,use_off_gcd=1,if=variable.cds_active|fight_remains<32" );
86+
ogcd->add_action( "berserking,use_off_gcd=1,if=variable.cds_active|fight_remains<14" );
87+
ogcd->add_action( "blood_fury,use_off_gcd=1,if=variable.cds_active|fight_remains<17" );
88+
ogcd->add_action( "fireblood,use_off_gcd=1,if=variable.cds_active|fight_remains<10" );
89+
ogcd->add_action( "ancestral_call,use_off_gcd=1,if=variable.cds_active|fight_remains<17" );
90+
91+
SH_st->add_action( "haunt", "Haunt on CD for apex, regardless of Nightfall stacks" );
92+
SH_st->add_action( "agony,if=refreshable" );
93+
SH_st->add_action( "corruption,if=refreshable" );
94+
SH_st->add_action( "dark_harvest,if=soul_shard<3&execute_time<(dot.agony.remains<?dot.corruption.remains)", "Do not overcap shards" );
95+
SH_st->add_action( "summon_darkglare,if=cooldown.dark_harvest.remains", "use Dark Harvest only outside Darkglare" );
96+
SH_st->add_action( "malefic_grasp,if=buff.nightfall.react>1|pet.darkglare.remains<gcd" );
9197
SH_st->add_action( "drain_soul,if=buff.nightfall.react>1" );
9298
SH_st->add_action( "shadow_bolt,if=buff.nightfall.react>1" );
93-
SH_st->add_action( "unstable_affliction,if=pet.darkglare.active|soul_shard>1|(talent.shard_instability&buff.shard_instability.react)|buff.cascading_calamity.remains<gcd.max" );
99+
SH_st->add_action( "unstable_affliction,if=soul_shard|buff.shard_instability.react", "SH does not care about saving shards in pure patchwerk. In reality it's good to save 1 shard for cascading calamity" );
94100

95-
SH_cleave->add_action( "haunt,if=buff.nightfall.react<2" );
96-
SH_cleave->add_action( "seed_of_corruption,if=(!dot.corruption.ticking|dot.corruption.refreshable)&!dot.seed_of_corruption.ticking&!prev.seed_of_corruption&!action.seed_of_corruption.in_flight" );
97-
SH_cleave->add_action( "dark_harvest" );
98-
SH_cleave->add_action( "agony,if=refreshable" );
99-
SH_cleave->add_action( "summon_darkglare" );
100-
SH_cleave->add_action( "malefic_grasp,if=talent.malefic_grasp&pet.darkglare.active&pet.darkglare.remains<gcd" );
101-
SH_cleave->add_action( "unstable_affliction,if=pet.darkglare.active|(!talent.patient_zero&!talent.sow_the_seeds)" );
102-
SH_cleave->add_action( "seed_of_corruption" );
103-
104-
SH_aoe->add_action( "haunt,if=buff.nightfall.react<2" );
101+
SH_aoe->add_action( "haunt" );
105102
SH_aoe->add_action( "seed_of_corruption,if=(!dot.corruption.ticking|dot.corruption.refreshable)&!dot.seed_of_corruption.ticking&!prev.seed_of_corruption&!action.seed_of_corruption.in_flight" );
106-
SH_aoe->add_action( "dark_harvest" );
107-
SH_aoe->add_action( "agony,target_if=min:remains,if=active_dot.agony<5&remains<5" );
103+
SH_aoe->add_action( "dark_harvest", "Do not care about losing shards in 2+ targets" );
104+
SH_aoe->add_action( "agony,target_if=min:remains,if=active_dot.agony<5&remains<5", "Maintain ~5 agonies (will be 6 with Shared Agony)" );
108105
SH_aoe->add_action( "summon_darkglare" );
109106
SH_aoe->add_action( "seed_of_corruption,if=talent.sow_the_seeds" );
110107
SH_aoe->add_action( "unstable_affliction,if=!talent.sow_the_seeds" );
111108
SH_aoe->add_action( "agony,target_if=min:remains,if=remains<duration*0.5" );
112-
SH_aoe->add_action( "malefic_grasp,if=talent.malefic_grasp&pet.darkglare.active&pet.darkglare.remains<gcd" );
109+
SH_aoe->add_action( "malefic_grasp,if=pet.darkglare.remains<gcd" );
113110

114-
HC_st->add_action( "haunt,if=cooldown.haunt.ready" );
115-
HC_st->add_action( "agony,if=!ticking|refreshable" );
116-
HC_st->add_action( "wither,if=!ticking|refreshable" );
117-
HC_st->add_action( "dark_harvest,if=execute_time<(dot.agony.remains<?dot.corruption.remains)" );
118-
HC_st->add_action( "agony,if=dot.agony.remains<20&cooldown.summon_darkglare.remains<gcd" );
111+
SH_cleave->add_action( "haunt" );
112+
SH_cleave->add_action( "seed_of_corruption,if=(!dot.corruption.ticking|dot.corruption.refreshable)&!dot.seed_of_corruption.ticking&!prev.seed_of_corruption&!action.seed_of_corruption.in_flight" );
113+
SH_cleave->add_action( "dark_harvest", "Do not care about losing shards in 2+ targets" );
114+
SH_cleave->add_action( "agony,target_if=refreshable" );
115+
SH_cleave->add_action( "summon_darkglare" );
116+
SH_cleave->add_action( "malefic_grasp,if=buff.nightfall.react>1|pet.darkglare.remains<gcd" );
117+
SH_cleave->add_action( "drain_soul,if=buff.nightfall.react>1" );
118+
SH_cleave->add_action( "shadow_bolt,if=buff.nightfall.react>1" );
119+
SH_cleave->add_action( "unstable_affliction,if=!talent.patient_zero&!talent.sow_the_seeds&(soul_shard|buff.shard_instability.react)" );
120+
SH_cleave->add_action( "seed_of_corruption,if=talent.patient_zero&talent.sow_the_seeds" );
121+
122+
HC_st->add_action( "haunt", "Haunt on CD for apex" );
123+
HC_st->add_action( "agony,if=refreshable" );
124+
HC_st->add_action( "wither,if=refreshable" );
125+
HC_st->add_action( "dark_harvest,if=execute_time<(dot.agony.remains<?dot.corruption.remains)", "Dark Harvest on CD regardless of Darkglare" );
126+
HC_st->add_action( "agony,if=dot.agony.remains<20&cooldown.summon_darkglare.remains<gcd", "Refresh agony right before Darkglare so it lasts the entire duration" );
119127
HC_st->add_action( "summon_darkglare" );
120128
HC_st->add_action( "malevolence" );
121-
HC_st->add_action( "malefic_grasp,if=talent.malefic_grasp&pet.darkglare.active&pet.darkglare.remains<gcd" );
122-
HC_st->add_action( "unstable_affliction,if=pet.darkglare.active|buff.malevolence.remains|soul_shard>4|(talent.shard_instability&buff.shard_instability.react)|buff.cascading_calamity.remains<gcd.max" );
123-
124-
HC_cleave->add_action( "haunt,if=cooldown.haunt.ready" );
125-
HC_cleave->add_action( "seed_of_corruption,if=talent.sow_the_seeds&!dot.wither.ticking&!dot.seed_of_corruption.ticking&!prev.seed_of_corruption&!action.seed_of_corruption.in_flight" );
126-
HC_cleave->add_action( "wither,target_if=min:remains,if=remains<5&!(action.seed_of_corruption.in_flight|dot.seed_of_corruption.remains>0)&fight_remains>remains+5" );
127-
HC_cleave->add_action( "agony,if=refreshable" );
128-
HC_cleave->add_action( "dark_harvest" );
129-
HC_cleave->add_action( "summon_darkglare" );
130-
HC_cleave->add_action( "malevolence" );
131-
HC_cleave->add_action( "malefic_grasp,if=talent.malefic_grasp&pet.darkglare.active&pet.darkglare.remains<gcd" );
132-
HC_cleave->add_action( "unstable_affliction,if=(pet.darkglare.active|buff.malevolence.remains|soul_shard>4|buff.shard_instability.react|buff.cascading_calamity.remains<gcd.max)&!talent.patient_zero&!talent.sow_the_seeds" );
133-
HC_cleave->add_action( "seed_of_corruption,if=talent.patient_zero&talent.sow_the_seeds" );
134-
HC_cleave->add_action( "unstable_affliction,if=buff.shard_instability.react|(talent.cascading_calamity&buff.cascading_calamity.remains<gcd.max)" );
129+
HC_st->add_action( "malefic_grasp,if=buff.nightfall.react>1|pet.darkglare.remains<gcd" );
130+
HC_st->add_action( "drain_soul,if=buff.nightfall.react>1" );
131+
HC_st->add_action( "shadow_bolt,if=buff.nightfall.react>1" );
132+
HC_st->add_action( "unstable_affliction,if=pet.darkglare.remains|buff.malevolence.remains|soul_shard>4|buff.shard_instability.react|buff.cascading_calamity.remains<gcd.max", "Always maintain Cascading Calamity, only dump inside Malevolence" );
135133

136-
HC_aoe->add_action( "haunt,if=cooldown.haunt.ready" );
134+
HC_aoe->add_action( "haunt" );
137135
HC_aoe->add_action( "seed_of_corruption,if=(!dot.wither.ticking|dot.wither.refreshable)&!dot.seed_of_corruption.ticking&!prev.seed_of_corruption&!action.seed_of_corruption.in_flight" );
138136
HC_aoe->add_action( "dark_harvest" );
139137
HC_aoe->add_action( "agony,target_if=min:remains,if=active_dot.agony<active_enemies&remains<5" );
140138
HC_aoe->add_action( "summon_darkglare" );
141139
HC_aoe->add_action( "malevolence" );
142-
HC_aoe->add_action( "seed_of_corruption,if=talent.sow_the_seeds" );
143-
HC_aoe->add_action( "unstable_affliction,if=(pet.darkglare.active|buff.malevolence.remains|soul_shard>4|buff.shard_instability.react|buff.cascading_calamity.remains<gcd.max)&!talent.sow_the_seeds" );
140+
HC_aoe->add_action( "seed_of_corruption" );
144141
HC_aoe->add_action( "unstable_affliction,if=buff.shard_instability.react" );
145142
HC_aoe->add_action( "agony,target_if=min:remains,if=remains<duration*0.5" );
146-
HC_aoe->add_action( "malefic_grasp,if=talent.malefic_grasp&pet.darkglare.active" );
143+
HC_aoe->add_action( "malefic_grasp,if=pet.darkglare.remains<gcd" );
144+
145+
HC_cleave->add_action( "haunt" );
146+
HC_cleave->add_action( "seed_of_corruption,if=talent.sow_the_seeds&!dot.wither.ticking&!dot.seed_of_corruption.ticking&!prev.seed_of_corruption&!action.seed_of_corruption.in_flight" );
147+
HC_cleave->add_action( "wither,target_if=min:remains,if=remains<5&!(action.seed_of_corruption.in_flight|dot.seed_of_corruption.remains>0)&fight_remains>remains+5" );
148+
HC_cleave->add_action( "agony,target_if=refreshable" );
149+
HC_cleave->add_action( "dark_harvest" );
150+
HC_cleave->add_action( "summon_darkglare" );
151+
HC_cleave->add_action( "malevolence" );
152+
HC_cleave->add_action( "malefic_grasp,if=pet.darkglare.remains<gcd" );
153+
HC_cleave->add_action( "unstable_affliction,if=!talent.sow_the_seeds&!talent.patient_zero&(pet.darkglare.remains|buff.malevolence.remains|soul_shard>4|buff.shard_instability.react|buff.cascading_calamity.remains<gcd.max)" );
154+
HC_cleave->add_action( "seed_of_corruption,if=talent.patient_zero&talent.sow_the_seeds" );
147155

148156
end_of_fight->add_action( "unstable_affliction,if=soul_shard&fight_remains<8&(!talent.patient_zero&!talent.sow_the_seeds)" );
157+
end_of_fight->add_action( "seed_of_corruption,if=soul_shard&fight_remains<8&(talent.patient_zero&talent.sow_the_seeds)" );
149158
end_of_fight->add_action( "drain_soul,if=buff.nightfall.react&fight_remains<5" );
150159
end_of_fight->add_action( "shadow_bolt,if=buff.nightfall.react&fight_remains<5" );
151160

152-
ogcd->add_action( "potion,use_off_gcd=1,if=!talent.summon_darkglare|pet.darkglare.active|fight_remains<32" );
153-
ogcd->add_action( "berserking,use_off_gcd=1,if=!talent.summon_darkglare|pet.darkglare.active|fight_remains<14" );
154-
ogcd->add_action( "blood_fury,if=!talent.summon_darkglare|pet.darkglare.active|fight_remains<17" );
155-
ogcd->add_action( "fireblood,if=!talent.summon_darkglare|pet.darkglare.active|fight_remains<10" );
156-
ogcd->add_action( "ancestral_call,if=!talent.summon_darkglare|pet.darkglare.active|fight_remains<17" );
157-
158-
items->add_action( "use_item,use_off_gcd=1,slot=trinket1,if=variable.cds_active" );
159-
items->add_action( "use_item,use_off_gcd=1,slot=trinket2,if=variable.cds_active" );
160-
161-
variables->add_action( "variable,name=cds_active,op=set,value=!talent.summon_darkglare|cooldown.summon_darkglare.remains>20|pet.darkglare.remains" );
161+
variables->add_action( "variable,name=cds_active,op=set,value=!talent.summon_darkglare|pet.darkglare.remains" );
162+
variables->add_action( "cycling_variable,name=min_agony,op=min,value=dot.agony.remains+(99*!dot.agony.remains)" );
162163
}
163164
//affliction_apl_end
164165

0 commit comments

Comments
 (0)