Ovale Spell Priority

Ovale Spell Priority

6M Downloads

Mage Arcane rotation

Profiler781 opened this issue ยท 2 comments

commented

I have written my own rotation for arcane mage.
It is designed for this build

First you need to change the arcane blast definition in this file : C:\World of Warcraft\interface\addons\Ovale\scripts\ovale_mage_spells.lua
Be aware that each time Ovale will be updated, this change will be reversed.
Replace the arcane blast definition 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)

Then, use this script

########### ARCANE CORE ##########

Include(ovale_common)
Include(ovale_trinkets_mop)
Include(ovale_trinkets_wod)
Include(ovale_mage_spells)

Define(moa 224968)
	SpellInfo(moa cd=60)
	SpellAddTargetDebuff(moa moa=1)
Define(ab 35927)
Define(norgannon_buff 208213)
Define(arcane_familiar 205022)
	SpellAddBuff(arcane_familiar arcane_familiar_buff=1)
Define(arcane_familiar_buff 210126)

AddIcon help=main specialization=arcane
{
	if 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)
        }
    }
	if not BuffPresent(arcane_familiar_buff) Spell(arcane_familiar)
    if Speed() > 0 and SpellCharges(ice_floes) > 0 and not BuffPresent(norgannon_buff) Spell(ice_floes)
}

AddIcon help=main specialization=arcane
{
	if Speed() > 0 and SpellCharges(ice_floes) == 0 and not BuffPresent(norgannon_buff) Spell(arcane_explosion)
    if BuffStacks(arcane_missiles_buff) == 2 and SpellCooldown(arcane_power) > 10 and SpellCooldown(moa) > 10 and ArcaneCharges() > 1 Spell(arcane_missiles)
	if ManaPercent() < 80 and SpellCooldown(arcane_power) >= (3 * ExecuteTime(arcane_blast) + ExecuteTime(rune_of_power) + ExecuteTime(moa)) and not BuffPresent(arcane_power) and not BuffPresent(rune_of_power_buff) and SpellCooldown(evocation) > 0 and ArcaneCharges() > 1 Spell(arcane_barrage)
	if Mana() < 198000 * 2 or (SpellCooldown(arcane_power) <= (ExecuteTime(rune_of_power) + ExecuteTime(moa)) and ManaPercent() < 30) Spell(evocation)
	if ArcaneCharges() == 4 and (SpellCooldown(arcane_power) > 10 or SpellCooldown(arcane_power) <= ExecuteTime(rune_of_power) + ExecuteTime(moa)) Spell(moa)
	if ArcaneCharges() == 4 and (SpellCooldown(arcane_power) <= ExecuteTime(rune_of_power) or target.DebuffPresent(moa) or (BuffRemaining(arcane_power) > 5 and not BuffPresent(rune_of_power_buff))) Spell(rune_of_power)
	if ArcaneCharges() == 4 and BuffPresent(rune_of_power_buff) Spell(arcane_power)
	if BuffPresent(rune_of_power_buff) or BuffStacks(arcane_missiles_buff) == 3 or BuffPresent(arcane_power) Spell(arcane_missiles)
	Spell(ab)
}

AddIcon help=main specialization=arcane
{
	if Speed() > 0 and SpellCharges(ice_floes) == 0 Spell(arcane_explosion)
    if BuffStacks(arcane_missiles_buff) == 2 Spell(arcane_missiles)
	if Mana() < 198000 * 2 or (SpellCooldown(arcane_power) <= (ExecuteTime(rune_of_power) + ExecuteTime(moa)) and ManaPercent() < 50) Spell(evocation)
	if ManaPercent() < 80 Spell(arcane_barrage)
	Spell(ab)
}

AddIcon help=cd specialization=arcane
{
    if BuffStacks(arcane_missiles_buff) == 3 and not BuffPresent(arcane_power) Spell(arcane_missiles)
	if ManaPercent() < 80 and SpellCooldown(arcane_power) >= (3 * ExecuteTime(arcane_explosion) + ExecuteTime(rune_of_power) + ExecuteTime(moa)) and not BuffPresent(arcane_power) and not BuffPresent(rune_of_power_buff) and SpellCooldown(evocation) > 0 and ArcaneCharges() > 1 Spell(arcane_barrage)
	if Mana() < 198000 * 2 or (SpellCooldown(arcane_power) <= (ExecuteTime(rune_of_power) + ExecuteTime(moa)) and ManaPercent() < 50) Spell(evocation)
	if ArcaneCharges() == 4 and (SpellCooldown(arcane_power) > 10 or SpellCooldown(arcane_power) <= ExecuteTime(rune_of_power) + ExecuteTime(moa)) Spell(moa)
	if ArcaneCharges() == 4 and (SpellCooldown(arcane_power) <= ExecuteTime(rune_of_power) or target.DebuffPresent(moa) or (BuffRemaining(arcane_power) > 5 and not BuffPresent(rune_of_power_buff))) Spell(rune_of_power)
	if ArcaneCharges() == 4 and BuffPresent(rune_of_power_buff) Spell(arcane_power)
	Spell(arcane_explosion)
}
commented

Could you post an updated version of this for 7.1.5? The default Arcane script is still busted, even if you grab the profile from Simulationcraft, and using this profile doesn't prompt you to use Arcane Power. Something about how this addon parses the regular Simcraft script just isn't working.

commented

I have written my own script for 7.1.5, 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 OP, 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()
}