Last active
April 13, 2017 17:21
-
-
Save cgdangelo/7b50e0ab7034d99621fc87684e537914 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# @TODO (Legos) Gravity Spiral. Check for Evocation charges before ending burn phase? | |
# @TODO (Legos) Cord of Infinity. Affects MoA usage? At how many stacks? Sync only with AP? How long to delay? | |
# @TODO (Legos) Mystic Kilt of the Rune Master. Likely has some effect on mana breakpoints and rotational differences, specifically in conserve. | |
# @TODO (Trinkets) On-use trinkets need some love. | |
# @TODO (Trinkets) So far "gaming" Whispers has not made a difference, but triple-check to be safe. | |
# @TODO (Talents) Implement the other shit talents that no one cares about. | |
# @TODO (Talents) Talent overrides. | |
# @TODO (Rotation) Steal old AM travel time hack from T18 APL again, see if that makes a difference anyway. | |
# @TODO (Rotation) Reacting to Touch of the Magi, if worthwhile. | |
# @TODO Steal more of default APL and just add optimizations to that idk there should be more dps here >:( | |
# @FIXME I appear to be working on Arcane in 2017, clearly a bug. | |
html=dikembe.html | |
../profiles/Tier19M_NH/Mage_Arcane_T19M_NH.simc | |
copy=Dikembe | |
actions.precombat=flask | |
actions.precombat+=/food | |
actions.precombat+=/augmentation,type=defiled | |
actions.precombat+=/summon_arcane_familiar | |
actions.precombat+=/snapshot_stats | |
actions.precombat+=/mirror_image | |
actions.precombat+=/potion | |
actions.precombat+=/mark_of_aluneth,if=talent.charged_up.enabled | |
actions.precombat+=/arcane_blast | |
######################################################################################################################## | |
# Default Actions # | |
######################################################################################################################## | |
actions= | |
# Tracks the current number of Arcane Missiles! procs that the player is aware of. | |
actions+=/variable,name=missiles_procs,op=set,value=buff.arcane_missiles.react | |
# We can update the value of this variable after each burn phase completes, which will give us a heuristic to help | |
# approximate the next expected burn. | |
actions+=/variable,name=average_burn_length,op=set,value=(variable.average_burn_length+burn_phase_duration)%variable.total_burns,if=burn_phase&prev_gcd.1.evocation | |
# This is merely a guess as to when the next burn phase will occur, based on the average length of prior burns. We do not | |
# necessarily need Evocation to be off cooldown to begin burning; rather, we need Evocation to be off cooldown by the | |
# time that we _end_ burning. We do, however, need Arcane Power to be ready to begin burning. Thus, we can use whatever | |
# is higher: Evocation's cooldown minus the burn length, or Arcane Power's cooldown. | |
actions+=/variable,name=time_until_burn,op=set,value=cooldown.evocation.remains-variable.average_burn_length | |
actions+=/variable,name=time_until_burn,op=max,value=cooldown.arcane_power.remains | |
# Determines Time Warp usage. As long as we don't have the buff, we use lust on pull, whenever a burn phase is active | |
# or when the target will be dead by the time the buff wears off (40 seconds). With Shard of the Exodar equipped, | |
# this effectively gives us 3 lusts: one from ourselves on pull, another from the raid (Hunter/Mage/Shaman or drums), | |
# and a final one when our Time Warp is off cooldown again (5:00 or later). We prefer to use the latter 2 when | |
# entering another burn phase, i.e., during Arcane Power. | |
actions+=/time_warp,if=buff.bloodlust.down&(time=0|burn_phase|target.time_to_die<=buff.bloodlust.duration) | |
# Arcane Charges amplify the damage of most abilities, so we build a full stack before continuing. | |
actions+=/call_action_list,name=build,if=buff.arcane_charge.stack<4 | |
# Process the burn actions if we are already inside a burn phase, or ready to start one. `burn_phase` is a flag that is | |
# toggled on and off in the `actions.burn` list. When it has a truthy value, that means we are currently in a burn phase. | |
# | |
# We start a burn phase under these conditions: | |
# * Arcane Power is ready | |
# * Evocation will be ready before the burn ends | |
# * Mark of Aluneth is ready, or on cooldown for too long to justify a delay | |
# | |
# Alternatively, we start a burn when the target will die before the burn ends. We effectively seek to end the fight | |
# with minimal mana. | |
actions+=/call_action_list,name=burn,if=burn_phase|(cooldown.arcane_power.up&cooldown.evocation.remains<=variable.average_burn_length&(cooldown.mark_of_aluneth.up|cooldown.mark_of_aluneth.remains>20))|target.time_to_die<=variable.average_burn_length | |
# The goal of our conserve phase is to ensure that we will have enough mana to be casting throughout our burn phase. | |
actions+=/call_action_list,name=conserve | |
######################################################################################################################## | |
# Build Actions # | |
######################################################################################################################## | |
actions.build= | |
# Charged Up will grant us 4 Arcane Charges instantly, but it does introduce a rotational problem. During a conserve | |
# phase, to preserve mana we will have to cast Arcane Barrage. We then rebuild Arcane Charges with Charged Up. Now we | |
# have insufficient mana to cast Arcane Blast, but Arcane Barrage is still on cooldown. In the absence of any other | |
# suitable actions, Robomage is forced to sit and wait for Arcane Barrage to be available again. The exception is | |
# during burn phases, where we don't care about mana usage. | |
actions.build+=/charged_up,if=buff.arcane_charge.stack<2&cooldown.arcane_barrage.up|burn_phase | |
# There's no sense in us wasting a proc of Arcane Missiles, so we cast AM at max stacks. | |
actions.build+=/arcane_missiles,if=variable.missiles_procs=3 | |
actions.build+=/arcane_explosion,if=active_enemies>1 | |
actions.build+=/arcane_blast | |
# These actions should never be called. Using Arcane Explosion on single target or Arcane Barrage at less than | |
# 4 stacks indicates that we probably mismanaged our mana at some point. | |
actions.build+=/arcane_explosion | |
actions.build+=/arcane_barrage | |
######################################################################################################################## | |
# Conserve Actions # | |
######################################################################################################################## | |
actions.conserve= | |
actions.conserve+=/mark_of_aluneth,if=cooldown.arcane_power.remains>20|target.time_to_die<recharge_time | |
actions.conserve+=/rune_of_power,if=cooldown.arcane_power.remains>recharge_time&(cooldown.mark_of_aluneth.remains>recharge_time|prev_gcd.1.mark_of_aluneth) | |
actions.conserve+=/arcane_missiles | |
actions.conserve+=/arcane_barrage,if=buff.rune_of_power.remains<=travel_time | |
actions.conserve+=/arcane_blast,if=buff.rune_of_power.up|mana.pct>90 | |
actions.conserve+=/arcane_barrage | |
######################################################################################################################## | |
# Burn Actions # | |
######################################################################################################################## | |
actions.burn= | |
# Increment our burn phase counter. Whenever we enter the `burn` actions without being in a burn phase, it means that | |
# we are about to start one. | |
actions.burn+=/variable,name=total_burns,op=add,value=1,if=!burn_phase | |
# Presence of Mind usage can be slightly different depending on talent choice. We want our 2 instant Arcane Blast to be | |
# inside Arcane Power, but with the Rune of Power talent we also want them to be within the RoP buff to maximize damage. | |
# Therefore, this variable essentially stores the remaining time on whatever will end first: AP or RoP. | |
actions.burn+=/variable,name=damage_buff_remains,op=set,value=buff.arcane_power.remains | |
actions.burn+=/variable,name=damage_buff_remains,op=min,value=buff.rune_of_power.remains,if=talent.rune_of_power.enabled | |
#actions.burn+=/variable,name=damage_buff_remains,op=setif,condition=talent.rune_of_power.enabled,value=buff.rune_of_power.remains,value_else=buff.arcane_power.remains | |
# Handle the burn_phase flag, indicating whether or not we are actually in a burn phase. Conditions for starting a burn | |
# phase were already evaluated in default action (thus, we entered the `burn` actions), and we consider the end of a | |
# burn to be when Evocation is cast. | |
actions.burn+=/start_burn_phase,if=!burn_phase | |
actions.burn+=/stop_burn_phase,if=burn_phase&burn_phase_duration>0&prev_gcd.1.evocation | |
actions.burn+=/mark_of_aluneth | |
actions.burn+=/rune_of_power | |
actions.burn+=/arcane_power | |
actions.burn+=/berserking | |
actions.burn+=/blood_fury | |
# Second potion is meant to be used during burn, of course, but Troll/Orc have some worthwhile racials that warrant | |
# delaying potion usage for the next burn, if we can make it before the target dies. | |
actions.burn+=/potion,if=((race.troll&buff.berserking.up)|(race.orc&buff.blood_fury.up)) | |
actions.burn+=/potion,if=((race.troll&cooldown.berserking.remains>target.time_to_die)|(race.orc&cooldown.blood_fury.remains>target.time_to_die)) | |
actions.burn+=/potion,if=!(race.troll|race.orc) | |
# See above explanation for Presence of Mind usage. | |
actions.burn+=/presence_of_mind,if=variable.damage_buff_remains<=2*action.arcane_blast.execute_time | |
actions.burn+=/arcane_blast,if=buff.presence_of_mind.up | |
# Arcane Missiles has higher DPET compared to Arcane Blast. Use procs as they come. | |
actions.burn+=/arcane_missiles,if=variable.missiles_procs | |
actions.burn+=/arcane_blast | |
# We can squeeze out some extra damage during a burn with Charged Up. Arcane Barrage will provide an extra chance to | |
# proc Arcane Missiles itself, and the GCD maybe provide enough mp5 regen to use another Arcane Blast. | |
actions.burn+=/arcane_barrage,if=cooldown.charged_up.remains<=execute_time | |
#@FIXME Maybe? Was meant to Barrage and use CU after Evo, not before, but using it before seems just as effective. | |
#actions.burn+=/arcane_barrage,if=talent.charged_up.enabled&cooldown.charged_up.remains<=action.evocation.tick_time*ceil(mana.deficit%(mana.max%2)) | |
# Throughout my testing, channeling more than 2 ticks of Evocation has been a pretty notable DPS loss (upwards of 7-8k). | |
actions.burn+=/evocation,interrupt_if=ticks=2|mana.pct=100 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment