diff --git a/engine/class_modules/apl/mage.cpp b/engine/class_modules/apl/mage.cpp index ce9bd63a68a..5eb099f13a8 100644 --- a/engine/class_modules/apl/mage.cpp +++ b/engine/class_modules/apl/mage.cpp @@ -16,9 +16,9 @@ std::string potion( const player_t* p ) case MAGE_FROST: lvl90_potion = "potion_of_recklessness_2"; break; default: break; } - + return p->true_level >= 90 ? lvl90_potion - : p->true_level >= 80 ? "tempered_potion_3" + : p->true_level >= 80 ? "tempered_potion_3" : p->true_level >= 70 ? "elemental_potion_of_ultimate_power_3" : p->true_level >= 60 ? "spectral_intellect" : p->true_level >= 50 ? "superior_battle_potion_of_intellect" @@ -32,13 +32,13 @@ std::string flask( const player_t* p ) switch ( p->specialization() ) { case MAGE_ARCANE: lvl90_flask = "flask_of_thalassian_resistance_2"; break; - case MAGE_FIRE: lvl90_flask = "flask_of_the_blood_knights_2"; break; + case MAGE_FIRE: lvl90_flask = "flask_of_thalassian_resistance_2"; break; case MAGE_FROST: lvl90_flask = "flask_of_the_shattered_sun_2"; break; default: break; } - + return p->true_level >= 90 ? lvl90_flask - : p->true_level >= 80 ? "flask_of_alchemical_chaos_3" + : p->true_level >= 80 ? "flask_of_alchemical_chaos_3" : p->true_level >= 70 ? "phial_of_tepid_versatility_3" : p->true_level >= 60 ? "spectral_flask_of_power" : p->true_level >= 50 ? "greater_flask_of_endless_fathoms" @@ -48,7 +48,7 @@ std::string flask( const player_t* p ) std::string food( const player_t* p ) { return p->true_level >= 90 ? "silvermoon_parade" - : p->true_level >= 80 ? "feast_of_the_midnight_masquerade" + : p->true_level >= 80 ? "feast_of_the_midnight_masquerade" : p->true_level >= 70 ? "fated_fortune_cookie" : p->true_level >= 60 ? "feast_of_gluttonous_hedonism" : p->true_level >= 50 ? "famine_evaluator_and_snack_table" @@ -58,7 +58,7 @@ std::string food( const player_t* p ) std::string rune( const player_t* p ) { return p->true_level >= 90 ? "void_touched" - : p->true_level >= 80 ? "crystallized" + : p->true_level >= 80 ? "crystallized" : p->true_level >= 70 ? "draconic" : p->true_level >= 60 ? "veiled" : p->true_level >= 50 ? "battle_scarred" @@ -68,7 +68,7 @@ std::string rune( const player_t* p ) std::string temporary_enchant( const player_t* p ) { return p->true_level >= 90 ? "main_hand:thalassian_phoenix_oil_2" - : p->true_level >= 80 ? "main_hand:algari_mana_oil_3" + : p->true_level >= 80 ? "main_hand:algari_mana_oil_3" : p->true_level >= 70 ? "main_hand:buzzing_rune_3" : p->true_level >= 60 ? "main_hand:shadowcore_oil" : "disabled"; @@ -180,39 +180,38 @@ void fire( player_t* p ) precombat->add_action( "arcane_intellect" ); precombat->add_action( "variable,name=cast_remains_time,value=0.2" ); - precombat->add_action( "variable,name=pooling_time,value=10*gcd.max" ); - precombat->add_action( "variable,name=flamestriking,op=reset,default=1" ); - precombat->add_action( "variable,name=ff_combustion_flamestrike,if=!talent.spellfire_spheres,value=4+(999*!talent.fuel_the_fire)", "Flamestrike at 4 targets during Combustion." ); - precombat->add_action( "variable,name=ff_filler_flamestrike,if=!talent.spellfire_spheres,value=8+(999*!talent.fuel_the_fire)", "Flamestrike at 8 targets." ); - precombat->add_action( "variable,name=sf_combustion_flamestrike,if=talent.spellfire_spheres,value=4+(999*!talent.fuel_the_fire)", "Flamestrike at 4 targets during Combustion." ); - precombat->add_action( "variable,name=sf_filler_flamestrike,if=talent.spellfire_spheres,value=4+(999*!talent.fuel_the_fire)", "Flamestrike at 4 targets." ); + precombat->add_action( "variable,name=flamestriking,op=reset,default=1", "flamestriking is the on/off switch, overridable via apl_variable.flamestriking=0" ); precombat->add_action( "variable,name=combustion_delay,value=(18*talent.firestarter)-(10*(expected_combat_length<60)+10*(expected_combat_length<30))-10*(((expected_combat_length%%60)>=25)&((expected_combat_length%%60)<=40))", "Delay Combustion if playing Firestarter until the target is >=90% HP unless it means losing casts of Combustion. Do not do so if fight length is short." ); - precombat->add_action( "variable,name=15ssteroid_trinket_equipped,op=set,value=equipped.nevermelting_ice_crystal|equipped.lily_of_the_eternal_weave|equipped.sunblood_amethyst|equipped.astral_gladiators_badge_of_ferocity|equipped.arazs_ritual_forge|equipped.freightrunners_flask|equipped.emberwing_feather|equipped.vaelgors_final_stare|equipped.galactic_gladiators_badge_of_ferocity" ); - precombat->add_action( "variable,name=10ssteroid_trinket_equipped,op=set,value=equipped.ever_collapsing_void_fissure" ); - precombat->add_action( "variable,name=nonsteroid_trinket_equipped,op=set,value=equipped.mereldars_toll|equipped.perfidious_projector|equipped.chaotic_nethergate|equipped.wraps_of_cosmic_madness|equipped.astalors_anguish_agitator|equipped.litany_of_lightblind_wrath|equipped.gloom_spattered_dreadscale" ); + precombat->add_action( "variable,name=steroid_trinket_equipped,op=set,value=equipped.freightrunners_flask|equipped.emberwing_feather|equipped.vaelgors_final_stare|equipped.galactic_gladiators_badge_of_ferocity|equipped.nevermelting_ice_crystal|equipped.ever_collapsing_void_fissure|equipped.signet_of_the_priory|equipped.sealed_chaos_urn|equipped.stormbound_emblem_of_dazar|equipped.hex_lords_dooming_idol|equipped.vile_vial_of_volatile_venom|equipped.venomous_gladiators_badge_of_ferocity" ); + precombat->add_action( "variable,name=nonsteroid_trinket_equipped,op=set,value=equipped.wraps_of_cosmic_madness|equipped.astalors_anguish_agitator|equipped.font_of_venomous_rage|equipped.vexhuls_everflowing_gland|equipped.spiritrending_poison|equipped.ophidian_bone_whistle" ); precombat->add_action( "snapshot_stats" ); precombat->add_action( "mirror_image" ); - precombat->add_action( "frostfire_bolt,if=talent.frostfire_bolt", "Precast one of these." ); - precombat->add_action( "meteor,if=!talent.firestarter&talent.sunfury_execution" ); precombat->add_action( "pyroblast" ); default_->add_action( "call_action_list,name=cds" ); - default_->add_action( "run_action_list,name=ff_combustion,if=talent.frostfire_bolt&((time>=variable.combustion_delay)&(cooldown.combustion.remains<=variable.combustion_precast_time|buff.combustion.up|cooldown.combustion.ready))", "Combustion is delayed on pull 18 seconds for all Firestarter builds to simulate realistic timings for when a boss drops below 90% HP." ); - default_->add_action( "run_action_list,name=sf_combustion,if=!talent.frostfire_bolt&((time>=variable.combustion_delay)&(cooldown.combustion.remains<=variable.combustion_precast_time|buff.combustion.up|cooldown.combustion.ready))" ); + default_->add_action( "variable,name=flamestriking_active,op=set,value=variable.flamestriking&(time>variable.combustion_delay|talent.firestarter&buff.pyroclasm.up&buff.hot_streak.react=0)", "Turns off flamestriking during Firestarter, but allows Flamestrike with Pyroclasm." ); + default_->add_action( "variable,name=ff_combustion_flamestrike,op=set,if=!talent.spellfire_spheres,value=3+(999*!talent.fuel_the_fire+999*!variable.flamestriking_active)", "Modifiable target count cutoffs for when to cast Flamestrike. Always turned off if missing Fuel the Fire or during Firestarter." ); + default_->add_action( "variable,name=ff_filler_flamestrike,op=set,if=!talent.spellfire_spheres,value=3+(999*!talent.fuel_the_fire+999*!variable.flamestriking_active)" ); + default_->add_action( "variable,name=sf_combustion_flamestrike,op=set,if=talent.spellfire_spheres,value=3+(999*!talent.fuel_the_fire+999*!variable.flamestriking_active)" ); + default_->add_action( "variable,name=sf_filler_flamestrike,op=set,if=talent.spellfire_spheres,value=3+(999*!talent.fuel_the_fire+999*!variable.flamestriking_active)" ); + default_->add_action( "run_action_list,name=ff_combustion,if=talent.frostfire_bolt&((time>=variable.combustion_delay)&(cooldown.combustion.remains<=variable.combustion_precast_time|buff.combustion.up|cooldown.combustion.ready))", "Combustion is delayed 18 seconds on pull for all Firestarter builds to simulate realistic timings for when a boss drops below 90% HP." ); + default_->add_action( "run_action_list,name=sf_combustion,if=!talent.frostfire_bolt&((time>=variable.combustion_delay)&(cooldown.combustion.remains<=variable.combustion_precast_time+gcd.max*(talent.sunfury_execution&cooldown.meteor.remainsadd_action( "run_action_list,name=ff_filler,if=talent.frostfire_bolt" ); default_->add_action( "run_action_list,name=sf_filler" ); cds->add_action( "variable,name=combustion_precast_time,value=(action.scorch.cast_time*!buff.pyroclasm.up*scorch_execute.active)+(action.fireball.cast_time*!buff.pyroclasm.up*!scorch_execute.active)+(action.pyroblast.cast_time*buff.pyroclasm.up)-variable.cast_remains_time" ); cds->add_action( "potion,if=time>=(8*(talent.firestarter&talent.spellfire_spheres))|buff.combustion.remains>6|fight_remains<35", "Use Potion on pull. Delay by about 8 seconds if playing with Firestarter as Sunfury." ); - cds->add_action( "use_item,name=vaelgors_final_stare,if=buff.combustion.remains>6&buff.bloodlust.up|fight_remains<20", "Vaelgor is prioritised during Bloodlust." ); - cds->add_action( "use_item,name=emberwing_feather,if=buff.combustion.remains>6|fight_remains<20" ); + cds->add_action( "use_item,name=vile_vial_of_volatile_venom,if=buff.combustion.remains>6|fight_remains<20" ); + cds->add_action( "use_item,name=stormbound_emblem_of_dazar,if=time>=variable.combustion_delay&cooldown.combustion.remains<2&buff.combustion.down&(buff.bloodlust.down|gcd.max>0.76&!equipped.hex_lords_dooming_idol&(!equipped.vile_vial_of_volatile_venom|trinket.1.is.vile_vial_of_volatile_venom&trinket.1.cooldown.remains>20|trinket.2.is.vile_vial_of_volatile_venom&trinket.2.cooldown.remains>20))|fight_remains<25" ); + cds->add_action( "use_item,name=sethraliss_defiled_relic,if=buff.combustion.remains>6|fight_remains<20" ); + cds->add_action( "use_item,name=hex_lords_dooming_idol,if=buff.combustion.remains>6|fight_remains<30" ); cds->add_action( "use_item,name=vaelgors_final_stare,if=buff.combustion.remains>6|fight_remains<20" ); + cds->add_action( "use_item,name=emberwing_feather,if=buff.combustion.remains>6|fight_remains<20" ); + cds->add_action( "use_item,name=venomous_gladiators_badge_of_ferocity,if=buff.combustion.remains>6|fight_remains<20" ); cds->add_action( "use_item,name=galactic_gladiators_badge_of_ferocity,if=buff.combustion.remains>6|fight_remains<20" ); cds->add_action( "use_item,name=ever_collapsing_void_fissure,if=buff.combustion.remains>6|fight_remains<20" ); - cds->add_action( "use_item,name=nevermelting_ice_crystal,if=buff.combustion.remains>6|fight_remains<20" ); cds->add_action( "use_item,name=freightrunners_flask,if=buff.combustion.remains>6|fight_remains<20" ); - cds->add_action( "use_items,if=variable.nonsteroid_trinket_equipped&time>variable.combustion_delay&buff.combustion.down&buff.hyperthermia.down&cooldown.combustion.remains>20", "Non-steriod trinkets are used outside cooldowns." ); - cds->add_action( "use_items,if=(buff.combustion.remains>6|fight_remains<20)" ); + cds->add_action( "use_items,if=variable.nonsteroid_trinket_equipped&(time>variable.combustion_delay&cooldown.combustion.remains>20|time<=variable.combustion_delay&(variable.combustion_delay>=18|!variable.steroid_trinket_equipped))&buff.combustion.down&buff.hyperthermia.down", "Non-steroid trinkets are used outside cooldowns. They can be used on pull if Combustion is delayed an ample amount of time or you don't have a steroid trinket equipped." ); cds->add_action( "ancestral_call,if=buff.combustion.remains>6|fight_remains<20" ); cds->add_action( "berserking,if=buff.combustion.remains>6|fight_remains<20" ); cds->add_action( "blood_fury,if=buff.combustion.remains>6|fight_remains<20" ); @@ -221,58 +220,55 @@ void fire( player_t* p ) fireblast->add_action( "fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&cooldown.fire_blast.charges_fractional>=2.9&talent.firestarter", "Cast Fire Blast if close to overcapping charges. This can result in casting Fire Blast twice during one cast, if you have ample time left of your cast." ); fireblast->add_action( "fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&!buff.hot_streak.react&(buff.combustion.up|buff.hyperthermia.up)&(hot_streak_spells_in_flight+buff.heating_up.react=1)&gcd.remainsadd_action( "fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&!buff.hot_streak.react&(action.fireball.executing&action.fireball.execute_remains>0.1|buff.pyroclasm.react&action.pyroblast.executing&action.pyroblast.execute_remains>0.1)&((!scorch_execute.active|!talent.scorch)&buff.heating_up.react)&(hot_streak_spells_in_flight+buff.heating_up.react=1)&gcd.remainsadd_action( "fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&!buff.hot_streak.react&scorch_execute.active&(hot_streak_spells_in_flight+buff.heating_up.react=0)&action.scorch.executing&buff.heat_shimmer.down&gcd.remainsadd_action( "fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&!buff.hot_streak.react&(action.fireball.executing&action.fireball.execute_remains>0.1|buff.pyroclasm.react&action.pyroblast.executing&action.pyroblast.execute_remains>0.1|action.flamestrike.executing&action.flamestrike.execute_remains>0.1)&(!scorch_execute.active|!talent.scorch)&buff.heating_up.react&(hot_streak_spells_in_flight+buff.heating_up.react=1)&gcd.remainsadd_action( "fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&!buff.hot_streak.react&scorch_execute.active&(hot_streak_spells_in_flight+buff.heating_up.react=0)&(action.scorch.executing&buff.heat_shimmer.down|action.pyroblast.executing&buff.pyroclasm.up&set_bonus.midnight_season_2_2pc)&gcd.remainsadd_action( "fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&!buff.hot_streak.react&time0.1|buff.pyroclasm.react&action.pyroblast.executing&action.pyroblast.execute_remains>0.1)&(hot_streak_spells_in_flight+buff.heating_up.react=1)&gcd.remainsadd_action( "fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&(time>=variable.combustion_delay&(cooldown.combustion.remains<=variable.combustion_precast_time))&buff.combustion.down&talent.spontaneous_combustion&(action.scorch.executing|action.fireball.executing|action.pyroblast.executing|action.flamestrike.executing)", "When talented into Spontaneous Combustion, spend all Fire Blasts during the pre-cast going into Combustion regardless of Heating Up / Hot Streak status." ); - fireblast->add_action( "fire_blast,use_off_gcd=1,use_while_casting=1,if=talent.frostfire_bolt&target.health.pct<30&buff.combustion.down&cooldown.combustion.remains>5", "As Frostfire in execute, since we ignore Hot Streak Pyroblast, send Fire Blasts freely." ); fireblast->add_action( "fire_blast,use_off_gcd=1,use_while_casting=1,if=fight_remains<1", "Spend all available Fire Blasts if fight is ending." ); ff_combustion->add_action( "combustion,use_off_gcd=1,use_while_casting=1,if=buff.combustion.down&action.fireball.executing&(action.fireball.execute_remainsadd_action( "flamestrike,if=talent.fuel_the_fire&active_enemies>=variable.ff_combustion_flamestrike&variable.flamestriking&(buff.pyroclasm.up&!buff.hot_streak.react&buff.combustion.down)", "Precast into Combustion. Prioritize Pyroclasm if available." ); + ff_combustion->add_action( "flamestrike,if=buff.pyroclasm.up&!buff.hot_streak.react&buff.combustion.down&active_enemies>=variable.ff_combustion_flamestrike", "Precast into Combustion. Prioritize Pyroclasm if available." ); ff_combustion->add_action( "pyroblast,if=buff.pyroclasm.up&!buff.hot_streak.react&buff.combustion.down" ); ff_combustion->add_action( "fireball,if=buff.combustion.down" ); - ff_combustion->add_action( "meteor,if=(talent.burnout&buff.combustion.remains<8)|(!talent.burnout&buff.combustion.remains>2)", "Meteor is used towards the end of Combustion to maximize the Ignite bank for Burnout. If not playing Burnout, just make sure the Meteor lands during Combustion at any time." ); - ff_combustion->add_action( "flamestrike,if=talent.fuel_the_fire&active_enemies>=variable.ff_combustion_flamestrike&variable.flamestriking&(buff.hot_streak.react)", "Spend Hot Streaks on Pyroblast in ST or Flamestrike in AoE." ); + ff_combustion->add_action( "meteor,if=talent.burnout&buff.combustion.remains<8|!talent.burnout&buff.combustion.remains>2", "Meteor is used towards the end of Combustion to maximize the Ignite bank for Burnout. If not playing Burnout, just make sure the Meteor lands during Combustion at any time." ); + ff_combustion->add_action( "flamestrike,if=buff.hot_streak.react&active_enemies>=variable.ff_combustion_flamestrike", "Spend Hot Streaks on Pyroblast in ST or Flamestrike in AoE." ); ff_combustion->add_action( "pyroblast,if=buff.hot_streak.react" ); - ff_combustion->add_action( "flamestrike,if=talent.fuel_the_fire&active_enemies>=variable.ff_combustion_flamestrike&variable.flamestriking&(buff.pyroclasm.up&cast_timeadd_action( "flamestrike,if=buff.pyroclasm.up&cast_time=(variable.ff_filler_flamestrike-1)", "Make sure Pyroclasm FINISHES its cast before Combustion ends." ); ff_combustion->add_action( "pyroblast,if=buff.pyroclasm.up&cast_timeadd_action( "scorch,if=buff.heat_shimmer.react|talent.scald&scorch_execute.active&buff.frostfire_empowerment.down" ); ff_combustion->add_action( "fireball" ); - ff_combustion->add_action( "call_action_list,name=fireblast,if=!talent.pyroclasm|(buff.pyroclasm.stack<2|action.pyroblast.executing&action.pyroblast.execute_remains>0.2&buff.pyroclasm.stack=2|cooldown.fire_blast.charges_fractional>=2|buff.combustion.remainsadd_action( "call_action_list,name=fireblast,if=!talent.pyroclasm|(buff.pyroclasm.stack<2|action.pyroblast.executing&action.pyroblast.execute_remains>0.2&buff.pyroclasm.stack=2|cooldown.fire_blast.charges_fractional>=2.9|buff.combustion.remainsadd_action( "meteor,if=time>=(variable.combustion_delay-gcd.max)", "Cast Meteor on CD starting from the precast of your first Combustion." ); - ff_filler->add_action( "pyroblast,if=buff.hot_streak.up&talent.firestarter&timeadd_action( "flamestrike,if=talent.fuel_the_fire&active_enemies>=variable.ff_filler_flamestrike&variable.flamestriking&(buff.hot_streak.react&(cooldown.combustion.remains>=5|timeadd_action( "pyroblast,if=buff.hot_streak.react&(cooldown.combustion.remains>=(5-(5*buff.pyroclasm.up))|time30" ); - ff_filler->add_action( "flamestrike,if=talent.fuel_the_fire&active_enemies>=variable.ff_filler_flamestrike&variable.flamestriking&(buff.pyroclasm.up&cooldown.combustion.remains>12|buff.pyroclasm.stack=2)", "Spend Pyroclasm immediately if you have 2 stacks available. Otherwise, hold one stack if it lasts until Combustion comes up." ); + ff_filler->add_action( "flamestrike,if=(buff.hot_streak.react&(cooldown.combustion.remains>=5|time=variable.ff_filler_flamestrike", "Hold Hot Streak if Combustion is coming up soon. Do not hold if intentionally delaying Combustion." ); + ff_filler->add_action( "pyroblast,if=buff.hot_streak.react&(cooldown.combustion.remains>=(5-5*buff.pyroclasm.up)|timeadd_action( "flamestrike,if=(buff.pyroclasm.up&cooldown.combustion.remains>12|buff.pyroclasm.stack=2)&active_enemies>=variable.ff_filler_flamestrike", "Spend Pyroclasm immediately if you have 2 stacks available. Otherwise, hold one stack if it lasts until Combustion comes up." ); ff_filler->add_action( "pyroblast,if=buff.pyroclasm.up&cooldown.combustion.remains>12|buff.pyroclasm.stack=2" ); ff_filler->add_action( "scorch,if=buff.heat_shimmer.react" ); ff_filler->add_action( "fireball" ); ff_filler->add_action( "call_action_list,name=fireblast" ); - sf_combustion->add_action( "combustion,use_off_gcd=1,use_while_casting=1,if=action.scorch.executing&(action.scorch.execute_remainsadd_action( "meteor,if=buff.bloodlust.up&buff.combustion.down", "Precast one of these into Combustion." ); - sf_combustion->add_action( "flamestrike,if=talent.fuel_the_fire&active_enemies>=variable.sf_combustion_flamestrike&variable.flamestriking&(buff.combustion.down&!buff.hot_streak.react&buff.pyroclasm.up)" ); + sf_combustion->add_action( "combustion,use_off_gcd=1,use_while_casting=1,if=action.scorch.executing&(action.scorch.execute_remainsadd_action( "flamestrike,if=buff.combustion.down&buff.hot_streak.react&active_enemies>=variable.sf_combustion_flamestrike", "Spend Hot Streak before going into your precast." ); + sf_combustion->add_action( "pyroblast,if=buff.combustion.down&buff.hot_streak.react" ); + sf_combustion->add_action( "meteor,if=buff.combustion.down&talent.sunfury_execution", "Precast one of these into Combustion." ); + sf_combustion->add_action( "flamestrike,if=active_enemies>=variable.sf_combustion_flamestrike&(buff.combustion.down&!buff.hot_streak.react&buff.pyroclasm.up)" ); sf_combustion->add_action( "pyroblast,if=buff.combustion.down&!buff.hot_streak.react&buff.pyroclasm.up" ); sf_combustion->add_action( "scorch,if=buff.combustion.down&(scorch_execute.active|active_enemies>=4)" ); - sf_combustion->add_action( "fireball,if=buff.combustion.down&(!prev_gcd.1.meteor|buff.bloodlust.down)", "If precasting Meteor into Combustion, can fit a Fireball unless Bloodlust is active." ); + sf_combustion->add_action( "fireball,if=buff.combustion.down&(!prev_gcd.1.meteor|buff.bloodlust.down)" ); sf_combustion->add_action( "meteor,if=buff.combustion.remains>2", "Make sure Meteor lands during Combustion." ); - sf_combustion->add_action( "flamestrike,if=talent.fuel_the_fire&active_enemies>=variable.sf_combustion_flamestrike&variable.flamestriking&(buff.hot_streak.react|prev_gcd.1.scorch&buff.heating_up.react&time-action.scorch.last_used<0.2)", "Spend Hot Streaks on Pyroblast in ST or Flamestrike in AoE. The Scorch condition is simply to simulate predictable guaranteed crits during Combustion." ); + sf_combustion->add_action( "flamestrike,if=(buff.hot_streak.react|prev_gcd.1.scorch&buff.heating_up.react&time-action.scorch.last_used<0.2)&active_enemies>=variable.sf_combustion_flamestrike", "Spend Hot Streaks on Pyroblast in ST or Flamestrike in AoE. The Scorch condition is simply to simulate predictable guaranteed crits during Combustion." ); sf_combustion->add_action( "pyroblast,if=buff.hot_streak.react|prev_gcd.1.scorch&buff.heating_up.react&time-action.scorch.last_used<0.2" ); - sf_combustion->add_action( "flamestrike,if=talent.fuel_the_fire&active_enemies>=variable.sf_combustion_flamestrike&variable.flamestriking&(buff.pyroclasm.up&!buff.hot_streak.up&cast_timeadd_action( "pyroblast,if=buff.pyroclasm.up&!buff.hot_streak.up&cast_timeadd_action( "flamestrike,if=buff.pyroclasm.react&cast_time=variable.sf_combustion_flamestrike", "Make sure Pyroclasm FINISHES its cast before Combustion ends." ); + sf_combustion->add_action( "pyroblast,if=buff.pyroclasm.react&cast_timeadd_action( "scorch" ); - sf_combustion->add_action( "fireball" ); - sf_combustion->add_action( "call_action_list,name=fireblast,if=!talent.pyroclasm|(buff.pyroclasm.stack<2|action.pyroblast.executing&action.pyroblast.execute_remains>0.2&buff.pyroclasm.stack=2|cooldown.fire_blast.charges_fractional>=2|buff.combustion.remainsadd_action( "call_action_list,name=fireblast,if=!talent.pyroclasm|(buff.pyroclasm.stack<2|action.pyroblast.executing&action.pyroblast.execute_remains>0.2&buff.pyroclasm.stack=2|cooldown.fire_blast.charges_fractional>=2.9|buff.combustion.remainsadd_action( "meteor,if=active_enemies>=4&time>variable.combustion_delay&cooldown.combustion.remains<=gcd.max+variable.combustion_precast_time&buff.bloodlust.down", "In AoE, outside of Bloodlust, we can use Meteor into a Hardcast as a precast for Combustion." ); - sf_filler->add_action( "pyroblast,if=buff.hot_streak.up&talent.firestarter&timeadd_action( "flamestrike,if=talent.fuel_the_fire&active_enemies>=variable.sf_filler_flamestrike&variable.flamestriking&(buff.hot_streak.react|prev_gcd.1.scorch&buff.heating_up.react&time-action.scorch.last_used<0.2|buff.hyperthermia.up)", "Spend Hot Streaks on Pyroblast in ST or Flamestrike in AoE. The Scorch condition is simply to simulate predictable guaranteed crits during execute." ); + sf_filler->add_action( "meteor,if=talent.blast_zone&time>variable.combustion_delay", "Meteor is used immediately when ready after the first Combustion, if you have Blast Zone." ); + sf_filler->add_action( "flamestrike,if=(buff.hot_streak.react|prev_gcd.1.scorch&buff.heating_up.react&time-action.scorch.last_used<0.2|buff.hyperthermia.up)&active_enemies>=variable.sf_filler_flamestrike", "Spend Hot Streaks on Pyroblast in ST or Flamestrike in AoE. The Scorch condition is simply to simulate predictable guaranteed crits during execute." ); sf_filler->add_action( "pyroblast,if=buff.hot_streak.react|prev_gcd.1.scorch&buff.heating_up.react&time-action.scorch.last_used<0.2|buff.hyperthermia.up" ); - sf_filler->add_action( "flamestrike,if=talent.fuel_the_fire&active_enemies>=variable.sf_filler_flamestrike&variable.flamestriking&buff.pyroclasm.up&((cooldown.combustion.remains>=12|time(variable.combustion_delay-action.flamestrike.cast_time)))|buff.pyroclasm.stack=2)", "Spend Pyroclasm immediately if you have 2 stacks available or if Firestarter is active. Otherwise, hold one stack if it lasts until Combustion comes up." ); - sf_filler->add_action( "pyroblast,if=buff.pyroclasm.up&(cooldown.combustion.remains>=12|time(variable.combustion_delay-action.pyroblast.cast_time)))|buff.pyroclasm.stack=2" ); - sf_filler->add_action( "meteor,if=(!talent.blast_zone&talent.sunfury_execution&cooldown.combustion.remains<12&buff.pyroclasm.stack<2)|(talent.blast_zone&time>variable.combustion_delay)", "Meteor is used on CD with Blast Zone starting from the first Combustion. Without Blast Zone, it's used either purely during Combustion or within 12 seconds before if talented into Sunfury Execution." ); + sf_filler->add_action( "flamestrike,if=buff.pyroclasm.up&active_enemies>=variable.sf_filler_flamestrike", "Spend Pyroclasm immediately." ); + sf_filler->add_action( "pyroblast,if=buff.pyroclasm.up" ); sf_filler->add_action( "scorch,if=talent.scald&scorch_execute.active|buff.heat_shimmer.react&(firestarter.active|prev_gcd.1.pyroblast|prev_gcd.1.flamestrike)", "Cast Scorch in execute or with a Heat Shimmer proc." ); sf_filler->add_action( "fireball" ); sf_filler->add_action( "call_action_list,name=fireblast" ); diff --git a/profiles/generators/MID2/MID2_Generate_Mage.simc b/profiles/generators/MID2/MID2_Generate_Mage.simc index 8968231f61e..37c18e084ff 100644 --- a/profiles/generators/MID2/MID2_Generate_Mage.simc +++ b/profiles/generators/MID2/MID2_Generate_Mage.simc @@ -66,73 +66,73 @@ # save=MID2_Mage_Arcane_Sunfury.simc -# mage="MID2_Mage_Fire_Sunfury" -# spec=fire -# level=90 -# race=orc -# role=spell -# position=ranged_back -# talents=C8DAAAAAAAAAAAAAAAAAAAAAAYGGLzMzswMDZmZGAAAGAwMz0sssMDAwmZmx2wYmBAAAAAsZmZmZAAwYGzYmZMz2AwMDxMGDmhB -# omnium_talents=136822:1/136816:1/136817:1/136820:1/136814:1 - -# potion=lights_potential_2 -# flask=flask_of_the_blood_knights_2 -# food=silvermoon_parade -# augmentation=void_touched_augment_rune -# temporary_enchant=main_hand:thalassian_phoenix_oil_2 - -# head=voidbreakers_veil,id=250060,bonus_id=13668/12806/13335,ilevel=289,gem_id=240967,enchant_id=8017 -# neck=amulet_of_the_abyssal_hymn,id=250247,bonus_id=13668/12806/13335,ilevel=289,gem_id=240892/240900 -# shoulders=voidbreakers_leyline_nexi,id=250058,bonus_id=12806/13335,ilevel=289,enchant_id=8001 -# back=adherents_silken_shroud,id=239656,bonus_id=8960/12384/12066,ilevel=285,crafted_stats=36/49 -# chest=mycomancers_rot_robes,id=268284,bonus_id=13335/13786,ilevel=298,enchant_id=7987 -# wrists=voracious_wristwraps,id=249315,bonus_id=13668/12806/13335,ilevel=289,gem_id=240900 -# hands=voidbreakers_gloves,id=250061,bonus_id=12806/13335,ilevel=289 -# waist=whisperinscribed_sash,id=249376,bonus_id=13668/12806/13335,ilevel=289,gem_id=240900 -# legs=voidbreakers_britches,id=250059,bonus_id=12806/13335,ilevel=289,enchant_id=7935 -# feet=voidbreakers_treads,id=250062,bonus_id=13335/13786,ilevel=298,enchant_id=7963 -# finger1=omission_of_light,id=251093,bonus_id=13668/12806/13440,ilevel=289,gem_id=240906,enchant_id=7967 -# finger2=sporecallers_blooming_loop,id=268290,bonus_id=13668/13335/13786,ilevel=298,gem_id=240916,enchant_id=7967 -# trinket1=vaelgors_final_stare,id=249346,bonus_id=12806/13335/13654,ilevel=298 -# trinket2=gaze_of_the_alnseer,id=249343,bonus_id=12806/13335/13654,ilevel=298 -# main_hand=belomelorn_the_shattered_talon,id=249283,bonus_id=12806/13335/13654,ilevel=298,enchant_id=8039 -# off_hand=alnhara_lantern,id=245769,bonus_id=8960/12693/12066/13655,ilevel=295,crafted_stats=36/49 - -# save=MID2_Mage_Fire.simc - -# mage="MID2_Mage_Fire_Frostfire" -# spec=fire -# level=90 -# race=orc -# role=spell -# position=ranged_back -# talents=C8DAAAAAAAAAAAAAAAAAAAAAAYGGLzMzswMDZmZGAAAmZZGzMLzCEAAwiZmx2YmZGAAAAAgNzMzMDAAGzYmZmZmZ2AmZADzYMYwA -# omnium_talents=136822:1/136816:1/136817:1/136820:1/136814:1 - -# potion=lights_potential_2 -# flask=flask_of_the_magisters_2 -# food=silvermoon_parade -# augmentation=void_touched_augment_rune -# temporary_enchant=main_hand:thalassian_phoenix_oil_2 - -# head=voidbreakers_veil,id=250060,bonus_id=13668/12806/13335,ilevel=289,gem_id=240967,enchant_id=8017 -# neck=amulet_of_the_abyssal_hymn,id=250247,bonus_id=13668/12806/13335,ilevel=289,gem_id=240892/240900 -# shoulders=voidbreakers_leyline_nexi,id=250058,bonus_id=12806/13335,ilevel=289,enchant_id=8001 -# back=adherents_silken_shroud,id=239656,bonus_id=8960/12384/12066,ilevel=285,crafted_stats=36/49 -# chest=mycomancers_rot_robes,id=268284,bonus_id=13335/13786,ilevel=298,enchant_id=7987 -# wrists=voracious_wristwraps,id=249315,bonus_id=13668/12806/13335,ilevel=289,gem_id=240900 -# hands=voidbreakers_gloves,id=250061,bonus_id=12806/13335,ilevel=289 -# waist=whisperinscribed_sash,id=249376,bonus_id=13668/12806/13335,ilevel=289,gem_id=240900 -# legs=voidbreakers_britches,id=250059,bonus_id=12806/13335,ilevel=289,enchant_id=7935 -# feet=voidbreakers_treads,id=250062,bonus_id=13335/13786,ilevel=298,enchant_id=7963 -# finger1=omission_of_light,id=251093,bonus_id=13668/12806/13440,ilevel=289,gem_id=240906,enchant_id=7967 -# finger2=sporecallers_blooming_loop,id=268290,bonus_id=13668/13335/13786,ilevel=298,gem_id=240916,enchant_id=7967 -# trinket1=vaelgors_final_stare,id=249346,bonus_id=12806/13335/13654,ilevel=298 -# trinket2=gaze_of_the_alnseer,id=249343,bonus_id=12806/13335/13654,ilevel=298 -# main_hand=belomelorn_the_shattered_talon,id=249283,bonus_id=12806/13335/13654,ilevel=298,enchant_id=8039 -# off_hand=alnhara_lantern,id=245769,bonus_id=8960/12693/12066/13655,ilevel=295,crafted_stats=36/49 - -# save=MID2_Mage_Fire_Frostfire.simc +mage="MID2_Mage_Fire_Sunfury" +spec=fire +level=90 +race=dwarf +role=spell +position=ranged_back +talents=C8DAAAAAAAAAAAAAAAAAAAAAAYGGLzMzswMzIzMGAAAGAwMz0sstMDAwmZmx2MzMzYBAAAAALmZmZAAgZMmZmZMzsMAMzQGjBMDjB +omnium_talents=136822:1/136816:1/136817:1/136820:1/136814:1 + +potion=lights_potential_2 +flask=flask_of_the_blood_knights_2 +food=silvermoon_parade +augmentation=void_touched_augment_rune +temporary_enchant=main_hand:thalassian_phoenix_oil_2 + +head=venomkeepers_horrific_cowl,id=271874,bonus_id=13668/13848/13335/13846,ilevel=344,gem_id=240967,enchant_id=8017 +neck=amulet_of_the_twin_fangs,id=268251,bonus_id=13668/12854/13335,ilevel=334,gem_id=240894 +shoulders=primal_leywardens_manaflux,id=271562,bonus_id=12854/13335,ilevel=334,enchant_id=8001,redirected_base_stats=268241 +back=silken_voodoo_drape,id=268253,bonus_id=13848/13335,ilevel=344 +chest=crest_of_the_primal_leywarden,id=271567,bonus_id=12854/13440,ilevel=334,enchant_id=7987,redirected_base_stats=251147 +wrists=martyrs_bindings,id=239648,bonus_id=13668/8960/13751/12384,ilevel=331,gem_id=240900,crafted_stats=36/40 +hands=primal_leywardens_manashapers,id=271565,bonus_id=13848/13335,ilevel=344,redirected_base_stats=268243 +waist=caustic_chainwrapped_sash,id=268257,bonus_id=13668/12854/13335,ilevel=334,gem_id=240894 +legs=primal_leywardens_tailored_legwraps,id=271563,bonus_id=12854/13335,ilevel=334,enchant_id=7935,redirected_base_stats=268236 +feet=cackling_soultreads,id=268255,bonus_id=13848/13335,ilevel=344,enchant_id=7963 +finger1=alluring_bubbleband,id=268266,bonus_id=13668/12854/13335,ilevel=334,gem_id=240916,enchant_id=7967 +finger2=ritual_binders_ring,id=159459,bonus_id=13668/12854/13440,ilevel=334,gem_id=240906,enchant_id=7967 +trinket1=vile_vial_of_volatile_venom,id=273796,bonus_id=12854/13440,ilevel=334 +trinket2=gebbos_bottomless_bag,id=270164,bonus_id=12854/13335,ilevel=334 +main_hand=janthrazet_the_soul_fang,id=271092,bonus_id=13848/13335,ilevel=344,enchant_id=8011 +off_hand=alnhara_lantern,id=245769,bonus_id=8960/13751/13771,ilevel=331,crafted_stats=36/40 + +save=MID2_Mage_Fire.simc + +mage="MID2_Mage_Fire_Frostfire" +spec=fire +level=90 +race=dwarf +role=spell +position=ranged_back +talents=C8DAAAAAAAAAAAAAAAAAAAAAAYGGLzMzswMzIzMGAAAmZZGzMLzCEAAwiZG2mZmZGLAAAAAYxMzMDAAMzwMzMzMzsAMzAyYMGMYMA +omnium_talents=136822:1/136816:1/136817:1/136818:1/136814:1 + +potion=lights_potential_2 +flask=flask_of_the_magisters_2 +food=silvermoon_parade +augmentation=void_touched_augment_rune +temporary_enchant=main_hand:thalassian_phoenix_oil_2 + +head=venomkeepers_horrific_cowl,id=271874,bonus_id=13668/13848/13335/13846,ilevel=344,gem_id=240967,enchant_id=8017 +neck=amulet_of_the_twin_fangs,id=268251,bonus_id=13668/12854/13335,ilevel=334,gem_id=240902 +shoulders=primal_leywardens_manaflux,id=271562,bonus_id=12854/13335,ilevel=334,enchant_id=8001,redirected_base_stats=268241 +back=silken_voodoo_drape,id=268253,bonus_id=13848/13335,ilevel=344 +chest=crest_of_the_primal_leywarden,id=271567,bonus_id=12854/13440,ilevel=334,enchant_id=7987,redirected_base_stats=251147 +wrists=martyrs_bindings,id=239648,bonus_id=13668/8960/13751/12384,ilevel=331,gem_id=240916,crafted_stats=36/40 +hands=primal_leywardens_manashapers,id=271565,bonus_id=13848/13335,ilevel=344,redirected_base_stats=268243 +waist=caustic_chainwrapped_sash,id=268257,bonus_id=13668/12854/13335,ilevel=334,gem_id=240916 +legs=primal_leywardens_tailored_legwraps,id=271563,bonus_id=12854/13335,ilevel=334,enchant_id=7935,redirected_base_stats=268236 +feet=cackling_soultreads,id=268255,bonus_id=13848/13335,ilevel=344,enchant_id=7963 +finger1=alluring_bubbleband,id=268266,bonus_id=13668/12854/13335,ilevel=334,gem_id=240894,enchant_id=7967 +finger2=ritual_binders_ring,id=159459,bonus_id=13668/12854/13440,ilevel=334,gem_id=240906,enchant_id=7967 +trinket1=vile_vial_of_volatile_venom,id=273796,bonus_id=12854/13440,ilevel=334 +trinket2=gebbos_bottomless_bag,id=270164,bonus_id=12854/13335,ilevel=334 +main_hand=janthrazet_the_soul_fang,id=271092,bonus_id=13848/13335,ilevel=344,enchant_id=8041 +off_hand=alnhara_lantern,id=245769,bonus_id=8960/13751/13771,ilevel=331,crafted_stats=36/40 + +save=MID2_Mage_Fire_Frostfire.simc # mage="MID2_Mage_Frost_Spellslinger" # spec=frost