Arcane Mage rotation completely broken
flatluigi opened this issue ยท 1 comments
Something's busted with however Ovale's working with the Arcane Mage simcraft profile, producing a rotation that's nonsensical and extremely low-power -- it has you getting to 4 charges, slowly using Arcane Explosion right before Quickening runs out (i.e. every four seconds), and never using Mark of Aluneth, Arcane Power, or Rune of Power.
Here's the profile I got straight from my simulation:
mage="Qarrion"
level=110
race=goblin
role=spell
`position=back
professions=tailoring=800/enchanting=796
talents=1121112
artifact=4:0:0:0:0:73:1:74:3:75:3:78:1:79:3:80:1:81:3:82:3:83:1:84:3:87:1:290:1:1169:1:1339:1
spec=arcane
This default action priority list is automatically created based on your character.
It is a attempt to provide you with a action list that is both simple and practicable,
while resulting in a meaningful and good simulation. It may not result in the absolutely highest possible dps.
Feel free to edit, adapt and improve it to your own needs.
SimulationCraft is always looking for updates and improvements to the default action lists.
Executed before combat begins. Accepts non-harmful actions only.
actions.precombat=flask,type=flask_of_the_whispered_pact
actions.precombat+=/food,type=the_hungry_magister
actions.precombat+=/augmentation,type=defiled
actions.precombat+=/summon_arcane_familiar
actions.precombat+=/snapshot_stats
actions.precombat+=/mirror_image
actions.precombat+=/potion,name=deadly_grace
actions.precombat+=/arcane_blast
Executed every time the actor is available.
actions=counterspell,if=target.debuff.casting.react
actions+=/time_warp,if=(time=0&buff.bloodlust.down)|(buff.bloodlust.down&equipped.132410)
actions+=/mirror_image,if=buff.arcane_power.down
actions+=/stop_burn_phase,if=prev_gcd.evocation&burn_phase_duration>gcd.max
actions+=/mark_of_aluneth,if=cooldown.arcane_power.remains>20
actions+=/call_action_list,name=build,if=buff.arcane_charge.stack<4
actions+=/call_action_list,name=init_burn,if=buff.arcane_power.down&buff.arcane_charge.stack=4&(cooldown.mark_of_aluneth.remains=0|cooldown.mark_of_aluneth.remains>20)&(!talent.rune_of_power.enabled|(cooldown.arcane_power.remains<=action.rune_of_power.cast_time|action.rune_of_power.recharge_time<cooldown.arcane_power.remains))|target.time_to_die<45
actions+=/call_action_list,name=burn,if=burn_phase
actions+=/call_action_list,name=rop_phase,if=buff.rune_of_power.up&!burn_phase
actions+=/call_action_list,name=conserve
actions.build=charged_up,if=buff.arcane_charge.stack<=1
actions.build+=/arcane_missiles,if=buff.arcane_missiles.react=3
actions.build+=/arcane_orb
actions.build+=/arcane_explosion,if=active_enemies>1
actions.build+=/arcane_blast
actions.burn=call_action_list,name=cooldowns
actions.burn+=/arcane_missiles,if=buff.arcane_missiles.react=3
actions.burn+=/arcane_explosion,if=buff.quickening.remains<action.arcane_blast.cast_time&talent.quickening.enabled
actions.burn+=/presence_of_mind,if=buff.arcane_power.remains>2gcd
actions.burn+=/nether_tempest,if=dot.nether_tempest.remains<=2|!ticking
actions.burn+=/arcane_blast,if=active_enemies<=1&mana.pct%10execute_time>target.time_to_die
actions.burn+=/arcane_explosion,if=active_enemies>1&mana.pct%10*execute_time>target.time_to_die
actions.burn+=/arcane_missiles,if=buff.arcane_missiles.react>1
actions.burn+=/arcane_explosion,if=active_enemies>1&buff.arcane_power.remains>cast_time
actions.burn+=/arcane_blast,if=buff.presence_of_mind.up|buff.arcane_power.remains>cast_time
actions.burn+=/supernova,if=mana.pct<100
actions.burn+=/arcane_missiles,if=mana.pct>10&(talent.overpowered.enabled|buff.arcane_power.down)
actions.burn+=/arcane_explosion,if=active_enemies>1
actions.burn+=/arcane_blast
actions.burn+=/evocation,interrupt_if=mana.pct>99
actions.conserve=arcane_missiles,if=buff.arcane_missiles.react=3
actions.conserve+=/arcane_explosion,if=buff.quickening.remains<action.arcane_blast.cast_time&talent.quickening.enabled
actions.conserve+=/arcane_blast,if=mana.pct>99
actions.conserve+=/nether_tempest,if=(refreshable|!ticking)
actions.conserve+=/arcane_blast,if=buff.rhonins_assaulting_armwraps.up&equipped.132413
actions.conserve+=/arcane_missiles
actions.conserve+=/supernova,if=mana.pct<100
actions.conserve+=/frost_nova,if=equipped.132452
actions.conserve+=/arcane_explosion,if=mana.pct>=82&equipped.132451&active_enemies>1
actions.conserve+=/arcane_blast,if=mana.pct>=82&equipped.132451
actions.conserve+=/arcane_barrage,if=mana.pct<100&cooldown.arcane_power.remains>5
actions.conserve+=/arcane_explosion,if=active_enemies>1
actions.conserve+=/arcane_blast
actions.cooldowns=rune_of_power,if=mana.pct>45&buff.arcane_power.down
actions.cooldowns+=/arcane_power
actions.cooldowns+=/blood_fury
actions.cooldowns+=/berserking
actions.cooldowns+=/arcane_torrent
actions.cooldowns+=/potion,name=deadly_grace,if=buff.arcane_power.up
actions.init_burn=mark_of_aluneth
actions.init_burn+=/frost_nova,if=equipped.132452
actions.init_burn+=/nether_tempest,if=dot.nether_tempest.remains<10&(prev_gcd.mark_of_aluneth|(talent.rune_of_power.enabled&cooldown.rune_of_power.remains<gcd.max))
actions.init_burn+=/rune_of_power
actions.init_burn+=/start_burn_phase,if=((cooldown.evocation.remains-(2*burn_phase_duration))%2<burn_phase_duration)|cooldown.arcane_power.remains=0|target.time_to_die<55
actions.rop_phase=arcane_missiles,if=buff.arcane_missiles.react=3
actions.rop_phase+=/arcane_explosion,if=buff.quickening.remains<action.arcane_blast.cast_time&talent.quickening.enabled
actions.rop_phase+=/nether_tempest,if=dot.nether_tempest.remains<=2|!ticking
actions.rop_phase+=/arcane_missiles,if=buff.arcane_charge.stack=4
actions.rop_phase+=/arcane_explosion,if=active_enemies>1
actions.rop_phase+=/arcane_blast,if=mana.pct>45
actions.rop_phase+=/arcane_barrage
head=mana_scavengers_mask,id=141449,bonus_id=1482/3336
neck=roughhammered_silver_necklace,id=134187,bonus_id=3473/1808/1502/1674,enchant_id=5439
shoulders=mantle_of_tirisgarde,id=139752,bonus_id=3386/3384
back=windwhipped_greatcloak,id=141541,bonus_id=1808/1482/3336,enchant_id=5436
chest=belovirs_final_stand,id=133977,bonus_id=1811/3458
wrists=tunnel_fiend_bracers,id=134435,bonus_id=1727/1507/3337
hands=manawracker_gloves,id=134305,bonus_id=3432/1512/3337,enchant_id=5447
waist=bonespeaker_cinch,id=134215,bonus_id=3474/1507/1674
legs=oncefashionable_narthalas_leggings,id=139595
feet=seawitch_sandals,id=134264,bonus_id=3432/1512/3337
finger1=cursed_wardens_keepsake,id=141546,bonus_id=3466/1477/3336,enchant_id=5429
finger2=ring_of_deep_sea_pearls,id=141545,bonus_id=1472,enchant_id=5429
trinket1=devilsaur_shockbaton,id=140030,bonus_id=3473/1492/1674
trinket2=bleached_skull_talisman,id=134204,bonus_id=3474/42/605/1507/1674
main_hand=aluneth,id=127857,bonus_id=729,gem_id=0/0/0/0,relic_id=3473:1502:1674/3474:1507:1674/3432:1507:3336
Gear Summary
gear_ilvl=849.00
gear_stamina=19707
gear_intellect=14999
gear_crit_rating=7189
gear_haste_rating=2432
gear_mastery_rating=7296
gear_versatility_rating=1291
gear_speed_rating=412
gear_armor=1698
and here's the resultant output:
Based on SimulationCraft profile "Qarrion".
class=mage
spec=arcane
talents=1121112
Include(ovale_common)
Include(ovale_trinkets_mop)
Include(ovale_trinkets_wod)
Include(ovale_mage_spells)
AddCheckBox(opt_interrupt L(interrupt) default specialization=arcane)
AddCheckBox(opt_arcane_mage_burn_phase L(arcane_mage_burn_phase) default specialization=arcane)
AddCheckBox(opt_time_warp SpellName(time_warp) specialization=arcane)
AddFunction ArcaneInterruptActions
{
if CheckBoxOn(opt_interrupt) and not target.IsFriend() and target.IsInterruptible()
{
Spell(counterspell)
if not target.Classification(worldboss)
{
Spell(arcane_torrent_mana)
if target.InRange(quaking_palm) Spell(quaking_palm)
}
}
}
actions.default
AddFunction ArcaneDefaultMainActions
{
#stop_burn_phase,if=prev_gcd.evocation&burn_phase_duration>gcd.max
if PreviousGCDSpell(evocation) and GetStateDuration(burn_phase) > GCD() and GetState(burn_phase) > 0 SetState(burn_phase 0)
#call_action_list,name=build,if=buff.arcane_charge.stack<4
if DebuffStacks(arcane_charge_debuff) < 4 ArcaneBuildMainActions()
unless DebuffStacks(arcane_charge_debuff) < 4 and ArcaneBuildMainPostConditions()
{
#call_action_list,name=init_burn,if=buff.arcane_power.down&buff.arcane_charge.stack=4&(cooldown.mark_of_aluneth.remains=0|cooldown.mark_of_aluneth.remains>20)&(!talent.rune_of_power.enabled|(cooldown.arcane_power.remains<=action.rune_of_power.cast_time|action.rune_of_power.recharge_time<cooldown.arcane_power.remains))|target.time_to_die<45
if { BuffExpires(arcane_power_buff) and DebuffStacks(arcane_charge_debuff) == 4 and { not SpellCooldown(mark_of_aluneth) > 0 or SpellCooldown(mark_of_aluneth) > 20 } and { not Talent(rune_of_power_talent) or SpellCooldown(arcane_power) <= CastTime(rune_of_power) or SpellChargeCooldown(rune_of_power) < SpellCooldown(arcane_power) } or target.TimeToDie() < 45 } and CheckBoxOn(opt_arcane_mage_burn_phase) ArcaneInitBurnMainActions()
unless { BuffExpires(arcane_power_buff) and DebuffStacks(arcane_charge_debuff) == 4 and { not SpellCooldown(mark_of_aluneth) > 0 or SpellCooldown(mark_of_aluneth) > 20 } and { not Talent(rune_of_power_talent) or SpellCooldown(arcane_power) <= CastTime(rune_of_power) or SpellChargeCooldown(rune_of_power) < SpellCooldown(arcane_power) } or target.TimeToDie() < 45 } and CheckBoxOn(opt_arcane_mage_burn_phase) and ArcaneInitBurnMainPostConditions()
{
#call_action_list,name=burn,if=burn_phase
if GetState(burn_phase) > 0 and CheckBoxOn(opt_arcane_mage_burn_phase) ArcaneBurnMainActions()
unless GetState(burn_phase) > 0 and CheckBoxOn(opt_arcane_mage_burn_phase) and ArcaneBurnMainPostConditions()
{
#call_action_list,name=rop_phase,if=buff.rune_of_power.up&!burn_phase
if BuffPresent(rune_of_power_buff) and not GetState(burn_phase) > 0 ArcaneRopPhaseMainActions()
unless BuffPresent(rune_of_power_buff) and not GetState(burn_phase) > 0 and ArcaneRopPhaseMainPostConditions()
{
#call_action_list,name=conserve
ArcaneConserveMainActions()
}
}
}
}
}
AddFunction ArcaneDefaultMainPostConditions
{
DebuffStacks(arcane_charge_debuff) < 4 and ArcaneBuildMainPostConditions() or { BuffExpires(arcane_power_buff) and DebuffStacks(arcane_charge_debuff) == 4 and { not SpellCooldown(mark_of_aluneth) > 0 or SpellCooldown(mark_of_aluneth) > 20 } and { not Talent(rune_of_power_talent) or SpellCooldown(arcane_power) <= CastTime(rune_of_power) or SpellChargeCooldown(rune_of_power) < SpellCooldown(arcane_power) } or target.TimeToDie() < 45 } and CheckBoxOn(opt_arcane_mage_burn_phase) and ArcaneInitBurnMainPostConditions() or GetState(burn_phase) > 0 and CheckBoxOn(opt_arcane_mage_burn_phase) and ArcaneBurnMainPostConditions() or BuffPresent(rune_of_power_buff) and not GetState(burn_phase) > 0 and ArcaneRopPhaseMainPostConditions() or ArcaneConserveMainPostConditions()
}
AddFunction ArcaneDefaultShortCdActions
{
#stop_burn_phase,if=prev_gcd.evocation&burn_phase_duration>gcd.max
if PreviousGCDSpell(evocation) and GetStateDuration(burn_phase) > GCD() and GetState(burn_phase) > 0 SetState(burn_phase 0)
#mark_of_aluneth,if=cooldown.arcane_power.remains>20
if SpellCooldown(arcane_power) > 20 Spell(mark_of_aluneth)
#call_action_list,name=build,if=buff.arcane_charge.stack<4
if DebuffStacks(arcane_charge_debuff) < 4 ArcaneBuildShortCdActions()
unless DebuffStacks(arcane_charge_debuff) < 4 and ArcaneBuildShortCdPostConditions()
{
#call_action_list,name=init_burn,if=buff.arcane_power.down&buff.arcane_charge.stack=4&(cooldown.mark_of_aluneth.remains=0|cooldown.mark_of_aluneth.remains>20)&(!talent.rune_of_power.enabled|(cooldown.arcane_power.remains<=action.rune_of_power.cast_time|action.rune_of_power.recharge_time<cooldown.arcane_power.remains))|target.time_to_die<45
if { BuffExpires(arcane_power_buff) and DebuffStacks(arcane_charge_debuff) == 4 and { not SpellCooldown(mark_of_aluneth) > 0 or SpellCooldown(mark_of_aluneth) > 20 } and { not Talent(rune_of_power_talent) or SpellCooldown(arcane_power) <= CastTime(rune_of_power) or SpellChargeCooldown(rune_of_power) < SpellCooldown(arcane_power) } or target.TimeToDie() < 45 } and CheckBoxOn(opt_arcane_mage_burn_phase) ArcaneInitBurnShortCdActions()
unless { BuffExpires(arcane_power_buff) and DebuffStacks(arcane_charge_debuff) == 4 and { not SpellCooldown(mark_of_aluneth) > 0 or SpellCooldown(mark_of_aluneth) > 20 } and { not Talent(rune_of_power_talent) or SpellCooldown(arcane_power) <= CastTime(rune_of_power) or SpellChargeCooldown(rune_of_power) < SpellCooldown(arcane_power) } or target.TimeToDie() < 45 } and CheckBoxOn(opt_arcane_mage_burn_phase) and ArcaneInitBurnShortCdPostConditions()
{
#call_action_list,name=burn,if=burn_phase
if GetState(burn_phase) > 0 and CheckBoxOn(opt_arcane_mage_burn_phase) ArcaneBurnShortCdActions()
unless GetState(burn_phase) > 0 and CheckBoxOn(opt_arcane_mage_burn_phase) and ArcaneBurnShortCdPostConditions()
{
#call_action_list,name=rop_phase,if=buff.rune_of_power.up&!burn_phase
if BuffPresent(rune_of_power_buff) and not GetState(burn_phase) > 0 ArcaneRopPhaseShortCdActions()
unless BuffPresent(rune_of_power_buff) and not GetState(burn_phase) > 0 and ArcaneRopPhaseShortCdPostConditions()
{
#call_action_list,name=conserve
ArcaneConserveShortCdActions()
}
}
}
}
}
AddFunction ArcaneDefaultShortCdPostConditions
{
DebuffStacks(arcane_charge_debuff) < 4 and ArcaneBuildShortCdPostConditions() or { BuffExpires(arcane_power_buff) and DebuffStacks(arcane_charge_debuff) == 4 and { not SpellCooldown(mark_of_aluneth) > 0 or SpellCooldown(mark_of_aluneth) > 20 } and { not Talent(rune_of_power_talent) or SpellCooldown(arcane_power) <= CastTime(rune_of_power) or SpellChargeCooldown(rune_of_power) < SpellCooldown(arcane_power) } or target.TimeToDie() < 45 } and CheckBoxOn(opt_arcane_mage_burn_phase) and ArcaneInitBurnShortCdPostConditions() or GetState(burn_phase) > 0 and CheckBoxOn(opt_arcane_mage_burn_phase) and ArcaneBurnShortCdPostConditions() or BuffPresent(rune_of_power_buff) and not GetState(burn_phase) > 0 and ArcaneRopPhaseShortCdPostConditions() or ArcaneConserveShortCdPostConditions()
}
AddFunction ArcaneDefaultCdActions
{
#counterspell,if=target.debuff.casting.react
if target.IsInterruptible() ArcaneInterruptActions()
#time_warp,if=(time=0&buff.bloodlust.down)|(buff.bloodlust.down&equipped.132410)
if { TimeInCombat() == 0 and BuffExpires(burst_haste_buff any=1) or BuffExpires(burst_haste_buff any=1) and HasEquippedItem(132410) } and CheckBoxOn(opt_time_warp) and DebuffExpires(burst_haste_debuff any=1) Spell(time_warp)
#mirror_image,if=buff.arcane_power.down
if BuffExpires(arcane_power_buff) Spell(mirror_image)
#stop_burn_phase,if=prev_gcd.evocation&burn_phase_duration>gcd.max
if PreviousGCDSpell(evocation) and GetStateDuration(burn_phase) > GCD() and GetState(burn_phase) > 0 SetState(burn_phase 0)
unless SpellCooldown(arcane_power) > 20 and Spell(mark_of_aluneth)
{
#call_action_list,name=build,if=buff.arcane_charge.stack<4
if DebuffStacks(arcane_charge_debuff) < 4 ArcaneBuildCdActions()
unless DebuffStacks(arcane_charge_debuff) < 4 and ArcaneBuildCdPostConditions()
{
#call_action_list,name=init_burn,if=buff.arcane_power.down&buff.arcane_charge.stack=4&(cooldown.mark_of_aluneth.remains=0|cooldown.mark_of_aluneth.remains>20)&(!talent.rune_of_power.enabled|(cooldown.arcane_power.remains<=action.rune_of_power.cast_time|action.rune_of_power.recharge_time<cooldown.arcane_power.remains))|target.time_to_die<45
if { BuffExpires(arcane_power_buff) and DebuffStacks(arcane_charge_debuff) == 4 and { not SpellCooldown(mark_of_aluneth) > 0 or SpellCooldown(mark_of_aluneth) > 20 } and { not Talent(rune_of_power_talent) or SpellCooldown(arcane_power) <= CastTime(rune_of_power) or SpellChargeCooldown(rune_of_power) < SpellCooldown(arcane_power) } or target.TimeToDie() < 45 } and CheckBoxOn(opt_arcane_mage_burn_phase) ArcaneInitBurnCdActions()
unless { BuffExpires(arcane_power_buff) and DebuffStacks(arcane_charge_debuff) == 4 and { not SpellCooldown(mark_of_aluneth) > 0 or SpellCooldown(mark_of_aluneth) > 20 } and { not Talent(rune_of_power_talent) or SpellCooldown(arcane_power) <= CastTime(rune_of_power) or SpellChargeCooldown(rune_of_power) < SpellCooldown(arcane_power) } or target.TimeToDie() < 45 } and CheckBoxOn(opt_arcane_mage_burn_phase) and ArcaneInitBurnCdPostConditions()
{
#call_action_list,name=burn,if=burn_phase
if GetState(burn_phase) > 0 and CheckBoxOn(opt_arcane_mage_burn_phase) ArcaneBurnCdActions()
unless GetState(burn_phase) > 0 and CheckBoxOn(opt_arcane_mage_burn_phase) and ArcaneBurnCdPostConditions()
{
#call_action_list,name=rop_phase,if=buff.rune_of_power.up&!burn_phase
if BuffPresent(rune_of_power_buff) and not GetState(burn_phase) > 0 ArcaneRopPhaseCdActions()
unless BuffPresent(rune_of_power_buff) and not GetState(burn_phase) > 0 and ArcaneRopPhaseCdPostConditions()
{
#call_action_list,name=conserve
ArcaneConserveCdActions()
}
}
}
}
}
}
AddFunction ArcaneDefaultCdPostConditions
{
SpellCooldown(arcane_power) > 20 and Spell(mark_of_aluneth) or DebuffStacks(arcane_charge_debuff) < 4 and ArcaneBuildCdPostConditions() or { BuffExpires(arcane_power_buff) and DebuffStacks(arcane_charge_debuff) == 4 and { not SpellCooldown(mark_of_aluneth) > 0 or SpellCooldown(mark_of_aluneth) > 20 } and { not Talent(rune_of_power_talent) or SpellCooldown(arcane_power) <= CastTime(rune_of_power) or SpellChargeCooldown(rune_of_power) < SpellCooldown(arcane_power) } or target.TimeToDie() < 45 } and CheckBoxOn(opt_arcane_mage_burn_phase) and ArcaneInitBurnCdPostConditions() or GetState(burn_phase) > 0 and CheckBoxOn(opt_arcane_mage_burn_phase) and ArcaneBurnCdPostConditions() or BuffPresent(rune_of_power_buff) and not GetState(burn_phase) > 0 and ArcaneRopPhaseCdPostConditions() or ArcaneConserveCdPostConditions()
}
actions.build
AddFunction ArcaneBuildMainActions
{
#charged_up,if=buff.arcane_charge.stack<=1
if DebuffStacks(arcane_charge_debuff) <= 1 Spell(charged_up)
#arcane_missiles,if=buff.arcane_missiles.react=3
if BuffStacks(arcane_missiles_buff) == 3 Spell(arcane_missiles)
#arcane_explosion,if=active_enemies>1
if Enemies() > 1 Spell(arcane_explosion)
#arcane_blast
Spell(arcane_blast)
}
AddFunction ArcaneBuildMainPostConditions
{
}
AddFunction ArcaneBuildShortCdActions
{
unless DebuffStacks(arcane_charge_debuff) <= 1 and Spell(charged_up) or BuffStacks(arcane_missiles_buff) == 3 and Spell(arcane_missiles)
{
#arcane_orb
Spell(arcane_orb)
}
}
AddFunction ArcaneBuildShortCdPostConditions
{
DebuffStacks(arcane_charge_debuff) <= 1 and Spell(charged_up) or BuffStacks(arcane_missiles_buff) == 3 and Spell(arcane_missiles) or Enemies() > 1 and Spell(arcane_explosion) or Spell(arcane_blast)
}
AddFunction ArcaneBuildCdActions
{
}
AddFunction ArcaneBuildCdPostConditions
{
DebuffStacks(arcane_charge_debuff) <= 1 and Spell(charged_up) or BuffStacks(arcane_missiles_buff) == 3 and Spell(arcane_missiles) or Spell(arcane_orb) or Enemies() > 1 and Spell(arcane_explosion) or Spell(arcane_blast)
}
actions.burn
AddFunction ArcaneBurnMainActions
{
#call_action_list,name=cooldowns
ArcaneCooldownsMainActions()
unless ArcaneCooldownsMainPostConditions()
{
#arcane_missiles,if=buff.arcane_missiles.react=3
if BuffStacks(arcane_missiles_buff) == 3 Spell(arcane_missiles)
#arcane_explosion,if=buff.quickening.remains<action.arcane_blast.cast_time&talent.quickening.enabled
if BuffRemaining(quickening_buff) < CastTime(arcane_blast) and Talent(quickening_talent) Spell(arcane_explosion)
#nether_tempest,if=dot.nether_tempest.remains<=2|!ticking
if target.DebuffRemaining(nether_tempest_debuff) <= 2 or not target.DebuffPresent(nether_tempest_debuff) Spell(nether_tempest)
#arcane_blast,if=active_enemies<=1&mana.pct%10*execute_time>target.time_to_die
if Enemies() <= 1 and ManaPercent() / 10 * ExecuteTime(arcane_blast) > target.TimeToDie() Spell(arcane_blast)
#arcane_explosion,if=active_enemies>1&mana.pct%10*execute_time>target.time_to_die
if Enemies() > 1 and ManaPercent() / 10 * ExecuteTime(arcane_explosion) > target.TimeToDie() Spell(arcane_explosion)
#arcane_missiles,if=buff.arcane_missiles.react>1
if BuffStacks(arcane_missiles_buff) > 1 Spell(arcane_missiles)
#arcane_explosion,if=active_enemies>1&buff.arcane_power.remains>cast_time
if Enemies() > 1 and BuffRemaining(arcane_power_buff) > CastTime(arcane_explosion) Spell(arcane_explosion)
#arcane_blast,if=buff.presence_of_mind.up|buff.arcane_power.remains>cast_time
if BuffPresent(presence_of_mind_buff) or BuffRemaining(arcane_power_buff) > CastTime(arcane_blast) Spell(arcane_blast)
#supernova,if=mana.pct<100
if ManaPercent() < 100 Spell(supernova)
#arcane_missiles,if=mana.pct>10&(talent.overpowered.enabled|buff.arcane_power.down)
if ManaPercent() > 10 and { Talent(overpowered_talent) or BuffExpires(arcane_power_buff) } Spell(arcane_missiles)
#arcane_explosion,if=active_enemies>1
if Enemies() > 1 Spell(arcane_explosion)
#arcane_blast
Spell(arcane_blast)
}
}
AddFunction ArcaneBurnMainPostConditions
{
ArcaneCooldownsMainPostConditions()
}
AddFunction ArcaneBurnShortCdActions
{
#call_action_list,name=cooldowns
ArcaneCooldownsShortCdActions()
unless ArcaneCooldownsShortCdPostConditions() or BuffStacks(arcane_missiles_buff) == 3 and Spell(arcane_missiles) or BuffRemaining(quickening_buff) < CastTime(arcane_blast) and Talent(quickening_talent) and Spell(arcane_explosion)
{
#presence_of_mind,if=buff.arcane_power.remains>2*gcd
if BuffRemaining(arcane_power_buff) > 2 * GCD() Spell(presence_of_mind)
}
}
AddFunction ArcaneBurnShortCdPostConditions
{
ArcaneCooldownsShortCdPostConditions() or BuffStacks(arcane_missiles_buff) == 3 and Spell(arcane_missiles) or BuffRemaining(quickening_buff) < CastTime(arcane_blast) and Talent(quickening_talent) and Spell(arcane_explosion) or { target.DebuffRemaining(nether_tempest_debuff) <= 2 or not target.DebuffPresent(nether_tempest_debuff) } and Spell(nether_tempest) or Enemies() <= 1 and ManaPercent() / 10 * ExecuteTime(arcane_blast) > target.TimeToDie() and Spell(arcane_blast) or Enemies() > 1 and ManaPercent() / 10 * ExecuteTime(arcane_explosion) > target.TimeToDie() and Spell(arcane_explosion) or BuffStacks(arcane_missiles_buff) > 1 and Spell(arcane_missiles) or Enemies() > 1 and BuffRemaining(arcane_power_buff) > CastTime(arcane_explosion) and Spell(arcane_explosion) or { BuffPresent(presence_of_mind_buff) or BuffRemaining(arcane_power_buff) > CastTime(arcane_blast) } and Spell(arcane_blast) or ManaPercent() < 100 and Spell(supernova) or ManaPercent() > 10 and { Talent(overpowered_talent) or BuffExpires(arcane_power_buff) } and Spell(arcane_missiles) or Enemies() > 1 and Spell(arcane_explosion) or Spell(arcane_blast)
}
AddFunction ArcaneBurnCdActions
{
#call_action_list,name=cooldowns
ArcaneCooldownsCdActions()
unless ArcaneCooldownsCdPostConditions() or BuffStacks(arcane_missiles_buff) == 3 and Spell(arcane_missiles) or BuffRemaining(quickening_buff) < CastTime(arcane_blast) and Talent(quickening_talent) and Spell(arcane_explosion) or { target.DebuffRemaining(nether_tempest_debuff) <= 2 or not target.DebuffPresent(nether_tempest_debuff) } and Spell(nether_tempest) or Enemies() <= 1 and ManaPercent() / 10 * ExecuteTime(arcane_blast) > target.TimeToDie() and Spell(arcane_blast) or Enemies() > 1 and ManaPercent() / 10 * ExecuteTime(arcane_explosion) > target.TimeToDie() and Spell(arcane_explosion) or BuffStacks(arcane_missiles_buff) > 1 and Spell(arcane_missiles) or Enemies() > 1 and BuffRemaining(arcane_power_buff) > CastTime(arcane_explosion) and Spell(arcane_explosion) or { BuffPresent(presence_of_mind_buff) or BuffRemaining(arcane_power_buff) > CastTime(arcane_blast) } and Spell(arcane_blast) or ManaPercent() < 100 and Spell(supernova) or ManaPercent() > 10 and { Talent(overpowered_talent) or BuffExpires(arcane_power_buff) } and Spell(arcane_missiles) or Enemies() > 1 and Spell(arcane_explosion) or Spell(arcane_blast)
{
#evocation,interrupt_if=mana.pct>99
Spell(evocation)
}
}
AddFunction ArcaneBurnCdPostConditions
{
ArcaneCooldownsCdPostConditions() or BuffStacks(arcane_missiles_buff) == 3 and Spell(arcane_missiles) or BuffRemaining(quickening_buff) < CastTime(arcane_blast) and Talent(quickening_talent) and Spell(arcane_explosion) or { target.DebuffRemaining(nether_tempest_debuff) <= 2 or not target.DebuffPresent(nether_tempest_debuff) } and Spell(nether_tempest) or Enemies() <= 1 and ManaPercent() / 10 * ExecuteTime(arcane_blast) > target.TimeToDie() and Spell(arcane_blast) or Enemies() > 1 and ManaPercent() / 10 * ExecuteTime(arcane_explosion) > target.TimeToDie() and Spell(arcane_explosion) or BuffStacks(arcane_missiles_buff) > 1 and Spell(arcane_missiles) or Enemies() > 1 and BuffRemaining(arcane_power_buff) > CastTime(arcane_explosion) and Spell(arcane_explosion) or { BuffPresent(presence_of_mind_buff) or BuffRemaining(arcane_power_buff) > CastTime(arcane_blast) } and Spell(arcane_blast) or ManaPercent() < 100 and Spell(supernova) or ManaPercent() > 10 and { Talent(overpowered_talent) or BuffExpires(arcane_power_buff) } and Spell(arcane_missiles) or Enemies() > 1 and Spell(arcane_explosion) or Spell(arcane_blast)
}
actions.conserve
AddFunction ArcaneConserveMainActions
{
#arcane_missiles,if=buff.arcane_missiles.react=3
if BuffStacks(arcane_missiles_buff) == 3 Spell(arcane_missiles)
#arcane_explosion,if=buff.quickening.remains<action.arcane_blast.cast_time&talent.quickening.enabled
if BuffRemaining(quickening_buff) < CastTime(arcane_blast) and Talent(quickening_talent) Spell(arcane_explosion)
#arcane_blast,if=mana.pct>99
if ManaPercent() > 99 Spell(arcane_blast)
#nether_tempest,if=(refreshable|!ticking)
if target.Refreshable(nether_tempest_debuff) or not target.DebuffPresent(nether_tempest_debuff) Spell(nether_tempest)
#arcane_blast,if=buff.rhonins_assaulting_armwraps.up&equipped.132413
if BuffPresent(rhonins_assaulting_armwraps_buff) and HasEquippedItem(132413) Spell(arcane_blast)
#arcane_missiles
Spell(arcane_missiles)
#supernova,if=mana.pct<100
if ManaPercent() < 100 Spell(supernova)
#frost_nova,if=equipped.132452
if HasEquippedItem(132452) Spell(frost_nova)
#arcane_explosion,if=mana.pct>=82&equipped.132451&active_enemies>1
if ManaPercent() >= 82 and HasEquippedItem(132451) and Enemies() > 1 Spell(arcane_explosion)
#arcane_blast,if=mana.pct>=82&equipped.132451
if ManaPercent() >= 82 and HasEquippedItem(132451) Spell(arcane_blast)
#arcane_barrage,if=mana.pct<100&cooldown.arcane_power.remains>5
if ManaPercent() < 100 and SpellCooldown(arcane_power) > 5 Spell(arcane_barrage)
#arcane_explosion,if=active_enemies>1
if Enemies() > 1 Spell(arcane_explosion)
#arcane_blast
Spell(arcane_blast)
}
AddFunction ArcaneConserveMainPostConditions
{
}
AddFunction ArcaneConserveShortCdActions
{
}
AddFunction ArcaneConserveShortCdPostConditions
{
BuffStacks(arcane_missiles_buff) == 3 and Spell(arcane_missiles) or BuffRemaining(quickening_buff) < CastTime(arcane_blast) and Talent(quickening_talent) and Spell(arcane_explosion) or ManaPercent() > 99 and Spell(arcane_blast) or { target.Refreshable(nether_tempest_debuff) or not target.DebuffPresent(nether_tempest_debuff) } and Spell(nether_tempest) or BuffPresent(rhonins_assaulting_armwraps_buff) and HasEquippedItem(132413) and Spell(arcane_blast) or Spell(arcane_missiles) or ManaPercent() < 100 and Spell(supernova) or HasEquippedItem(132452) and Spell(frost_nova) or ManaPercent() >= 82 and HasEquippedItem(132451) and Enemies() > 1 and Spell(arcane_explosion) or ManaPercent() >= 82 and HasEquippedItem(132451) and Spell(arcane_blast) or ManaPercent() < 100 and SpellCooldown(arcane_power) > 5 and Spell(arcane_barrage) or Enemies() > 1 and Spell(arcane_explosion) or Spell(arcane_blast)
}
AddFunction ArcaneConserveCdActions
{
}
AddFunction ArcaneConserveCdPostConditions
{
BuffStacks(arcane_missiles_buff) == 3 and Spell(arcane_missiles) or BuffRemaining(quickening_buff) < CastTime(arcane_blast) and Talent(quickening_talent) and Spell(arcane_explosion) or ManaPercent() > 99 and Spell(arcane_blast) or { target.Refreshable(nether_tempest_debuff) or not target.DebuffPresent(nether_tempest_debuff) } and Spell(nether_tempest) or BuffPresent(rhonins_assaulting_armwraps_buff) and HasEquippedItem(132413) and Spell(arcane_blast) or Spell(arcane_missiles) or ManaPercent() < 100 and Spell(supernova) or HasEquippedItem(132452) and Spell(frost_nova) or ManaPercent() >= 82 and HasEquippedItem(132451) and Enemies() > 1 and Spell(arcane_explosion) or ManaPercent() >= 82 and HasEquippedItem(132451) and Spell(arcane_blast) or ManaPercent() < 100 and SpellCooldown(arcane_power) > 5 and Spell(arcane_barrage) or Enemies() > 1 and Spell(arcane_explosion) or Spell(arcane_blast)
}
actions.cooldowns
AddFunction ArcaneCooldownsMainActions
{
}
AddFunction ArcaneCooldownsMainPostConditions
{
}
AddFunction ArcaneCooldownsShortCdActions
{
#rune_of_power,if=mana.pct>45&buff.arcane_power.down
if ManaPercent() > 45 and BuffExpires(arcane_power_buff) Spell(rune_of_power)
}
AddFunction ArcaneCooldownsShortCdPostConditions
{
}
AddFunction ArcaneCooldownsCdActions
{
unless ManaPercent() > 45 and BuffExpires(arcane_power_buff) and Spell(rune_of_power)
{
#arcane_power
Spell(arcane_power)
#blood_fury
Spell(blood_fury_sp)
#berserking
Spell(berserking)
#arcane_torrent
Spell(arcane_torrent_mana)
}
}
AddFunction ArcaneCooldownsCdPostConditions
{
ManaPercent() > 45 and BuffExpires(arcane_power_buff) and Spell(rune_of_power)
}
actions.init_burn
AddFunction ArcaneInitBurnMainActions
{
#frost_nova,if=equipped.132452
if HasEquippedItem(132452) Spell(frost_nova)
#nether_tempest,if=dot.nether_tempest.remains<10&(prev_gcd.mark_of_aluneth|(talent.rune_of_power.enabled&cooldown.rune_of_power.remains<gcd.max))
if target.DebuffRemaining(nether_tempest_debuff) < 10 and { PreviousGCDSpell(mark_of_aluneth) or Talent(rune_of_power_talent) and SpellCooldown(rune_of_power) < GCD() } Spell(nether_tempest)
#start_burn_phase,if=((cooldown.evocation.remains-(2*burn_phase_duration))%2<burn_phase_duration)|cooldown.arcane_power.remains=0|target.time_to_die<55
if { { SpellCooldown(evocation) - 2 * GetStateDuration(burn_phase) } / 2 < GetStateDuration(burn_phase) or not SpellCooldown(arcane_power) > 0 or target.TimeToDie() < 55 } and not GetState(burn_phase) > 0 SetState(burn_phase 1)
}
AddFunction ArcaneInitBurnMainPostConditions
{
}
AddFunction ArcaneInitBurnShortCdActions
{
#mark_of_aluneth
Spell(mark_of_aluneth)
unless HasEquippedItem(132452) and Spell(frost_nova) or target.DebuffRemaining(nether_tempest_debuff) < 10 and { PreviousGCDSpell(mark_of_aluneth) or Talent(rune_of_power_talent) and SpellCooldown(rune_of_power) < GCD() } and Spell(nether_tempest)
{
#rune_of_power
Spell(rune_of_power)
#start_burn_phase,if=((cooldown.evocation.remains-(2*burn_phase_duration))%2<burn_phase_duration)|cooldown.arcane_power.remains=0|target.time_to_die<55
if { { SpellCooldown(evocation) - 2 * GetStateDuration(burn_phase) } / 2 < GetStateDuration(burn_phase) or not SpellCooldown(arcane_power) > 0 or target.TimeToDie() < 55 } and not GetState(burn_phase) > 0 SetState(burn_phase 1)
}
}
AddFunction ArcaneInitBurnShortCdPostConditions
{
HasEquippedItem(132452) and Spell(frost_nova) or target.DebuffRemaining(nether_tempest_debuff) < 10 and { PreviousGCDSpell(mark_of_aluneth) or Talent(rune_of_power_talent) and SpellCooldown(rune_of_power) < GCD() } and Spell(nether_tempest)
}
AddFunction ArcaneInitBurnCdActions
{
unless Spell(mark_of_aluneth) or HasEquippedItem(132452) and Spell(frost_nova) or target.DebuffRemaining(nether_tempest_debuff) < 10 and { PreviousGCDSpell(mark_of_aluneth) or Talent(rune_of_power_talent) and SpellCooldown(rune_of_power) < GCD() } and Spell(nether_tempest) or Spell(rune_of_power)
{
#start_burn_phase,if=((cooldown.evocation.remains-(2*burn_phase_duration))%2<burn_phase_duration)|cooldown.arcane_power.remains=0|target.time_to_die<55
if { { SpellCooldown(evocation) - 2 * GetStateDuration(burn_phase) } / 2 < GetStateDuration(burn_phase) or not SpellCooldown(arcane_power) > 0 or target.TimeToDie() < 55 } and not GetState(burn_phase) > 0 SetState(burn_phase 1)
}
}
AddFunction ArcaneInitBurnCdPostConditions
{
Spell(mark_of_aluneth) or HasEquippedItem(132452) and Spell(frost_nova) or target.DebuffRemaining(nether_tempest_debuff) < 10 and { PreviousGCDSpell(mark_of_aluneth) or Talent(rune_of_power_talent) and SpellCooldown(rune_of_power) < GCD() } and Spell(nether_tempest) or Spell(rune_of_power)
}
actions.precombat
AddFunction ArcanePrecombatMainActions
{
#flask,type=flask_of_the_whispered_pact
#food,type=the_hungry_magister
#augmentation,type=defiled
Spell(augmentation)
#summon_arcane_familiar
Spell(summon_arcane_familiar)
#potion,name=deadly_grace
#arcane_blast
Spell(arcane_blast)
}
AddFunction ArcanePrecombatMainPostConditions
{
}
AddFunction ArcanePrecombatShortCdActions
{
}
AddFunction ArcanePrecombatShortCdPostConditions
{
Spell(augmentation) or Spell(summon_arcane_familiar) or Spell(arcane_blast)
}
AddFunction ArcanePrecombatCdActions
{
unless Spell(augmentation) or Spell(summon_arcane_familiar)
{
#snapshot_stats
#mirror_image
Spell(mirror_image)
}
}
AddFunction ArcanePrecombatCdPostConditions
{
Spell(augmentation) or Spell(summon_arcane_familiar) or Spell(arcane_blast)
}
actions.rop_phase
AddFunction ArcaneRopPhaseMainActions
{
#arcane_missiles,if=buff.arcane_missiles.react=3
if BuffStacks(arcane_missiles_buff) == 3 Spell(arcane_missiles)
#arcane_explosion,if=buff.quickening.remains<action.arcane_blast.cast_time&talent.quickening.enabled
if BuffRemaining(quickening_buff) < CastTime(arcane_blast) and Talent(quickening_talent) Spell(arcane_explosion)
#nether_tempest,if=dot.nether_tempest.remains<=2|!ticking
if target.DebuffRemaining(nether_tempest_debuff) <= 2 or not target.DebuffPresent(nether_tempest_debuff) Spell(nether_tempest)
#arcane_missiles,if=buff.arcane_charge.stack=4
if DebuffStacks(arcane_charge_debuff) == 4 Spell(arcane_missiles)
#arcane_explosion,if=active_enemies>1
if Enemies() > 1 Spell(arcane_explosion)
#arcane_blast,if=mana.pct>45
if ManaPercent() > 45 Spell(arcane_blast)
#arcane_barrage
Spell(arcane_barrage)
}
AddFunction ArcaneRopPhaseMainPostConditions
{
}
AddFunction ArcaneRopPhaseShortCdActions
{
}
AddFunction ArcaneRopPhaseShortCdPostConditions
{
BuffStacks(arcane_missiles_buff) == 3 and Spell(arcane_missiles) or BuffRemaining(quickening_buff) < CastTime(arcane_blast) and Talent(quickening_talent) and Spell(arcane_explosion) or { target.DebuffRemaining(nether_tempest_debuff) <= 2 or not target.DebuffPresent(nether_tempest_debuff) } and Spell(nether_tempest) or DebuffStacks(arcane_charge_debuff) == 4 and Spell(arcane_missiles) or Enemies() > 1 and Spell(arcane_explosion) or ManaPercent() > 45 and Spell(arcane_blast) or Spell(arcane_barrage)
}
AddFunction ArcaneRopPhaseCdActions
{
}
AddFunction ArcaneRopPhaseCdPostConditions
{
BuffStacks(arcane_missiles_buff) == 3 and Spell(arcane_missiles) or BuffRemaining(quickening_buff) < CastTime(arcane_blast) and Talent(quickening_talent) and Spell(arcane_explosion) or { target.DebuffRemaining(nether_tempest_debuff) <= 2 or not target.DebuffPresent(nether_tempest_debuff) } and Spell(nether_tempest) or DebuffStacks(arcane_charge_debuff) == 4 and Spell(arcane_missiles) or Enemies() > 1 and Spell(arcane_explosion) or ManaPercent() > 45 and Spell(arcane_blast) or Spell(arcane_barrage)
}
Arcane icons.
AddCheckBox(opt_mage_arcane_aoe L(AOE) default specialization=arcane)
AddIcon checkbox=!opt_mage_arcane_aoe enemies=1 help=shortcd specialization=arcane
{
if not InCombat() ArcanePrecombatShortCdActions()
unless not InCombat() and ArcanePrecombatShortCdPostConditions()
{
ArcaneDefaultShortCdActions()
}
}
AddIcon checkbox=opt_mage_arcane_aoe help=shortcd specialization=arcane
{
if not InCombat() ArcanePrecombatShortCdActions()
unless not InCombat() and ArcanePrecombatShortCdPostConditions()
{
ArcaneDefaultShortCdActions()
}
}
AddIcon enemies=1 help=main specialization=arcane
{
if not InCombat() ArcanePrecombatMainActions()
unless not InCombat() and ArcanePrecombatMainPostConditions()
{
ArcaneDefaultMainActions()
}
}
AddIcon checkbox=opt_mage_arcane_aoe help=aoe specialization=arcane
{
if not InCombat() ArcanePrecombatMainActions()
unless not InCombat() and ArcanePrecombatMainPostConditions()
{
ArcaneDefaultMainActions()
}
}
AddIcon checkbox=!opt_mage_arcane_aoe enemies=1 help=cd specialization=arcane
{
if not InCombat() ArcanePrecombatCdActions()
unless not InCombat() and ArcanePrecombatCdPostConditions()
{
ArcaneDefaultCdActions()
}
}
AddIcon checkbox=opt_mage_arcane_aoe help=cd specialization=arcane
{
if not InCombat() ArcanePrecombatCdActions()
unless not InCombat() and ArcanePrecombatCdPostConditions()
{
ArcaneDefaultCdActions()
}
}
Required symbols
132410
132413
132451
132452
arcane_barrage
arcane_blast
arcane_charge_debuff
arcane_explosion
arcane_missiles
arcane_missiles_buff
arcane_orb
arcane_power
arcane_power_buff
arcane_torrent_mana
augmentation
berserking
blood_fury_sp
charged_up
counterspell
evocation
frost_nova
mark_of_aluneth
mirror_image
nether_tempest
nether_tempest_debuff
overpowered_talent
presence_of_mind
presence_of_mind_buff
quaking_palm
quickening_buff
quickening_talent
rhonins_assaulting_armwraps_buff
rune_of_power
rune_of_power_buff
rune_of_power_talent
summon_arcane_familiar
supernova
time_warp
From what my experience has been, something is wrong with the GetState and SetState functions.
I have written my own script for 7.1.5, which has removed these functions. Not sure how it measures up, but it has worked for me so far. I still had to make the same correction to the ovale_mage_spells file as was referenced in another post, replacing arcane blast definitions with:
Define(arcane_blast 30451)
SpellInfo(arcane_blast arcanecharges=-1)
SpellAddBuff(arcane_blast presence_of_mind_buff=0 if_spell=presence_of_mind)
SpellAddBuff(arcane_blast profound_magic_buff=0 itemset=T16_caster itemcount=2 specialization=arcane)
SpellAddBuff(arcane_blast ice_floes_buff=0 if_spell=ice_floes)
My script:
# Based on information from Icy Veins and rotation from Ask Mr Robot
Include(ovale_common)
Include(ovale_trinkets_mop)
Include(ovale_trinkets_wod)
Include(ovale_mage_spells)
AddCheckBox(opt_interrupt L(interrupt) default specialization=arcane)
AddCheckBox(opt_arcane_mage_burn_phase L(arcane_mage_burn_phase) default specialization=arcane)
AddCheckBox(opt_time_warp SpellName(time_warp) specialization=arcane)
AddFunction ArcaneInterruptActions
{
if CheckBoxOn(opt_interrupt) and not target.IsFriend() and target.IsInterruptible()
{
Spell(counterspell)
if not target.Classification(worldboss)
{
Spell(arcane_torrent_mana)
if target.InRange(quaking_palm) Spell(quaking_palm)
}
}
}
AddFunction ArcaneDefaultMainActions
{
if PreviousGCDSpell(arcane_barrage) and ManaPercent() < 15 Spell(evocation)
# You can adjust the remaining cooldown on evocation based on your mastery level
# A higher mastery will allow for a longer burn phase (50 seconds is my current burn phase time)
# Play around with the time so that Ovale suggests evocation as soon as it comes off cooldown
# while still having mana to stay in burn phase until then.
if ArcaneCharges() < 4 and (ManaPercent() > 70 or { CheckBoxOn(opt_arcane_mage_burn_phase) and (SpellCooldown(evocation) < 50 or target.TimeToDie() < 55) } ) ArcaneDefaultBuildActions()
if CheckBoxOn(opt_arcane_mage_burn_phase) and ((SpellCooldown(evocation) < 50 or target.TimeToDie() < 55) and not PreviousGCDSpell(evocation) and ArcaneCharges() ==4) ArcaneDefaultBurnActions()
Spell(supernova)
if target.DebuffRemaining(nether_tempest_debuff) < 4 or not target.DebuffPresent(nether_tempest_debuff) Spell(nether_tempest)
Spell(arcane_missiles)
if target.DebuffRemaining(nether_tempest_debuff) < 10 and (not HasEquippedItem(132451) or ManaPercent() < 84 - 0.8 * ExecuteTime(arcane_blast)) Spell(nether_tempest)
if not HasEquippedItem(132451) or ManaPercent() < 88 - 0.8 * ExecuteTime(arcane_blast) Spell(arcane_barrage)
Spell(arcane_blast)
}
AddFunction ArcaneDefaultBuildActions
{
if ArcaneCharges() <= 1 Spell(charged_up)
Spell(arcane_orb)
if Enemies(less 10) >= 3 Spell(arcane_explosion)
Spell(arcane_blast)
}
AddFunction ArcaneDefaultBurnActions
{
Spell(supernova)
if target.DebuffRemaining(nether_tempest_debuff) < 4 or not target.DebuffPresent(nether_tempest_debuff) Spell(nether_tempest)
Spell(arcane_missiles)
if Enemies(less 10) >= 3 Spell(arcane_explosion)
if ManaPercent() >= 15 Spell(arcane_blast)
if ManaPercent() < 15 Spell(evocation)
Spell(arcane_barrage)
}
AddFunction ArcaneDefaultShortCdActions
{
Spell(mirror_image)
if CheckBoxOn(opt_arcane_mage_burn_phase) and ((SpellCooldown(evocation) < 50 or target.TimeToDie() < 55) and not PreviousGCDSpell(evocation) and ArcaneCharges() ==4)
{
Spell(arcane_power)
if BuffPresent(rune_of_power_buff) or not Talent(rune_of_power_talent) Spell(mark_of_aluneth)
Spell(presence_of_mind)
}
}
AddFunction ArcaneDefaultCdActions
{
if { target.HealthPercent() < 25 or TimeInCombat() == 0 } and CheckBoxOn(opt_time_warp) and DebuffExpires(burst_haste_debuff any=1) Spell(time_warp)
if CheckBoxOn(opt_arcane_mage_burn_phase) and ((SpellCooldown(evocation) < 50 or target.TimeToDie() < 55) and not PreviousGCDSpell(evocation) and ArcaneCharges() ==4)
{
if BuffExpires(burst_haste_buff any=1) and (SpellCooldown(arcane_power) > 0 and SpellCooldown(evocation) < 45) Spell(shard_of_the_exodar_warp)
if not BuffPresent(rune_of_power_buff) and Talent(rune_of_power_talent) Spell(rune_of_power)
}
}
### Arcane icons.
AddCheckBox(opt_mage_arcane_aoe L(AOE) default specialization=arcane)
AddIcon checkbox=!opt_mage_arcane_aoe enemies=1 help=shortcd specialization=arcane
{
ArcaneDefaultShortCdActions()
}
AddIcon checkbox=opt_mage_arcane_aoe help=shortcd specialization=arcane
{
ArcaneDefaultShortCdActions()
}
AddIcon enemies=1 help=main specialization=arcane
{
ArcaneDefaultMainActions()
}
AddIcon checkbox=opt_mage_arcane_aoe help=aoe specialization=arcane
{
ArcaneDefaultMainActions()
}
AddIcon checkbox=!opt_mage_arcane_aoe enemies=1 help=cd specialization=arcane
{
ArcaneDefaultCdActions()
}
AddIcon checkbox=opt_mage_arcane_aoe help=cd specialization=arcane
{
ArcaneDefaultCdActions()
}