diff --git a/src/engine/dbc.ts b/src/engine/dbc.ts index e83253809..8eb47e69a 100644 --- a/src/engine/dbc.ts +++ b/src/engine/dbc.ts @@ -159,21 +159,21 @@ export const conduits: LuaArray = { }, [14]: { ranks: { - [0]: 50, - [1]: 55, - [2]: 60, - [3]: 65, - [4]: 70, - [5]: 75, - [6]: 80, - [7]: 85, - [8]: 90, - [9]: 95, - [10]: 100, - [11]: 105, - [12]: 110, - [13]: 115, - [14]: 120, + [0]: 100, + [1]: 110, + [2]: 120, + [3]: 130, + [4]: 140, + [5]: 150, + [6]: 160, + [7]: 170, + [8]: 180, + [9]: 190, + [10]: 200, + [11]: 210, + [12]: 220, + [13]: 230, + [14]: 240, }, }, [15]: { @@ -634,21 +634,21 @@ export const conduits: LuaArray = { }, [39]: { ranks: { - [0]: 6000, - [1]: 6600, - [2]: 7200, - [3]: 7800, - [4]: 8400, - [5]: 9000, - [6]: 9600, - [7]: 10200, - [8]: 10800, - [9]: 11400, - [10]: 12000, - [11]: 12600, - [12]: 13200, - [13]: 13800, - [14]: 14400, + [0]: 12000, + [1]: 13200, + [2]: 14400, + [3]: 15600, + [4]: 16800, + [5]: 18000, + [6]: 19200, + [7]: 20400, + [8]: 21600, + [9]: 22800, + [10]: 24000, + [11]: 25200, + [12]: 26400, + [13]: 27600, + [14]: 28800, }, }, [40]: { @@ -881,21 +881,21 @@ export const conduits: LuaArray = { }, [52]: { ranks: { - [0]: 160, - [1]: 176, - [2]: 192, - [3]: 208, - [4]: 224, - [5]: 240, - [6]: 256, - [7]: 272, - [8]: 288, - [9]: 304, - [10]: 320, - [11]: 336, - [12]: 352, - [13]: 368, - [14]: 384, + [0]: 240, + [1]: 264, + [2]: 288, + [3]: 312, + [4]: 336, + [5]: 360, + [6]: 384, + [7]: 408, + [8]: 432, + [9]: 456, + [10]: 480, + [11]: 504, + [12]: 528, + [13]: 552, + [14]: 576, }, }, [53]: { @@ -1090,21 +1090,21 @@ export const conduits: LuaArray = { }, [63]: { ranks: { - [0]: 10.5, - [1]: 11.55, - [2]: 12.6, - [3]: 13.65, - [4]: 14.7, - [5]: 15.75, - [6]: 16.799999, - [7]: 17.85, - [8]: 18.9, - [9]: 19.950001, - [10]: 21, - [11]: 22.049999, - [12]: 23.1, - [13]: 24.15, - [14]: 25.200001, + [0]: 21, + [1]: 23.1, + [2]: 25.200001, + [3]: 27.299999, + [4]: 29.4, + [5]: 31.5, + [6]: 33.599998, + [7]: 35.700001, + [8]: 37.799999, + [9]: 39.900002, + [10]: 42, + [11]: 44.099998, + [12]: 46.200001, + [13]: 48.299999, + [14]: 50.400002, }, }, [64]: { @@ -1603,21 +1603,21 @@ export const conduits: LuaArray = { }, [90]: { ranks: { - [0]: 6, - [1]: 6.6, - [2]: 7.2, - [3]: 7.8, - [4]: 8.4, - [5]: 9, - [6]: 9.6, - [7]: 10.2, - [8]: 10.8, - [9]: 11.4, - [10]: 12, - [11]: 12.6, - [12]: 13.2, - [13]: 13.8, - [14]: 14.4, + [0]: 12, + [1]: 13.2, + [2]: 14.4, + [3]: 15.6, + [4]: 16.799999, + [5]: 18, + [6]: 19.200001, + [7]: 20.4, + [8]: 21.6, + [9]: 22.799999, + [10]: 24, + [11]: 25.200001, + [12]: 26.4, + [13]: 27.6, + [14]: 28.799999, }, }, [91]: { @@ -2230,21 +2230,21 @@ export const conduits: LuaArray = { }, [123]: { ranks: { - [0]: 1, - [1]: 1.1, - [2]: 1.2, - [3]: 1.3, - [4]: 1.4, - [5]: 1.5, - [6]: 1.6, - [7]: 1.7, - [8]: 1.8, - [9]: 1.9, - [10]: 2, - [11]: 2.1, - [12]: 2.2, - [13]: 2.3, - [14]: 2.4, + [0]: 7, + [1]: 7.7, + [2]: 8.4, + [3]: 9.1, + [4]: 9.8, + [5]: 10.5, + [6]: 11.2, + [7]: 11.9, + [8]: 12.6, + [9]: 13.3, + [10]: 14, + [11]: 14.7, + [12]: 15.4, + [13]: 16.1, + [14]: 16.799999, }, }, [124]: { @@ -2287,21 +2287,21 @@ export const conduits: LuaArray = { }, [126]: { ranks: { - [0]: 12.5, - [1]: 13.75, - [2]: 15, - [3]: 16.25, - [4]: 17.5, - [5]: 18.75, - [6]: 20, - [7]: 21.25, - [8]: 22.5, - [9]: 23.75, - [10]: 25, - [11]: 26.75, - [12]: 28, - [13]: 29.25, - [14]: 30.5, + [0]: 18.75, + [1]: 20.625, + [2]: 22.5, + [3]: 24.375, + [4]: 26.25, + [5]: 28.125, + [6]: 30, + [7]: 31.875, + [8]: 33.75, + [9]: 35.625, + [10]: 37.5, + [11]: 40.125, + [12]: 42, + [13]: 43.875, + [14]: 45.75, }, }, [127]: { @@ -2648,21 +2648,21 @@ export const conduits: LuaArray = { }, [146]: { ranks: { - [0]: 40, - [1]: 43, - [2]: 46, - [3]: 49, - [4]: 52, - [5]: 55, - [6]: 58, - [7]: 61, - [8]: 64, - [9]: 67, - [10]: 70, - [11]: 73, - [12]: 76, - [13]: 79, - [14]: 82, + [0]: 60, + [1]: 64.5, + [2]: 69, + [3]: 73.5, + [4]: 78, + [5]: 82.5, + [6]: 87, + [7]: 91.5, + [8]: 96, + [9]: 100.5, + [10]: 105, + [11]: 109.5, + [12]: 114, + [13]: 118.5, + [14]: 123, }, }, [147]: { @@ -2743,21 +2743,21 @@ export const conduits: LuaArray = { }, [151]: { ranks: { - [0]: 10, - [1]: 11, - [2]: 12, - [3]: 13, - [4]: 14, - [5]: 15, - [6]: 16, - [7]: 17, - [8]: 18, - [9]: 19, - [10]: 20, - [11]: 21, - [12]: 22, - [13]: 23, - [14]: 24, + [0]: 40, + [1]: 44, + [2]: 48, + [3]: 52, + [4]: 56, + [5]: 60, + [6]: 64, + [7]: 68, + [8]: 72, + [9]: 76, + [10]: 80, + [11]: 84, + [12]: 88, + [13]: 92, + [14]: 96, }, }, [152]: { @@ -2971,21 +2971,21 @@ export const conduits: LuaArray = { }, [165]: { ranks: { - [0]: 1.5, - [1]: 1.6, - [2]: 1.7, - [3]: 1.8, - [4]: 1.9, - [5]: 2, - [6]: 2.1, - [7]: 2.2, - [8]: 2.3, - [9]: 2.4, - [10]: 2.5, - [11]: 2.6, - [12]: 2.7, - [13]: 2.8, - [14]: 2.9, + [0]: 2.25, + [1]: 2.4, + [2]: 2.55, + [3]: 2.7, + [4]: 2.85, + [5]: 3, + [6]: 3.15, + [7]: 3.3, + [8]: 3.45, + [9]: 3.6, + [10]: 3.75, + [11]: 3.9, + [12]: 4.05, + [13]: 4.2, + [14]: 4.35, }, }, [166]: { @@ -3883,21 +3883,21 @@ export const conduits: LuaArray = { }, [213]: { ranks: { - [0]: 20, - [1]: 22, - [2]: 24, - [3]: 26, - [4]: 28, - [5]: 30, - [6]: 32, - [7]: 34, - [8]: 36, - [9]: 38, - [10]: 40, - [11]: 42, - [12]: 44, - [13]: 46, - [14]: 48, + [0]: 100, + [1]: 110, + [2]: 120, + [3]: 130, + [4]: 140, + [5]: 150, + [6]: 160, + [7]: 170, + [8]: 180, + [9]: 190, + [10]: 200, + [11]: 210, + [12]: 220, + [13]: 230, + [14]: 240, }, }, [214]: { @@ -4168,21 +4168,21 @@ export const conduits: LuaArray = { }, [228]: { ranks: { - [0]: 80, - [1]: 88, - [2]: 96, - [3]: 104, - [4]: 112, - [5]: 120, - [6]: 128, - [7]: 136, - [8]: 144, - [9]: 152, - [10]: 160, - [11]: 168, - [12]: 176, - [13]: 184, - [14]: 192, + [0]: 120, + [1]: 132, + [2]: 144, + [3]: 156, + [4]: 168, + [5]: 180, + [6]: 192, + [7]: 204, + [8]: 216, + [9]: 228, + [10]: 240, + [11]: 252, + [12]: 264, + [13]: 276, + [14]: 288, }, }, [229]: { @@ -4586,21 +4586,21 @@ export const conduits: LuaArray = { }, [250]: { ranks: { - [0]: 50, - [1]: 55, - [2]: 60, - [3]: 65, - [4]: 70, - [5]: 75, - [6]: 80, - [7]: 85, - [8]: 90, - [9]: 95, - [10]: 100, - [11]: 105, - [12]: 110, - [13]: 115, - [14]: 120, + [0]: 75, + [1]: 82.5, + [2]: 90, + [3]: 97.5, + [4]: 105, + [5]: 112.5, + [6]: 120, + [7]: 127.5, + [8]: 135, + [9]: 142.5, + [10]: 150, + [11]: 157.5, + [12]: 165, + [13]: 172.5, + [14]: 180, }, }, [251]: { @@ -5251,6 +5251,9 @@ export const conduits: LuaArray = { }, }; +/* runeforgeBonusId[] = + * used by src/states/runeforge.ts + */ export const runeforgeBonusId: LuaArray = { [327508]: 6823, [327284]: 6828, diff --git a/src/scripts/ovale_deathknight_spells.ts b/src/scripts/ovale_deathknight_spells.ts index 1ef54b50a..6d3383ee0 100644 --- a/src/scripts/ovale_deathknight_spells.ts +++ b/src/scripts/ovale_deathknight_spells.ts @@ -6,14 +6,14 @@ export function registerDeathKnightSpells(scripts: OvaleScriptsClass) { // THIS PART OF THIS FILE IS AUTOMATICALLY GENERATED let code = `Define(abomination_limb 315443) -# Sprout an additional limb, dealing 323798s1*13 Shadow damage over 12 seconds to 323798i nearby enemies. Every t1 sec, an enemy is pulled to your location if they are further than 323710s3 yds from you. The same enemy can only be pulled once every 4 seconds.rnrnGain ?a137008[s3 Bone Shield charges][]?a137006[Rime][]?a137007[Runic Corruption][] instantly, and again every ?a353447[s4-353447s2][s4] sec. +# Sprout an additional limb, dealing 323798s1*13 Shadow damage over 12 seconds to all nearby enemies. Deals reduced damage beyond s5 targets. Every t1 sec, an enemy is pulled to your location if they are further than 323710s3 yds from you. The same enemy can only be pulled once every 4 seconds.rnrnGain ?a137008[s3 Bone Shield charges][]?a137006[Rime][]?a137007[Runic Corruption][] instantly, and again every ?a353447[s4-353447s2][s4] sec. SpellInfo(abomination_limb cd=120 duration=12 tick=1) # Recently pulled by Abomination Limb and can't be pulled again. SpellAddBuff(abomination_limb abomination_limb_unused_0 add=1) # Pulling enemies to your location and dealing 323798s1 Shadow damage to nearby enemies every t1 sec. SpellAddBuff(abomination_limb abomination_limb add=1) Define(abomination_limb_unused_0 323710) -# Sprout an additional limb, dealing 323798s1*13 Shadow damage over 12 seconds to 323798i nearby enemies. Every t1 sec, an enemy is pulled to your location if they are further than 323710s3 yds from you. The same enemy can only be pulled once every 4 seconds.rnrnGain ?a137008[s3 Bone Shield charges][]?a137006[Rime][]?a137007[Runic Corruption][] instantly, and again every ?a353447[s4-353447s2][s4] sec. +# Sprout an additional limb, dealing 323798s1*13 Shadow damage over 12 seconds to all nearby enemies. Deals reduced damage beyond s5 targets. Every t1 sec, an enemy is pulled to your location if they are further than 323710s3 yds from you. The same enemy can only be pulled once every 4 seconds.rnrnGain ?a137008[s3 Bone Shield charges][]?a137006[Rime][]?a137007[Runic Corruption][] instantly, and again every ?a353447[s4-353447s2][s4] sec. SpellInfo(abomination_limb_unused_0 duration=4 gcd=0 offgcd=1) Define(ancestral_call 274738) # Invoke the spirits of your ancestors, granting you a random secondary stat for 15 seconds. @@ -84,7 +84,7 @@ Define(bone_shield_buff 195181) # Armor increased by w1*STR/100.rnHaste increased by w4. SpellAddBuff(bone_shield_buff bone_shield_buff add=1) Define(bonestorm 194844) -# A whirl of bone and gore batters up to 196528s2 nearby enemies, dealing 196528s1 Shadow damage every t3 sec, and healing you for 196545s1 of your maximum health every time it deals damage (up to s1*s4). Lasts t3 sec per s3 Runic Power spent. +# A whirl of bone and gore batters all nearby enemies, dealing 196528s1 Shadow damage every t3 sec, and healing you for 196545s1 of your maximum health every time it deals damage (up to s1*s4). Lasts t3 sec per s3 Runic Power spent. Deals reduced damage beyond 196528s2 targets. SpellInfo(bonestorm runicpower=10 max_runicpower=90 cd=60 duration=1 tick=1) SpellRequire(bonestorm unusable set=1 enabled=(not hastalent(bonestorm_talent))) # Dealing 196528s1 Shadow damage to nearby enemies every t3 sec, and healing for 196545s1 of maximum health for each target hit (up to s1*s4). @@ -113,7 +113,7 @@ Define(cold_heart_buff 281209) # Every t1 sec, gain a stack of Cold Heart, causing your next Chains of Ice to deal 281210s1 Frost damage. Stacks up to 281209u times. SpellInfo(cold_heart_buff max_stacks=20 gcd=0 offgcd=1) Define(consumption 274156) -# Strikes up to s3 enemies in front of you with a hungering attack that deals sw1 Physical damage and heals you for e1*100 of that damage. +# Strikes all enemies in front of you with a hungering attack that deals sw1 Physical damage and heals you for e1*100 of that damage. Deals reduced damage beyond s3 targets. SpellInfo(consumption cd=30) SpellRequire(consumption unusable set=1 enabled=(not hastalent(consumption_talent))) Define(crimson_scourge_buff 81141) @@ -200,7 +200,7 @@ Define(frost_strike 49143) # Chill your ?owb==0[weapon with icy power and quickly strike the enemy, dealing <2hDamage> Frost damage.][weapons with icy power and quickly strike the enemy with both, dealing a total of Frost damage.] SpellInfo(frost_strike runicpower=25) Define(frostscythe 207230) -# A sweeping attack that strikes up to s5 enemies in front of you for s2 Frost damage. This attack benefits from Killing Machine. Critical strikes with Frostscythe deal s3 times normal damage. +# A sweeping attack that strikes all enemies in front of you for s2 Frost damage. This attack benefits from Killing Machine. Critical strikes with Frostscythe deal s3 times normal damage. Deals reduced damage beyond s5 targets. SpellInfo(frostscythe runes=1 runicpower=-10) SpellRequire(frostscythe unusable set=1 enabled=(not hastalent(frostscythe_talent))) Define(frostwyrms_fury 279302) @@ -307,7 +307,7 @@ Define(runic_corruption_buff 51460) # Rune regeneration rate increased by w1. SpellAddBuff(runic_corruption_buff runic_corruption_buff add=1) Define(sacrificial_pact 327574) -# Sacrifice your ghoul to deal 327611s1 Shadow damage to 327611s2 nearby enemies and heal for s1 of your maximum health. +# Sacrifice your ghoul to deal 327611s1 Shadow damage to all nearby enemies and heal for s1 of your maximum health. Deals reduced damage beyond 327611s2 targets. SpellInfo(sacrificial_pact runicpower=20 cd=120) Define(scourge_strike 55090) # An unholy strike that deals s2 Physical damage and 70890sw2 Shadow damage, and causes 1 Festering Wound to burst. @@ -398,21 +398,21 @@ Define(blood_tap_talent 22135) Define(blooddrinker_talent 19166) # Drains o1 health from the target over 3 seconds.rnrnYou can move, parry, dodge, and use defensive abilities while channeling this ability. Define(bonestorm_talent 21209) -# A whirl of bone and gore batters up to 196528s2 nearby enemies, dealing 196528s1 Shadow damage every t3 sec, and healing you for 196545s1 of your maximum health every time it deals damage (up to s1*s4). Lasts t3 sec per s3 Runic Power spent. +# A whirl of bone and gore batters all nearby enemies, dealing 196528s1 Shadow damage every t3 sec, and healing you for 196545s1 of your maximum health every time it deals damage (up to s1*s4). Lasts t3 sec per s3 Runic Power spent. Deals reduced damage beyond 196528s2 targets. Define(breath_of_sindragosa_talent 22537) # Continuously deal 155166s2*/AP Frost damage every t1 sec to enemies in a cone in front of you, until your Runic Power is exhausted. Deals reduced damage to secondary targets.rnrn|cFFFFFFFFGenerates 303753s1 lRune:Runes; at the start and end.|r Define(bursting_sores_talent 22027) -# Bursting a Festering Wound deals s1 more damage, and deals 207267s1 Shadow damage to 207267s3-1 nearby targets. +# Bursting a Festering Wound deals s1 more damage, and deals 207267s1 Shadow damage to all nearby enemies. Deals reduced damage beyond 207267s3 targets. Define(clawing_shadows_talent 22026) # Deals s2 Shadow damage and causes 1 Festering Wound to burst. Define(cold_heart_talent 22018) # Every t1 sec, gain a stack of Cold Heart, causing your next Chains of Ice to deal 281210s1 Frost damage. Stacks up to 281209u times. Define(consumption_talent 19220) -# Strikes up to s3 enemies in front of you with a hungering attack that deals sw1 Physical damage and heals you for e1*100 of that damage. +# Strikes all enemies in front of you with a hungering attack that deals sw1 Physical damage and heals you for e1*100 of that damage. Deals reduced damage beyond s3 targets. Define(defile_talent 22536) # Defile the targeted ground, dealing (156000s1*(10 seconds+1)/t3) Shadow damage to all enemies over 10 seconds.rnrnWhile you remain within your Defile, your ?s207311[Clawing Shadows][Scourge Strike] will hit 55090s4-1 enemies near the target?a315442|a331119[ and inflict Death's Due for 12 seconds.rnrnDeath's Due reduces damage enemies deal to you by 324164s1, up to a maximum of 324164s1*-324164u and their power is transferred to you as an equal amount of Strength.][.]rnrnIf any enemies are standing in the Defile, it grows in size and deals increasing damage every sec. Define(frostscythe_talent 22525) -# A sweeping attack that strikes up to s5 enemies in front of you for s2 Frost damage. This attack benefits from Killing Machine. Critical strikes with Frostscythe deal s3 times normal damage. +# A sweeping attack that strikes all enemies in front of you for s2 Frost damage. This attack benefits from Killing Machine. Critical strikes with Frostscythe deal s3 times normal damage. Deals reduced damage beyond s5 targets. Define(frozen_pulse_talent 22523) # While you have fewer than m2 full LRune:Runes;, your auto attacks radiate intense cold, inflicting 195750s1 Frost damage on all nearby enemies. Define(gathering_storm_talent 22531) diff --git a/src/scripts/ovale_demonhunter.ts b/src/scripts/ovale_demonhunter.ts index 585104885..1ee1653ec 100644 --- a/src/scripts/ovale_demonhunter.ts +++ b/src/scripts/ovale_demonhunter.ts @@ -19,7 +19,7 @@ Include(ovale_demonhunter_spells) AddFunction waiting_for_agony_gaze { - if runeforge(agony_gaze_runeforge) not target.debuffpresent(sinful_brand) and spellcooldown(sinful_brand) < gcd() * 4 + if runeforge(agony_gaze_runeforge) not target.debuffpresent(sinful_brand) and spellcooldown(sinful_brand) < gcd() * 4 and { not { not spellcooldown(metamorphosis) > 0 } or enemies() == 1 } and enemies(tagged=1) <= 3 } AddFunction waiting_for_momentum @@ -44,6 +44,13 @@ AddFunction pooling_for_meta AddFunction blade_dance { + if runeforge(agony_gaze_runeforge) and hastalent(cycle_of_hatred_talent) + { + if hastalent(essence_break_talent) and spellcooldown(essence_break) <= 0 0 + if runeforge(darkglare_medallion_runeforge) hastalent(first_blood_talent) or { buffpresent(metamorphosis_buff) or hastalent(trail_of_ruin_talent) or target.debuffpresent(essence_break_debuff) } and enemies(tagged=1) >= 3 - talentpoints(trail_of_ruin_talent) or not hastalent(demonic_talent) and enemies(tagged=1) >= 4 + if runeforge(chaos_theory_runeforge) buffexpires(chaos_blades) or hastalent(first_blood_talent) and enemies(tagged=1) >= 2 - talentpoints(trail_of_ruin_talent) or not hastalent(cycle_of_hatred_talent) and enemies(tagged=1) >= 4 - talentpoints(trail_of_ruin_talent) + if not runeforge(chaos_theory_runeforge) and not runeforge(darkglare_medallion_runeforge) hastalent(first_blood_talent) or enemies(tagged=1) >= 3 - talentpoints(trail_of_ruin_talent) + } and debuffcountonany(sinful_brand) < 2 if hastalent(essence_break_talent) and spellcooldown(essence_break) <= 0 0 if runeforge(darkglare_medallion_runeforge) hastalent(first_blood_talent) or { buffpresent(metamorphosis_buff) or hastalent(trail_of_ruin_talent) or target.debuffpresent(essence_break_debuff) } and enemies(tagged=1) >= 3 - talentpoints(trail_of_ruin_talent) or not hastalent(demonic_talent) and enemies(tagged=1) >= 4 if runeforge(chaos_theory_runeforge) buffexpires(chaos_blades) or hastalent(first_blood_talent) and enemies(tagged=1) >= 2 - talentpoints(trail_of_ruin_talent) or not hastalent(cycle_of_hatred_talent) and enemies(tagged=1) >= 4 - talentpoints(trail_of_ruin_talent) @@ -52,7 +59,7 @@ AddFunction blade_dance AddFunction use_eye_beam_fury_condition { - hastalent(blind_fury_talent) and { runeforge(darkglare_medallion_runeforge) or hastalent(demon_blades_talent) } + hastalent(blind_fury_talent) and { runeforge(darkglare_medallion_runeforge) or hastalent(demon_blades_talent) and not runeforge(agony_gaze_runeforge) } } AddFunction trinket_sync_slot @@ -127,6 +134,15 @@ AddFunction havocprecombatshortcdpostconditions AddFunction havocprecombatcdactions { + #flask + #augmentation + #food + #snapshot_stats + #variable,name=trinket_sync_slot,value=1,if=trinket.1.has_stat.any_dps&(!trinket.2.has_stat.any_dps|trinket.1.cooldown.duration>=trinket.2.cooldown.duration) + #variable,name=trinket_sync_slot,value=2,if=trinket.2.has_stat.any_dps&(!trinket.1.has_stat.any_dps|trinket.2.cooldown.duration>trinket.1.cooldown.duration) + #variable,name=use_eye_beam_fury_condition,value=talent.blind_fury.enabled&(runeforge.darkglare_medallion|talent.demon_blades.enabled&!runeforge.agony_gaze) + #arcane_torrent + spell(arcane_torrent) } AddFunction havocprecombatcdpostconditions @@ -141,8 +157,6 @@ AddFunction havocnormalmainactions if hastalent(momentum_talent) and buffexpires(prepared_buff) and timeincombat() > 1 and checkboxon(opt_vengeful_retreat) spell(vengeful_retreat) #fel_rush,if=(buff.unbound_chaos.up|variable.waiting_for_momentum&(!talent.unbound_chaos.enabled|!cooldown.immolation_aura.ready))&(charges=2|(raid_event.movement.in>10&raid_event.adds.in>10)) if { buffpresent(unbound_chaos_buff) or waiting_for_momentum() and { not hastalent(unbound_chaos_talent) or not spellcooldown(immolation_aura) <= 0 } } and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) spell(fel_rush) - #fel_barrage,if=active_enemies>desired_targets|raid_event.adds.in>30 - if enemies() > havocdesiredtargets() or 600 > 30 spell(fel_barrage) #death_sweep,if=variable.blade_dance if blade_dance() spell(death_sweep) #glaive_tempest,if=!variable.waiting_for_momentum&(active_enemies>desired_targets|raid_event.adds.in>10) @@ -181,20 +195,29 @@ AddFunction havocnormalmainpostconditions AddFunction havocnormalshortcdactions { - unless hastalent(momentum_talent) and buffexpires(prepared_buff) and timeincombat() > 1 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or { buffpresent(unbound_chaos_buff) or waiting_for_momentum() and { not hastalent(unbound_chaos_talent) or not spellcooldown(immolation_aura) <= 0 } } and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or { enemies() > havocdesiredtargets() or 600 > 30 } and spell(fel_barrage) or blade_dance() and spell(death_sweep) + #eye_beam,if=runeforge.agony_gaze&(active_enemies>desired_targets|raid_event.adds.in>15)&dot.sinful_brand.ticking&dot.sinful_brand.remains<=gcd + if runeforge(agony_gaze_runeforge) and { enemies() > havocdesiredtargets() or 600 > 15 } and target.debuffpresent(sinful_brand) and target.debuffremaining(sinful_brand) <= gcd() spell(eye_beam) + + unless hastalent(momentum_talent) and buffexpires(prepared_buff) and timeincombat() > 1 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or { buffpresent(unbound_chaos_buff) or waiting_for_momentum() and { not hastalent(unbound_chaos_talent) or not spellcooldown(immolation_aura) <= 0 } } and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) { - #immolation_aura,if=!buff.immolation_aura.up - if not buffpresent(immolation_aura) spell(immolation_aura) + #fel_barrage,if=active_enemies>desired_targets|raid_event.adds.in>30 + if enemies() > havocdesiredtargets() or 600 > 30 spell(fel_barrage) - unless not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) + unless blade_dance() and spell(death_sweep) { - #eye_beam,if=!variable.waiting_for_momentum&(active_enemies>desired_targets|raid_event.adds.in>15&(!variable.use_eye_beam_fury_condition|spell_targets>1|fury<70)&!variable.waiting_for_agony_gaze) - if not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 15 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() } spell(eye_beam) + #immolation_aura,if=!buff.immolation_aura.up + if not buffpresent(immolation_aura) spell(immolation_aura) - unless blade_dance() and spell(blade_dance) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 or buffremaining(metamorphosis_buff) < 5 } and not pooling_for_blade_dance() and spell(annihilation) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 } and not pooling_for_meta() and not pooling_for_blade_dance() and spell(chaos_strike_havoc) + unless not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) { - #eye_beam,if=talent.blind_fury.enabled&raid_event.adds.in>cooldown&!variable.waiting_for_agony_gaze - if hastalent(blind_fury_talent) and 600 > spellcooldown(eye_beam) and not waiting_for_agony_gaze() spell(eye_beam) + #eye_beam,if=!variable.waiting_for_momentum&(active_enemies>desired_targets|raid_event.adds.in>15&(!variable.use_eye_beam_fury_condition|spell_targets>1|fury<70)&!variable.waiting_for_agony_gaze) + if not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 15 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() } spell(eye_beam) + + unless blade_dance() and spell(blade_dance) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 or buffremaining(metamorphosis_buff) < 5 } and not pooling_for_blade_dance() and spell(annihilation) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 } and not pooling_for_meta() and not pooling_for_blade_dance() and spell(chaos_strike_havoc) + { + #eye_beam,if=talent.blind_fury.enabled&raid_event.adds.in>cooldown&!variable.waiting_for_agony_gaze + if hastalent(blind_fury_talent) and 600 > spellcooldown(eye_beam) and not waiting_for_agony_gaze() spell(eye_beam) + } } } } @@ -202,7 +225,7 @@ AddFunction havocnormalshortcdactions AddFunction havocnormalshortcdpostconditions { - hastalent(momentum_talent) and buffexpires(prepared_buff) and timeincombat() > 1 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or { buffpresent(unbound_chaos_buff) or waiting_for_momentum() and { not hastalent(unbound_chaos_talent) or not spellcooldown(immolation_aura) <= 0 } } and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or { enemies() > havocdesiredtargets() or 600 > 30 } and spell(fel_barrage) or blade_dance() and spell(death_sweep) or not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) or blade_dance() and spell(blade_dance) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 or buffremaining(metamorphosis_buff) < 5 } and not pooling_for_blade_dance() and spell(annihilation) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 } and not pooling_for_meta() and not pooling_for_blade_dance() and spell(chaos_strike_havoc) or runeforge(burning_wound_runeforge) and target.debuffremaining(burning_wound_debuff) < 4 and spell(demons_bite) or spell(demons_bite) or not hastalent(momentum_talent) and 600 > charges(fel_rush) * 10 and hastalent(demon_blades_talent) and checkboxon(opt_fel_rush) and spell(fel_rush) or { target.distance() > 15 or not target.inrange(chaos_strike) } and spell(felblade) or { target.distance() > 15 or not target.inrange(chaos_strike) and not hastalent(momentum_talent) } and checkboxon(opt_fel_rush) and spell(fel_rush) or target.distance() > 15 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or hastalent(demon_blades_talent) and spell(throw_glaive) + hastalent(momentum_talent) and buffexpires(prepared_buff) and timeincombat() > 1 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or { buffpresent(unbound_chaos_buff) or waiting_for_momentum() and { not hastalent(unbound_chaos_talent) or not spellcooldown(immolation_aura) <= 0 } } and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or blade_dance() and spell(death_sweep) or not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) or blade_dance() and spell(blade_dance) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 or buffremaining(metamorphosis_buff) < 5 } and not pooling_for_blade_dance() and spell(annihilation) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 } and not pooling_for_meta() and not pooling_for_blade_dance() and spell(chaos_strike_havoc) or runeforge(burning_wound_runeforge) and target.debuffremaining(burning_wound_debuff) < 4 and spell(demons_bite) or spell(demons_bite) or not hastalent(momentum_talent) and 600 > charges(fel_rush) * 10 and hastalent(demon_blades_talent) and checkboxon(opt_fel_rush) and spell(fel_rush) or { target.distance() > 15 or not target.inrange(chaos_strike) } and spell(felblade) or { target.distance() > 15 or not target.inrange(chaos_strike) and not hastalent(momentum_talent) } and checkboxon(opt_fel_rush) and spell(fel_rush) or target.distance() > 15 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or hastalent(demon_blades_talent) and spell(throw_glaive) } AddFunction havocnormalcdactions @@ -211,7 +234,7 @@ AddFunction havocnormalcdactions AddFunction havocnormalcdpostconditions { - hastalent(momentum_talent) and buffexpires(prepared_buff) and timeincombat() > 1 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or { buffpresent(unbound_chaos_buff) or waiting_for_momentum() and { not hastalent(unbound_chaos_talent) or not spellcooldown(immolation_aura) <= 0 } } and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or { enemies() > havocdesiredtargets() or 600 > 30 } and spell(fel_barrage) or blade_dance() and spell(death_sweep) or not buffpresent(immolation_aura) and spell(immolation_aura) or not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) or not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 15 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() } and spell(eye_beam) or blade_dance() and spell(blade_dance) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 or buffremaining(metamorphosis_buff) < 5 } and not pooling_for_blade_dance() and spell(annihilation) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 } and not pooling_for_meta() and not pooling_for_blade_dance() and spell(chaos_strike_havoc) or hastalent(blind_fury_talent) and 600 > spellcooldown(eye_beam) and not waiting_for_agony_gaze() and spell(eye_beam) or runeforge(burning_wound_runeforge) and target.debuffremaining(burning_wound_debuff) < 4 and spell(demons_bite) or spell(demons_bite) or not hastalent(momentum_talent) and 600 > charges(fel_rush) * 10 and hastalent(demon_blades_talent) and checkboxon(opt_fel_rush) and spell(fel_rush) or { target.distance() > 15 or not target.inrange(chaos_strike) } and spell(felblade) or { target.distance() > 15 or not target.inrange(chaos_strike) and not hastalent(momentum_talent) } and checkboxon(opt_fel_rush) and spell(fel_rush) or target.distance() > 15 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or hastalent(demon_blades_talent) and spell(throw_glaive) + runeforge(agony_gaze_runeforge) and { enemies() > havocdesiredtargets() or 600 > 15 } and target.debuffpresent(sinful_brand) and target.debuffremaining(sinful_brand) <= gcd() and spell(eye_beam) or hastalent(momentum_talent) and buffexpires(prepared_buff) and timeincombat() > 1 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or { buffpresent(unbound_chaos_buff) or waiting_for_momentum() and { not hastalent(unbound_chaos_talent) or not spellcooldown(immolation_aura) <= 0 } } and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or { enemies() > havocdesiredtargets() or 600 > 30 } and spell(fel_barrage) or blade_dance() and spell(death_sweep) or not buffpresent(immolation_aura) and spell(immolation_aura) or not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) or not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 15 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() } and spell(eye_beam) or blade_dance() and spell(blade_dance) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 or buffremaining(metamorphosis_buff) < 5 } and not pooling_for_blade_dance() and spell(annihilation) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 } and not pooling_for_meta() and not pooling_for_blade_dance() and spell(chaos_strike_havoc) or hastalent(blind_fury_talent) and 600 > spellcooldown(eye_beam) and not waiting_for_agony_gaze() and spell(eye_beam) or runeforge(burning_wound_runeforge) and target.debuffremaining(burning_wound_debuff) < 4 and spell(demons_bite) or spell(demons_bite) or not hastalent(momentum_talent) and 600 > charges(fel_rush) * 10 and hastalent(demon_blades_talent) and checkboxon(opt_fel_rush) and spell(fel_rush) or { target.distance() > 15 or not target.inrange(chaos_strike) } and spell(felblade) or { target.distance() > 15 or not target.inrange(chaos_strike) and not hastalent(momentum_talent) } and checkboxon(opt_fel_rush) and spell(fel_rush) or target.distance() > 15 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or hastalent(demon_blades_talent) and spell(throw_glaive) } ### actions.demonic @@ -260,10 +283,13 @@ AddFunction havocdemonicmainpostconditions AddFunction havocdemonicshortcdactions { + #eye_beam,if=runeforge.agony_gaze&(active_enemies>desired_targets|raid_event.adds.in>25-talent.cycle_of_hatred*10)&dot.sinful_brand.ticking&dot.sinful_brand.remains<=gcd + if runeforge(agony_gaze_runeforge) and { enemies() > havocdesiredtargets() or 600 > 25 - talentpoints(cycle_of_hatred_talent) * 10 } and target.debuffpresent(sinful_brand) and target.debuffremaining(sinful_brand) <= gcd() spell(eye_beam) + unless hastalent(unbound_chaos_talent) and buffpresent(unbound_chaos_buff) and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or blade_dance() and spell(death_sweep) or { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) { - #eye_beam,if=active_enemies>desired_targets|raid_event.adds.in>25&(!variable.use_eye_beam_fury_condition|spell_targets>1|fury<70)&!variable.waiting_for_agony_gaze - if enemies() > havocdesiredtargets() or 600 > 25 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() spell(eye_beam) + #eye_beam,if=active_enemies>desired_targets|raid_event.adds.in>25-talent.cycle_of_hatred*10&(!variable.use_eye_beam_fury_condition|spell_targets>1|fury<70)&!variable.waiting_for_agony_gaze + if enemies() > havocdesiredtargets() or 600 > 25 - talentpoints(cycle_of_hatred_talent) * 10 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() spell(eye_beam) unless blade_dance() and not { { not checkboxon(opt_meta_only_during_boss) or isbossfight() } and spellcooldown(metamorphosis) <= 0 } and { spellcooldown(eye_beam) > 5 or 600 > spellcooldown(blade_dance) and 600 < 25 } and spell(blade_dance) { @@ -284,7 +310,7 @@ AddFunction havocdemoniccdactions AddFunction havocdemoniccdpostconditions { - hastalent(unbound_chaos_talent) and buffpresent(unbound_chaos_buff) and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or blade_dance() and spell(death_sweep) or { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) or { enemies() > havocdesiredtargets() or 600 > 25 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() } and spell(eye_beam) or blade_dance() and not { { not checkboxon(opt_meta_only_during_boss) or isbossfight() } and spellcooldown(metamorphosis) <= 0 } and { spellcooldown(eye_beam) > 5 or 600 > spellcooldown(blade_dance) and 600 < 25 } and spell(blade_dance) or not buffpresent(immolation_aura) and spell(immolation_aura) or not pooling_for_blade_dance() and spell(annihilation) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or not pooling_for_blade_dance() and not pooling_for_eye_beam() and spell(chaos_strike_havoc) or hastalent(demon_blades_talent) and not spellcooldown(eye_beam) <= 0 and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or runeforge(burning_wound_runeforge) and target.debuffremaining(burning_wound_debuff) < 4 and spell(demons_bite) or not hastalent(demon_blades_talent) and enemies(tagged=1) > 1 and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or spell(demons_bite) or not target.inrange(chaos_strike) and spell(throw_glaive) or { target.distance() > 15 or not target.inrange(chaos_strike) } and checkboxon(opt_fel_rush) and spell(fel_rush) or target.distance() > 15 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or hastalent(demon_blades_talent) and spell(throw_glaive) + runeforge(agony_gaze_runeforge) and { enemies() > havocdesiredtargets() or 600 > 25 - talentpoints(cycle_of_hatred_talent) * 10 } and target.debuffpresent(sinful_brand) and target.debuffremaining(sinful_brand) <= gcd() and spell(eye_beam) or hastalent(unbound_chaos_talent) and buffpresent(unbound_chaos_buff) and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or blade_dance() and spell(death_sweep) or { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) or { enemies() > havocdesiredtargets() or 600 > 25 - talentpoints(cycle_of_hatred_talent) * 10 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() } and spell(eye_beam) or blade_dance() and not { { not checkboxon(opt_meta_only_during_boss) or isbossfight() } and spellcooldown(metamorphosis) <= 0 } and { spellcooldown(eye_beam) > 5 or 600 > spellcooldown(blade_dance) and 600 < 25 } and spell(blade_dance) or not buffpresent(immolation_aura) and spell(immolation_aura) or not pooling_for_blade_dance() and spell(annihilation) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or not pooling_for_blade_dance() and not pooling_for_eye_beam() and spell(chaos_strike_havoc) or hastalent(demon_blades_talent) and not spellcooldown(eye_beam) <= 0 and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or runeforge(burning_wound_runeforge) and target.debuffremaining(burning_wound_debuff) < 4 and spell(demons_bite) or not hastalent(demon_blades_talent) and enemies(tagged=1) > 1 and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or spell(demons_bite) or not target.inrange(chaos_strike) and spell(throw_glaive) or { target.distance() > 15 or not target.inrange(chaos_strike) } and checkboxon(opt_fel_rush) and spell(fel_rush) or target.distance() > 15 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or hastalent(demon_blades_talent) and spell(throw_glaive) } ### actions.cooldown @@ -299,8 +325,8 @@ AddFunction havoccooldownmainpostconditions AddFunction havoccooldownshortcdactions { - #sinful_brand,if=!dot.sinful_brand.ticking&(!runeforge.agony_gaze|(cooldown.eye_beam.remains<=gcd&fury>=30|cooldown.metamorphosis.ready)) - if not target.debuffpresent(sinful_brand) and { not runeforge(agony_gaze_runeforge) or spellcooldown(eye_beam) <= gcd() and fury() >= 30 or { not checkboxon(opt_meta_only_during_boss) or isbossfight() } and spellcooldown(metamorphosis) <= 0 } spell(sinful_brand) + #sinful_brand,if=!dot.sinful_brand.ticking&(!runeforge.agony_gaze|(cooldown.eye_beam.remains<=gcd&fury>=30))&(!cooldown.metamorphosis.up|active_enemies=1) + if not target.debuffpresent(sinful_brand) and { not runeforge(agony_gaze_runeforge) or spellcooldown(eye_beam) <= gcd() and fury() >= 30 } and { not { not spellcooldown(metamorphosis) > 0 } or enemies() == 1 } spell(sinful_brand) #the_hunt,if=!talent.demonic.enabled&!variable.waiting_for_momentum&!variable.pooling_for_meta|buff.furious_gaze.up if not hastalent(demonic_talent) and not waiting_for_momentum() and not pooling_for_meta() or buffpresent(furious_gaze_buff) spell(the_hunt) #elysian_decree,if=(active_enemies>desired_targets|raid_event.adds.in>30) @@ -317,10 +343,10 @@ AddFunction havoccooldowncdactions if not hastalent(demonic_talent) and iscovenant("venthyr") and runeforge(agony_gaze_runeforge) and target.debuffremaining(sinful_brand) > 8 and enemies(tagged=1) < 2 and { spellcooldown(eye_beam) > 20 or fightremains() < 25 } and { not checkboxon(opt_meta_only_during_boss) or isbossfight() } spell(metamorphosis) #metamorphosis,landing_distance=10,if=talent.demonic.enabled&covenant.venthyr.enabled&runeforge.agony_gaze&dot.sinful_brand.remains>8&spell_targets.metamorphosis_impact<2&(cooldown.eye_beam.remains>20&!variable.blade_dance|cooldown.blade_dance.remains>gcd.max|fight_remains<25) if hastalent(demonic_talent) and iscovenant("venthyr") and runeforge(agony_gaze_runeforge) and target.debuffremaining(sinful_brand) > 8 and enemies(tagged=1) < 2 and { spellcooldown(eye_beam) > 20 and not blade_dance() or spellcooldown(blade_dance) > gcd() or fightremains() < 25 } and { not checkboxon(opt_meta_only_during_boss) or isbossfight() } spell(metamorphosis) - #metamorphosis,if=!talent.demonic.enabled&(cooldown.eye_beam.remains>20&(!covenant.venthyr.enabled|dot.sinful_brand.remains<=8)|fight_remains<25) - if not hastalent(demonic_talent) and { spellcooldown(eye_beam) > 20 and { not iscovenant("venthyr") or target.debuffremaining(sinful_brand) <= 8 } or fightremains() < 25 } and { not checkboxon(opt_meta_only_during_boss) or isbossfight() } spell(metamorphosis) - #metamorphosis,if=talent.demonic.enabled&(cooldown.eye_beam.remains>20&(!variable.blade_dance|cooldown.blade_dance.remains>gcd.max)|fight_remains<25)&(!covenant.venthyr.enabled|dot.sinful_brand.remains<=8) - if hastalent(demonic_talent) and { spellcooldown(eye_beam) > 20 and { not blade_dance() or spellcooldown(blade_dance) > gcd() } or fightremains() < 25 } and { not iscovenant("venthyr") or target.debuffremaining(sinful_brand) <= 8 } and { not checkboxon(opt_meta_only_during_boss) or isbossfight() } spell(metamorphosis) + #metamorphosis,if=!talent.demonic.enabled&(cooldown.eye_beam.remains>20&(!covenant.venthyr.enabled|dot.sinful_brand.remains<=8|spell_targets.metamorphosis_impact>1)|fight_remains<25) + if not hastalent(demonic_talent) and { spellcooldown(eye_beam) > 20 and { not iscovenant("venthyr") or target.debuffremaining(sinful_brand) <= 8 or enemies(tagged=1) > 1 } or fightremains() < 25 } and { not checkboxon(opt_meta_only_during_boss) or isbossfight() } spell(metamorphosis) + #metamorphosis,if=talent.demonic.enabled&(cooldown.eye_beam.remains>20&(!variable.blade_dance|cooldown.blade_dance.remains>gcd.max)&(!covenant.venthyr.enabled|dot.sinful_brand.remains<=8|spell_targets.metamorphosis_impact>1)|fight_remains<25) + if hastalent(demonic_talent) and { spellcooldown(eye_beam) > 20 and { not blade_dance() or spellcooldown(blade_dance) > gcd() } and { not iscovenant("venthyr") or target.debuffremaining(sinful_brand) <= 8 or enemies(tagged=1) > 1 } or fightremains() < 25 } and { not checkboxon(opt_meta_only_during_boss) or isbossfight() } spell(metamorphosis) #potion,if=buff.metamorphosis.remains>25|fight_remains<60 if { buffremaining(metamorphosis_buff) > 25 or fightremains() < 60 } and { checkboxon(opt_use_consumables) and target.classification(worldboss) } item(potion_of_phantom_fire_item usable=1) #use_items,slots=trinket1,if=variable.trinket_sync_slot=1&(buff.metamorphosis.up|(!talent.demonic.enabled&cooldown.metamorphosis.remains>(fight_remains>?trinket.1.cooldown.duration%2))|fight_remains<=20)|(variable.trinket_sync_slot=2&!trinket.2.cooldown.ready)|!variable.trinket_sync_slot @@ -331,7 +357,7 @@ AddFunction havoccooldowncdactions AddFunction havoccooldowncdpostconditions { - not target.debuffpresent(sinful_brand) and { not runeforge(agony_gaze_runeforge) or spellcooldown(eye_beam) <= gcd() and fury() >= 30 or { not checkboxon(opt_meta_only_during_boss) or isbossfight() } and spellcooldown(metamorphosis) <= 0 } and spell(sinful_brand) or { not hastalent(demonic_talent) and not waiting_for_momentum() and not pooling_for_meta() or buffpresent(furious_gaze_buff) } and spell(the_hunt) or { enemies() > havocdesiredtargets() or 600 > 30 } and spell(elysian_decree) + not target.debuffpresent(sinful_brand) and { not runeforge(agony_gaze_runeforge) or spellcooldown(eye_beam) <= gcd() and fury() >= 30 } and { not { not spellcooldown(metamorphosis) > 0 } or enemies() == 1 } and spell(sinful_brand) or { not hastalent(demonic_talent) and not waiting_for_momentum() and not pooling_for_meta() or buffpresent(furious_gaze_buff) } and spell(the_hunt) or { enemies() > havocdesiredtargets() or 600 > 30 } and spell(elysian_decree) } ### actions.default @@ -397,11 +423,12 @@ AddFunction havoc_defaultcdactions #variable,name=blade_dance,if=runeforge.chaos_theory,value=buff.chaos_theory.down|talent.first_blood.enabled&spell_targets.blade_dance1>=(2-talent.trail_of_ruin.enabled)|!talent.cycle_of_hatred.enabled&spell_targets.blade_dance1>=(4-talent.trail_of_ruin.enabled) #variable,name=blade_dance,if=runeforge.darkglare_medallion,value=talent.first_blood.enabled|(buff.metamorphosis.up|talent.trail_of_ruin.enabled|debuff.essence_break.up)&spell_targets.blade_dance1>=(3-talent.trail_of_ruin.enabled)|!talent.demonic.enabled&spell_targets.blade_dance1>=4 #variable,name=blade_dance,op=reset,if=talent.essence_break.enabled&cooldown.essence_break.ready + #variable,name=blade_dance,if=runeforge.agony_gaze&talent.cycle_of_hatred,value=variable.blade_dance&active_dot.sinful_brand<2 #variable,name=pooling_for_meta,value=!talent.demonic.enabled&cooldown.metamorphosis.remains<6&fury.deficit>30 #variable,name=pooling_for_blade_dance,value=variable.blade_dance&(fury<75-talent.first_blood.enabled*20) #variable,name=pooling_for_eye_beam,value=talent.demonic.enabled&!talent.blind_fury.enabled&cooldown.eye_beam.remains<(gcd.max*2)&fury.deficit>20 #variable,name=waiting_for_momentum,value=talent.momentum.enabled&!buff.momentum.up - #variable,name=waiting_for_agony_gaze,if=runeforge.agony_gaze,value=!dot.sinful_brand.ticking&cooldown.sinful_brand.remains 0 } or enemies() == 1 } and enemies(tagged=1) <= 3 } AddFunction waiting_for_momentum @@ -568,6 +596,13 @@ AddFunction pooling_for_meta AddFunction blade_dance { + if runeforge(agony_gaze_runeforge) and hastalent(cycle_of_hatred_talent) + { + if hastalent(essence_break_talent) and spellcooldown(essence_break) <= 0 0 + if runeforge(darkglare_medallion_runeforge) hastalent(first_blood_talent) or { buffpresent(metamorphosis_buff) or hastalent(trail_of_ruin_talent) or target.debuffpresent(essence_break_debuff) } and enemies(tagged=1) >= 3 - talentpoints(trail_of_ruin_talent) or not hastalent(demonic_talent) and enemies(tagged=1) >= 4 + if runeforge(chaos_theory_runeforge) buffexpires(chaos_blades) or hastalent(first_blood_talent) and enemies(tagged=1) >= 2 - talentpoints(trail_of_ruin_talent) or not hastalent(cycle_of_hatred_talent) and enemies(tagged=1) >= 4 - talentpoints(trail_of_ruin_talent) + if not runeforge(chaos_theory_runeforge) and not runeforge(darkglare_medallion_runeforge) hastalent(first_blood_talent) or enemies(tagged=1) >= 3 - talentpoints(trail_of_ruin_talent) + } and debuffcountonany(sinful_brand) < 2 if hastalent(essence_break_talent) and spellcooldown(essence_break) <= 0 0 if runeforge(darkglare_medallion_runeforge) hastalent(first_blood_talent) or { buffpresent(metamorphosis_buff) or hastalent(trail_of_ruin_talent) or target.debuffpresent(essence_break_debuff) } and enemies(tagged=1) >= 3 - talentpoints(trail_of_ruin_talent) or not hastalent(demonic_talent) and enemies(tagged=1) >= 4 if runeforge(chaos_theory_runeforge) buffexpires(chaos_blades) or hastalent(first_blood_talent) and enemies(tagged=1) >= 2 - talentpoints(trail_of_ruin_talent) or not hastalent(cycle_of_hatred_talent) and enemies(tagged=1) >= 4 - talentpoints(trail_of_ruin_talent) @@ -576,7 +611,7 @@ AddFunction blade_dance AddFunction use_eye_beam_fury_condition { - hastalent(blind_fury_talent) and { runeforge(darkglare_medallion_runeforge) or hastalent(demon_blades_talent) } + hastalent(blind_fury_talent) and { runeforge(darkglare_medallion_runeforge) or hastalent(demon_blades_talent) and not runeforge(agony_gaze_runeforge) } } AddFunction trinket_sync_slot @@ -651,6 +686,15 @@ AddFunction havocprecombatshortcdpostconditions AddFunction havocprecombatcdactions { + #flask + #augmentation + #food + #snapshot_stats + #variable,name=trinket_sync_slot,value=1,if=trinket.1.has_stat.any_dps&(!trinket.2.has_stat.any_dps|trinket.1.cooldown.duration>=trinket.2.cooldown.duration) + #variable,name=trinket_sync_slot,value=2,if=trinket.2.has_stat.any_dps&(!trinket.1.has_stat.any_dps|trinket.2.cooldown.duration>trinket.1.cooldown.duration) + #variable,name=use_eye_beam_fury_condition,value=talent.blind_fury.enabled&(runeforge.darkglare_medallion|talent.demon_blades.enabled&!runeforge.agony_gaze) + #arcane_torrent + spell(arcane_torrent) } AddFunction havocprecombatcdpostconditions @@ -665,8 +709,6 @@ AddFunction havocnormalmainactions if hastalent(momentum_talent) and buffexpires(prepared_buff) and timeincombat() > 1 and checkboxon(opt_vengeful_retreat) spell(vengeful_retreat) #fel_rush,if=(buff.unbound_chaos.up|variable.waiting_for_momentum&(!talent.unbound_chaos.enabled|!cooldown.immolation_aura.ready))&(charges=2|(raid_event.movement.in>10&raid_event.adds.in>10)) if { buffpresent(unbound_chaos_buff) or waiting_for_momentum() and { not hastalent(unbound_chaos_talent) or not spellcooldown(immolation_aura) <= 0 } } and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) spell(fel_rush) - #fel_barrage,if=active_enemies>desired_targets|raid_event.adds.in>30 - if enemies() > havocdesiredtargets() or 600 > 30 spell(fel_barrage) #death_sweep,if=variable.blade_dance if blade_dance() spell(death_sweep) #glaive_tempest,if=!variable.waiting_for_momentum&(active_enemies>desired_targets|raid_event.adds.in>10) @@ -705,20 +747,29 @@ AddFunction havocnormalmainpostconditions AddFunction havocnormalshortcdactions { - unless hastalent(momentum_talent) and buffexpires(prepared_buff) and timeincombat() > 1 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or { buffpresent(unbound_chaos_buff) or waiting_for_momentum() and { not hastalent(unbound_chaos_talent) or not spellcooldown(immolation_aura) <= 0 } } and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or { enemies() > havocdesiredtargets() or 600 > 30 } and spell(fel_barrage) or blade_dance() and spell(death_sweep) + #eye_beam,if=runeforge.agony_gaze&(active_enemies>desired_targets|raid_event.adds.in>15)&dot.sinful_brand.ticking&dot.sinful_brand.remains<=gcd + if runeforge(agony_gaze_runeforge) and { enemies() > havocdesiredtargets() or 600 > 15 } and target.debuffpresent(sinful_brand) and target.debuffremaining(sinful_brand) <= gcd() spell(eye_beam) + + unless hastalent(momentum_talent) and buffexpires(prepared_buff) and timeincombat() > 1 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or { buffpresent(unbound_chaos_buff) or waiting_for_momentum() and { not hastalent(unbound_chaos_talent) or not spellcooldown(immolation_aura) <= 0 } } and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) { - #immolation_aura,if=!buff.immolation_aura.up - if not buffpresent(immolation_aura) spell(immolation_aura) + #fel_barrage,if=active_enemies>desired_targets|raid_event.adds.in>30 + if enemies() > havocdesiredtargets() or 600 > 30 spell(fel_barrage) - unless not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) + unless blade_dance() and spell(death_sweep) { - #eye_beam,if=!variable.waiting_for_momentum&(active_enemies>desired_targets|raid_event.adds.in>15&(!variable.use_eye_beam_fury_condition|spell_targets>1|fury<70)&!variable.waiting_for_agony_gaze) - if not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 15 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() } spell(eye_beam) + #immolation_aura,if=!buff.immolation_aura.up + if not buffpresent(immolation_aura) spell(immolation_aura) - unless blade_dance() and spell(blade_dance) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 or buffremaining(metamorphosis_buff) < 5 } and not pooling_for_blade_dance() and spell(annihilation) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 } and not pooling_for_meta() and not pooling_for_blade_dance() and spell(chaos_strike_havoc) + unless not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) { - #eye_beam,if=talent.blind_fury.enabled&raid_event.adds.in>cooldown&!variable.waiting_for_agony_gaze - if hastalent(blind_fury_talent) and 600 > spellcooldown(eye_beam) and not waiting_for_agony_gaze() spell(eye_beam) + #eye_beam,if=!variable.waiting_for_momentum&(active_enemies>desired_targets|raid_event.adds.in>15&(!variable.use_eye_beam_fury_condition|spell_targets>1|fury<70)&!variable.waiting_for_agony_gaze) + if not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 15 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() } spell(eye_beam) + + unless blade_dance() and spell(blade_dance) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 or buffremaining(metamorphosis_buff) < 5 } and not pooling_for_blade_dance() and spell(annihilation) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 } and not pooling_for_meta() and not pooling_for_blade_dance() and spell(chaos_strike_havoc) + { + #eye_beam,if=talent.blind_fury.enabled&raid_event.adds.in>cooldown&!variable.waiting_for_agony_gaze + if hastalent(blind_fury_talent) and 600 > spellcooldown(eye_beam) and not waiting_for_agony_gaze() spell(eye_beam) + } } } } @@ -726,7 +777,7 @@ AddFunction havocnormalshortcdactions AddFunction havocnormalshortcdpostconditions { - hastalent(momentum_talent) and buffexpires(prepared_buff) and timeincombat() > 1 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or { buffpresent(unbound_chaos_buff) or waiting_for_momentum() and { not hastalent(unbound_chaos_talent) or not spellcooldown(immolation_aura) <= 0 } } and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or { enemies() > havocdesiredtargets() or 600 > 30 } and spell(fel_barrage) or blade_dance() and spell(death_sweep) or not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) or blade_dance() and spell(blade_dance) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 or buffremaining(metamorphosis_buff) < 5 } and not pooling_for_blade_dance() and spell(annihilation) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 } and not pooling_for_meta() and not pooling_for_blade_dance() and spell(chaos_strike_havoc) or runeforge(burning_wound_runeforge) and target.debuffremaining(burning_wound_debuff) < 4 and spell(demons_bite) or spell(demons_bite) or not hastalent(momentum_talent) and 600 > charges(fel_rush) * 10 and hastalent(demon_blades_talent) and checkboxon(opt_fel_rush) and spell(fel_rush) or { target.distance() > 15 or not target.inrange(chaos_strike) } and spell(felblade) or { target.distance() > 15 or not target.inrange(chaos_strike) and not hastalent(momentum_talent) } and checkboxon(opt_fel_rush) and spell(fel_rush) or target.distance() > 15 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or hastalent(demon_blades_talent) and spell(throw_glaive) + hastalent(momentum_talent) and buffexpires(prepared_buff) and timeincombat() > 1 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or { buffpresent(unbound_chaos_buff) or waiting_for_momentum() and { not hastalent(unbound_chaos_talent) or not spellcooldown(immolation_aura) <= 0 } } and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or blade_dance() and spell(death_sweep) or not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) or blade_dance() and spell(blade_dance) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 or buffremaining(metamorphosis_buff) < 5 } and not pooling_for_blade_dance() and spell(annihilation) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 } and not pooling_for_meta() and not pooling_for_blade_dance() and spell(chaos_strike_havoc) or runeforge(burning_wound_runeforge) and target.debuffremaining(burning_wound_debuff) < 4 and spell(demons_bite) or spell(demons_bite) or not hastalent(momentum_talent) and 600 > charges(fel_rush) * 10 and hastalent(demon_blades_talent) and checkboxon(opt_fel_rush) and spell(fel_rush) or { target.distance() > 15 or not target.inrange(chaos_strike) } and spell(felblade) or { target.distance() > 15 or not target.inrange(chaos_strike) and not hastalent(momentum_talent) } and checkboxon(opt_fel_rush) and spell(fel_rush) or target.distance() > 15 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or hastalent(demon_blades_talent) and spell(throw_glaive) } AddFunction havocnormalcdactions @@ -735,7 +786,7 @@ AddFunction havocnormalcdactions AddFunction havocnormalcdpostconditions { - hastalent(momentum_talent) and buffexpires(prepared_buff) and timeincombat() > 1 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or { buffpresent(unbound_chaos_buff) or waiting_for_momentum() and { not hastalent(unbound_chaos_talent) or not spellcooldown(immolation_aura) <= 0 } } and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or { enemies() > havocdesiredtargets() or 600 > 30 } and spell(fel_barrage) or blade_dance() and spell(death_sweep) or not buffpresent(immolation_aura) and spell(immolation_aura) or not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) or not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 15 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() } and spell(eye_beam) or blade_dance() and spell(blade_dance) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 or buffremaining(metamorphosis_buff) < 5 } and not pooling_for_blade_dance() and spell(annihilation) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 } and not pooling_for_meta() and not pooling_for_blade_dance() and spell(chaos_strike_havoc) or hastalent(blind_fury_talent) and 600 > spellcooldown(eye_beam) and not waiting_for_agony_gaze() and spell(eye_beam) or runeforge(burning_wound_runeforge) and target.debuffremaining(burning_wound_debuff) < 4 and spell(demons_bite) or spell(demons_bite) or not hastalent(momentum_talent) and 600 > charges(fel_rush) * 10 and hastalent(demon_blades_talent) and checkboxon(opt_fel_rush) and spell(fel_rush) or { target.distance() > 15 or not target.inrange(chaos_strike) } and spell(felblade) or { target.distance() > 15 or not target.inrange(chaos_strike) and not hastalent(momentum_talent) } and checkboxon(opt_fel_rush) and spell(fel_rush) or target.distance() > 15 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or hastalent(demon_blades_talent) and spell(throw_glaive) + runeforge(agony_gaze_runeforge) and { enemies() > havocdesiredtargets() or 600 > 15 } and target.debuffpresent(sinful_brand) and target.debuffremaining(sinful_brand) <= gcd() and spell(eye_beam) or hastalent(momentum_talent) and buffexpires(prepared_buff) and timeincombat() > 1 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or { buffpresent(unbound_chaos_buff) or waiting_for_momentum() and { not hastalent(unbound_chaos_talent) or not spellcooldown(immolation_aura) <= 0 } } and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or { enemies() > havocdesiredtargets() or 600 > 30 } and spell(fel_barrage) or blade_dance() and spell(death_sweep) or not buffpresent(immolation_aura) and spell(immolation_aura) or not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) or not waiting_for_momentum() and { enemies() > havocdesiredtargets() or 600 > 15 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() } and spell(eye_beam) or blade_dance() and spell(blade_dance) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 or buffremaining(metamorphosis_buff) < 5 } and not pooling_for_blade_dance() and spell(annihilation) or { hastalent(demon_blades_talent) or not waiting_for_momentum() or furydeficit() < 30 } and not pooling_for_meta() and not pooling_for_blade_dance() and spell(chaos_strike_havoc) or hastalent(blind_fury_talent) and 600 > spellcooldown(eye_beam) and not waiting_for_agony_gaze() and spell(eye_beam) or runeforge(burning_wound_runeforge) and target.debuffremaining(burning_wound_debuff) < 4 and spell(demons_bite) or spell(demons_bite) or not hastalent(momentum_talent) and 600 > charges(fel_rush) * 10 and hastalent(demon_blades_talent) and checkboxon(opt_fel_rush) and spell(fel_rush) or { target.distance() > 15 or not target.inrange(chaos_strike) } and spell(felblade) or { target.distance() > 15 or not target.inrange(chaos_strike) and not hastalent(momentum_talent) } and checkboxon(opt_fel_rush) and spell(fel_rush) or target.distance() > 15 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or hastalent(demon_blades_talent) and spell(throw_glaive) } ### actions.demonic @@ -784,10 +835,13 @@ AddFunction havocdemonicmainpostconditions AddFunction havocdemonicshortcdactions { + #eye_beam,if=runeforge.agony_gaze&(active_enemies>desired_targets|raid_event.adds.in>25-talent.cycle_of_hatred*10)&dot.sinful_brand.ticking&dot.sinful_brand.remains<=gcd + if runeforge(agony_gaze_runeforge) and { enemies() > havocdesiredtargets() or 600 > 25 - talentpoints(cycle_of_hatred_talent) * 10 } and target.debuffpresent(sinful_brand) and target.debuffremaining(sinful_brand) <= gcd() spell(eye_beam) + unless hastalent(unbound_chaos_talent) and buffpresent(unbound_chaos_buff) and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or blade_dance() and spell(death_sweep) or { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) { - #eye_beam,if=active_enemies>desired_targets|raid_event.adds.in>25&(!variable.use_eye_beam_fury_condition|spell_targets>1|fury<70)&!variable.waiting_for_agony_gaze - if enemies() > havocdesiredtargets() or 600 > 25 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() spell(eye_beam) + #eye_beam,if=active_enemies>desired_targets|raid_event.adds.in>25-talent.cycle_of_hatred*10&(!variable.use_eye_beam_fury_condition|spell_targets>1|fury<70)&!variable.waiting_for_agony_gaze + if enemies() > havocdesiredtargets() or 600 > 25 - talentpoints(cycle_of_hatred_talent) * 10 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() spell(eye_beam) unless blade_dance() and not { { not checkboxon(opt_meta_only_during_boss) or isbossfight() } and spellcooldown(metamorphosis) <= 0 } and { spellcooldown(eye_beam) > 5 or 600 > spellcooldown(blade_dance) and 600 < 25 } and spell(blade_dance) { @@ -808,7 +862,7 @@ AddFunction havocdemoniccdactions AddFunction havocdemoniccdpostconditions { - hastalent(unbound_chaos_talent) and buffpresent(unbound_chaos_buff) and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or blade_dance() and spell(death_sweep) or { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) or { enemies() > havocdesiredtargets() or 600 > 25 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() } and spell(eye_beam) or blade_dance() and not { { not checkboxon(opt_meta_only_during_boss) or isbossfight() } and spellcooldown(metamorphosis) <= 0 } and { spellcooldown(eye_beam) > 5 or 600 > spellcooldown(blade_dance) and 600 < 25 } and spell(blade_dance) or not buffpresent(immolation_aura) and spell(immolation_aura) or not pooling_for_blade_dance() and spell(annihilation) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or not pooling_for_blade_dance() and not pooling_for_eye_beam() and spell(chaos_strike_havoc) or hastalent(demon_blades_talent) and not spellcooldown(eye_beam) <= 0 and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or runeforge(burning_wound_runeforge) and target.debuffremaining(burning_wound_debuff) < 4 and spell(demons_bite) or not hastalent(demon_blades_talent) and enemies(tagged=1) > 1 and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or spell(demons_bite) or not target.inrange(chaos_strike) and spell(throw_glaive) or { target.distance() > 15 or not target.inrange(chaos_strike) } and checkboxon(opt_fel_rush) and spell(fel_rush) or target.distance() > 15 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or hastalent(demon_blades_talent) and spell(throw_glaive) + runeforge(agony_gaze_runeforge) and { enemies() > havocdesiredtargets() or 600 > 25 - talentpoints(cycle_of_hatred_talent) * 10 } and target.debuffpresent(sinful_brand) and target.debuffremaining(sinful_brand) <= gcd() and spell(eye_beam) or hastalent(unbound_chaos_talent) and buffpresent(unbound_chaos_buff) and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or blade_dance() and spell(death_sweep) or { enemies() > havocdesiredtargets() or 600 > 10 } and spell(glaive_tempest) or conduit(serrated_glaive_conduit) and spellcooldown(eye_beam) < 6 and not buffpresent(metamorphosis_buff) and not target.debuffpresent(exposed_wound_debuff) and spell(throw_glaive) or { enemies() > havocdesiredtargets() or 600 > 25 - talentpoints(cycle_of_hatred_talent) * 10 and { not use_eye_beam_fury_condition() or enemies(tagged=1) > 1 or fury() < 70 } and not waiting_for_agony_gaze() } and spell(eye_beam) or blade_dance() and not { { not checkboxon(opt_meta_only_during_boss) or isbossfight() } and spellcooldown(metamorphosis) <= 0 } and { spellcooldown(eye_beam) > 5 or 600 > spellcooldown(blade_dance) and 600 < 25 } and spell(blade_dance) or not buffpresent(immolation_aura) and spell(immolation_aura) or not pooling_for_blade_dance() and spell(annihilation) or furydeficit() >= 40 and spell(felblade) or spell(essence_break) or not pooling_for_blade_dance() and not pooling_for_eye_beam() and spell(chaos_strike_havoc) or hastalent(demon_blades_talent) and not spellcooldown(eye_beam) <= 0 and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or runeforge(burning_wound_runeforge) and target.debuffremaining(burning_wound_debuff) < 4 and spell(demons_bite) or not hastalent(demon_blades_talent) and enemies(tagged=1) > 1 and { charges(fel_rush) == 2 or 600 > 10 and 600 > 10 } and checkboxon(opt_fel_rush) and spell(fel_rush) or spell(demons_bite) or not target.inrange(chaos_strike) and spell(throw_glaive) or { target.distance() > 15 or not target.inrange(chaos_strike) } and checkboxon(opt_fel_rush) and spell(fel_rush) or target.distance() > 15 and checkboxon(opt_vengeful_retreat) and spell(vengeful_retreat) or hastalent(demon_blades_talent) and spell(throw_glaive) } ### actions.cooldown @@ -823,8 +877,8 @@ AddFunction havoccooldownmainpostconditions AddFunction havoccooldownshortcdactions { - #sinful_brand,if=!dot.sinful_brand.ticking&(!runeforge.agony_gaze|(cooldown.eye_beam.remains<=gcd&fury>=30|cooldown.metamorphosis.ready)) - if not target.debuffpresent(sinful_brand) and { not runeforge(agony_gaze_runeforge) or spellcooldown(eye_beam) <= gcd() and fury() >= 30 or { not checkboxon(opt_meta_only_during_boss) or isbossfight() } and spellcooldown(metamorphosis) <= 0 } spell(sinful_brand) + #sinful_brand,if=!dot.sinful_brand.ticking&(!runeforge.agony_gaze|(cooldown.eye_beam.remains<=gcd&fury>=30))&(!cooldown.metamorphosis.up|active_enemies=1) + if not target.debuffpresent(sinful_brand) and { not runeforge(agony_gaze_runeforge) or spellcooldown(eye_beam) <= gcd() and fury() >= 30 } and { not { not spellcooldown(metamorphosis) > 0 } or enemies() == 1 } spell(sinful_brand) #the_hunt,if=!talent.demonic.enabled&!variable.waiting_for_momentum&!variable.pooling_for_meta|buff.furious_gaze.up if not hastalent(demonic_talent) and not waiting_for_momentum() and not pooling_for_meta() or buffpresent(furious_gaze_buff) spell(the_hunt) #elysian_decree,if=(active_enemies>desired_targets|raid_event.adds.in>30) @@ -841,10 +895,10 @@ AddFunction havoccooldowncdactions if not hastalent(demonic_talent) and iscovenant("venthyr") and runeforge(agony_gaze_runeforge) and target.debuffremaining(sinful_brand) > 8 and enemies(tagged=1) < 2 and { spellcooldown(eye_beam) > 20 or fightremains() < 25 } and { not checkboxon(opt_meta_only_during_boss) or isbossfight() } spell(metamorphosis) #metamorphosis,landing_distance=10,if=talent.demonic.enabled&covenant.venthyr.enabled&runeforge.agony_gaze&dot.sinful_brand.remains>8&spell_targets.metamorphosis_impact<2&(cooldown.eye_beam.remains>20&!variable.blade_dance|cooldown.blade_dance.remains>gcd.max|fight_remains<25) if hastalent(demonic_talent) and iscovenant("venthyr") and runeforge(agony_gaze_runeforge) and target.debuffremaining(sinful_brand) > 8 and enemies(tagged=1) < 2 and { spellcooldown(eye_beam) > 20 and not blade_dance() or spellcooldown(blade_dance) > gcd() or fightremains() < 25 } and { not checkboxon(opt_meta_only_during_boss) or isbossfight() } spell(metamorphosis) - #metamorphosis,if=!talent.demonic.enabled&(cooldown.eye_beam.remains>20&(!covenant.venthyr.enabled|dot.sinful_brand.remains<=8)|fight_remains<25) - if not hastalent(demonic_talent) and { spellcooldown(eye_beam) > 20 and { not iscovenant("venthyr") or target.debuffremaining(sinful_brand) <= 8 } or fightremains() < 25 } and { not checkboxon(opt_meta_only_during_boss) or isbossfight() } spell(metamorphosis) - #metamorphosis,if=talent.demonic.enabled&(cooldown.eye_beam.remains>20&(!variable.blade_dance|cooldown.blade_dance.remains>gcd.max)|fight_remains<25)&(!covenant.venthyr.enabled|dot.sinful_brand.remains<=8) - if hastalent(demonic_talent) and { spellcooldown(eye_beam) > 20 and { not blade_dance() or spellcooldown(blade_dance) > gcd() } or fightremains() < 25 } and { not iscovenant("venthyr") or target.debuffremaining(sinful_brand) <= 8 } and { not checkboxon(opt_meta_only_during_boss) or isbossfight() } spell(metamorphosis) + #metamorphosis,if=!talent.demonic.enabled&(cooldown.eye_beam.remains>20&(!covenant.venthyr.enabled|dot.sinful_brand.remains<=8|spell_targets.metamorphosis_impact>1)|fight_remains<25) + if not hastalent(demonic_talent) and { spellcooldown(eye_beam) > 20 and { not iscovenant("venthyr") or target.debuffremaining(sinful_brand) <= 8 or enemies(tagged=1) > 1 } or fightremains() < 25 } and { not checkboxon(opt_meta_only_during_boss) or isbossfight() } spell(metamorphosis) + #metamorphosis,if=talent.demonic.enabled&(cooldown.eye_beam.remains>20&(!variable.blade_dance|cooldown.blade_dance.remains>gcd.max)&(!covenant.venthyr.enabled|dot.sinful_brand.remains<=8|spell_targets.metamorphosis_impact>1)|fight_remains<25) + if hastalent(demonic_talent) and { spellcooldown(eye_beam) > 20 and { not blade_dance() or spellcooldown(blade_dance) > gcd() } and { not iscovenant("venthyr") or target.debuffremaining(sinful_brand) <= 8 or enemies(tagged=1) > 1 } or fightremains() < 25 } and { not checkboxon(opt_meta_only_during_boss) or isbossfight() } spell(metamorphosis) #potion,if=buff.metamorphosis.remains>25|fight_remains<60 if { buffremaining(metamorphosis_buff) > 25 or fightremains() < 60 } and { checkboxon(opt_use_consumables) and target.classification(worldboss) } item(potion_of_phantom_fire_item usable=1) #use_items,slots=trinket1,if=variable.trinket_sync_slot=1&(buff.metamorphosis.up|(!talent.demonic.enabled&cooldown.metamorphosis.remains>(fight_remains>?trinket.1.cooldown.duration%2))|fight_remains<=20)|(variable.trinket_sync_slot=2&!trinket.2.cooldown.ready)|!variable.trinket_sync_slot @@ -855,7 +909,7 @@ AddFunction havoccooldowncdactions AddFunction havoccooldowncdpostconditions { - not target.debuffpresent(sinful_brand) and { not runeforge(agony_gaze_runeforge) or spellcooldown(eye_beam) <= gcd() and fury() >= 30 or { not checkboxon(opt_meta_only_during_boss) or isbossfight() } and spellcooldown(metamorphosis) <= 0 } and spell(sinful_brand) or { not hastalent(demonic_talent) and not waiting_for_momentum() and not pooling_for_meta() or buffpresent(furious_gaze_buff) } and spell(the_hunt) or { enemies() > havocdesiredtargets() or 600 > 30 } and spell(elysian_decree) + not target.debuffpresent(sinful_brand) and { not runeforge(agony_gaze_runeforge) or spellcooldown(eye_beam) <= gcd() and fury() >= 30 } and { not { not spellcooldown(metamorphosis) > 0 } or enemies() == 1 } and spell(sinful_brand) or { not hastalent(demonic_talent) and not waiting_for_momentum() and not pooling_for_meta() or buffpresent(furious_gaze_buff) } and spell(the_hunt) or { enemies() > havocdesiredtargets() or 600 > 30 } and spell(elysian_decree) } ### actions.default @@ -921,11 +975,12 @@ AddFunction havoc_defaultcdactions #variable,name=blade_dance,if=runeforge.chaos_theory,value=buff.chaos_theory.down|talent.first_blood.enabled&spell_targets.blade_dance1>=(2-talent.trail_of_ruin.enabled)|!talent.cycle_of_hatred.enabled&spell_targets.blade_dance1>=(4-talent.trail_of_ruin.enabled) #variable,name=blade_dance,if=runeforge.darkglare_medallion,value=talent.first_blood.enabled|(buff.metamorphosis.up|talent.trail_of_ruin.enabled|debuff.essence_break.up)&spell_targets.blade_dance1>=(3-talent.trail_of_ruin.enabled)|!talent.demonic.enabled&spell_targets.blade_dance1>=4 #variable,name=blade_dance,op=reset,if=talent.essence_break.enabled&cooldown.essence_break.ready + #variable,name=blade_dance,if=runeforge.agony_gaze&talent.cycle_of_hatred,value=variable.blade_dance&active_dot.sinful_brand<2 #variable,name=pooling_for_meta,value=!talent.demonic.enabled&cooldown.metamorphosis.remains<6&fury.deficit>30 #variable,name=pooling_for_blade_dance,value=variable.blade_dance&(fury<75-talent.first_blood.enabled*20) #variable,name=pooling_for_eye_beam,value=talent.demonic.enabled&!talent.blind_fury.enabled&cooldown.eye_beam.remains<(gcd.max*2)&fury.deficit>20 #variable,name=waiting_for_momentum,value=talent.momentum.enabled&!buff.momentum.up - #variable,name=waiting_for_agony_gaze,if=runeforge.agony_gaze,value=!dot.sinful_brand.ticking&cooldown.sinful_brand.remains Physical damage and ][]199552s1 nearby enemies for Physical damage?s320398[, and increase your chance to dodge by 193311s1 for 193311d.][.] +# Strike ?a206416[your primary target for Physical damage and ][]all nearby enemies for Physical damage?s320398[, and increase your chance to dodge by 193311s1 for 193311d.][. Deals reduced damage beyond 199552s1 targets.] SpellInfo(blade_dance fury=35 cd=15 duration=1) # Dodge chance increased by s2. SpellAddBuff(blade_dance blade_dance add=1) Define(blind_faith_buff 355894) -# Elysian Decree shatters s1 additional Lesser Soul Fragments and grants you Blind Faith for 20 seconds. For each Lesser Soul Fragment you consume while Blind Faith is active you gain s2 Mastery and 356070s1 Fury. +# Elysian Decree shatters s1 additional Lesser Soul Fragments and grants you Blind Faith for 20 seconds. For each Lesser Soul Fragment you consume while Blind Faith is active you gain s2 Versatility and 356070s1 Fury. SpellInfo(blind_faith_buff duration=20 gcd=0 offgcd=1) - # Mastery increased by w1. + # Versatility increased by w1. SpellAddBuff(blind_faith_buff blind_faith_buff add=1) Define(bulk_extraction 320341) # Demolish the spirit of all those around you, dealing s1 Fire damage to nearby enemies and extracting up to s2 Lesser Soul Fragments, drawing them to you for immediate consumption. @@ -94,7 +97,7 @@ Define(eye_beam 198013) # Blasts all enemies in front of you, ?s320415[dealing guaranteed critical strikes][] for up to Chaos damage over 2 seconds. Deals reduced damage to secondary targets.?s343311[rnrnWhen Eye Beam finishes fully channeling, your Haste is increased by an additional 343312s1 for 12 seconds.][] SpellInfo(eye_beam fury=30 cd=30 duration=2 channel=2 tick=0.2) Define(fel_barrage 258925) -# Unleash a torrent of Fel energy over 3 seconds, inflicting ((3 seconds/t1)+1)*258926s1 Chaos damage to 258926s2 enemies within 258926A1 yds. +# Unleash a torrent of Fel energy over 3 seconds, inflicting ((3 seconds/t1)+1)*258926s1 Chaos damage to all enemies within 258926A1 yds. Deals reduced damage beyond 258926s2 targets. SpellInfo(fel_barrage cd=60 duration=3 channel=3 tick=0.25) SpellRequire(fel_barrage unusable set=1 enabled=(not hastalent(fel_barrage_talent))) # Unleashing Fel. @@ -145,7 +148,7 @@ Define(furious_gaze_buff 273232) # Haste increased by w1. SpellAddBuff(furious_gaze_buff furious_gaze_buff add=1) Define(glaive_tempest 342817) -# Launch two demonic glaives in a whirlwind of energy, causing 14*342857s1 Chaos damage over 3 seconds to 342857i nearby enemies. +# Launch two demonic glaives in a whirlwind of energy, causing 14*342857s1 Chaos damage over 3 seconds to all nearby enemies. Deals reduced damage beyond s2 targets. SpellInfo(glaive_tempest fury=30 cd=20 duration=3) SpellRequire(glaive_tempest unusable set=1 enabled=(not hastalent(glaive_tempest_talent))) Define(immolation_aura 258920) @@ -206,14 +209,14 @@ Define(sigil_of_silence 202137) SpellInfo(sigil_of_silence cd=120 duration=2) Define(sinful_brand 317009) # Brand an enemy with the mark of the Venthyr, reducing their melee attack speed by s3, their casting speed by s2, and inflicting o1 Shadow damage over 8 seconds.rnrnActivating Metamorphosis applies Sinful Brand to all nearby enemies. - SpellInfo(sinful_brand cd=60 duration=8 tick=2) + SpellInfo(sinful_brand cd=45 duration=8 tick=2) # Suffering w1 Shadow damage every t1 sec. Casting speed slowed by w2. Melee attack speed slowed by w3. SpellAddTargetDebuff(sinful_brand sinful_brand add=1) Define(soul_cleave 228477) -# Viciously strike 228478s2 enemies in front of you for 228478s1 Physical damage and heal yourself for s4.rnrnConsumes up to s3 Soul Fragments within s1 yds?s321021[ and heals you for an additional s5 for each Soul Fragment consumed][]. +# Viciously strike all enemies in front of you for 228478s1 Physical damage and heal yourself for s4. Deals reduced damage beyond 228478s2 targets.rnrnConsumes up to s3 Soul Fragments within s1 yds?s321021[ and heals you for an additional s5 for each Soul Fragment consumed][]. SpellInfo(soul_cleave fury=30) Define(spirit_bomb 247454) -# Consume up to s2 Soul Fragments within s1 yds and then explode, afflicting nearby enemies with Frailty for 20 seconds and damaging them for 247455s1 Fire per fragment.rnrnYou heal for 247456s1 of all damage you deal to enemies with Frailty. +# Consume up to s2 Soul Fragments within s1 yds and then explode, afflicting nearby enemies with Frailty for 20 seconds and damaging them for 247455s1 Fire per fragment. Deals reduced damage beyond s2 targets.rnrnYou heal for 247456s1 of all damage you deal to enemies with Frailty. SpellInfo(spirit_bomb fury=30 duration=1.5) SpellRequire(spirit_bomb unusable set=1 enabled=(not hastalent(spirit_bomb_talent))) Define(the_hunt 323639) @@ -269,7 +272,7 @@ Define(demonic_appetite_talent 22493) Define(essence_break_talent 21868) # Slash all enemies in front of you for s1 Chaos damage, and increase the damage your Chaos Strike and Blade Dance deal to them by 320338s1 for 8 seconds. Define(fel_barrage_talent 22547) -# Unleash a torrent of Fel energy over 3 seconds, inflicting ((3 seconds/t1)+1)*258926s1 Chaos damage to 258926s2 enemies within 258926A1 yds. +# Unleash a torrent of Fel energy over 3 seconds, inflicting ((3 seconds/t1)+1)*258926s1 Chaos damage to all enemies within 258926A1 yds. Deals reduced damage beyond 258926s2 targets. Define(fel_eruption_talent 22767) # Impales the target for s1 Chaos damage and stuns them for 4 seconds. Define(felblade_talent_vengeance 22504) @@ -281,13 +284,13 @@ Define(first_blood_talent 21867) Define(fracture_talent 22770) # Rapidly slash your target for 225919sw1+225921sw1 Physical damage, and shatter s1 Lesser Soul Fragments from them.rnrn|cFFFFFFFFGenerates s4 Fury.|r Define(glaive_tempest_talent 21862) -# Launch two demonic glaives in a whirlwind of energy, causing 14*342857s1 Chaos damage over 3 seconds to 342857i nearby enemies. +# Launch two demonic glaives in a whirlwind of energy, causing 14*342857s1 Chaos damage over 3 seconds to all nearby enemies. Deals reduced damage beyond s2 targets. Define(momentum_talent 21901) # Fel Rush increases your damage done by 208628s1 for 6 seconds.rnrnVengeful Retreat's cooldown is reduced by s1/-1000 sec, and it generates (203650s1/5)*10 seconds Fury over 10 seconds if it damages at least one enemy. Define(sigil_of_chains_talent 22511) # Place a Sigil of Chains at the target location that activates after 2 seconds.rnrnAll enemies affected by the sigil are pulled to its center and are snared, reducing movement speed by 204843s1 for 6 seconds. Define(spirit_bomb_talent 22540) -# Consume up to s2 Soul Fragments within s1 yds and then explode, afflicting nearby enemies with Frailty for 20 seconds and damaging them for 247455s1 Fire per fragment.rnrnYou heal for 247456s1 of all damage you deal to enemies with Frailty. +# Consume up to s2 Soul Fragments within s1 yds and then explode, afflicting nearby enemies with Frailty for 20 seconds and damaging them for 247455s1 Fire per fragment. Deals reduced damage beyond s2 targets.rnrnYou heal for 247456s1 of all damage you deal to enemies with Frailty. Define(trail_of_ruin_talent 22909) # The final slash of Blade Dance inflicts an additional 258883o1 Chaos damage over 4 seconds. Define(unbound_chaos_talent 22494) diff --git a/src/scripts/ovale_druid.ts b/src/scripts/ovale_druid.ts index b2bb58cab..1f23f1211 100644 --- a/src/scripts/ovale_druid.ts +++ b/src/scripts/ovale_druid.ts @@ -619,8 +619,8 @@ AddFunction balance_defaultcdactions #variable,name=is_aoe,value=spell_targets.starfall>1&(!talent.starlord.enabled|talent.stellar_drift.enabled)|spell_targets.starfall>2 #variable,name=is_cleave,value=spell_targets.starfire>1 #variable,name=in_gcd,value=prev_gcd.1.moonfire|prev_gcd.1.sunfire|prev_gcd.1.starsurge|prev_gcd.1.starfall|prev_gcd.1.fury_of_elune|prev.ravenous_frenzy|buff.ca_inc.remains=buff.ca_inc.duration|variable.is_aoe - #berserking,if=((!covenant.night_fae|!cooldown.convoke_the_spirits.up)&buff.ca_inc.remains>15&buff.ravenous_frenzy.remains<4&!covenant.venthyr|covenant.venthyr&buff.ca_inc.up&buff.ravenous_frenzy.up&(buff.ravenous_frenzy.remains<11-5*runeforge.sinful_hysteria|buff.ca_inc.remains<11|1%spell_haste<1.55))&variable.in_gcd - if { { not iscovenant("night_fae") or not { not spellcooldown(convoke_the_spirits) > 0 } } and buffremaining(ca_inc_buff) > 15 and buffremaining(ravenous_frenzy) < 4 and not iscovenant("venthyr") or iscovenant("venthyr") and buffpresent(ca_inc_buff) and buffpresent(ravenous_frenzy) and { buffremaining(ravenous_frenzy) < 11 - 5 * runeforge(sinful_hysteria_runeforge) or buffremaining(ca_inc_buff) < 11 or 1 / { 100 / { 100 + spellcastspeedpercent() } } < 1.55 } } and in_gcd() spell(berserking) + #berserking,if=((!covenant.night_fae|!cooldown.convoke_the_spirits.up)&buff.ca_inc.remains>15&!covenant.venthyr|covenant.venthyr&buff.ca_inc.up&buff.ravenous_frenzy.up&(buff.ravenous_frenzy.remains<11-5*runeforge.sinful_hysteria|buff.ca_inc.remains<11|1%spell_haste<1.55))&variable.in_gcd + if { { not iscovenant("night_fae") or not { not spellcooldown(convoke_the_spirits) > 0 } } and buffremaining(ca_inc_buff) > 15 and not iscovenant("venthyr") or iscovenant("venthyr") and buffpresent(ca_inc_buff) and buffpresent(ravenous_frenzy) and { buffremaining(ravenous_frenzy) < 11 - 5 * runeforge(sinful_hysteria_runeforge) or buffremaining(ca_inc_buff) < 11 or 1 / { 100 / { 100 + spellcastspeedpercent() } } < 1.55 } } and in_gcd() spell(berserking) #potion,if=(buff.ca_inc.remains>15&(!runeforge.sinful_hysteria|buff.ravenous_frenzy.remains<17-2*buff.bloodlust.up&buff.ravenous_frenzy.up)|fight_remains<25)&variable.in_gcd if { buffremaining(ca_inc_buff) > 15 and { not runeforge(sinful_hysteria_runeforge) or buffremaining(ravenous_frenzy) < 17 - 2 * buffpresent(bloodlust) and buffpresent(ravenous_frenzy) } or fightremains() < 25 } and in_gcd() and { checkboxon(opt_use_consumables) and target.classification(worldboss) } item(potion_of_spectral_intellect_item usable=1) #variable,name=convoke_desync,value=ceil((fight_remains-15-cooldown.ca_inc.remains)%180)=ceil((fight_remains-15-cooldown.convoke_the_spirits.duration-cooldown.convoke_the_spirits.remains)%180)&!raid_event.adds.exists|cooldown.ca_inc.remains>interpolated_fight_remains|runeforge.celestial_spirits&cooldown.ca_inc.remains>30|cooldown.convoke_the_spirits.remains>interpolated_fight_remains-10|!covenant.night_fae diff --git a/src/scripts/ovale_druid_spells.ts b/src/scripts/ovale_druid_spells.ts index 55ab8cf51..1098811c3 100644 --- a/src/scripts/ovale_druid_spells.ts +++ b/src/scripts/ovale_druid_spells.ts @@ -5,12 +5,12 @@ export function registerDruidSpells(scripts: OvaleScriptsClass) { const desc = "[9.1] Ovale: Druid baseline spells"; // THIS PART OF THIS FILE IS AUTOMATICALLY GENERATED let code = `Define(adaptive_swarm_damage 325733) -# Command a swarm that heals 325748o1 or deals 325733o1 Shadow damage over 12 seconds to a target, and increases the effectiveness of your periodic effects on them by 325748s2.rnrnUpon expiration, jumps to a target within s2 yards, alternating between friend and foe up to s1 times. +# Command a swarm that heals 325748o1 or deals 325733o1 Shadow damage over 12 seconds to a target, and increases the effectiveness of your periodic effects on them by 325748s2.rnrnUpon expiration, finds a new target, preferring to alternate between friend and foe up to s1 times. SpellInfo(adaptive_swarm_damage duration=12 max_stacks=5 gcd=0 offgcd=1 tick=2) # Suffering w1 Shadow damage every t1 sec and damage over time from @auracaster increased by w2. SpellAddTargetDebuff(adaptive_swarm_damage adaptive_swarm_damage add=1) Define(adaptive_swarm_heal 325748) -# Command a swarm that heals 325748o1 or deals 325733o1 Shadow damage over 12 seconds to a target, and increases the effectiveness of your periodic effects on them by 325748s2.rnrnUpon expiration, jumps to a target within s2 yards, alternating between friend and foe up to s1 times. +# Command a swarm that heals 325748o1 or deals 325733o1 Shadow damage over 12 seconds to a target, and increases the effectiveness of your periodic effects on them by 325748s2.rnrnUpon expiration, finds a new target, preferring to alternate between friend and foe up to s1 times. SpellInfo(adaptive_swarm_heal duration=12 max_stacks=5 gcd=0 offgcd=1 tick=2) # Restoring w1 health every t1 sec and healing over time from @auracaster increased by w2. SpellAddTargetDebuff(adaptive_swarm_heal adaptive_swarm_heal add=1) @@ -67,7 +67,7 @@ Define(bloodtalons_buff 145152) # Your next Rip or Ferocious Bite deals s1 increased damage. SpellAddBuff(bloodtalons_buff bloodtalons_buff add=1) Define(brutal_slash 202028) -# Strikes up to s3 nearby enemies with a massive slash, inflicting s2 Physical damage.rnrn|cFFFFFFFFAwards s1 combo lpoint:points;.|r +# Strikes all nearby enemies with a massive slash, inflicting s2 Physical damage. Deals reduced damage beyond s3 targets.rnrn|cFFFFFFFFAwards s1 combo lpoint:points;.|r SpellInfo(brutal_slash energy=25 cd=8 gcd=1 combopoints=-1) SpellRequire(brutal_slash unusable set=1 enabled=(not hastalent(brutal_slash_talent))) Define(cat_form 768) @@ -391,7 +391,7 @@ Define(swipe 213764) SpellInfo(swipe gcd=1) SpellRequire(swipe replaced_by set=brutal_slash enabled=(hastalent(brutal_slash_talent))) Define(swipe_cat 106785) -# Swipe up to s4 nearby enemies, inflicting s3 Physical damage.?a231283[ Deals s2 increased damage against bleeding targets.][]rnrn|cFFFFFFFFAwards s1 combo lpoint:points;.|r +# Swipe all nearby enemies, inflicting s3 Physical damage. Deals reduced damage beyond s4 targets.?a231283[ Deals s2 increased damage against bleeding targets.][]rnrn|cFFFFFFFFAwards s1 combo lpoint:points;.|r SpellInfo(swipe_cat energy=35 gcd=1 combopoints=-1) Define(thrash_cat 106830) # Strikes all nearby enemies, dealing m1 Bleed damage and an additional o2 Bleed damage over 15 seconds.rnrn|cFFFFFFFFAwards 211141s1 combo lpoint:points;.|r @@ -467,7 +467,7 @@ Define(bloodtalons_talent 21649) Define(brambles_talent 22419) # Sharp brambles protect you, absorbing and reflecting up to damage from each attack.rnrnWhile Barkskin is active, the brambles also deal 213709s1 Nature damage to all nearby enemies every 22812t3 sec. Define(brutal_slash_talent 21711) -# Strikes up to s3 nearby enemies with a massive slash, inflicting s2 Physical damage.rnrn|cFFFFFFFFAwards s1 combo lpoint:points;.|r +# Strikes all nearby enemies with a massive slash, inflicting s2 Physical damage. Deals reduced damage beyond s3 targets.rnrn|cFFFFFFFFAwards s1 combo lpoint:points;.|r Define(feral_affinity_talent_guardian 22156) # You gain:rnrn@spellicon131768 @spellname131768rnIncreases your movement speed by (25 of Spell Power).rnrnYou also learn:rnrn@spellicon1822 @spellname1822rn@spellicon1079 @spellname1079rn@spellicon22570 @spellname22570rnrnYour energy regeneration is increased by s2. Define(feral_frenzy_talent 21653) diff --git a/src/scripts/ovale_hunter.ts b/src/scripts/ovale_hunter.ts index 92f9d9a27..8d6d373b2 100644 --- a/src/scripts/ovale_hunter.ts +++ b/src/scripts/ovale_hunter.ts @@ -633,11 +633,6 @@ Include(ovale_common) Include(ovale_hunter_spells) -AddFunction etf_precast -{ - 0 -} - AddFunction sync_remains { if iscovenant("kyrian") spellcooldown(resonating_arrow) >? spellcooldown(trueshot) @@ -939,10 +934,10 @@ AddFunction marksmanshipstcdpostconditions AddFunction marksmanshipprecombatmainactions { - #aimed_shot,if=active_enemies<3&(!covenant.kyrian&!talent.volley|active_enemies<2)&!variable.etf_precast - if enemies() < 3 and { not iscovenant("kyrian") and not hastalent(volley_talent) or enemies() < 2 } and not etf_precast() spell(aimed_shot) - #steady_shot,if=active_enemies>2|(covenant.kyrian|talent.volley)&active_enemies=2|variable.etf_precast - if enemies() > 2 or { iscovenant("kyrian") or hastalent(volley_talent) } and enemies() == 2 or etf_precast() spell(steady_shot) + #aimed_shot,if=active_enemies<3&(!covenant.kyrian&!talent.volley|active_enemies<2) + if enemies() < 3 and { not iscovenant("kyrian") and not hastalent(volley_talent) or enemies() < 2 } spell(aimed_shot) + #steady_shot,if=active_enemies>2|(covenant.kyrian|talent.volley)&active_enemies=2 + if enemies() > 2 or { iscovenant("kyrian") or hastalent(volley_talent) } and enemies() == 2 spell(steady_shot) } AddFunction marksmanshipprecombatmainpostconditions @@ -953,14 +948,13 @@ AddFunction marksmanshipprecombatshortcdactions { #tar_trap,if=runeforge.soulforge_embers if runeforge(soulforge_embers_runeforge) spell(tar_trap) - #variable,name=etf_precast,value=0 - #double_tap,precast_time=10,if=active_enemies>1|!covenant.kyrian&!talent.volley|variable.etf_precast - if enemies() > 1 or not iscovenant("kyrian") and not hastalent(volley_talent) or etf_precast() spell(double_tap) + #double_tap,precast_time=10,if=active_enemies>1|!covenant.kyrian&!talent.volley + if enemies() > 1 or not iscovenant("kyrian") and not hastalent(volley_talent) spell(double_tap) } AddFunction marksmanshipprecombatshortcdpostconditions { - enemies() < 3 and { not iscovenant("kyrian") and not hastalent(volley_talent) or enemies() < 2 } and not etf_precast() and spell(aimed_shot) or { enemies() > 2 or { iscovenant("kyrian") or hastalent(volley_talent) } and enemies() == 2 or etf_precast() } and spell(steady_shot) + enemies() < 3 and { not iscovenant("kyrian") and not hastalent(volley_talent) or enemies() < 2 } and spell(aimed_shot) or { enemies() > 2 or { iscovenant("kyrian") or hastalent(volley_talent) } and enemies() == 2 } and spell(steady_shot) } AddFunction marksmanshipprecombatcdactions @@ -971,17 +965,11 @@ AddFunction marksmanshipprecombatcdactions #snapshot_stats #fleshcraft spell(fleshcraft) - - unless runeforge(soulforge_embers_runeforge) and spell(tar_trap) or { enemies() > 1 or not iscovenant("kyrian") and not hastalent(volley_talent) or etf_precast() } and spell(double_tap) - { - #trueshot,precast_etf_equip=1,precast_time=2,if=variable.etf_precast - if equippedruneforge(eagletalons_true_focus_runeforge) and etf_precast() spell(trueshot) - } } AddFunction marksmanshipprecombatcdpostconditions { - runeforge(soulforge_embers_runeforge) and spell(tar_trap) or { enemies() > 1 or not iscovenant("kyrian") and not hastalent(volley_talent) or etf_precast() } and spell(double_tap) or enemies() < 3 and { not iscovenant("kyrian") and not hastalent(volley_talent) or enemies() < 2 } and not etf_precast() and spell(aimed_shot) or { enemies() > 2 or { iscovenant("kyrian") or hastalent(volley_talent) } and enemies() == 2 or etf_precast() } and spell(steady_shot) + runeforge(soulforge_embers_runeforge) and spell(tar_trap) or { enemies() > 1 or not iscovenant("kyrian") and not hastalent(volley_talent) } and spell(double_tap) or enemies() < 3 and { not iscovenant("kyrian") and not hastalent(volley_talent) or enemies() < 2 } and spell(aimed_shot) or { enemies() > 2 or { iscovenant("kyrian") or hastalent(volley_talent) } and enemies() == 2 } and spell(steady_shot) } ### actions.cds @@ -1175,7 +1163,6 @@ AddIcon enabled=(checkboxon(opt_hunter_marksmanship_aoe) and specialization(mark # double_tap # double_tap_talent # eagletalons_true_focus_buff -# eagletalons_true_focus_runeforge # effusive_anima_accelerator_soulbind # explosive_shot # explosive_shot_talent diff --git a/src/scripts/ovale_hunter_spells.ts b/src/scripts/ovale_hunter_spells.ts index 7adb9185e..d83d30bd0 100644 --- a/src/scripts/ovale_hunter_spells.ts +++ b/src/scripts/ovale_hunter_spells.ts @@ -50,11 +50,11 @@ Define(barbed_shot 217200) # Suffering w1 damage every t1 sec. SpellAddTargetDebuff(barbed_shot barbed_shot add=1) Define(barrage 120360) -# Rapidly fires a spray of shots for 3 seconds, dealing an average of Physical damage to up to 120361I enemies in front of you. Usable while moving. +# Rapidly fires a spray of shots for 3 seconds, dealing an average of Physical damage to all nearby enemies in front of you. Usable while moving. Deals reduced damage beyond 120361s1 targets. SpellInfo(barrage focus=60 cd=20 duration=3 channel=3 tick=0.2) SpellRequire(barrage unusable set=1 enabled=(not {hastalent(barrage_talent) or hastalent(barrage_talent_marksmanship)})) Define(beast_cleave_buff 118455) -# After you Multi-Shot, your pet's melee attacks also strike up to 118459I other nearby enemy targets for s1 as much for the next 4 seconds. +# After you Multi-Shot, your pet's melee attacks also strike all nearby enemies for s1 as much for the next 4 seconds. Deals reduced damage beyond 118459s2 targets. SpellInfo(beast_cleave_buff duration=4 gcd=0 offgcd=1) # Melee attacks also strike all other nearby enemy targets. SpellAddBuff(beast_cleave_buff beast_cleave_buff add=1) @@ -64,7 +64,7 @@ Define(berserking 26297) # Haste increased by s1. SpellAddBuff(berserking berserking add=1) Define(bestial_wrath 19574) -# Sends you and your pet into a rage, instantly dealing Physical damage to its target, and increasing all damage you both deal by s1 for 15 seconds. ?s231548&s217200[rnrnBestial Wrath's remaining cooldown is reduced by s3 sec each time you use Barbed Shot.][] +# Sends you and your pet into a rage, instantly dealing Physical damage to its target, and increasing all damage you both deal by s1 for 15 seconds. Removes Fear and Horrify effects from your pet. ?s231548&s217200[rnrnBestial Wrath's remaining cooldown is reduced by s3 sec each time you use Barbed Shot.][] SpellInfo(bestial_wrath cd=90 duration=15) # Damage dealt increased by w1. SpellAddBuff(bestial_wrath bestial_wrath add=1) @@ -83,11 +83,11 @@ Define(bloodshed 321530) SpellInfo(bloodshed cd=60) SpellRequire(bloodshed unusable set=1 enabled=(not hastalent(bloodshed_talent))) Define(butchery 212436) -# Attack up to I nearby enemies in a flurry of strikes, inflicting s1 Physical damage to each.?s294029[rnrnReduces the remaining cooldown on Wildfire Bomb by sec for each target hit.][] +# Attack all nearby enemies in a flurry of strikes, inflicting s1 Physical damage to each. Deals reduced damage beyond s3 targets.?s294029[rnrnReduces the remaining cooldown on Wildfire Bomb by sec for each target hit, up to s3 sec.][] SpellInfo(butchery focus=30 cd=9) SpellRequire(butchery unusable set=1 enabled=(not hastalent(butchery_talent))) Define(carve 187708) -# A sweeping attack that strikes up to I enemies in front of you for s1 Physical damage.?s294029[rnrnReduces the remaining cooldown on Wildfire Bomb by sec for each target hit.][] +# A sweeping attack that strikes all enemies in front of you for s1 Physical damage. Deals reduced damage beyond s3 targets.?s294029[rnrnReduces the remaining cooldown on Wildfire Bomb by sec for each target hit, up to s3 sec.][] SpellInfo(carve focus=35 cd=6) SpellRequire(carve replaced_by set=butchery enabled=(hastalent(butchery_talent))) Define(chakrams 259391) @@ -117,7 +117,7 @@ Define(dead_eye_buff 321461) # Kill Shot has m1+1 charges, and causes Aimed Shot to recharge 321461m1/(1+(321461m1/100)) faster for 3 seconds. SpellInfo(dead_eye_buff duration=3 gcd=0 offgcd=1) Define(death_chakram 325028) -# Throw a deadly chakram at your current target that will rapidly deal 325037s1 Shadow damage x times, bouncing to other targets if they are nearby.rnrnEach time the chakram deals damage, its damage is increased by s3 and you generate s4 Focus. +# Throw a deadly chakram at your current target that will rapidly deal 325037s1 Shadow damage x times, bouncing to other targets if they are nearby. Enemies struck by Death Chakram take 361756s1 more Physical damage from you and your pet for 10 seconds.rnrnEach time the chakram deals damage, its damage is increased by s3 and you generate s4 Focus. SpellInfo(death_chakram cd=45) Define(dire_beast 120679) # Summons a powerful wild beast that attacks the target and roars, increasing your Haste by 281036s1 for 8 seconds. @@ -138,7 +138,7 @@ Define(eagletalons_true_focus_buff 336851) # Trueshot lasts an additional m2/1000.1 sec and reduces the Focus cost of all of your abilities by 336851s1. SpellInfo(eagletalons_true_focus_buff gcd=0 offgcd=1) Define(explosive_shot 212431) -# Fires an explosive shot at your target. After t1 sec, the shot will explode, dealing 212680s1 Fire damage to up to 212680I enemies within 212680A1 yards. +# Fires an explosive shot at your target. After t1 sec, the shot will explode, dealing 212680s1 Fire damage to all enemies within 212680A1 yards. Deals reduced damage beyond s2 targets. SpellInfo(explosive_shot focus=20 cd=30 duration=3 tick=3) SpellRequire(explosive_shot unusable set=1 enabled=(not hastalent(explosive_shot_talent))) # Exploding for 212680s1 Fire damage after t1 sec. @@ -154,12 +154,12 @@ Define(flare 1543) # Exposes all hidden and invisible enemies within the targeted area for m1 sec. SpellInfo(flare cd=20) Define(flayed_shot 324149) -# Fire a shot at your enemy, causing them to bleed for o1 Shadow damage over 18 seconds. Each time Flayed Shot deals damage, you have a s2 chance to gain Flayer's Mark, causing your next Kill Shot to be free and usable on any target, regardless of their current health, and deal 324156s3 increased damage. +# Fire a shot at your enemy, dealing s3 Shadow damage and then causing them to bleed for o1 Shadow damage over 18 seconds. Each time Flayed Shot deals damage, you have a s2 chance to gain Flayer's Mark, causing your next Kill Shot to be free, usable on any target regardless of their current health, and deal 324156s3 increased damage. SpellInfo(flayed_shot cd=30 duration=18 tick=2) # Bleeding for s1 Shadow damage every t1 sec. SpellAddTargetDebuff(flayed_shot flayed_shot add=1) Define(flayers_mark_buff 324156) -# Fire a shot at your enemy, causing them to bleed for o1 Shadow damage over 18 seconds. Each time Flayed Shot deals damage, you have a s2 chance to gain Flayer's Mark, causing your next Kill Shot to be free and usable on any target, regardless of their current health, and deal 324156s3 increased damage. +# Fire a shot at your enemy, dealing s3 Shadow damage and then causing them to bleed for o1 Shadow damage over 18 seconds. Each time Flayed Shot deals damage, you have a s2 chance to gain Flayer's Mark, causing your next Kill Shot to be free, usable on any target regardless of their current health, and deal 324156s3 increased damage. SpellInfo(flayers_mark_buff duration=12 gcd=0 offgcd=1) # Your next Kill Shot can be used on any target, regardless of their current health, deals s3 increased damage, and will not consume any Focus. SpellAddBuff(flayers_mark_buff flayers_mark_buff add=1) @@ -219,10 +219,10 @@ Define(mongoose_fury_buff 259388) # Mongoose Bite damage increased by s1. SpellAddBuff(mongoose_fury_buff mongoose_fury_buff add=1) Define(multishot 2643) -# Fires several missiles, hitting up to I targets within A2 yards of your current target for s2 Physical damage?s115939[ and triggering Beast Cleave][].?s19434[rnrn|cFFFFFFFFGenerates 213363s1 Focus per target hit.|r][] +# Fires several missiles, hitting all nearby enemies within A2 yards of your current target for s2 Physical damage?s115939[ and triggering Beast Cleave][]. Deals reduced damage beyond s1 targets.?s19434[rnrn|cFFFFFFFFGenerates 213363s1 Focus per target hit.|r][] SpellInfo(multishot focus=40) Define(multishot_marksmanship 257620) -# Fires several missiles, hitting your current target and up to I enemies within A1 yards for s1 Physical damage. +# Fires several missiles, hitting your current target and all enemies within A1 yards for s1 Physical damage. Deals reduced damage beyond 2643s1 targets. SpellInfo(multishot_marksmanship focus=20) Define(muzzle 187707) # Interrupts spellcasting, preventing any spell in that school from being cast for 3 seconds. @@ -365,15 +365,15 @@ Define(a_murder_of_crows_talent 22269) Define(alpha_predator_talent 22296) # Kill Command now has s1+1 charges, and deals s2 increased damage. Define(barrage_talent_marksmanship 22497) -# Rapidly fires a spray of shots for 3 seconds, dealing an average of Physical damage to up to 120361I enemies in front of you. Usable while moving. +# Rapidly fires a spray of shots for 3 seconds, dealing an average of Physical damage to all nearby enemies in front of you. Usable while moving. Deals reduced damage beyond 120361s1 targets. Define(barrage_talent 22002) -# Rapidly fires a spray of shots for 3 seconds, dealing an average of Physical damage to up to 120361I enemies in front of you. Usable while moving. +# Rapidly fires a spray of shots for 3 seconds, dealing an average of Physical damage to all nearby enemies in front of you. Usable while moving. Deals reduced damage beyond 120361s1 targets. Define(birds_of_prey_talent 22272) # Attacking your pet's target with ?s259387[Mongoose Bite][Raptor Strike] or ?s212436[Butchery][Carve] extends the duration of Coordinated Assault by sec. Define(bloodshed_talent 22295) # Command your pet to tear into your target, causing your target to bleed for over 18 seconds and increase all damage taken from your pet by 321538s2 for 18 seconds. Define(butchery_talent 22297) -# Attack up to I nearby enemies in a flurry of strikes, inflicting s1 Physical damage to each.?s294029[rnrnReduces the remaining cooldown on Wildfire Bomb by sec for each target hit.][] +# Attack all nearby enemies in a flurry of strikes, inflicting s1 Physical damage to each. Deals reduced damage beyond s3 targets.?s294029[rnrnReduces the remaining cooldown on Wildfire Bomb by sec for each target hit, up to s3 sec.][] Define(calling_the_shots_talent 22274) # Casting ?s342049[Chimaera Shot][Arcane Shot] or Multi-Shot reduces the cooldown of Trueshot by m1/1000.1 sec. Define(chakrams_talent 23105) @@ -387,7 +387,7 @@ Define(dire_beast_talent 22282) Define(double_tap_talent 22287) # Your next Aimed Shot will fire a second time instantly at s4 power without consuming Focus, or your next Rapid Fire will shoot s3 additional shots during its channel. Define(explosive_shot_talent 22498) -# Fires an explosive shot at your target. After t1 sec, the shot will explode, dealing 212680s1 Fire damage to up to 212680I enemies within 212680A1 yards. +# Fires an explosive shot at your target. After t1 sec, the shot will explode, dealing 212680s1 Fire damage to all enemies within 212680A1 yards. Deals reduced damage beyond s2 targets. Define(flanking_strike_talent 22271) # You and your pet leap to the target and strike it as one, dealing a total of Physical damage.rnrn|cFFFFFFFFGenerates 269752s2 Focus for you and your pet.|r Define(hydras_bite_talent 22769) @@ -424,7 +424,6 @@ Define(pouch_of_razor_fragments_runeforge 7717) Define(qapla_eredun_war_order_runeforge 7009) Define(sephuzs_proclamation_runeforge 7103) Define(soulforge_embers_runeforge 7005) -Define(eagletalons_true_focus_runeforge 7011) Define(surging_shots_runeforge 7012) Define(rylakstalkers_confounding_strikes_runeforge 7016) Define(bloodletting_conduit 253) diff --git a/src/scripts/ovale_mage.ts b/src/scripts/ovale_mage.ts index 4a52557fc..ed0d432c9 100644 --- a/src/scripts/ovale_mage.ts +++ b/src/scripts/ovale_mage.ts @@ -3079,8 +3079,8 @@ AddFunction firerop_phasemainactions if buffpresent(pyroclasm_buff) and casttime(pyroblast) < buffremaining(pyroclasm_buff) and casttime(pyroblast) < totemremaining(rune_of_power) and { not runeforge(sun_kings_blessing_runeforge) or buffremaining(pyroclasm_buff) < casttime(fireball) + casttime(pyroblast) * buffstacks(pyroclasm_buff) } spell(pyroblast) #pyroblast,if=prev_gcd.1.scorch&buff.heating_up.react&searing_touch.active&active_enemies=variable.hard_cast_flamestrike|active_enemies>=variable.hot_streak_flamestrike) - if not phoenix_pooling() and buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) and { debuffcountonany(ignite_debuff) < 2 or enemies() >= hard_cast_flamestrike() or enemies() >= hot_streak_flamestrike() } spell(phoenix_flames) + #phoenix_flames,if=!variable.phoenix_pooling&(active_dot.ignite<2|active_enemies>=variable.hard_cast_flamestrike|active_enemies>=variable.hot_streak_flamestrike) + if not phoenix_pooling() and { debuffcountonany(ignite_debuff) < 2 or enemies() >= hard_cast_flamestrike() or enemies() >= hot_streak_flamestrike() } spell(phoenix_flames) #scorch,if=searing_touch.active if talent(searing_touch_talent) and target.healthpercent() < 30 spell(scorch) #dragons_breath,if=active_enemies>2 @@ -3110,7 +3110,7 @@ AddFunction firerop_phaseshortcdactions AddFunction firerop_phaseshortcdpostconditions { - enemies() >= hot_streak_flamestrike() and { buffpresent(hot_streak_buff) or buffpresent(firestorm_buff) } and spell(flamestrike) or buffpresent(deathborne) and runeforge(deaths_fathom_runeforge) and time_to_combustion() < buffremaining(deathborne) and enemies() >= 2 and spell(fireball) or enemies() >= hard_cast_flamestrike() and buffpresent(sun_kings_blessing_ready_buff) and buffremaining(sun_kings_blessing_ready_buff) > casttime(flamestrike) and spell(flamestrike) or buffpresent(sun_kings_blessing_ready_buff) and buffremaining(sun_kings_blessing_ready_buff) > casttime(pyroblast) and spell(pyroblast) or buffpresent(firestorm_buff) and spell(pyroblast) or buffpresent(hot_streak_buff) and spell(pyroblast) or not fire_blast_pooling() and buffexpires(sun_kings_blessing_ready_buff) and enemies() < hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and { not buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) and not previousoffgcdspell(fire_blast_fire) } and { charges(fire_blast_fire) >= 2 or hastalent(alexstraszas_fury_talent) and spellcooldown(dragons_breath) <= 0 or talent(searing_touch_talent) and target.healthpercent() < 30 } and spell(fire_blast_fire) or not fire_blast_pooling() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and buffexpires(sun_kings_blessing_ready_buff) and { { executetime(fireball) > 0 and { executetime(fireball) < 0.5 or not runeforge(firestorm_runeforge) } or executetime(pyroblast) > 0 and { executetime(pyroblast) < 0.5 or not runeforge(firestorm_runeforge) } } and buffpresent(heating_up_buff) or talent(searing_touch_talent) and target.healthpercent() < 30 and { buffpresent(heating_up_buff) and not executetime(scorch) > 0 or not buffpresent(hot_streak_buff) and not buffpresent(heating_up_buff) and executetime(scorch) > 0 and not inflighttotarget(hot_streak_spells) } } and spell(fire_blast_fire) or fireactive_talentsshortcdpostconditions() or buffpresent(pyroclasm_buff) and casttime(pyroblast) < buffremaining(pyroclasm_buff) and casttime(pyroblast) < totemremaining(rune_of_power) and { not runeforge(sun_kings_blessing_runeforge) or buffremaining(pyroclasm_buff) < casttime(fireball) + casttime(pyroblast) * buffstacks(pyroclasm_buff) } and spell(pyroblast) or previousgcdspell(scorch) and buffpresent(heating_up_buff) and { talent(searing_touch_talent) and target.healthpercent() < 30 } and enemies() < hot_streak_flamestrike() and spell(pyroblast) or not phoenix_pooling() and buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) and { debuffcountonany(ignite_debuff) < 2 or enemies() >= hard_cast_flamestrike() or enemies() >= hot_streak_flamestrike() } and spell(phoenix_flames) or talent(searing_touch_talent) and target.healthpercent() < 30 and spell(scorch) or enemies() > 2 and target.distance() < 12 and spell(dragons_breath) or enemies() >= arcane_explosion() and manapercent() >= arcane_explosion_mana() and spell(arcane_explosion) or enemies() >= hard_cast_flamestrike() and spell(flamestrike) or spell(fireball) + enemies() >= hot_streak_flamestrike() and { buffpresent(hot_streak_buff) or buffpresent(firestorm_buff) } and spell(flamestrike) or buffpresent(deathborne) and runeforge(deaths_fathom_runeforge) and time_to_combustion() < buffremaining(deathborne) and enemies() >= 2 and spell(fireball) or enemies() >= hard_cast_flamestrike() and buffpresent(sun_kings_blessing_ready_buff) and buffremaining(sun_kings_blessing_ready_buff) > casttime(flamestrike) and spell(flamestrike) or buffpresent(sun_kings_blessing_ready_buff) and buffremaining(sun_kings_blessing_ready_buff) > casttime(pyroblast) and spell(pyroblast) or buffpresent(firestorm_buff) and spell(pyroblast) or buffpresent(hot_streak_buff) and spell(pyroblast) or not fire_blast_pooling() and buffexpires(sun_kings_blessing_ready_buff) and enemies() < hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and { not buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) and not previousoffgcdspell(fire_blast_fire) } and { charges(fire_blast_fire) >= 2 or hastalent(alexstraszas_fury_talent) and spellcooldown(dragons_breath) <= 0 or talent(searing_touch_talent) and target.healthpercent() < 30 } and spell(fire_blast_fire) or not fire_blast_pooling() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and buffexpires(sun_kings_blessing_ready_buff) and { { executetime(fireball) > 0 and { executetime(fireball) < 0.5 or not runeforge(firestorm_runeforge) } or executetime(pyroblast) > 0 and { executetime(pyroblast) < 0.5 or not runeforge(firestorm_runeforge) } } and buffpresent(heating_up_buff) or talent(searing_touch_talent) and target.healthpercent() < 30 and { buffpresent(heating_up_buff) and not executetime(scorch) > 0 or not buffpresent(hot_streak_buff) and not buffpresent(heating_up_buff) and executetime(scorch) > 0 and not inflighttotarget(hot_streak_spells) } } and spell(fire_blast_fire) or fireactive_talentsshortcdpostconditions() or buffpresent(pyroclasm_buff) and casttime(pyroblast) < buffremaining(pyroclasm_buff) and casttime(pyroblast) < totemremaining(rune_of_power) and { not runeforge(sun_kings_blessing_runeforge) or buffremaining(pyroclasm_buff) < casttime(fireball) + casttime(pyroblast) * buffstacks(pyroclasm_buff) } and spell(pyroblast) or previousgcdspell(scorch) and buffpresent(heating_up_buff) and { talent(searing_touch_talent) and target.healthpercent() < 30 } and enemies() < hot_streak_flamestrike() and spell(pyroblast) or not phoenix_pooling() and { debuffcountonany(ignite_debuff) < 2 or enemies() >= hard_cast_flamestrike() or enemies() >= hot_streak_flamestrike() } and spell(phoenix_flames) or talent(searing_touch_talent) and target.healthpercent() < 30 and spell(scorch) or enemies() > 2 and target.distance() < 12 and spell(dragons_breath) or enemies() >= arcane_explosion() and manapercent() >= arcane_explosion_mana() and spell(arcane_explosion) or enemies() >= hard_cast_flamestrike() and spell(flamestrike) or spell(fireball) } AddFunction firerop_phasecdactions @@ -3124,7 +3124,7 @@ AddFunction firerop_phasecdactions AddFunction firerop_phasecdpostconditions { - enemies() >= hot_streak_flamestrike() and { buffpresent(hot_streak_buff) or buffpresent(firestorm_buff) } and spell(flamestrike) or buffpresent(deathborne) and runeforge(deaths_fathom_runeforge) and time_to_combustion() < buffremaining(deathborne) and enemies() >= 2 and spell(fireball) or enemies() >= hard_cast_flamestrike() and buffpresent(sun_kings_blessing_ready_buff) and buffremaining(sun_kings_blessing_ready_buff) > casttime(flamestrike) and spell(flamestrike) or buffpresent(sun_kings_blessing_ready_buff) and buffremaining(sun_kings_blessing_ready_buff) > casttime(pyroblast) and spell(pyroblast) or buffpresent(firestorm_buff) and spell(pyroblast) or buffpresent(hot_streak_buff) and spell(pyroblast) or not fire_blast_pooling() and buffexpires(sun_kings_blessing_ready_buff) and enemies() < hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and { not buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) and not previousoffgcdspell(fire_blast_fire) } and { charges(fire_blast_fire) >= 2 or hastalent(alexstraszas_fury_talent) and spellcooldown(dragons_breath) <= 0 or talent(searing_touch_talent) and target.healthpercent() < 30 } and spell(fire_blast_fire) or not fire_blast_pooling() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and buffexpires(sun_kings_blessing_ready_buff) and { { executetime(fireball) > 0 and { executetime(fireball) < 0.5 or not runeforge(firestorm_runeforge) } or executetime(pyroblast) > 0 and { executetime(pyroblast) < 0.5 or not runeforge(firestorm_runeforge) } } and buffpresent(heating_up_buff) or talent(searing_touch_talent) and target.healthpercent() < 30 and { buffpresent(heating_up_buff) and not executetime(scorch) > 0 or not buffpresent(hot_streak_buff) and not buffpresent(heating_up_buff) and executetime(scorch) > 0 and not inflighttotarget(hot_streak_spells) } } and spell(fire_blast_fire) or fireactive_talentscdpostconditions() or buffpresent(pyroclasm_buff) and casttime(pyroblast) < buffremaining(pyroclasm_buff) and casttime(pyroblast) < totemremaining(rune_of_power) and { not runeforge(sun_kings_blessing_runeforge) or buffremaining(pyroclasm_buff) < casttime(fireball) + casttime(pyroblast) * buffstacks(pyroclasm_buff) } and spell(pyroblast) or previousgcdspell(scorch) and buffpresent(heating_up_buff) and { talent(searing_touch_talent) and target.healthpercent() < 30 } and enemies() < hot_streak_flamestrike() and spell(pyroblast) or not phoenix_pooling() and buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) and { debuffcountonany(ignite_debuff) < 2 or enemies() >= hard_cast_flamestrike() or enemies() >= hot_streak_flamestrike() } and spell(phoenix_flames) or talent(searing_touch_talent) and target.healthpercent() < 30 and spell(scorch) or enemies() > 2 and target.distance() < 12 and spell(dragons_breath) or enemies() >= arcane_explosion() and manapercent() >= arcane_explosion_mana() and spell(arcane_explosion) or enemies() >= hard_cast_flamestrike() and spell(flamestrike) or spell(fireball) + enemies() >= hot_streak_flamestrike() and { buffpresent(hot_streak_buff) or buffpresent(firestorm_buff) } and spell(flamestrike) or buffpresent(deathborne) and runeforge(deaths_fathom_runeforge) and time_to_combustion() < buffremaining(deathborne) and enemies() >= 2 and spell(fireball) or enemies() >= hard_cast_flamestrike() and buffpresent(sun_kings_blessing_ready_buff) and buffremaining(sun_kings_blessing_ready_buff) > casttime(flamestrike) and spell(flamestrike) or buffpresent(sun_kings_blessing_ready_buff) and buffremaining(sun_kings_blessing_ready_buff) > casttime(pyroblast) and spell(pyroblast) or buffpresent(firestorm_buff) and spell(pyroblast) or buffpresent(hot_streak_buff) and spell(pyroblast) or not fire_blast_pooling() and buffexpires(sun_kings_blessing_ready_buff) and enemies() < hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and { not buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) and not previousoffgcdspell(fire_blast_fire) } and { charges(fire_blast_fire) >= 2 or hastalent(alexstraszas_fury_talent) and spellcooldown(dragons_breath) <= 0 or talent(searing_touch_talent) and target.healthpercent() < 30 } and spell(fire_blast_fire) or not fire_blast_pooling() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and buffexpires(sun_kings_blessing_ready_buff) and { { executetime(fireball) > 0 and { executetime(fireball) < 0.5 or not runeforge(firestorm_runeforge) } or executetime(pyroblast) > 0 and { executetime(pyroblast) < 0.5 or not runeforge(firestorm_runeforge) } } and buffpresent(heating_up_buff) or talent(searing_touch_talent) and target.healthpercent() < 30 and { buffpresent(heating_up_buff) and not executetime(scorch) > 0 or not buffpresent(hot_streak_buff) and not buffpresent(heating_up_buff) and executetime(scorch) > 0 and not inflighttotarget(hot_streak_spells) } } and spell(fire_blast_fire) or fireactive_talentscdpostconditions() or buffpresent(pyroclasm_buff) and casttime(pyroblast) < buffremaining(pyroclasm_buff) and casttime(pyroblast) < totemremaining(rune_of_power) and { not runeforge(sun_kings_blessing_runeforge) or buffremaining(pyroclasm_buff) < casttime(fireball) + casttime(pyroblast) * buffstacks(pyroclasm_buff) } and spell(pyroblast) or previousgcdspell(scorch) and buffpresent(heating_up_buff) and { talent(searing_touch_talent) and target.healthpercent() < 30 } and enemies() < hot_streak_flamestrike() and spell(pyroblast) or not phoenix_pooling() and { debuffcountonany(ignite_debuff) < 2 or enemies() >= hard_cast_flamestrike() or enemies() >= hot_streak_flamestrike() } and spell(phoenix_flames) or talent(searing_touch_talent) and target.healthpercent() < 30 and spell(scorch) or enemies() > 2 and target.distance() < 12 and spell(dragons_breath) or enemies() >= arcane_explosion() and manapercent() >= arcane_explosion_mana() and spell(arcane_explosion) or enemies() >= hard_cast_flamestrike() and spell(flamestrike) or spell(fireball) } ### actions.precombat @@ -3483,10 +3483,10 @@ AddFunction fire_defaultmainactions #variable,use_off_gcd=1,use_while_casting=1,name=fire_blast_pooling,value=(!runeforge.sun_kings_blessing|buff.sun_kings_blessing.stack>buff.sun_kings_blessing.max_stack-1)&cooldown.rune_of_power.remains0&active_enemies>=variable.hard_cast_flamestrike&!firestarter.active&!buff.hot_streak.react&(buff.heating_up.react&action.flamestrike.execute_remains<0.5|charges_fractional>=2) if not fire_blast_pooling() and time_to_combustion() > 0 and enemies() >= hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and not buffpresent(hot_streak_buff) and { buffpresent(heating_up_buff) and executetime(flamestrike) < 0.5 or charges(fire_blast_fire count=0) >= 2 } spell(fire_blast_fire) - #fire_blast,use_off_gcd=1,use_while_casting=1,if=firestarter.active&variable.time_to_combustion>0&charges>=1&!variable.fire_blast_pooling&(!action.fireball.executing&!action.pyroblast.in_flight&buff.heating_up.react|action.fireball.executing&!buff.hot_streak.react|action.pyroblast.in_flight&buff.heating_up.react&!buff.hot_streak.react) - if talent(firestarter_talent) and target.healthpercent() >= 90 and time_to_combustion() > 0 and charges(fire_blast_fire) >= 1 and not fire_blast_pooling() and { not executetime(fireball) > 0 and not inflighttotarget(pyroblast) and buffpresent(heating_up_buff) or executetime(fireball) > 0 and not buffpresent(hot_streak_buff) or inflighttotarget(pyroblast) and buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) } spell(fire_blast_fire) - #fire_blast,use_while_casting=1,if=action.shifting_power.executing&full_recharge_time10 - if executetime(shifting_power) > 0 and spellfullrecharge(fire_blast_fire) < 0 and buffexpires(hot_streak_buff) and timeincombat() > 10 spell(fire_blast_fire) + #fire_blast,use_off_gcd=1,use_while_casting=1,if=firestarter.active&variable.time_to_combustion>0&!variable.fire_blast_pooling&(!action.fireball.executing&!action.pyroblast.in_flight&buff.heating_up.react|action.fireball.executing&!buff.hot_streak.react|action.pyroblast.in_flight&buff.heating_up.react&!buff.hot_streak.react) + if talent(firestarter_talent) and target.healthpercent() >= 90 and time_to_combustion() > 0 and not fire_blast_pooling() and { not executetime(fireball) > 0 and not inflighttotarget(pyroblast) and buffpresent(heating_up_buff) or executetime(fireball) > 0 and not buffpresent(hot_streak_buff) or inflighttotarget(pyroblast) and buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) } spell(fire_blast_fire) + #fire_blast,use_while_casting=1,if=action.shifting_power.executing&full_recharge_time 0 and spellfullrecharge(fire_blast_fire) < 0 spell(fire_blast_fire) #call_action_list,name=standard_rotation,if=variable.time_to_combustion>0&buff.rune_of_power.down&buff.combustion.down if time_to_combustion() > 0 and buffexpires(rune_of_power_buff) and buffexpires(combustion) firestandard_rotationmainactions() @@ -3521,6 +3521,8 @@ AddFunction fire_defaultshortcdactions if buffexpires(combustion) and time_to_combustion() > spellcooldown(radiant_spark) - 5 spell(radiant_spark) #mirrors_of_torment,if=variable.time_to_combustioncooldown-30*runeforge.sinful_delight + if time_to_combustion() > spellcooldown(mirrors_of_torment) - 30 * runeforge(sinful_delight_runeforge) spell(mirrors_of_torment) unless executetime(mirrors_of_torment) > 0 and spellfullrecharge(fire_blast_fire) - executetime(mirrors_of_torment) < 4 and not inflighttotarget(hot_streak_spells) and not buffpresent(hot_streak_buff) and spell(fire_blast_fire) or { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade_buff) == spelldata(infernal_cascade_buff max_stacks) } and buffpresent(soul_ignition_buff) and texture(soul_ignition_buff text=cancel) { @@ -3545,7 +3547,7 @@ AddFunction fire_defaultshortcdactions #call_action_list,name=rop_phase,if=buff.rune_of_power.up&buff.combustion.down&variable.time_to_combustion>0 if buffpresent(rune_of_power_buff) and buffexpires(combustion) and time_to_combustion() > 0 firerop_phaseshortcdactions() - unless buffpresent(rune_of_power_buff) and buffexpires(combustion) and time_to_combustion() > 0 and firerop_phaseshortcdpostconditions() or not fire_blast_pooling() and time_to_combustion() > 0 and enemies() >= hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and not buffpresent(hot_streak_buff) and { buffpresent(heating_up_buff) and executetime(flamestrike) < 0.5 or charges(fire_blast_fire count=0) >= 2 } and spell(fire_blast_fire) or talent(firestarter_talent) and target.healthpercent() >= 90 and time_to_combustion() > 0 and charges(fire_blast_fire) >= 1 and not fire_blast_pooling() and { not executetime(fireball) > 0 and not inflighttotarget(pyroblast) and buffpresent(heating_up_buff) or executetime(fireball) > 0 and not buffpresent(hot_streak_buff) or inflighttotarget(pyroblast) and buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) } and spell(fire_blast_fire) or executetime(shifting_power) > 0 and spellfullrecharge(fire_blast_fire) < 0 and buffexpires(hot_streak_buff) and timeincombat() > 10 and spell(fire_blast_fire) + unless buffpresent(rune_of_power_buff) and buffexpires(combustion) and time_to_combustion() > 0 and firerop_phaseshortcdpostconditions() or not fire_blast_pooling() and time_to_combustion() > 0 and enemies() >= hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and not buffpresent(hot_streak_buff) and { buffpresent(heating_up_buff) and executetime(flamestrike) < 0.5 or charges(fire_blast_fire count=0) >= 2 } and spell(fire_blast_fire) or talent(firestarter_talent) and target.healthpercent() >= 90 and time_to_combustion() > 0 and not fire_blast_pooling() and { not executetime(fireball) > 0 and not inflighttotarget(pyroblast) and buffpresent(heating_up_buff) or executetime(fireball) > 0 and not buffpresent(hot_streak_buff) or inflighttotarget(pyroblast) and buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) } and spell(fire_blast_fire) or executetime(shifting_power) > 0 and spellfullrecharge(fire_blast_fire) < 0 and spell(fire_blast_fire) { #call_action_list,name=standard_rotation,if=variable.time_to_combustion>0&buff.rune_of_power.down&buff.combustion.down if time_to_combustion() > 0 and buffexpires(rune_of_power_buff) and buffexpires(combustion) firestandard_rotationshortcdactions() @@ -3559,7 +3561,7 @@ AddFunction fire_defaultshortcdactions AddFunction fire_defaultshortcdpostconditions { - not buffpresent(newfound_resolve_buff) and debuffpresent(trial_of_doubt_debuff) and debuffremains(trial_of_doubt_debuff) < 10 and texture(inv_enchant_essencemagiclarge text=face) or not disable_combustion() and firecombustion_timingshortcdpostconditions() or executetime(mirrors_of_torment) > 0 and spellfullrecharge(fire_blast_fire) - executetime(mirrors_of_torment) < 4 and not inflighttotarget(hot_streak_spells) and not buffpresent(hot_streak_buff) and spell(fire_blast_fire) or { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade_buff) == spelldata(infernal_cascade_buff max_stacks) } and buffpresent(soul_ignition_buff) and texture(soul_ignition_buff text=cancel) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command_arcane_buff) and not buffpresent(disciplinary_command_fire_buff) and { time_to_combustion() + executetime(arcane_explosion) + casttime(frostbolt) > spellcooldownduration(disciplinary_command) or time_to_combustion() < 5 and not hastalent(rune_of_power_talent) } and spell(arcane_explosion) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) < casttime(frostbolt) and buffexpires(disciplinary_command_frost_buff) and not buffpresent(disciplinary_command_fire_buff) and { time_to_combustion() + casttime(frostbolt) > spellcooldownduration(disciplinary_command) or time_to_combustion() < 5 } and spell(frostbolt) or { time_to_combustion() <= 0 or buffpresent(combustion) or time_to_combustion() < combustion_precast_time() and spellcooldown(combustion) < combustion_precast_time() } and firecombustion_phaseshortcdpostconditions() or buffpresent(rune_of_power_buff) and buffexpires(combustion) and time_to_combustion() > 0 and firerop_phaseshortcdpostconditions() or not fire_blast_pooling() and time_to_combustion() > 0 and enemies() >= hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and not buffpresent(hot_streak_buff) and { buffpresent(heating_up_buff) and executetime(flamestrike) < 0.5 or charges(fire_blast_fire count=0) >= 2 } and spell(fire_blast_fire) or talent(firestarter_talent) and target.healthpercent() >= 90 and time_to_combustion() > 0 and charges(fire_blast_fire) >= 1 and not fire_blast_pooling() and { not executetime(fireball) > 0 and not inflighttotarget(pyroblast) and buffpresent(heating_up_buff) or executetime(fireball) > 0 and not buffpresent(hot_streak_buff) or inflighttotarget(pyroblast) and buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) } and spell(fire_blast_fire) or executetime(shifting_power) > 0 and spellfullrecharge(fire_blast_fire) < 0 and buffexpires(hot_streak_buff) and timeincombat() > 10 and spell(fire_blast_fire) or time_to_combustion() > 0 and buffexpires(rune_of_power_buff) and buffexpires(combustion) and firestandard_rotationshortcdpostconditions() or spell(scorch) + not buffpresent(newfound_resolve_buff) and debuffpresent(trial_of_doubt_debuff) and debuffremains(trial_of_doubt_debuff) < 10 and texture(inv_enchant_essencemagiclarge text=face) or not disable_combustion() and firecombustion_timingshortcdpostconditions() or executetime(mirrors_of_torment) > 0 and spellfullrecharge(fire_blast_fire) - executetime(mirrors_of_torment) < 4 and not inflighttotarget(hot_streak_spells) and not buffpresent(hot_streak_buff) and spell(fire_blast_fire) or { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade_buff) == spelldata(infernal_cascade_buff max_stacks) } and buffpresent(soul_ignition_buff) and texture(soul_ignition_buff text=cancel) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command_arcane_buff) and not buffpresent(disciplinary_command_fire_buff) and { time_to_combustion() + executetime(arcane_explosion) + casttime(frostbolt) > spellcooldownduration(disciplinary_command) or time_to_combustion() < 5 and not hastalent(rune_of_power_talent) } and spell(arcane_explosion) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) < casttime(frostbolt) and buffexpires(disciplinary_command_frost_buff) and not buffpresent(disciplinary_command_fire_buff) and { time_to_combustion() + casttime(frostbolt) > spellcooldownduration(disciplinary_command) or time_to_combustion() < 5 } and spell(frostbolt) or { time_to_combustion() <= 0 or buffpresent(combustion) or time_to_combustion() < combustion_precast_time() and spellcooldown(combustion) < combustion_precast_time() } and firecombustion_phaseshortcdpostconditions() or buffpresent(rune_of_power_buff) and buffexpires(combustion) and time_to_combustion() > 0 and firerop_phaseshortcdpostconditions() or not fire_blast_pooling() and time_to_combustion() > 0 and enemies() >= hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and not buffpresent(hot_streak_buff) and { buffpresent(heating_up_buff) and executetime(flamestrike) < 0.5 or charges(fire_blast_fire count=0) >= 2 } and spell(fire_blast_fire) or talent(firestarter_talent) and target.healthpercent() >= 90 and time_to_combustion() > 0 and not fire_blast_pooling() and { not executetime(fireball) > 0 and not inflighttotarget(pyroblast) and buffpresent(heating_up_buff) or executetime(fireball) > 0 and not buffpresent(hot_streak_buff) or inflighttotarget(pyroblast) and buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) } and spell(fire_blast_fire) or executetime(shifting_power) > 0 and spellfullrecharge(fire_blast_fire) < 0 and spell(fire_blast_fire) or time_to_combustion() > 0 and buffexpires(rune_of_power_buff) and buffexpires(combustion) and firestandard_rotationshortcdpostconditions() or spell(scorch) } AddFunction fire_defaultcdactions @@ -3577,7 +3579,7 @@ AddFunction fire_defaultcdactions #deathborne,if=buff.combustion.down&buff.rune_of_power.down&variable.time_to_combustion 0 and spellfullrecharge(fire_blast_fire) - executetime(mirrors_of_torment) < 4 and not inflighttotarget(hot_streak_spells) and not buffpresent(hot_streak_buff) and spell(fire_blast_fire) + unless time_to_combustion() < combustion_precast_time() + executetime(mirrors_of_torment) and buffexpires(combustion) and spell(mirrors_of_torment) or time_to_combustion() > spellcooldown(mirrors_of_torment) - 30 * runeforge(sinful_delight_runeforge) and spell(mirrors_of_torment) or executetime(mirrors_of_torment) > 0 and spellfullrecharge(fire_blast_fire) - executetime(mirrors_of_torment) < 4 and not inflighttotarget(hot_streak_spells) and not buffpresent(hot_streak_buff) and spell(fire_blast_fire) { #use_item,effect_name=gladiators_badge,if=variable.time_to_combustion>cooldown-5 if time_to_combustion() > itemcooldown(slot="trinket0slot") - 5 fireuseitemactions() @@ -3628,7 +3630,7 @@ AddFunction fire_defaultcdactions #call_action_list,name=rop_phase,if=buff.rune_of_power.up&buff.combustion.down&variable.time_to_combustion>0 if buffpresent(rune_of_power_buff) and buffexpires(combustion) and time_to_combustion() > 0 firerop_phasecdactions() - unless buffpresent(rune_of_power_buff) and buffexpires(combustion) and time_to_combustion() > 0 and firerop_phasecdpostconditions() or not fire_blast_pooling() and time_to_combustion() > 0 and enemies() >= hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and not buffpresent(hot_streak_buff) and { buffpresent(heating_up_buff) and executetime(flamestrike) < 0.5 or charges(fire_blast_fire count=0) >= 2 } and spell(fire_blast_fire) or talent(firestarter_talent) and target.healthpercent() >= 90 and time_to_combustion() > 0 and charges(fire_blast_fire) >= 1 and not fire_blast_pooling() and { not executetime(fireball) > 0 and not inflighttotarget(pyroblast) and buffpresent(heating_up_buff) or executetime(fireball) > 0 and not buffpresent(hot_streak_buff) or inflighttotarget(pyroblast) and buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) } and spell(fire_blast_fire) or executetime(shifting_power) > 0 and spellfullrecharge(fire_blast_fire) < 0 and buffexpires(hot_streak_buff) and timeincombat() > 10 and spell(fire_blast_fire) + unless buffpresent(rune_of_power_buff) and buffexpires(combustion) and time_to_combustion() > 0 and firerop_phasecdpostconditions() or not fire_blast_pooling() and time_to_combustion() > 0 and enemies() >= hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and not buffpresent(hot_streak_buff) and { buffpresent(heating_up_buff) and executetime(flamestrike) < 0.5 or charges(fire_blast_fire count=0) >= 2 } and spell(fire_blast_fire) or talent(firestarter_talent) and target.healthpercent() >= 90 and time_to_combustion() > 0 and not fire_blast_pooling() and { not executetime(fireball) > 0 and not inflighttotarget(pyroblast) and buffpresent(heating_up_buff) or executetime(fireball) > 0 and not buffpresent(hot_streak_buff) or inflighttotarget(pyroblast) and buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) } and spell(fire_blast_fire) or executetime(shifting_power) > 0 and spellfullrecharge(fire_blast_fire) < 0 and spell(fire_blast_fire) { #call_action_list,name=standard_rotation,if=variable.time_to_combustion>0&buff.rune_of_power.down&buff.combustion.down if time_to_combustion() > 0 and buffexpires(rune_of_power_buff) and buffexpires(combustion) firestandard_rotationcdactions() @@ -3644,7 +3646,7 @@ AddFunction fire_defaultcdactions AddFunction fire_defaultcdpostconditions { - not buffpresent(newfound_resolve_buff) and debuffpresent(trial_of_doubt_debuff) and debuffremains(trial_of_doubt_debuff) < 10 and texture(inv_enchant_essencemagiclarge text=face) or not disable_combustion() and firecombustion_timingcdpostconditions() or buffexpires(combustion) and charges(fire_blast_fire) <= 1 and not { buffpresent(infernal_cascade_buff) and buffpresent(hot_streak_buff) } and shifting_power_before_combustion() and spell(shifting_power) or buffexpires(combustion) and time_to_combustion() > spellcooldown(radiant_spark) - 5 and spell(radiant_spark) or time_to_combustion() < combustion_precast_time() + executetime(mirrors_of_torment) and buffexpires(combustion) and spell(mirrors_of_torment) or executetime(mirrors_of_torment) > 0 and spellfullrecharge(fire_blast_fire) - executetime(mirrors_of_torment) < 4 and not inflighttotarget(hot_streak_spells) and not buffpresent(hot_streak_buff) and spell(fire_blast_fire) or { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade_buff) == spelldata(infernal_cascade_buff max_stacks) } and buffpresent(soul_ignition_buff) and texture(soul_ignition_buff text=cancel) or runeforge(grisly_icicle_runeforge) and buffexpires(combustion) and { time_to_combustion() > spellcooldown(frost_nova) or time_to_combustion() < combustion_precast_time() + executetime(frost_nova) } and spell(frost_nova) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command_arcane_buff) and not buffpresent(disciplinary_command_fire_buff) and { time_to_combustion() + executetime(arcane_explosion) + casttime(frostbolt) > spellcooldownduration(disciplinary_command) or time_to_combustion() < 5 and not hastalent(rune_of_power_talent) } and spell(arcane_explosion) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) < casttime(frostbolt) and buffexpires(disciplinary_command_frost_buff) and not buffpresent(disciplinary_command_fire_buff) and { time_to_combustion() + casttime(frostbolt) > spellcooldownduration(disciplinary_command) or time_to_combustion() < 5 } and spell(frostbolt) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command_frost_buff) and not buffpresent(disciplinary_command_fire_buff) and { time_to_combustion() > spellcooldownduration(disciplinary_command) or time_to_combustion() < 5 } and spell(frost_nova) or { time_to_combustion() <= 0 or buffpresent(combustion) or time_to_combustion() < combustion_precast_time() and spellcooldown(combustion) < combustion_precast_time() } and firecombustion_phasecdpostconditions() or buffexpires(combustion) and buffexpires(rune_of_power_buff) and not buffpresent(firestorm_buff) and { time_to_combustion() >= baseduration(rune_of_power_buff) and time_to_combustion() > spellfullrecharge(fire_blast_fire) or time_to_combustion() > fightremains() } and { not runeforge(sun_kings_blessing_runeforge) or enemies() >= hard_cast_flamestrike() or buffpresent(sun_kings_blessing_ready_buff) or buffstacks(sun_kings_blessing_buff) >= spelldata(sun_kings_blessing_buff max_stacks) - 1 or fightremains() < baseduration(rune_of_power_buff) } and spell(rune_of_power) or buffpresent(rune_of_power_buff) and buffexpires(combustion) and time_to_combustion() > 0 and firerop_phasecdpostconditions() or not fire_blast_pooling() and time_to_combustion() > 0 and enemies() >= hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and not buffpresent(hot_streak_buff) and { buffpresent(heating_up_buff) and executetime(flamestrike) < 0.5 or charges(fire_blast_fire count=0) >= 2 } and spell(fire_blast_fire) or talent(firestarter_talent) and target.healthpercent() >= 90 and time_to_combustion() > 0 and charges(fire_blast_fire) >= 1 and not fire_blast_pooling() and { not executetime(fireball) > 0 and not inflighttotarget(pyroblast) and buffpresent(heating_up_buff) or executetime(fireball) > 0 and not buffpresent(hot_streak_buff) or inflighttotarget(pyroblast) and buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) } and spell(fire_blast_fire) or executetime(shifting_power) > 0 and spellfullrecharge(fire_blast_fire) < 0 and buffexpires(hot_streak_buff) and timeincombat() > 10 and spell(fire_blast_fire) or time_to_combustion() > 0 and buffexpires(rune_of_power_buff) and buffexpires(combustion) and firestandard_rotationcdpostconditions() or spell(scorch) + not buffpresent(newfound_resolve_buff) and debuffpresent(trial_of_doubt_debuff) and debuffremains(trial_of_doubt_debuff) < 10 and texture(inv_enchant_essencemagiclarge text=face) or not disable_combustion() and firecombustion_timingcdpostconditions() or buffexpires(combustion) and charges(fire_blast_fire) <= 1 and not { buffpresent(infernal_cascade_buff) and buffpresent(hot_streak_buff) } and shifting_power_before_combustion() and spell(shifting_power) or buffexpires(combustion) and time_to_combustion() > spellcooldown(radiant_spark) - 5 and spell(radiant_spark) or time_to_combustion() < combustion_precast_time() + executetime(mirrors_of_torment) and buffexpires(combustion) and spell(mirrors_of_torment) or time_to_combustion() > spellcooldown(mirrors_of_torment) - 30 * runeforge(sinful_delight_runeforge) and spell(mirrors_of_torment) or executetime(mirrors_of_torment) > 0 and spellfullrecharge(fire_blast_fire) - executetime(mirrors_of_torment) < 4 and not inflighttotarget(hot_streak_spells) and not buffpresent(hot_streak_buff) and spell(fire_blast_fire) or { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade_buff) == spelldata(infernal_cascade_buff max_stacks) } and buffpresent(soul_ignition_buff) and texture(soul_ignition_buff text=cancel) or runeforge(grisly_icicle_runeforge) and buffexpires(combustion) and { time_to_combustion() > spellcooldown(frost_nova) or time_to_combustion() < combustion_precast_time() + executetime(frost_nova) } and spell(frost_nova) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command_arcane_buff) and not buffpresent(disciplinary_command_fire_buff) and { time_to_combustion() + executetime(arcane_explosion) + casttime(frostbolt) > spellcooldownduration(disciplinary_command) or time_to_combustion() < 5 and not hastalent(rune_of_power_talent) } and spell(arcane_explosion) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) < casttime(frostbolt) and buffexpires(disciplinary_command_frost_buff) and not buffpresent(disciplinary_command_fire_buff) and { time_to_combustion() + casttime(frostbolt) > spellcooldownduration(disciplinary_command) or time_to_combustion() < 5 } and spell(frostbolt) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command_frost_buff) and not buffpresent(disciplinary_command_fire_buff) and { time_to_combustion() > spellcooldownduration(disciplinary_command) or time_to_combustion() < 5 } and spell(frost_nova) or { time_to_combustion() <= 0 or buffpresent(combustion) or time_to_combustion() < combustion_precast_time() and spellcooldown(combustion) < combustion_precast_time() } and firecombustion_phasecdpostconditions() or buffexpires(combustion) and buffexpires(rune_of_power_buff) and not buffpresent(firestorm_buff) and { time_to_combustion() >= baseduration(rune_of_power_buff) and time_to_combustion() > spellfullrecharge(fire_blast_fire) or time_to_combustion() > fightremains() } and { not runeforge(sun_kings_blessing_runeforge) or enemies() >= hard_cast_flamestrike() or buffpresent(sun_kings_blessing_ready_buff) or buffstacks(sun_kings_blessing_buff) >= spelldata(sun_kings_blessing_buff max_stacks) - 1 or fightremains() < baseduration(rune_of_power_buff) } and spell(rune_of_power) or buffpresent(rune_of_power_buff) and buffexpires(combustion) and time_to_combustion() > 0 and firerop_phasecdpostconditions() or not fire_blast_pooling() and time_to_combustion() > 0 and enemies() >= hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and not buffpresent(hot_streak_buff) and { buffpresent(heating_up_buff) and executetime(flamestrike) < 0.5 or charges(fire_blast_fire count=0) >= 2 } and spell(fire_blast_fire) or talent(firestarter_talent) and target.healthpercent() >= 90 and time_to_combustion() > 0 and not fire_blast_pooling() and { not executetime(fireball) > 0 and not inflighttotarget(pyroblast) and buffpresent(heating_up_buff) or executetime(fireball) > 0 and not buffpresent(hot_streak_buff) or inflighttotarget(pyroblast) and buffpresent(heating_up_buff) and not buffpresent(hot_streak_buff) } and spell(fire_blast_fire) or executetime(shifting_power) > 0 and spellfullrecharge(fire_blast_fire) < 0 and spell(fire_blast_fire) or time_to_combustion() > 0 and buffexpires(rune_of_power_buff) and buffexpires(combustion) and firestandard_rotationcdpostconditions() or spell(scorch) } ### Fire icons. @@ -3756,6 +3758,7 @@ AddIcon enabled=(checkboxon(opt_mage_fire_aoe) and specialization(fire)) help=cd # searing_touch_talent # shadowed_orb_of_torment_item # shifting_power +# sinful_delight_runeforge # soul_igniter_item # soul_ignition_buff # sun_kings_blessing_buff diff --git a/src/scripts/ovale_mage_spells.ts b/src/scripts/ovale_mage_spells.ts index dca33c12f..5355cba12 100644 --- a/src/scripts/ovale_mage_spells.ts +++ b/src/scripts/ovale_mage_spells.ts @@ -172,12 +172,12 @@ Define(fleshcraft 324631) # Immune to crowd control effects.rnHealing s17 health every t17 sec. SpellAddBuff(fleshcraft ultimate_form_buff add=1) Define(flurry 44614) -# Unleash a flurry of ice, striking the target s1 times for a total of (31.6 of Spell Power)*m1 Frost damage. Each hit reduces the target's movement speed by 228354s1 for 1 second.?a231584[rnrnWhile Brain Freeze is active, Flurry applies Winter's Chill, causing your target to take damage from your spells as if it were frozen.][] +# Unleash a flurry of ice, striking the target s1 times for a total of (34.760000000000005 of Spell Power)*m1 Frost damage. Each hit reduces the target's movement speed by 228354s1 for 1 second.?a231584[rnrnWhile Brain Freeze is active, Flurry applies Winter's Chill, causing your target to take damage from your spells as if it were frozen.][] SpellInfo(flurry) # Movement slowed by w1. SpellAddTargetDebuff(flurry flurry_debuff add=1) Define(flurry_debuff 228354) -# Unleash a flurry of ice, striking the target s1 times for a total of (31.6 of Spell Power)*m1 Frost damage. Each hit reduces the target's movement speed by 228354s1 for 1 second.?a231584[rnrnWhile Brain Freeze is active, Flurry applies Winter's Chill, causing your target to take damage from your spells as if it were frozen.][] +# Unleash a flurry of ice, striking the target s1 times for a total of (34.760000000000005 of Spell Power)*m1 Frost damage. Each hit reduces the target's movement speed by 228354s1 for 1 second.?a231584[rnrnWhile Brain Freeze is active, Flurry applies Winter's Chill, causing your target to take damage from your spells as if it were frozen.][] SpellInfo(flurry_debuff duration=1 gcd=0 offgcd=1) Define(freezing_rain_buff 270232) # Frozen Orb makes Blizzard instant cast and increases its damage done by 270232s2 for 12 seconds. @@ -195,7 +195,7 @@ Define(frost_nova 122) # Frozen in place. SpellAddTargetDebuff(frost_nova frost_nova add=1) Define(frostbolt 116) -# Launches a bolt of frost at the enemy, causing (51.1 of Spell Power) Frost damage and slowing movement speed by 205708s1 for 8 seconds. +# Launches a bolt of frost at the enemy, causing (55.188 of Spell Power) Frost damage and slowing movement speed by 205708s1 for 8 seconds. SpellInfo(frostbolt) Define(frozen_debuff 174955) # Deals m2 Frost damage, and Stuns targets for 30 seconds (8 sec PvP). @@ -203,7 +203,7 @@ Define(frozen_debuff 174955) # Frozen. SpellAddTargetDebuff(frozen_debuff frozen_debuff add=1) Define(frozen_orb 84714) -# Launches an orb of swirling ice up to s1 yards forward which deals up to 20*(16.27 of Spell Power) Frost damage to 84721s2 enemies it passes through. Grants 1 charge of Fingers of Frost when it first damages an enemy.rnrnEnemies damaged by the Frozen Orb are slowed by 289308s1 for 3 seconds. +# Launches an orb of swirling ice up to s1 yards forward which deals up to 20*(16.27 of Spell Power) Frost damage to all enemies it passes through. Deals reduced damage beyond 84721s2 targets. Grants 1 charge of Fingers of Frost when it first damages an enemy.rnrnEnemies damaged by the Frozen Orb are slowed by 289308s1 for 3 seconds. SpellInfo(frozen_orb cd=60 duration=15) Define(glacial_spike 199786) # Conjures a massive spike of ice, and merges your current Icicles into it. It impales your target, dealing (297 of Spell Power) damage plus all of the damage stored in your Icicles, and freezes the target in place for 4 seconds. Damage may interrupt the freeze effect.rnrnRequires 5 Icicles to cast.rnrn|cFFFFFFFFPassive:|r Ice Lance no longer launches Icicles. @@ -424,7 +424,7 @@ Define(ultimate_form_buff 323524) # While channeling Fleshcraft, you are immune to crowd control and you regenerate 323524s17 health every 323524t17 sec. rnrnIf you finish the full channel, you gain 3 seconds of crowd control immunity, during which you regenerate 323524s17 health every 323524t17 sec. SpellInfo(ultimate_form_buff duration=3 gcd=0 offgcd=1 tick=1) Define(winters_chill_debuff 228358) -# Unleash a flurry of ice, striking the target s1 times for a total of (31.6 of Spell Power)*m1 Frost damage. Each hit reduces the target's movement speed by 228354s1 for 1 second.?a231584[rnrnWhile Brain Freeze is active, Flurry applies Winter's Chill, causing your target to take damage from your spells as if it were frozen.][] +# Unleash a flurry of ice, striking the target s1 times for a total of (34.760000000000005 of Spell Power)*m1 Frost damage. Each hit reduces the target's movement speed by 228354s1 for 1 second.?a231584[rnrnWhile Brain Freeze is active, Flurry applies Winter's Chill, causing your target to take damage from your spells as if it were frozen.][] SpellInfo(winters_chill_debuff duration=6 max_stacks=2 gcd=0 offgcd=1) # Taking damage from the Mage's spells as if frozen. SpellAddTargetDebuff(winters_chill_debuff winters_chill_debuff add=1) @@ -434,7 +434,7 @@ Define(alexstraszas_fury_talent 22465) Define(amplification_talent 22458) # When Clearcast, Arcane Missiles fires s2 additional lmissile:missiles;. Define(arcane_echo_talent 22467) -# Direct damage you deal to enemies affected by Touch of the Magi, causes an explosion that deals (10.92 of Spell Power) Arcane damage to s1 nearby enemies. +# Direct damage you deal to enemies affected by Touch of the Magi, causes an explosion that deals (10.92 of Spell Power) Arcane damage to all nearby enemies. Deals reduced damage beyond s1 targets. Define(arcane_familiar_talent 22464) # Summon a Familiar that attacks your enemies and increases your maximum mana by 210126s1 for 3600 seconds. Define(arcane_orb_talent 22449) @@ -529,6 +529,7 @@ Define(siphon_storm_runeforge 6928) Define(temporal_warp_runeforge 6834) Define(deaths_fathom_runeforge 7475) Define(firestorm_runeforge 6932) +Define(sinful_delight_runeforge 7476) Define(sun_kings_blessing_runeforge 6934) Define(freezing_winds_runeforge 6829) Define(glacial_fragments_runeforge 6830) diff --git a/src/scripts/ovale_monk.ts b/src/scripts/ovale_monk.ts index 98dc262f4..6285bef8b 100644 --- a/src/scripts/ovale_monk.ts +++ b/src/scripts/ovale_monk.ts @@ -2961,6 +2961,894 @@ AddIcon enabled=(checkboxon(opt_monk_windwalker_aoe) and specialization(windwalk # whirling_dragon_punch # whirling_dragon_punch_talent # wrathstone_item +`; + scripts.registerScript( + "MONK", + "windwalker", + name, + desc, + code, + "script" + ); + } + + { + const name = "sc_t27_monk_windwalker_venthyr"; + const desc = "[9.1] Simulationcraft: T27_Monk_Windwalker_Venthyr"; + const code = ` +# Based on SimulationCraft profile "T27_Monk_Windwalker_Venthyr". +# class=monk +# spec=windwalker +# talents=2020012 + +Include(ovale_common) +Include(ovale_monk_spells) + + +AddFunction hold_xuen +{ + spellcooldown(invoke_xuen_the_white_tiger) > fightremains() or fightremains() - spellcooldown(invoke_xuen_the_white_tiger) < 120 and { hastalent(serenity_talent) and fightremains() > spellcooldown(serenity) and spellcooldown(serenity) > 10 or spellcooldown(storm_earth_and_fire) < fightremains() and spellcooldown(storm_earth_and_fire) > 15 or spellcharges(storm_earth_and_fire) == 0 and spellcooldown(storm_earth_and_fire) < fightremains() } +} + +AddFunction serenity_burst +{ + spellcooldown(serenity) < 1 or pet.present() and spellcooldown(serenity) > 30 or fightremains() < 20 +} + +AddFunction xuen_on_use_trinket +{ + hasequippeditem(inscrutable_quantum_device_item) or hasequippeditem(gladiators_badge_item) or hasequippeditem(wrathstone_item) or hasequippeditem(overcharged_anima_battery_item) or hasequippeditem(shadowgrasp_totem_item) +} + +AddFunction blackout_kick_needed +{ + buffpresent(weapons_of_order_ww) and { spellcooldown(rising_sun_kick) > buffremaining(weapons_of_order_ww) and buffremaining(weapons_of_order_ww) < 2.1 or spellcooldown(rising_sun_kick) - buffremaining(weapons_of_order_ww) > 1.9 and buffremaining(weapons_of_order_ww) < 4.1 or buffpresent(bloodlust) and buffpresent(invokers_delight_buff) and buffremaining(invokers_delight_buff) < buffremaining(weapons_of_order_ww) } +} + +AddCheckBox(opt_interrupt l(interrupt) default enabled=(specialization(windwalker))) +AddCheckBox(opt_melee_range l(not_in_melee_range) enabled=(specialization(windwalker))) +AddCheckBox(opt_use_consumables l(opt_use_consumables) default enabled=(specialization(windwalker))) +AddCheckBox(opt_flying_serpent_kick spellname(flying_serpent_kick) default enabled=(specialization(windwalker))) +AddCheckBox(opt_touch_of_karma spellname(touch_of_karma) enabled=(specialization(windwalker))) +AddCheckBox(opt_chi_burst spellname(chi_burst) default enabled=(specialization(windwalker))) +AddCheckBox(opt_storm_earth_and_fire spellname(storm_earth_and_fire) default enabled=(specialization(windwalker))) + +AddFunction windwalkerinterruptactions +{ + if checkboxon(opt_interrupt) and not target.isfriend() and target.casting() + { + if target.inrange(spear_hand_strike) and target.isinterruptible() spell(spear_hand_strike) + if target.distance() < 5 and not target.classification(worldboss) spell(leg_sweep) + if target.inrange(quaking_palm) and not target.classification(worldboss) spell(quaking_palm) + if target.distance() < 5 and not target.classification(worldboss) spell(war_stomp) + if target.inrange(paralysis) and not target.classification(worldboss) spell(paralysis) + } +} + +AddFunction windwalkergetinmeleerange +{ + if checkboxon(opt_melee_range) and not target.inrange(tiger_palm) texture(misc_arrowlup help=(l(not_in_melee_range))) +} + +### actions.weapons_of_order + +AddFunction windwalkerweapons_of_ordermainactions +{ + #variable,name=blackout_kick_needed,op=set,value=buff.weapons_of_order_ww.remains&(cooldown.rising_sun_kick.remains>buff.weapons_of_order_ww.remains&buff.weapons_of_order_ww.remains<2.1|cooldown.rising_sun_kick.remains-buff.weapons_of_order_ww.remains>1.9&buff.weapons_of_order_ww.remains<4.1|buff.bloodlust.up&buff.invokers_delight.up&buff.invokers_delight.remains=2&buff.weapons_of_order_ww.remains<1 + if enemies() >= 2 and buffremaining(weapons_of_order_ww) < 1 spell(fists_of_fury) + #whirling_dragon_punch,if=active_enemies>=2 + if enemies() >= 2 spell(whirling_dragon_punch) + #spinning_crane_kick,if=combo_strike&active_enemies>=3&buff.weapons_of_order_ww.up + if not previousspell(spinning_crane_kick) and enemies() >= 3 and buffpresent(weapons_of_order_ww) spell(spinning_crane_kick) + #blackout_kick,target_if=min:debuff.mark_of_the_crane.remains,if=combo_strike&active_enemies<=2&variable.blackout_kick_needed + if not previousspell(blackout_kick) and enemies() <= 2 and blackout_kick_needed() spell(blackout_kick) + #spinning_crane_kick,if=combo_strike&buff.dance_of_chiji.up + if not previousspell(spinning_crane_kick) and buffpresent(dance_of_chiji_buff) spell(spinning_crane_kick) + #expel_harm,if=chi=0&buff.weapons_of_order_ww.remains<4 + if chi() == 0 and buffremaining(weapons_of_order_ww) < 4 spell(expel_harm) + #whirling_dragon_punch + spell(whirling_dragon_punch) + #tiger_palm,target_if=min:debuff.mark_of_the_crane.remains+(debuff.skyreach_exhaustion.up*20),if=chi=0&buff.weapons_of_order_ww.remains<4 + if chi() == 0 and buffremaining(weapons_of_order_ww) < 4 spell(tiger_palm) + #fists_of_fury,interrupt=1,if=buff.storm_earth_and_fire.up&raid_event.adds.in>cooldown.fists_of_fury.duration*0.6 + if buffpresent(storm_earth_and_fire) and 600 > spellcooldownduration(fists_of_fury) * 0.6 spell(fists_of_fury) + #spinning_crane_kick,if=buff.chi_energy.stack>30-5*active_enemies + if buffstacks(chi_energy_buff) > 30 - 5 * enemies() spell(spinning_crane_kick) + #expel_harm,if=chi.max-chi>=1 + if maxchi() - chi() >= 1 spell(expel_harm) + #tiger_palm,target_if=min:debuff.mark_of_the_crane.remains+(debuff.skyreach_exhaustion.up*20),if=(!talent.hit_combo|combo_strike)&chi.max-chi>=2 + if { not hastalent(hit_combo_talent) or not previousspell(tiger_palm) } and maxchi() - chi() >= 2 spell(tiger_palm) + #blackout_kick,target_if=min:debuff.mark_of_the_crane.remains,if=active_enemies<=3&chi>=3|buff.weapons_of_order_ww.up + if enemies() <= 3 and chi() >= 3 or buffpresent(weapons_of_order_ww) spell(blackout_kick) + #chi_wave + spell(chi_wave) + #flying_serpent_kick,interrupt=1 + if checkboxon(opt_flying_serpent_kick) spell(flying_serpent_kick) + } + } +} + +AddFunction windwalkerweapons_of_ordermainpostconditions +{ + not hastalent(serenity_talent) and windwalkercd_sefmainpostconditions() or hastalent(serenity_talent) and windwalkercd_serenitymainpostconditions() +} + +AddFunction windwalkerweapons_of_ordershortcdactions +{ + #variable,name=blackout_kick_needed,op=set,value=buff.weapons_of_order_ww.remains&(cooldown.rising_sun_kick.remains>buff.weapons_of_order_ww.remains&buff.weapons_of_order_ww.remains<2.1|cooldown.rising_sun_kick.remains-buff.weapons_of_order_ww.remains>1.9&buff.weapons_of_order_ww.remains<4.1|buff.bloodlust.up&buff.invokers_delight.up&buff.invokers_delight.remains=2&energy.time_to_max>3 + if maxchi() - chi() >= 2 and timetomaxenergy() > 3 spell(energizing_elixir) + + unless spell(rising_sun_kick) or enemies() >= 2 and buffremaining(weapons_of_order_ww) < 1 and spell(fists_of_fury) or enemies() >= 2 and spell(whirling_dragon_punch) or not previousspell(spinning_crane_kick) and enemies() >= 3 and buffpresent(weapons_of_order_ww) and spell(spinning_crane_kick) or not previousspell(blackout_kick) and enemies() <= 2 and blackout_kick_needed() and spell(blackout_kick) or not previousspell(spinning_crane_kick) and buffpresent(dance_of_chiji_buff) and spell(spinning_crane_kick) or chi() == 0 and buffremaining(weapons_of_order_ww) < 4 and spell(expel_harm) + { + #fist_of_the_white_tiger,target_if=min:debuff.mark_of_the_crane.remains,if=chi=0&buff.weapons_of_order_ww.remains<4 + if chi() == 0 and buffremaining(weapons_of_order_ww) < 4 spell(fist_of_the_white_tiger) + + unless spell(whirling_dragon_punch) or chi() == 0 and buffremaining(weapons_of_order_ww) < 4 and spell(tiger_palm) or buffpresent(storm_earth_and_fire) and 600 > spellcooldownduration(fists_of_fury) * 0.6 and spell(fists_of_fury) or buffstacks(chi_energy_buff) > 30 - 5 * enemies() and spell(spinning_crane_kick) + { + #fist_of_the_white_tiger,target_if=min:debuff.mark_of_the_crane.remains,if=chi<3 + if chi() < 3 spell(fist_of_the_white_tiger) + + unless maxchi() - chi() >= 1 and spell(expel_harm) + { + #chi_burst,if=chi.max-chi>=(1+active_enemies>1) + if maxchi() - chi() >= { 1 + enemies() > 1 } and checkboxon(opt_chi_burst) spell(chi_burst) + } + } + } + } + } +} + +AddFunction windwalkerweapons_of_ordershortcdpostconditions +{ + not hastalent(serenity_talent) and windwalkercd_sefshortcdpostconditions() or hastalent(serenity_talent) and windwalkercd_serenityshortcdpostconditions() or spell(rising_sun_kick) or enemies() >= 2 and buffremaining(weapons_of_order_ww) < 1 and spell(fists_of_fury) or enemies() >= 2 and spell(whirling_dragon_punch) or not previousspell(spinning_crane_kick) and enemies() >= 3 and buffpresent(weapons_of_order_ww) and spell(spinning_crane_kick) or not previousspell(blackout_kick) and enemies() <= 2 and blackout_kick_needed() and spell(blackout_kick) or not previousspell(spinning_crane_kick) and buffpresent(dance_of_chiji_buff) and spell(spinning_crane_kick) or chi() == 0 and buffremaining(weapons_of_order_ww) < 4 and spell(expel_harm) or spell(whirling_dragon_punch) or chi() == 0 and buffremaining(weapons_of_order_ww) < 4 and spell(tiger_palm) or buffpresent(storm_earth_and_fire) and 600 > spellcooldownduration(fists_of_fury) * 0.6 and spell(fists_of_fury) or buffstacks(chi_energy_buff) > 30 - 5 * enemies() and spell(spinning_crane_kick) or maxchi() - chi() >= 1 and spell(expel_harm) or { not hastalent(hit_combo_talent) or not previousspell(tiger_palm) } and maxchi() - chi() >= 2 and spell(tiger_palm) or { enemies() <= 3 and chi() >= 3 or buffpresent(weapons_of_order_ww) } and spell(blackout_kick) or spell(chi_wave) or checkboxon(opt_flying_serpent_kick) and spell(flying_serpent_kick) +} + +AddFunction windwalkerweapons_of_ordercdactions +{ + #variable,name=blackout_kick_needed,op=set,value=buff.weapons_of_order_ww.remains&(cooldown.rising_sun_kick.remains>buff.weapons_of_order_ww.remains&buff.weapons_of_order_ww.remains<2.1|cooldown.rising_sun_kick.remains-buff.weapons_of_order_ww.remains>1.9&buff.weapons_of_order_ww.remains<4.1|buff.bloodlust.up&buff.invokers_delight.up&buff.invokers_delight.remains= 2 and timetomaxenergy() > 3 and spell(energizing_elixir) or spell(rising_sun_kick) or enemies() >= 2 and buffremaining(weapons_of_order_ww) < 1 and spell(fists_of_fury) or enemies() >= 2 and spell(whirling_dragon_punch) or not previousspell(spinning_crane_kick) and enemies() >= 3 and buffpresent(weapons_of_order_ww) and spell(spinning_crane_kick) or not previousspell(blackout_kick) and enemies() <= 2 and blackout_kick_needed() and spell(blackout_kick) or not previousspell(spinning_crane_kick) and buffpresent(dance_of_chiji_buff) and spell(spinning_crane_kick) or chi() == 0 and buffremaining(weapons_of_order_ww) < 4 and spell(expel_harm) or chi() == 0 and buffremaining(weapons_of_order_ww) < 4 and spell(fist_of_the_white_tiger) or spell(whirling_dragon_punch) or chi() == 0 and buffremaining(weapons_of_order_ww) < 4 and spell(tiger_palm) or buffpresent(storm_earth_and_fire) and 600 > spellcooldownduration(fists_of_fury) * 0.6 and spell(fists_of_fury) or buffstacks(chi_energy_buff) > 30 - 5 * enemies() and spell(spinning_crane_kick) or chi() < 3 and spell(fist_of_the_white_tiger) or maxchi() - chi() >= 1 and spell(expel_harm) or maxchi() - chi() >= { 1 + enemies() > 1 } and checkboxon(opt_chi_burst) and spell(chi_burst) or { not hastalent(hit_combo_talent) or not previousspell(tiger_palm) } and maxchi() - chi() >= 2 and spell(tiger_palm) or { enemies() <= 3 and chi() >= 3 or buffpresent(weapons_of_order_ww) } and spell(blackout_kick) or spell(chi_wave) or checkboxon(opt_flying_serpent_kick) and spell(flying_serpent_kick) +} + +### actions.st + +AddFunction windwalkerstmainactions +{ + #whirling_dragon_punch,if=raid_event.adds.in>cooldown.whirling_dragon_punch.duration*0.8|raid_event.adds.up + if 600 > spellcooldownduration(whirling_dragon_punch) * 0.8 or never(raid_event_adds_exists) spell(whirling_dragon_punch) + #spinning_crane_kick,if=combo_strike&buff.dance_of_chiji.up&(raid_event.adds.in>buff.dance_of_chiji.remains-2|raid_event.adds.up) + if not previousspell(spinning_crane_kick) and buffpresent(dance_of_chiji_buff) and { 600 > buffremaining(dance_of_chiji_buff) - 2 or never(raid_event_adds_exists) } spell(spinning_crane_kick) + #rising_sun_kick,target_if=min:debuff.mark_of_the_crane.remains,if=cooldown.serenity.remains>1|!talent.serenity&(cooldown.weapons_of_order.remains>4|!covenant.kyrian) + if spellcooldown(serenity) > 1 or not hastalent(serenity_talent) and { spellcooldown(weapons_of_order) > 4 or not iscovenant("kyrian") } spell(rising_sun_kick) + #fists_of_fury,if=(raid_event.adds.in>cooldown.fists_of_fury.duration*0.8|raid_event.adds.up)&(energy.time_to_max>execute_time-1|chi.max-chi<=1|buff.storm_earth_and_fire.remains spellcooldownduration(fists_of_fury) * 0.8 or never(raid_event_adds_exists) } and { timetomaxenergy() > executetime(fists_of_fury) - 1 or maxchi() - chi() <= 1 or buffremaining(storm_earth_and_fire) < executetime(fists_of_fury) + 1 } or fightremains() < executetime(fists_of_fury) + 1 or target.debuffpresent(bonedust_brew) spell(fists_of_fury) + #crackling_jade_lightning,if=buff.the_emperors_capacitor.stack>19&energy.time_to_max>execute_time-1&cooldown.rising_sun_kick.remains>execute_time|buff.the_emperors_capacitor.stack>14&(cooldown.serenity.remains<5&talent.serenity|cooldown.weapons_of_order.remains<5&covenant.kyrian|fight_remains<5) + if buffstacks(the_emperors_capacitor_buff) > 19 and timetomaxenergy() > executetime(crackling_jade_lightning) - 1 and spellcooldown(rising_sun_kick) > executetime(crackling_jade_lightning) or buffstacks(the_emperors_capacitor_buff) > 14 and { spellcooldown(serenity) < 5 and hastalent(serenity_talent) or spellcooldown(weapons_of_order) < 5 and iscovenant("kyrian") or fightremains() < 5 } spell(crackling_jade_lightning) + #rushing_jade_wind,if=buff.rushing_jade_wind.down&active_enemies>1 + if buffexpires(rushing_jade_wind) and enemies() > 1 spell(rushing_jade_wind) + #expel_harm,if=chi.max-chi>=1 + if maxchi() - chi() >= 1 spell(expel_harm) + #chi_wave + spell(chi_wave) + #tiger_palm,target_if=min:debuff.mark_of_the_crane.remains+(debuff.skyreach_exhaustion.up*20),if=combo_strike&chi.max-chi>=2&buff.storm_earth_and_fire.down + if not previousspell(tiger_palm) and maxchi() - chi() >= 2 and buffexpires(storm_earth_and_fire) spell(tiger_palm) + #spinning_crane_kick,if=buff.chi_energy.stack>30-5*active_enemies&buff.storm_earth_and_fire.down&(cooldown.rising_sun_kick.remains>2&cooldown.fists_of_fury.remains>2|cooldown.rising_sun_kick.remains<3&cooldown.fists_of_fury.remains>3&chi>3|cooldown.rising_sun_kick.remains>3&cooldown.fists_of_fury.remains<3&chi>4|chi.max-chi<=1&energy.time_to_max<2)|buff.chi_energy.stack>10&fight_remains<7 + if buffstacks(chi_energy_buff) > 30 - 5 * enemies() and buffexpires(storm_earth_and_fire) and { spellcooldown(rising_sun_kick) > 2 and spellcooldown(fists_of_fury) > 2 or spellcooldown(rising_sun_kick) < 3 and spellcooldown(fists_of_fury) > 3 and chi() > 3 or spellcooldown(rising_sun_kick) > 3 and spellcooldown(fists_of_fury) < 3 and chi() > 4 or maxchi() - chi() <= 1 and timetomaxenergy() < 2 } or buffstacks(chi_energy_buff) > 10 and fightremains() < 7 spell(spinning_crane_kick) + #blackout_kick,target_if=min:debuff.mark_of_the_crane.remains,if=combo_strike&(talent.serenity&cooldown.serenity.remains<3|cooldown.rising_sun_kick.remains>1&cooldown.fists_of_fury.remains>1|cooldown.rising_sun_kick.remains<3&cooldown.fists_of_fury.remains>3&chi>2|cooldown.rising_sun_kick.remains>3&cooldown.fists_of_fury.remains<3&chi>3|chi>5|buff.bok_proc.up) + if not previousspell(blackout_kick) and { hastalent(serenity_talent) and spellcooldown(serenity) < 3 or spellcooldown(rising_sun_kick) > 1 and spellcooldown(fists_of_fury) > 1 or spellcooldown(rising_sun_kick) < 3 and spellcooldown(fists_of_fury) > 3 and chi() > 2 or spellcooldown(rising_sun_kick) > 3 and spellcooldown(fists_of_fury) < 3 and chi() > 3 or chi() > 5 or buffpresent(blackout_kick_aura_buff) } spell(blackout_kick) + #tiger_palm,target_if=min:debuff.mark_of_the_crane.remains+(debuff.skyreach_exhaustion.up*20),if=combo_strike&chi.max-chi>=2 + if not previousspell(tiger_palm) and maxchi() - chi() >= 2 spell(tiger_palm) + #flying_serpent_kick,interrupt=1 + if checkboxon(opt_flying_serpent_kick) spell(flying_serpent_kick) + #blackout_kick,target_if=min:debuff.mark_of_the_crane.remains,if=combo_strike&cooldown.fists_of_fury.remains<3&chi=2&prev_gcd.1.tiger_palm&energy.time_to_50<1 + if not previousspell(blackout_kick) and spellcooldown(fists_of_fury) < 3 and chi() == 2 and previousgcdspell(tiger_palm) and timetoenergy(50) < 1 spell(blackout_kick) + #blackout_kick,target_if=min:debuff.mark_of_the_crane.remains,if=combo_strike&energy.time_to_max<2&(chi.max-chi<=1|prev_gcd.1.tiger_palm) + if not previousspell(blackout_kick) and timetomaxenergy() < 2 and { maxchi() - chi() <= 1 or previousgcdspell(tiger_palm) } spell(blackout_kick) +} + +AddFunction windwalkerstmainpostconditions +{ +} + +AddFunction windwalkerstshortcdactions +{ + unless { 600 > spellcooldownduration(whirling_dragon_punch) * 0.8 or never(raid_event_adds_exists) } and spell(whirling_dragon_punch) + { + #energizing_elixir,if=chi.max-chi>=2&energy.time_to_max>3|chi.max-chi>=4&(energy.time_to_max>2|!prev_gcd.1.tiger_palm) + if maxchi() - chi() >= 2 and timetomaxenergy() > 3 or maxchi() - chi() >= 4 and { timetomaxenergy() > 2 or not previousgcdspell(tiger_palm) } spell(energizing_elixir) + + unless not previousspell(spinning_crane_kick) and buffpresent(dance_of_chiji_buff) and { 600 > buffremaining(dance_of_chiji_buff) - 2 or never(raid_event_adds_exists) } and spell(spinning_crane_kick) or { spellcooldown(serenity) > 1 or not hastalent(serenity_talent) and { spellcooldown(weapons_of_order) > 4 or not iscovenant("kyrian") } } and spell(rising_sun_kick) or { { 600 > spellcooldownduration(fists_of_fury) * 0.8 or never(raid_event_adds_exists) } and { timetomaxenergy() > executetime(fists_of_fury) - 1 or maxchi() - chi() <= 1 or buffremaining(storm_earth_and_fire) < executetime(fists_of_fury) + 1 } or fightremains() < executetime(fists_of_fury) + 1 or target.debuffpresent(bonedust_brew) } and spell(fists_of_fury) or { buffstacks(the_emperors_capacitor_buff) > 19 and timetomaxenergy() > executetime(crackling_jade_lightning) - 1 and spellcooldown(rising_sun_kick) > executetime(crackling_jade_lightning) or buffstacks(the_emperors_capacitor_buff) > 14 and { spellcooldown(serenity) < 5 and hastalent(serenity_talent) or spellcooldown(weapons_of_order) < 5 and iscovenant("kyrian") or fightremains() < 5 } } and spell(crackling_jade_lightning) or buffexpires(rushing_jade_wind) and enemies() > 1 and spell(rushing_jade_wind) + { + #fist_of_the_white_tiger,target_if=min:debuff.mark_of_the_crane.remains,if=chi<3 + if chi() < 3 spell(fist_of_the_white_tiger) + + unless maxchi() - chi() >= 1 and spell(expel_harm) + { + #chi_burst,if=chi.max-chi>=1&active_enemies=1&raid_event.adds.in>20|chi.max-chi>=2&active_enemies>=2 + if { maxchi() - chi() >= 1 and enemies() == 1 and 600 > 20 or maxchi() - chi() >= 2 and enemies() >= 2 } and checkboxon(opt_chi_burst) spell(chi_burst) + } + } + } +} + +AddFunction windwalkerstshortcdpostconditions +{ + { 600 > spellcooldownduration(whirling_dragon_punch) * 0.8 or never(raid_event_adds_exists) } and spell(whirling_dragon_punch) or not previousspell(spinning_crane_kick) and buffpresent(dance_of_chiji_buff) and { 600 > buffremaining(dance_of_chiji_buff) - 2 or never(raid_event_adds_exists) } and spell(spinning_crane_kick) or { spellcooldown(serenity) > 1 or not hastalent(serenity_talent) and { spellcooldown(weapons_of_order) > 4 or not iscovenant("kyrian") } } and spell(rising_sun_kick) or { { 600 > spellcooldownduration(fists_of_fury) * 0.8 or never(raid_event_adds_exists) } and { timetomaxenergy() > executetime(fists_of_fury) - 1 or maxchi() - chi() <= 1 or buffremaining(storm_earth_and_fire) < executetime(fists_of_fury) + 1 } or fightremains() < executetime(fists_of_fury) + 1 or target.debuffpresent(bonedust_brew) } and spell(fists_of_fury) or { buffstacks(the_emperors_capacitor_buff) > 19 and timetomaxenergy() > executetime(crackling_jade_lightning) - 1 and spellcooldown(rising_sun_kick) > executetime(crackling_jade_lightning) or buffstacks(the_emperors_capacitor_buff) > 14 and { spellcooldown(serenity) < 5 and hastalent(serenity_talent) or spellcooldown(weapons_of_order) < 5 and iscovenant("kyrian") or fightremains() < 5 } } and spell(crackling_jade_lightning) or buffexpires(rushing_jade_wind) and enemies() > 1 and spell(rushing_jade_wind) or maxchi() - chi() >= 1 and spell(expel_harm) or spell(chi_wave) or not previousspell(tiger_palm) and maxchi() - chi() >= 2 and buffexpires(storm_earth_and_fire) and spell(tiger_palm) or { buffstacks(chi_energy_buff) > 30 - 5 * enemies() and buffexpires(storm_earth_and_fire) and { spellcooldown(rising_sun_kick) > 2 and spellcooldown(fists_of_fury) > 2 or spellcooldown(rising_sun_kick) < 3 and spellcooldown(fists_of_fury) > 3 and chi() > 3 or spellcooldown(rising_sun_kick) > 3 and spellcooldown(fists_of_fury) < 3 and chi() > 4 or maxchi() - chi() <= 1 and timetomaxenergy() < 2 } or buffstacks(chi_energy_buff) > 10 and fightremains() < 7 } and spell(spinning_crane_kick) or not previousspell(blackout_kick) and { hastalent(serenity_talent) and spellcooldown(serenity) < 3 or spellcooldown(rising_sun_kick) > 1 and spellcooldown(fists_of_fury) > 1 or spellcooldown(rising_sun_kick) < 3 and spellcooldown(fists_of_fury) > 3 and chi() > 2 or spellcooldown(rising_sun_kick) > 3 and spellcooldown(fists_of_fury) < 3 and chi() > 3 or chi() > 5 or buffpresent(blackout_kick_aura_buff) } and spell(blackout_kick) or not previousspell(tiger_palm) and maxchi() - chi() >= 2 and spell(tiger_palm) or checkboxon(opt_flying_serpent_kick) and spell(flying_serpent_kick) or not previousspell(blackout_kick) and spellcooldown(fists_of_fury) < 3 and chi() == 2 and previousgcdspell(tiger_palm) and timetoenergy(50) < 1 and spell(blackout_kick) or not previousspell(blackout_kick) and timetomaxenergy() < 2 and { maxchi() - chi() <= 1 or previousgcdspell(tiger_palm) } and spell(blackout_kick) +} + +AddFunction windwalkerstcdactions +{ + unless { 600 > spellcooldownduration(whirling_dragon_punch) * 0.8 or never(raid_event_adds_exists) } and spell(whirling_dragon_punch) or { maxchi() - chi() >= 2 and timetomaxenergy() > 3 or maxchi() - chi() >= 4 and { timetomaxenergy() > 2 or not previousgcdspell(tiger_palm) } } and spell(energizing_elixir) or not previousspell(spinning_crane_kick) and buffpresent(dance_of_chiji_buff) and { 600 > buffremaining(dance_of_chiji_buff) - 2 or never(raid_event_adds_exists) } and spell(spinning_crane_kick) or { spellcooldown(serenity) > 1 or not hastalent(serenity_talent) and { spellcooldown(weapons_of_order) > 4 or not iscovenant("kyrian") } } and spell(rising_sun_kick) or { { 600 > spellcooldownduration(fists_of_fury) * 0.8 or never(raid_event_adds_exists) } and { timetomaxenergy() > executetime(fists_of_fury) - 1 or maxchi() - chi() <= 1 or buffremaining(storm_earth_and_fire) < executetime(fists_of_fury) + 1 } or fightremains() < executetime(fists_of_fury) + 1 or target.debuffpresent(bonedust_brew) } and spell(fists_of_fury) or { buffstacks(the_emperors_capacitor_buff) > 19 and timetomaxenergy() > executetime(crackling_jade_lightning) - 1 and spellcooldown(rising_sun_kick) > executetime(crackling_jade_lightning) or buffstacks(the_emperors_capacitor_buff) > 14 and { spellcooldown(serenity) < 5 and hastalent(serenity_talent) or spellcooldown(weapons_of_order) < 5 and iscovenant("kyrian") or fightremains() < 5 } } and spell(crackling_jade_lightning) or buffexpires(rushing_jade_wind) and enemies() > 1 and spell(rushing_jade_wind) or chi() < 3 and spell(fist_of_the_white_tiger) or maxchi() - chi() >= 1 and spell(expel_harm) or { maxchi() - chi() >= 1 and enemies() == 1 and 600 > 20 or maxchi() - chi() >= 2 and enemies() >= 2 } and checkboxon(opt_chi_burst) and spell(chi_burst) or spell(chi_wave) or not previousspell(tiger_palm) and maxchi() - chi() >= 2 and buffexpires(storm_earth_and_fire) and spell(tiger_palm) or { buffstacks(chi_energy_buff) > 30 - 5 * enemies() and buffexpires(storm_earth_and_fire) and { spellcooldown(rising_sun_kick) > 2 and spellcooldown(fists_of_fury) > 2 or spellcooldown(rising_sun_kick) < 3 and spellcooldown(fists_of_fury) > 3 and chi() > 3 or spellcooldown(rising_sun_kick) > 3 and spellcooldown(fists_of_fury) < 3 and chi() > 4 or maxchi() - chi() <= 1 and timetomaxenergy() < 2 } or buffstacks(chi_energy_buff) > 10 and fightremains() < 7 } and spell(spinning_crane_kick) or not previousspell(blackout_kick) and { hastalent(serenity_talent) and spellcooldown(serenity) < 3 or spellcooldown(rising_sun_kick) > 1 and spellcooldown(fists_of_fury) > 1 or spellcooldown(rising_sun_kick) < 3 and spellcooldown(fists_of_fury) > 3 and chi() > 2 or spellcooldown(rising_sun_kick) > 3 and spellcooldown(fists_of_fury) < 3 and chi() > 3 or chi() > 5 or buffpresent(blackout_kick_aura_buff) } and spell(blackout_kick) or not previousspell(tiger_palm) and maxchi() - chi() >= 2 and spell(tiger_palm) + { + #arcane_torrent,if=chi.max-chi>=1 + if maxchi() - chi() >= 1 spell(arcane_torrent) + } +} + +AddFunction windwalkerstcdpostconditions +{ + { 600 > spellcooldownduration(whirling_dragon_punch) * 0.8 or never(raid_event_adds_exists) } and spell(whirling_dragon_punch) or { maxchi() - chi() >= 2 and timetomaxenergy() > 3 or maxchi() - chi() >= 4 and { timetomaxenergy() > 2 or not previousgcdspell(tiger_palm) } } and spell(energizing_elixir) or not previousspell(spinning_crane_kick) and buffpresent(dance_of_chiji_buff) and { 600 > buffremaining(dance_of_chiji_buff) - 2 or never(raid_event_adds_exists) } and spell(spinning_crane_kick) or { spellcooldown(serenity) > 1 or not hastalent(serenity_talent) and { spellcooldown(weapons_of_order) > 4 or not iscovenant("kyrian") } } and spell(rising_sun_kick) or { { 600 > spellcooldownduration(fists_of_fury) * 0.8 or never(raid_event_adds_exists) } and { timetomaxenergy() > executetime(fists_of_fury) - 1 or maxchi() - chi() <= 1 or buffremaining(storm_earth_and_fire) < executetime(fists_of_fury) + 1 } or fightremains() < executetime(fists_of_fury) + 1 or target.debuffpresent(bonedust_brew) } and spell(fists_of_fury) or { buffstacks(the_emperors_capacitor_buff) > 19 and timetomaxenergy() > executetime(crackling_jade_lightning) - 1 and spellcooldown(rising_sun_kick) > executetime(crackling_jade_lightning) or buffstacks(the_emperors_capacitor_buff) > 14 and { spellcooldown(serenity) < 5 and hastalent(serenity_talent) or spellcooldown(weapons_of_order) < 5 and iscovenant("kyrian") or fightremains() < 5 } } and spell(crackling_jade_lightning) or buffexpires(rushing_jade_wind) and enemies() > 1 and spell(rushing_jade_wind) or chi() < 3 and spell(fist_of_the_white_tiger) or maxchi() - chi() >= 1 and spell(expel_harm) or { maxchi() - chi() >= 1 and enemies() == 1 and 600 > 20 or maxchi() - chi() >= 2 and enemies() >= 2 } and checkboxon(opt_chi_burst) and spell(chi_burst) or spell(chi_wave) or not previousspell(tiger_palm) and maxchi() - chi() >= 2 and buffexpires(storm_earth_and_fire) and spell(tiger_palm) or { buffstacks(chi_energy_buff) > 30 - 5 * enemies() and buffexpires(storm_earth_and_fire) and { spellcooldown(rising_sun_kick) > 2 and spellcooldown(fists_of_fury) > 2 or spellcooldown(rising_sun_kick) < 3 and spellcooldown(fists_of_fury) > 3 and chi() > 3 or spellcooldown(rising_sun_kick) > 3 and spellcooldown(fists_of_fury) < 3 and chi() > 4 or maxchi() - chi() <= 1 and timetomaxenergy() < 2 } or buffstacks(chi_energy_buff) > 10 and fightremains() < 7 } and spell(spinning_crane_kick) or not previousspell(blackout_kick) and { hastalent(serenity_talent) and spellcooldown(serenity) < 3 or spellcooldown(rising_sun_kick) > 1 and spellcooldown(fists_of_fury) > 1 or spellcooldown(rising_sun_kick) < 3 and spellcooldown(fists_of_fury) > 3 and chi() > 2 or spellcooldown(rising_sun_kick) > 3 and spellcooldown(fists_of_fury) < 3 and chi() > 3 or chi() > 5 or buffpresent(blackout_kick_aura_buff) } and spell(blackout_kick) or not previousspell(tiger_palm) and maxchi() - chi() >= 2 and spell(tiger_palm) or checkboxon(opt_flying_serpent_kick) and spell(flying_serpent_kick) or not previousspell(blackout_kick) and spellcooldown(fists_of_fury) < 3 and chi() == 2 and previousgcdspell(tiger_palm) and timetoenergy(50) < 1 and spell(blackout_kick) or not previousspell(blackout_kick) and timetomaxenergy() < 2 and { maxchi() - chi() <= 1 or previousgcdspell(tiger_palm) } and spell(blackout_kick) +} + +### actions.serenity + +AddFunction windwalkerserenitymainactions +{ + #fists_of_fury,if=buff.serenity.remains<1 + if buffremaining(serenity) < 1 spell(fists_of_fury) + #spinning_crane_kick,if=combo_strike&(active_enemies>=3|active_enemies>1&!cooldown.rising_sun_kick.up) + if not previousspell(spinning_crane_kick) and { enemies() >= 3 or enemies() > 1 and not { not spellcooldown(rising_sun_kick) > 0 } } spell(spinning_crane_kick) + #rising_sun_kick,target_if=min:debuff.mark_of_the_crane.remains,if=combo_strike + if not previousspell(rising_sun_kick) spell(rising_sun_kick) + #fists_of_fury,if=active_enemies>=3 + if enemies() >= 3 spell(fists_of_fury) + #spinning_crane_kick,if=combo_strike&buff.dance_of_chiji.up + if not previousspell(spinning_crane_kick) and buffpresent(dance_of_chiji_buff) spell(spinning_crane_kick) + #blackout_kick,target_if=min:debuff.mark_of_the_crane.remains,if=combo_strike&buff.weapons_of_order.up&cooldown.rising_sun_kick.remains>2 + if not previousspell(blackout_kick) and buffpresent(weapons_of_order) and spellcooldown(rising_sun_kick) > 2 spell(blackout_kick) + #fists_of_fury,interrupt_if=!cooldown.rising_sun_kick.up + spell(fists_of_fury) + #spinning_crane_kick,if=combo_strike&debuff.bonedust_brew_debuff.up + if not previousspell(spinning_crane_kick) and target.debuffpresent(bonedust_brew) spell(spinning_crane_kick) + #blackout_kick,target_if=min:debuff.mark_of_the_crane.remains,if=combo_strike|!talent.hit_combo + if not previousspell(blackout_kick) or not hastalent(hit_combo_talent) spell(blackout_kick) + #spinning_crane_kick + spell(spinning_crane_kick) +} + +AddFunction windwalkerserenitymainpostconditions +{ +} + +AddFunction windwalkerserenityshortcdactions +{ + unless buffremaining(serenity) < 1 and spell(fists_of_fury) or not previousspell(spinning_crane_kick) and { enemies() >= 3 or enemies() > 1 and not { not spellcooldown(rising_sun_kick) > 0 } } and spell(spinning_crane_kick) or not previousspell(rising_sun_kick) and spell(rising_sun_kick) or enemies() >= 3 and spell(fists_of_fury) or not previousspell(spinning_crane_kick) and buffpresent(dance_of_chiji_buff) and spell(spinning_crane_kick) or not previousspell(blackout_kick) and buffpresent(weapons_of_order) and spellcooldown(rising_sun_kick) > 2 and spell(blackout_kick) or spell(fists_of_fury) or not previousspell(spinning_crane_kick) and target.debuffpresent(bonedust_brew) and spell(spinning_crane_kick) + { + #fist_of_the_white_tiger,target_if=min:debuff.mark_of_the_crane.remains,if=chi<3 + if chi() < 3 spell(fist_of_the_white_tiger) + } +} + +AddFunction windwalkerserenityshortcdpostconditions +{ + buffremaining(serenity) < 1 and spell(fists_of_fury) or not previousspell(spinning_crane_kick) and { enemies() >= 3 or enemies() > 1 and not { not spellcooldown(rising_sun_kick) > 0 } } and spell(spinning_crane_kick) or not previousspell(rising_sun_kick) and spell(rising_sun_kick) or enemies() >= 3 and spell(fists_of_fury) or not previousspell(spinning_crane_kick) and buffpresent(dance_of_chiji_buff) and spell(spinning_crane_kick) or not previousspell(blackout_kick) and buffpresent(weapons_of_order) and spellcooldown(rising_sun_kick) > 2 and spell(blackout_kick) or spell(fists_of_fury) or not previousspell(spinning_crane_kick) and target.debuffpresent(bonedust_brew) and spell(spinning_crane_kick) or { not previousspell(blackout_kick) or not hastalent(hit_combo_talent) } and spell(blackout_kick) or spell(spinning_crane_kick) +} + +AddFunction windwalkerserenitycdactions +{ +} + +AddFunction windwalkerserenitycdpostconditions +{ + buffremaining(serenity) < 1 and spell(fists_of_fury) or not previousspell(spinning_crane_kick) and { enemies() >= 3 or enemies() > 1 and not { not spellcooldown(rising_sun_kick) > 0 } } and spell(spinning_crane_kick) or not previousspell(rising_sun_kick) and spell(rising_sun_kick) or enemies() >= 3 and spell(fists_of_fury) or not previousspell(spinning_crane_kick) and buffpresent(dance_of_chiji_buff) and spell(spinning_crane_kick) or not previousspell(blackout_kick) and buffpresent(weapons_of_order) and spellcooldown(rising_sun_kick) > 2 and spell(blackout_kick) or spell(fists_of_fury) or not previousspell(spinning_crane_kick) and target.debuffpresent(bonedust_brew) and spell(spinning_crane_kick) or chi() < 3 and spell(fist_of_the_white_tiger) or { not previousspell(blackout_kick) or not hastalent(hit_combo_talent) } and spell(blackout_kick) or spell(spinning_crane_kick) +} + +### actions.precombat + +AddFunction windwalkerprecombatmainactions +{ + #chi_wave,if=!talent.energizing_elixir.enabled + if not hastalent(energizing_elixir_talent) spell(chi_wave) +} + +AddFunction windwalkerprecombatmainpostconditions +{ +} + +AddFunction windwalkerprecombatshortcdactions +{ + #chi_burst + if checkboxon(opt_chi_burst) spell(chi_burst) +} + +AddFunction windwalkerprecombatshortcdpostconditions +{ + not hastalent(energizing_elixir_talent) and spell(chi_wave) +} + +AddFunction windwalkerprecombatcdactions +{ + #flask + #food + #augmentation + #snapshot_stats + #variable,name=xuen_on_use_trinket,op=set,value=equipped.inscrutable_quantum_device|equipped.gladiators_badge|equipped.wrathstone|equipped.overcharged_anima_battery|equipped.shadowgrasp_totem + #fleshcraft + spell(fleshcraft) +} + +AddFunction windwalkerprecombatcdpostconditions +{ + checkboxon(opt_chi_burst) and spell(chi_burst) or not hastalent(energizing_elixir_talent) and spell(chi_wave) +} + +### actions.opener + +AddFunction windwalkeropenermainactions +{ + #expel_harm,if=talent.chi_burst.enabled&chi.max-chi>=3 + if hastalent(chi_burst_talent) and maxchi() - chi() >= 3 spell(expel_harm) + #tiger_palm,target_if=min:debuff.mark_of_the_crane.remains+(debuff.skyreach_exhaustion.up*20),if=combo_strike&chi.max-chi>=2 + if not previousspell(tiger_palm) and maxchi() - chi() >= 2 spell(tiger_palm) + #chi_wave,if=chi.max-chi=2 + if maxchi() - chi() == 2 spell(chi_wave) + #expel_harm + spell(expel_harm) + #tiger_palm,target_if=min:debuff.mark_of_the_crane.remains+(debuff.skyreach_exhaustion.up*20),if=chi.max-chi>=2 + if maxchi() - chi() >= 2 spell(tiger_palm) +} + +AddFunction windwalkeropenermainpostconditions +{ +} + +AddFunction windwalkeropenershortcdactions +{ + #fist_of_the_white_tiger,target_if=min:debuff.mark_of_the_crane.remains,if=chi.max-chi>=3 + if maxchi() - chi() >= 3 spell(fist_of_the_white_tiger) +} + +AddFunction windwalkeropenershortcdpostconditions +{ + hastalent(chi_burst_talent) and maxchi() - chi() >= 3 and spell(expel_harm) or not previousspell(tiger_palm) and maxchi() - chi() >= 2 and spell(tiger_palm) or maxchi() - chi() == 2 and spell(chi_wave) or spell(expel_harm) or maxchi() - chi() >= 2 and spell(tiger_palm) +} + +AddFunction windwalkeropenercdactions +{ +} + +AddFunction windwalkeropenercdpostconditions +{ + maxchi() - chi() >= 3 and spell(fist_of_the_white_tiger) or hastalent(chi_burst_talent) and maxchi() - chi() >= 3 and spell(expel_harm) or not previousspell(tiger_palm) and maxchi() - chi() >= 2 and spell(tiger_palm) or maxchi() - chi() == 2 and spell(chi_wave) or spell(expel_harm) or maxchi() - chi() >= 2 and spell(tiger_palm) +} + +### actions.cd_serenity + +AddFunction windwalkercd_serenitymainactions +{ +} + +AddFunction windwalkercd_serenitymainpostconditions +{ +} + +AddFunction windwalkercd_serenityshortcdactions +{ + #bag_of_tricks,if=variable.serenity_burst + if serenity_burst() spell(bag_of_tricks) + #touch_of_karma,if=fight_remains>90|pet.xuen_the_white_tiger.active|fight_remains<10 + if { fightremains() > 90 or pet.present() or fightremains() < 10 } and checkboxon(opt_touch_of_karma) spell(touch_of_karma) + #faeline_stomp + spell(faeline_stomp) + #bonedust_brew,if=fight_remains<15|(chi>=2&(fight_remains>60&((cooldown.serenity.remains>10|buff.serenity.up|cooldown.serenity.up)&(pet.xuen_the_white_tiger.active|cooldown.invoke_xuen_the_white_tiger.remains>10|variable.hold_xuen)))|(fight_remains<=60&(pet.xuen_the_White_tiger.active|cooldown.invoke_xuen_the_white_tiger.remains>fight_remains))) + if fightremains() < 15 or chi() >= 2 and { fightremains() > 60 and { spellcooldown(serenity) > 10 or buffpresent(serenity) or not spellcooldown(serenity) > 0 } } and { pet.present() or spellcooldown(invoke_xuen_the_white_tiger) > 10 or hold_xuen() } or fightremains() <= 60 and { pet.present() or spellcooldown(invoke_xuen_the_white_tiger) > fightremains() } spell(bonedust_brew) + #serenity,if=cooldown.rising_sun_kick.remains<2|fight_remains<15 + if spellcooldown(rising_sun_kick) < 2 or fightremains() < 15 spell(serenity) + #bag_of_tricks + spell(bag_of_tricks) +} + +AddFunction windwalkercd_serenityshortcdpostconditions +{ +} + +AddFunction windwalkercd_serenitycdactions +{ + #variable,name=serenity_burst,op=set,value=cooldown.serenity.remains<1|pet.xuen_the_white_tiger.active&cooldown.serenity.remains>30|fight_remains<20 + #invoke_xuen_the_white_tiger,if=!variable.hold_xuen|fight_remains<25 + if not hold_xuen() or fightremains() < 25 spell(invoke_xuen_the_white_tiger) + #blood_fury,if=variable.serenity_burst + if serenity_burst() spell(blood_fury_ap_int) + #berserking,if=variable.serenity_burst + if serenity_burst() spell(berserking) + #lights_judgment + spell(lights_judgment) + #fireblood,if=variable.serenity_burst + if serenity_burst() spell(fireblood) + #ancestral_call,if=variable.serenity_burst + if serenity_burst() spell(ancestral_call) + + unless serenity_burst() and spell(bag_of_tricks) + { + #touch_of_death,if=fight_remains>(180-runeforge.fatal_touch*120)|pet.xuen_the_white_tiger.active&(!covenant.necrolord|buff.bonedust_brew.up)|(cooldown.invoke_xuen_the_white_tiger.remains>fight_remains)&buff.bonedust_brew.up|fight_remains<10 + if fightremains() > 180 - runeforge(fatal_touch_runeforge) * 120 or pet.present() and { not iscovenant("necrolord") or buffpresent(bonedust_brew) } or spellcooldown(invoke_xuen_the_white_tiger) > fightremains() and buffpresent(bonedust_brew) or fightremains() < 10 spell(touch_of_death) + + unless { fightremains() > 90 or pet.present() or fightremains() < 10 } and checkboxon(opt_touch_of_karma) and spell(touch_of_karma) + { + #weapons_of_order,if=cooldown.rising_sun_kick.remains20|variable.hold_xuen + if { not xuen_on_use_trinket() or spellcooldown(invoke_xuen_the_white_tiger) > 20 or hold_xuen() } and hastrinket(salvaged_fusion_amplifier_item) item(salvaged_fusion_amplifier_item usable=1) + + unless spell(faeline_stomp) + { + #fallen_order + spell(fallen_order) + + unless { fightremains() < 15 or chi() >= 2 and { fightremains() > 60 and { spellcooldown(serenity) > 10 or buffpresent(serenity) or not spellcooldown(serenity) > 0 } } and { pet.present() or spellcooldown(invoke_xuen_the_white_tiger) > 10 or hold_xuen() } or fightremains() <= 60 and { pet.present() or spellcooldown(invoke_xuen_the_white_tiger) > fightremains() } } and spell(bonedust_brew) or { spellcooldown(rising_sun_kick) < 2 or fightremains() < 15 } and spell(serenity) or spell(bag_of_tricks) + { + #fleshcraft,if=soulbind.pustule_eruption&buff.serenity.down&debuff.bonedust_brew_debuff.down + if soulbind(pustule_eruption_soulbind) and buffexpires(serenity) and target.debuffexpires(bonedust_brew) spell(fleshcraft) + } + } + } + } +} + +AddFunction windwalkercd_serenitycdpostconditions +{ + serenity_burst() and spell(bag_of_tricks) or { fightremains() > 90 or pet.present() or fightremains() < 10 } and checkboxon(opt_touch_of_karma) and spell(touch_of_karma) or spell(faeline_stomp) or { fightremains() < 15 or chi() >= 2 and { fightremains() > 60 and { spellcooldown(serenity) > 10 or buffpresent(serenity) or not spellcooldown(serenity) > 0 } } and { pet.present() or spellcooldown(invoke_xuen_the_white_tiger) > 10 or hold_xuen() } or fightremains() <= 60 and { pet.present() or spellcooldown(invoke_xuen_the_white_tiger) > fightremains() } } and spell(bonedust_brew) or { spellcooldown(rising_sun_kick) < 2 or fightremains() < 15 } and spell(serenity) or spell(bag_of_tricks) +} + +### actions.cd_sef + +AddFunction windwalkercd_sefmainactions +{ +} + +AddFunction windwalkercd_sefmainpostconditions +{ +} + +AddFunction windwalkercd_sefshortcdactions +{ + #faeline_stomp,if=combo_strike&(raid_event.adds.in>10|raid_event.adds.up) + if not previousspell(faeline_stomp) and { 600 > 10 or never(raid_event_adds_exists) } spell(faeline_stomp) + #bonedust_brew,if=chi>=2&fight_remains>60&(cooldown.storm_earth_and_fire.charges>0|cooldown.storm_earth_and_fire.remains>10)&(pet.xuen_the_white_tiger.active|cooldown.invoke_xuen_the_white_tiger.remains>10|variable.hold_xuen)|(chi>=2&fight_remains<=60&(pet.xuen_the_White_tiger.active|cooldown.invoke_xuen_the_white_tiger.remains>fight_remains)&(cooldown.storm_earth_and_fire.charges>0|cooldown.storm_earth_and_fire.remains>fight_remains|buff.storm_earth_and_fire.up))|fight_remains<15 + if chi() >= 2 and fightremains() > 60 and { spellcharges(storm_earth_and_fire) > 0 or spellcooldown(storm_earth_and_fire) > 10 } and { pet.present() or spellcooldown(invoke_xuen_the_white_tiger) > 10 or hold_xuen() } or chi() >= 2 and fightremains() <= 60 and { pet.present() or spellcooldown(invoke_xuen_the_white_tiger) > fightremains() } and { spellcharges(storm_earth_and_fire) > 0 or spellcooldown(storm_earth_and_fire) > fightremains() or buffpresent(storm_earth_and_fire) } or fightremains() < 15 spell(bonedust_brew) + #storm_earth_and_fire_fixate,if=conduit.coordinated_offensive.enabled + #storm_earth_and_fire,if=cooldown.storm_earth_and_fire.charges=2|fight_remains<20|(raid_event.adds.remains>15|(!covenant.kyrian&!covenant.necrolord)&((raid_event.adds.in>cooldown.storm_earth_and_fire.full_recharge_time|!raid_event.adds.exists)&(cooldown.invoke_xuen_the_white_tiger.remains>cooldown.storm_earth_and_fire.full_recharge_time|variable.hold_xuen))&cooldown.fists_of_fury.remains<=9&chi>=2&cooldown.whirling_dragon_punch.remains<=12) + if { spellcharges(storm_earth_and_fire) == 2 or fightremains() < 20 or 0 > 15 or not iscovenant("kyrian") and not iscovenant("necrolord") and { 600 > spellcooldown(storm_earth_and_fire) or not never(raid_event_adds_exists) } and { spellcooldown(invoke_xuen_the_white_tiger) > spellcooldown(storm_earth_and_fire) or hold_xuen() } and spellcooldown(fists_of_fury) <= 9 and chi() >= 2 and spellcooldown(whirling_dragon_punch) <= 12 } and { checkboxon(opt_storm_earth_and_fire) and not buffpresent(storm_earth_and_fire) } spell(storm_earth_and_fire) + #storm_earth_and_fire,if=covenant.kyrian&(buff.weapons_of_order.up|(fight_remainscooldown.storm_earth_and_fire.full_recharge_time)&cooldown.fists_of_fury.remains<=9&chi>=2&cooldown.whirling_dragon_punch.remains<=12) + if iscovenant("kyrian") and { buffpresent(weapons_of_order) or { fightremains() < spellcooldown(weapons_of_order) or spellcooldown(weapons_of_order) > spellcooldown(storm_earth_and_fire) } and spellcooldown(fists_of_fury) <= 9 and chi() >= 2 and spellcooldown(whirling_dragon_punch) <= 12 } and { checkboxon(opt_storm_earth_and_fire) and not buffpresent(storm_earth_and_fire) } spell(storm_earth_and_fire) + #storm_earth_and_fire,if=covenant.necrolord&debuff.bonedust_brew_debuff.up&(pet.xuen_the_white_tiger.active|variable.hold_xuen|cooldown.invoke_xuen_the_white_tiger.remains>cooldown.storm_earth_and_fire.full_recharge_time|cooldown.invoke_xuen_the_white_tiger.remains>30) + if iscovenant("necrolord") and target.debuffpresent(bonedust_brew) and { pet.present() or hold_xuen() or spellcooldown(invoke_xuen_the_white_tiger) > spellcooldown(storm_earth_and_fire) or spellcooldown(invoke_xuen_the_white_tiger) > 30 } and { checkboxon(opt_storm_earth_and_fire) and not buffpresent(storm_earth_and_fire) } spell(storm_earth_and_fire) + #touch_of_karma,if=fight_remains>90|pet.xuen_the_white_tiger.active|variable.hold_xuen|fight_remains<16 + if { fightremains() > 90 or pet.present() or hold_xuen() or fightremains() < 16 } and checkboxon(opt_touch_of_karma) spell(touch_of_karma) + #bag_of_tricks,if=buff.storm_earth_and_fire.down + if buffexpires(storm_earth_and_fire) spell(bag_of_tricks) +} + +AddFunction windwalkercd_sefshortcdpostconditions +{ +} + +AddFunction windwalkercd_sefcdactions +{ + #invoke_xuen_the_white_tiger,if=!variable.hold_xuen&(cooldown.rising_sun_kick.remains<2|!covenant.kyrian)&(!covenant.necrolord|cooldown.bonedust_brew.remains<2)|fight_remains<25 + if not hold_xuen() and { spellcooldown(rising_sun_kick) < 2 or not iscovenant("kyrian") } and { not iscovenant("necrolord") or spellcooldown(bonedust_brew) < 2 } or fightremains() < 25 spell(invoke_xuen_the_white_tiger) + #touch_of_death,if=fight_remains>(180-runeforge.fatal_touch*120)|buff.storm_earth_and_fire.down&pet.xuen_the_white_tiger.active&(!covenant.necrolord|buff.bonedust_brew.up)|(cooldown.invoke_xuen_the_white_tiger.remains>fight_remains)&buff.bonedust_brew.up|fight_remains<10 + if fightremains() > 180 - runeforge(fatal_touch_runeforge) * 120 or buffexpires(storm_earth_and_fire) and pet.present() and { not iscovenant("necrolord") or buffpresent(bonedust_brew) } or spellcooldown(invoke_xuen_the_white_tiger) > fightremains() and buffpresent(bonedust_brew) or fightremains() < 10 spell(touch_of_death) + #weapons_of_order,if=(raid_event.adds.in>45|raid_event.adds.up)&cooldown.rising_sun_kick.remains(20+20*runeforge.invokers_delight)|fight_remains<35 + if { 600 > 45 or never(raid_event_adds_exists) } and spellcooldown(rising_sun_kick) < executetime(weapons_of_order) and spellcooldown(invoke_xuen_the_white_tiger) > 20 + 20 * runeforge(invokers_delight_runeforge) or fightremains() < 35 spell(weapons_of_order) + + unless not previousspell(faeline_stomp) and { 600 > 10 or never(raid_event_adds_exists) } and spell(faeline_stomp) + { + #fallen_order,if=raid_event.adds.in>30|raid_event.adds.up + if 600 > 30 or never(raid_event_adds_exists) spell(fallen_order) + + unless { chi() >= 2 and fightremains() > 60 and { spellcharges(storm_earth_and_fire) > 0 or spellcooldown(storm_earth_and_fire) > 10 } and { pet.present() or spellcooldown(invoke_xuen_the_white_tiger) > 10 or hold_xuen() } or chi() >= 2 and fightremains() <= 60 and { pet.present() or spellcooldown(invoke_xuen_the_white_tiger) > fightremains() } and { spellcharges(storm_earth_and_fire) > 0 or spellcooldown(storm_earth_and_fire) > fightremains() or buffpresent(storm_earth_and_fire) } or fightremains() < 15 } and spell(bonedust_brew) or { spellcharges(storm_earth_and_fire) == 2 or fightremains() < 20 or 0 > 15 or not iscovenant("kyrian") and not iscovenant("necrolord") and { 600 > spellcooldown(storm_earth_and_fire) or not never(raid_event_adds_exists) } and { spellcooldown(invoke_xuen_the_white_tiger) > spellcooldown(storm_earth_and_fire) or hold_xuen() } and spellcooldown(fists_of_fury) <= 9 and chi() >= 2 and spellcooldown(whirling_dragon_punch) <= 12 } and { checkboxon(opt_storm_earth_and_fire) and not buffpresent(storm_earth_and_fire) } and spell(storm_earth_and_fire) or iscovenant("kyrian") and { buffpresent(weapons_of_order) or { fightremains() < spellcooldown(weapons_of_order) or spellcooldown(weapons_of_order) > spellcooldown(storm_earth_and_fire) } and spellcooldown(fists_of_fury) <= 9 and chi() >= 2 and spellcooldown(whirling_dragon_punch) <= 12 } and { checkboxon(opt_storm_earth_and_fire) and not buffpresent(storm_earth_and_fire) } and spell(storm_earth_and_fire) or iscovenant("necrolord") and target.debuffpresent(bonedust_brew) and { pet.present() or hold_xuen() or spellcooldown(invoke_xuen_the_white_tiger) > spellcooldown(storm_earth_and_fire) or spellcooldown(invoke_xuen_the_white_tiger) > 30 } and { checkboxon(opt_storm_earth_and_fire) and not buffpresent(storm_earth_and_fire) } and spell(storm_earth_and_fire) + { + #use_item,name=inscrutable_quantum_device,if=pet.xuen_the_white_tiger.active|cooldown.invoke_xuen_the_white_tiger.remains>60&fight_remains>180|fight_remains<20 + if { pet.present() or spellcooldown(invoke_xuen_the_white_tiger) > 60 and fightremains() > 180 or fightremains() < 20 } and hastrinket(inscrutable_quantum_device_item) item(inscrutable_quantum_device_item usable=1) + #use_item,name=salvaged_fusion_amplifier,if=!variable.xuen_on_use_trinket|cooldown.invoke_xuen_the_white_tiger.remains>20&pet.xuen_the_white_tiger.remains<20|variable.hold_xuen + if { not xuen_on_use_trinket() or spellcooldown(invoke_xuen_the_white_tiger) > 20 and pet.buffremaining(use_item) < 20 or hold_xuen() } and hastrinket(salvaged_fusion_amplifier_item) item(salvaged_fusion_amplifier_item usable=1) + + unless { fightremains() > 90 or pet.present() or hold_xuen() or fightremains() < 16 } and checkboxon(opt_touch_of_karma) and spell(touch_of_karma) + { + #blood_fury,if=cooldown.invoke_xuen_the_white_tiger.remains>30|variable.hold_xuen|fight_remains<20 + if spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 20 spell(blood_fury_ap_int) + #berserking,if=cooldown.invoke_xuen_the_white_tiger.remains>30|variable.hold_xuen|fight_remains<15 + if spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 spell(berserking) + #lights_judgment + spell(lights_judgment) + #fireblood,if=cooldown.invoke_xuen_the_white_tiger.remains>30|variable.hold_xuen|fight_remains<10 + if spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 10 spell(fireblood) + #ancestral_call,if=cooldown.invoke_xuen_the_white_tiger.remains>30|variable.hold_xuen|fight_remains<20 + if spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 20 spell(ancestral_call) + + unless buffexpires(storm_earth_and_fire) and spell(bag_of_tricks) + { + #fleshcraft,if=soulbind.pustule_eruption&debuff.bonedust_brew_debuff.down + if soulbind(pustule_eruption_soulbind) and target.debuffexpires(bonedust_brew) spell(fleshcraft) + } + } + } + } +} + +AddFunction windwalkercd_sefcdpostconditions +{ + not previousspell(faeline_stomp) and { 600 > 10 or never(raid_event_adds_exists) } and spell(faeline_stomp) or { chi() >= 2 and fightremains() > 60 and { spellcharges(storm_earth_and_fire) > 0 or spellcooldown(storm_earth_and_fire) > 10 } and { pet.present() or spellcooldown(invoke_xuen_the_white_tiger) > 10 or hold_xuen() } or chi() >= 2 and fightremains() <= 60 and { pet.present() or spellcooldown(invoke_xuen_the_white_tiger) > fightremains() } and { spellcharges(storm_earth_and_fire) > 0 or spellcooldown(storm_earth_and_fire) > fightremains() or buffpresent(storm_earth_and_fire) } or fightremains() < 15 } and spell(bonedust_brew) or { spellcharges(storm_earth_and_fire) == 2 or fightremains() < 20 or 0 > 15 or not iscovenant("kyrian") and not iscovenant("necrolord") and { 600 > spellcooldown(storm_earth_and_fire) or not never(raid_event_adds_exists) } and { spellcooldown(invoke_xuen_the_white_tiger) > spellcooldown(storm_earth_and_fire) or hold_xuen() } and spellcooldown(fists_of_fury) <= 9 and chi() >= 2 and spellcooldown(whirling_dragon_punch) <= 12 } and { checkboxon(opt_storm_earth_and_fire) and not buffpresent(storm_earth_and_fire) } and spell(storm_earth_and_fire) or iscovenant("kyrian") and { buffpresent(weapons_of_order) or { fightremains() < spellcooldown(weapons_of_order) or spellcooldown(weapons_of_order) > spellcooldown(storm_earth_and_fire) } and spellcooldown(fists_of_fury) <= 9 and chi() >= 2 and spellcooldown(whirling_dragon_punch) <= 12 } and { checkboxon(opt_storm_earth_and_fire) and not buffpresent(storm_earth_and_fire) } and spell(storm_earth_and_fire) or iscovenant("necrolord") and target.debuffpresent(bonedust_brew) and { pet.present() or hold_xuen() or spellcooldown(invoke_xuen_the_white_tiger) > spellcooldown(storm_earth_and_fire) or spellcooldown(invoke_xuen_the_white_tiger) > 30 } and { checkboxon(opt_storm_earth_and_fire) and not buffpresent(storm_earth_and_fire) } and spell(storm_earth_and_fire) or { fightremains() > 90 or pet.present() or hold_xuen() or fightremains() < 16 } and checkboxon(opt_touch_of_karma) and spell(touch_of_karma) or buffexpires(storm_earth_and_fire) and spell(bag_of_tricks) +} + +### actions.aoe + +AddFunction windwalkeraoemainactions +{ + #whirling_dragon_punch + spell(whirling_dragon_punch) + #spinning_crane_kick,if=combo_strike&(buff.dance_of_chiji.up|debuff.bonedust_brew_debuff.up) + if not previousspell(spinning_crane_kick) and { buffpresent(dance_of_chiji_buff) or target.debuffpresent(bonedust_brew) } spell(spinning_crane_kick) + #fists_of_fury,if=energy.time_to_max>execute_time|chi.max-chi<=1 + if timetomaxenergy() > executetime(fists_of_fury) or maxchi() - chi() <= 1 spell(fists_of_fury) + #rising_sun_kick,target_if=min:debuff.mark_of_the_crane.remains,if=(talent.whirling_dragon_punch&cooldown.rising_sun_kick.duration>cooldown.whirling_dragon_punch.remains+4)&(cooldown.fists_of_fury.remains>3|chi>=5) + if hastalent(whirling_dragon_punch_talent) and spellcooldownduration(rising_sun_kick) > spellcooldown(whirling_dragon_punch) + 4 and { spellcooldown(fists_of_fury) > 3 or chi() >= 5 } spell(rising_sun_kick) + #rushing_jade_wind,if=buff.rushing_jade_wind.down + if buffexpires(rushing_jade_wind) spell(rushing_jade_wind) + #expel_harm,if=chi.max-chi>=1 + if maxchi() - chi() >= 1 spell(expel_harm) + #crackling_jade_lightning,if=buff.the_emperors_capacitor.stack>19&energy.time_to_max>execute_time-1&cooldown.fists_of_fury.remains>execute_time + if buffstacks(the_emperors_capacitor_buff) > 19 and timetomaxenergy() > executetime(crackling_jade_lightning) - 1 and spellcooldown(fists_of_fury) > executetime(crackling_jade_lightning) spell(crackling_jade_lightning) + #tiger_palm,target_if=min:debuff.mark_of_the_crane.remains+(debuff.skyreach_exhaustion.up*20),if=chi.max-chi>=2&(!talent.hit_combo|combo_strike) + if maxchi() - chi() >= 2 and { not hastalent(hit_combo_talent) or not previousspell(tiger_palm) } spell(tiger_palm) + #spinning_crane_kick,if=combo_strike&(cooldown.bonedust_brew.remains>2|!covenant.necrolord)&(chi>=5|cooldown.fists_of_fury.remains>6|cooldown.fists_of_fury.remains>3&chi>=3&energy.time_to_50<1|energy.time_to_max<=(3+3*cooldown.fists_of_fury.remains<5)|buff.storm_earth_and_fire.up) + if not previousspell(spinning_crane_kick) and { spellcooldown(bonedust_brew) > 2 or not iscovenant("necrolord") } and { chi() >= 5 or spellcooldown(fists_of_fury) > 6 or spellcooldown(fists_of_fury) > 3 and chi() >= 3 and timetoenergy(50) < 1 or timetomaxenergy() <= { 3 + 3 * spellcooldown(fists_of_fury) < 5 } or buffpresent(storm_earth_and_fire) } spell(spinning_crane_kick) + #chi_wave,if=combo_strike + if not previousspell(chi_wave) spell(chi_wave) + #flying_serpent_kick,if=buff.bok_proc.down,interrupt=1 + if buffexpires(blackout_kick_aura_buff) and checkboxon(opt_flying_serpent_kick) spell(flying_serpent_kick) + #blackout_kick,target_if=min:debuff.mark_of_the_crane.remains,if=combo_strike&(buff.bok_proc.up|talent.hit_combo&prev_gcd.1.tiger_palm&chi=2&cooldown.fists_of_fury.remains<3|chi.max-chi<=1&prev_gcd.1.spinning_crane_kick&energy.time_to_max<3) + if not previousspell(blackout_kick) and { buffpresent(blackout_kick_aura_buff) or hastalent(hit_combo_talent) and previousgcdspell(tiger_palm) and chi() == 2 and spellcooldown(fists_of_fury) < 3 or maxchi() - chi() <= 1 and previousgcdspell(spinning_crane_kick) and timetomaxenergy() < 3 } spell(blackout_kick) +} + +AddFunction windwalkeraoemainpostconditions +{ +} + +AddFunction windwalkeraoeshortcdactions +{ + unless spell(whirling_dragon_punch) + { + #energizing_elixir,if=chi.max-chi>=2&energy.time_to_max>2|chi.max-chi>=4 + if maxchi() - chi() >= 2 and timetomaxenergy() > 2 or maxchi() - chi() >= 4 spell(energizing_elixir) + + unless not previousspell(spinning_crane_kick) and { buffpresent(dance_of_chiji_buff) or target.debuffpresent(bonedust_brew) } and spell(spinning_crane_kick) or { timetomaxenergy() > executetime(fists_of_fury) or maxchi() - chi() <= 1 } and spell(fists_of_fury) or hastalent(whirling_dragon_punch_talent) and spellcooldownduration(rising_sun_kick) > spellcooldown(whirling_dragon_punch) + 4 and { spellcooldown(fists_of_fury) > 3 or chi() >= 5 } and spell(rising_sun_kick) or buffexpires(rushing_jade_wind) and spell(rushing_jade_wind) or maxchi() - chi() >= 1 and spell(expel_harm) + { + #fist_of_the_white_tiger,target_if=min:debuff.mark_of_the_crane.remains,if=chi.max-chi>=3 + if maxchi() - chi() >= 3 spell(fist_of_the_white_tiger) + #chi_burst,if=chi.max-chi>=2 + if maxchi() - chi() >= 2 and checkboxon(opt_chi_burst) spell(chi_burst) + } + } +} + +AddFunction windwalkeraoeshortcdpostconditions +{ + spell(whirling_dragon_punch) or not previousspell(spinning_crane_kick) and { buffpresent(dance_of_chiji_buff) or target.debuffpresent(bonedust_brew) } and spell(spinning_crane_kick) or { timetomaxenergy() > executetime(fists_of_fury) or maxchi() - chi() <= 1 } and spell(fists_of_fury) or hastalent(whirling_dragon_punch_talent) and spellcooldownduration(rising_sun_kick) > spellcooldown(whirling_dragon_punch) + 4 and { spellcooldown(fists_of_fury) > 3 or chi() >= 5 } and spell(rising_sun_kick) or buffexpires(rushing_jade_wind) and spell(rushing_jade_wind) or maxchi() - chi() >= 1 and spell(expel_harm) or buffstacks(the_emperors_capacitor_buff) > 19 and timetomaxenergy() > executetime(crackling_jade_lightning) - 1 and spellcooldown(fists_of_fury) > executetime(crackling_jade_lightning) and spell(crackling_jade_lightning) or maxchi() - chi() >= 2 and { not hastalent(hit_combo_talent) or not previousspell(tiger_palm) } and spell(tiger_palm) or not previousspell(spinning_crane_kick) and { spellcooldown(bonedust_brew) > 2 or not iscovenant("necrolord") } and { chi() >= 5 or spellcooldown(fists_of_fury) > 6 or spellcooldown(fists_of_fury) > 3 and chi() >= 3 and timetoenergy(50) < 1 or timetomaxenergy() <= { 3 + 3 * spellcooldown(fists_of_fury) < 5 } or buffpresent(storm_earth_and_fire) } and spell(spinning_crane_kick) or not previousspell(chi_wave) and spell(chi_wave) or buffexpires(blackout_kick_aura_buff) and checkboxon(opt_flying_serpent_kick) and spell(flying_serpent_kick) or not previousspell(blackout_kick) and { buffpresent(blackout_kick_aura_buff) or hastalent(hit_combo_talent) and previousgcdspell(tiger_palm) and chi() == 2 and spellcooldown(fists_of_fury) < 3 or maxchi() - chi() <= 1 and previousgcdspell(spinning_crane_kick) and timetomaxenergy() < 3 } and spell(blackout_kick) +} + +AddFunction windwalkeraoecdactions +{ + unless spell(whirling_dragon_punch) or { maxchi() - chi() >= 2 and timetomaxenergy() > 2 or maxchi() - chi() >= 4 } and spell(energizing_elixir) or not previousspell(spinning_crane_kick) and { buffpresent(dance_of_chiji_buff) or target.debuffpresent(bonedust_brew) } and spell(spinning_crane_kick) or { timetomaxenergy() > executetime(fists_of_fury) or maxchi() - chi() <= 1 } and spell(fists_of_fury) or hastalent(whirling_dragon_punch_talent) and spellcooldownduration(rising_sun_kick) > spellcooldown(whirling_dragon_punch) + 4 and { spellcooldown(fists_of_fury) > 3 or chi() >= 5 } and spell(rising_sun_kick) or buffexpires(rushing_jade_wind) and spell(rushing_jade_wind) or maxchi() - chi() >= 1 and spell(expel_harm) or maxchi() - chi() >= 3 and spell(fist_of_the_white_tiger) or maxchi() - chi() >= 2 and checkboxon(opt_chi_burst) and spell(chi_burst) or buffstacks(the_emperors_capacitor_buff) > 19 and timetomaxenergy() > executetime(crackling_jade_lightning) - 1 and spellcooldown(fists_of_fury) > executetime(crackling_jade_lightning) and spell(crackling_jade_lightning) or maxchi() - chi() >= 2 and { not hastalent(hit_combo_talent) or not previousspell(tiger_palm) } and spell(tiger_palm) + { + #arcane_torrent,if=chi.max-chi>=1 + if maxchi() - chi() >= 1 spell(arcane_torrent) + } +} + +AddFunction windwalkeraoecdpostconditions +{ + spell(whirling_dragon_punch) or { maxchi() - chi() >= 2 and timetomaxenergy() > 2 or maxchi() - chi() >= 4 } and spell(energizing_elixir) or not previousspell(spinning_crane_kick) and { buffpresent(dance_of_chiji_buff) or target.debuffpresent(bonedust_brew) } and spell(spinning_crane_kick) or { timetomaxenergy() > executetime(fists_of_fury) or maxchi() - chi() <= 1 } and spell(fists_of_fury) or hastalent(whirling_dragon_punch_talent) and spellcooldownduration(rising_sun_kick) > spellcooldown(whirling_dragon_punch) + 4 and { spellcooldown(fists_of_fury) > 3 or chi() >= 5 } and spell(rising_sun_kick) or buffexpires(rushing_jade_wind) and spell(rushing_jade_wind) or maxchi() - chi() >= 1 and spell(expel_harm) or maxchi() - chi() >= 3 and spell(fist_of_the_white_tiger) or maxchi() - chi() >= 2 and checkboxon(opt_chi_burst) and spell(chi_burst) or buffstacks(the_emperors_capacitor_buff) > 19 and timetomaxenergy() > executetime(crackling_jade_lightning) - 1 and spellcooldown(fists_of_fury) > executetime(crackling_jade_lightning) and spell(crackling_jade_lightning) or maxchi() - chi() >= 2 and { not hastalent(hit_combo_talent) or not previousspell(tiger_palm) } and spell(tiger_palm) or not previousspell(spinning_crane_kick) and { spellcooldown(bonedust_brew) > 2 or not iscovenant("necrolord") } and { chi() >= 5 or spellcooldown(fists_of_fury) > 6 or spellcooldown(fists_of_fury) > 3 and chi() >= 3 and timetoenergy(50) < 1 or timetomaxenergy() <= { 3 + 3 * spellcooldown(fists_of_fury) < 5 } or buffpresent(storm_earth_and_fire) } and spell(spinning_crane_kick) or not previousspell(chi_wave) and spell(chi_wave) or buffexpires(blackout_kick_aura_buff) and checkboxon(opt_flying_serpent_kick) and spell(flying_serpent_kick) or not previousspell(blackout_kick) and { buffpresent(blackout_kick_aura_buff) or hastalent(hit_combo_talent) and previousgcdspell(tiger_palm) and chi() == 2 and spellcooldown(fists_of_fury) < 3 or maxchi() - chi() <= 1 and previousgcdspell(spinning_crane_kick) and timetomaxenergy() < 3 } and spell(blackout_kick) +} + +### actions.default + +AddFunction windwalker_defaultmainactions +{ + #call_action_list,name=serenity,if=buff.serenity.up + if buffpresent(serenity) windwalkerserenitymainactions() + + unless buffpresent(serenity) and windwalkerserenitymainpostconditions() + { + #call_action_list,name=weapons_of_order,if=buff.weapons_of_order.up + if buffpresent(weapons_of_order) windwalkerweapons_of_ordermainactions() + + unless buffpresent(weapons_of_order) and windwalkerweapons_of_ordermainpostconditions() + { + #call_action_list,name=opener,if=time<4&chi<5&!pet.xuen_the_white_tiger.active + if timeincombat() < 4 and chi() < 5 and not pet.present() windwalkeropenermainactions() + + unless timeincombat() < 4 and chi() < 5 and not pet.present() and windwalkeropenermainpostconditions() + { + #expel_harm,if=chi.max-chi>=1&(energy.time_to_max<1|cooldown.serenity.remains<2|energy.time_to_max<4&cooldown.fists_of_fury.remains<1.5|cooldown.weapons_of_order.remains<2)&!buff.bonedust_brew.up + if maxchi() - chi() >= 1 and { timetomaxenergy() < 1 or spellcooldown(serenity) < 2 or timetomaxenergy() < 4 and spellcooldown(fists_of_fury) < 1.5 or spellcooldown(weapons_of_order) < 2 } and not buffpresent(bonedust_brew) spell(expel_harm) + #tiger_palm,target_if=min:debuff.mark_of_the_crane.remains,if=combo_strike&chi.max-chi>=2&(energy.time_to_max<1|cooldown.serenity.remains<2|energy.time_to_max<4&cooldown.fists_of_fury.remains<1.5|cooldown.weapons_of_order.remains<2)&!debuff.bonedust_brew_debuff.up + if not previousspell(tiger_palm) and maxchi() - chi() >= 2 and { timetomaxenergy() < 1 or spellcooldown(serenity) < 2 or timetomaxenergy() < 4 and spellcooldown(fists_of_fury) < 1.5 or spellcooldown(weapons_of_order) < 2 } and not target.debuffpresent(bonedust_brew) spell(tiger_palm) + #call_action_list,name=cd_sef,if=!talent.serenity + if not hastalent(serenity_talent) windwalkercd_sefmainactions() + + unless not hastalent(serenity_talent) and windwalkercd_sefmainpostconditions() + { + #call_action_list,name=cd_serenity,if=talent.serenity + if hastalent(serenity_talent) windwalkercd_serenitymainactions() + + unless hastalent(serenity_talent) and windwalkercd_serenitymainpostconditions() + { + #call_action_list,name=st,if=active_enemies<3 + if enemies() < 3 windwalkerstmainactions() + + unless enemies() < 3 and windwalkerstmainpostconditions() + { + #call_action_list,name=aoe,if=active_enemies>=3 + if enemies() >= 3 windwalkeraoemainactions() + } + } + } + } + } + } +} + +AddFunction windwalker_defaultmainpostconditions +{ + buffpresent(serenity) and windwalkerserenitymainpostconditions() or buffpresent(weapons_of_order) and windwalkerweapons_of_ordermainpostconditions() or timeincombat() < 4 and chi() < 5 and not pet.present() and windwalkeropenermainpostconditions() or not hastalent(serenity_talent) and windwalkercd_sefmainpostconditions() or hastalent(serenity_talent) and windwalkercd_serenitymainpostconditions() or enemies() < 3 and windwalkerstmainpostconditions() or enemies() >= 3 and windwalkeraoemainpostconditions() +} + +AddFunction windwalker_defaultshortcdactions +{ + #auto_attack + windwalkergetinmeleerange() + #call_action_list,name=serenity,if=buff.serenity.up + if buffpresent(serenity) windwalkerserenityshortcdactions() + + unless buffpresent(serenity) and windwalkerserenityshortcdpostconditions() + { + #call_action_list,name=weapons_of_order,if=buff.weapons_of_order.up + if buffpresent(weapons_of_order) windwalkerweapons_of_ordershortcdactions() + + unless buffpresent(weapons_of_order) and windwalkerweapons_of_ordershortcdpostconditions() + { + #call_action_list,name=opener,if=time<4&chi<5&!pet.xuen_the_white_tiger.active + if timeincombat() < 4 and chi() < 5 and not pet.present() windwalkeropenershortcdactions() + + unless timeincombat() < 4 and chi() < 5 and not pet.present() and windwalkeropenershortcdpostconditions() + { + #fist_of_the_white_tiger,target_if=min:debuff.mark_of_the_crane.remains,if=chi.max-chi>=3&(energy.time_to_max<1|energy.time_to_max<4&cooldown.fists_of_fury.remains<1.5|cooldown.weapons_of_order.remains<2)&!debuff.bonedust_brew_debuff.up + if maxchi() - chi() >= 3 and { timetomaxenergy() < 1 or timetomaxenergy() < 4 and spellcooldown(fists_of_fury) < 1.5 or spellcooldown(weapons_of_order) < 2 } and not target.debuffpresent(bonedust_brew) spell(fist_of_the_white_tiger) + + unless maxchi() - chi() >= 1 and { timetomaxenergy() < 1 or spellcooldown(serenity) < 2 or timetomaxenergy() < 4 and spellcooldown(fists_of_fury) < 1.5 or spellcooldown(weapons_of_order) < 2 } and not buffpresent(bonedust_brew) and spell(expel_harm) or not previousspell(tiger_palm) and maxchi() - chi() >= 2 and { timetomaxenergy() < 1 or spellcooldown(serenity) < 2 or timetomaxenergy() < 4 and spellcooldown(fists_of_fury) < 1.5 or spellcooldown(weapons_of_order) < 2 } and not target.debuffpresent(bonedust_brew) and spell(tiger_palm) + { + #call_action_list,name=cd_sef,if=!talent.serenity + if not hastalent(serenity_talent) windwalkercd_sefshortcdactions() + + unless not hastalent(serenity_talent) and windwalkercd_sefshortcdpostconditions() + { + #call_action_list,name=cd_serenity,if=talent.serenity + if hastalent(serenity_talent) windwalkercd_serenityshortcdactions() + + unless hastalent(serenity_talent) and windwalkercd_serenityshortcdpostconditions() + { + #call_action_list,name=st,if=active_enemies<3 + if enemies() < 3 windwalkerstshortcdactions() + + unless enemies() < 3 and windwalkerstshortcdpostconditions() + { + #call_action_list,name=aoe,if=active_enemies>=3 + if enemies() >= 3 windwalkeraoeshortcdactions() + } + } + } + } + } + } + } +} + +AddFunction windwalker_defaultshortcdpostconditions +{ + buffpresent(serenity) and windwalkerserenityshortcdpostconditions() or buffpresent(weapons_of_order) and windwalkerweapons_of_ordershortcdpostconditions() or timeincombat() < 4 and chi() < 5 and not pet.present() and windwalkeropenershortcdpostconditions() or maxchi() - chi() >= 1 and { timetomaxenergy() < 1 or spellcooldown(serenity) < 2 or timetomaxenergy() < 4 and spellcooldown(fists_of_fury) < 1.5 or spellcooldown(weapons_of_order) < 2 } and not buffpresent(bonedust_brew) and spell(expel_harm) or not previousspell(tiger_palm) and maxchi() - chi() >= 2 and { timetomaxenergy() < 1 or spellcooldown(serenity) < 2 or timetomaxenergy() < 4 and spellcooldown(fists_of_fury) < 1.5 or spellcooldown(weapons_of_order) < 2 } and not target.debuffpresent(bonedust_brew) and spell(tiger_palm) or not hastalent(serenity_talent) and windwalkercd_sefshortcdpostconditions() or hastalent(serenity_talent) and windwalkercd_serenityshortcdpostconditions() or enemies() < 3 and windwalkerstshortcdpostconditions() or enemies() >= 3 and windwalkeraoeshortcdpostconditions() +} + +AddFunction windwalker_defaultcdactions +{ + #spear_hand_strike,if=target.debuff.casting.react + if target.isinterruptible() windwalkerinterruptactions() + #variable,name=hold_xuen,op=set,value=cooldown.invoke_xuen_the_white_tiger.remains>fight_remains|fight_remains-cooldown.invoke_xuen_the_white_tiger.remains<120&((talent.serenity&fight_remains>cooldown.serenity.remains&cooldown.serenity.remains>10)|(cooldown.storm_earth_and_fire.full_recharge_time15)|(cooldown.storm_earth_and_fire.charges=0&cooldown.storm_earth_and_fire.remains= 3 and { timetomaxenergy() < 1 or timetomaxenergy() < 4 and spellcooldown(fists_of_fury) < 1.5 or spellcooldown(weapons_of_order) < 2 } and not target.debuffpresent(bonedust_brew) and spell(fist_of_the_white_tiger) or maxchi() - chi() >= 1 and { timetomaxenergy() < 1 or spellcooldown(serenity) < 2 or timetomaxenergy() < 4 and spellcooldown(fists_of_fury) < 1.5 or spellcooldown(weapons_of_order) < 2 } and not buffpresent(bonedust_brew) and spell(expel_harm) or not previousspell(tiger_palm) and maxchi() - chi() >= 2 and { timetomaxenergy() < 1 or spellcooldown(serenity) < 2 or timetomaxenergy() < 4 and spellcooldown(fists_of_fury) < 1.5 or spellcooldown(weapons_of_order) < 2 } and not target.debuffpresent(bonedust_brew) and spell(tiger_palm) + { + #call_action_list,name=cd_sef,if=!talent.serenity + if not hastalent(serenity_talent) windwalkercd_sefcdactions() + + unless not hastalent(serenity_talent) and windwalkercd_sefcdpostconditions() + { + #call_action_list,name=cd_serenity,if=talent.serenity + if hastalent(serenity_talent) windwalkercd_serenitycdactions() + + unless hastalent(serenity_talent) and windwalkercd_serenitycdpostconditions() + { + #call_action_list,name=st,if=active_enemies<3 + if enemies() < 3 windwalkerstcdactions() + + unless enemies() < 3 and windwalkerstcdpostconditions() + { + #call_action_list,name=aoe,if=active_enemies>=3 + if enemies() >= 3 windwalkeraoecdactions() + } + } + } + } + } + } +} + +AddFunction windwalker_defaultcdpostconditions +{ + buffpresent(serenity) and windwalkerserenitycdpostconditions() or buffpresent(weapons_of_order) and windwalkerweapons_of_ordercdpostconditions() or timeincombat() < 4 and chi() < 5 and not pet.present() and windwalkeropenercdpostconditions() or maxchi() - chi() >= 3 and { timetomaxenergy() < 1 or timetomaxenergy() < 4 and spellcooldown(fists_of_fury) < 1.5 or spellcooldown(weapons_of_order) < 2 } and not target.debuffpresent(bonedust_brew) and spell(fist_of_the_white_tiger) or maxchi() - chi() >= 1 and { timetomaxenergy() < 1 or spellcooldown(serenity) < 2 or timetomaxenergy() < 4 and spellcooldown(fists_of_fury) < 1.5 or spellcooldown(weapons_of_order) < 2 } and not buffpresent(bonedust_brew) and spell(expel_harm) or not previousspell(tiger_palm) and maxchi() - chi() >= 2 and { timetomaxenergy() < 1 or spellcooldown(serenity) < 2 or timetomaxenergy() < 4 and spellcooldown(fists_of_fury) < 1.5 or spellcooldown(weapons_of_order) < 2 } and not target.debuffpresent(bonedust_brew) and spell(tiger_palm) or not hastalent(serenity_talent) and windwalkercd_sefcdpostconditions() or hastalent(serenity_talent) and windwalkercd_serenitycdpostconditions() or enemies() < 3 and windwalkerstcdpostconditions() or enemies() >= 3 and windwalkeraoecdpostconditions() +} + +### Windwalker icons. + +AddCheckBox(opt_monk_windwalker_aoe l(aoe) default enabled=(specialization(windwalker))) + +AddIcon enabled=(not checkboxon(opt_monk_windwalker_aoe) and specialization(windwalker)) enemies=1 help=shortcd +{ + if not incombat() windwalkerprecombatshortcdactions() + windwalker_defaultshortcdactions() +} + +AddIcon enabled=(checkboxon(opt_monk_windwalker_aoe) and specialization(windwalker)) help=shortcd +{ + if not incombat() windwalkerprecombatshortcdactions() + windwalker_defaultshortcdactions() +} + +AddIcon enabled=(specialization(windwalker)) enemies=1 help=main +{ + if not incombat() windwalkerprecombatmainactions() + windwalker_defaultmainactions() +} + +AddIcon enabled=(checkboxon(opt_monk_windwalker_aoe) and specialization(windwalker)) help=aoe +{ + if not incombat() windwalkerprecombatmainactions() + windwalker_defaultmainactions() +} + +AddIcon enabled=(not checkboxon(opt_monk_windwalker_aoe) and specialization(windwalker)) enemies=1 help=cd +{ + if not incombat() windwalkerprecombatcdactions() + windwalker_defaultcdactions() +} + +AddIcon enabled=(checkboxon(opt_monk_windwalker_aoe) and specialization(windwalker)) help=cd +{ + if not incombat() windwalkerprecombatcdactions() + windwalker_defaultcdactions() +} + +### Required symbols +# ancestral_call +# arcane_torrent +# bag_of_tricks +# berserking +# blackout_kick +# blackout_kick_aura_buff +# blood_fury_ap_int +# bloodlust +# bonedust_brew +# chi_burst +# chi_burst_talent +# chi_energy_buff +# chi_wave +# crackling_jade_lightning +# dance_of_chiji_buff +# energizing_elixir +# energizing_elixir_talent +# expel_harm +# faeline_stomp +# fallen_order +# fatal_touch_runeforge +# fireblood +# fist_of_the_white_tiger +# fists_of_fury +# fleshcraft +# flying_serpent_kick +# gladiators_badge_item +# hit_combo_talent +# inscrutable_quantum_device_item +# invoke_xuen_the_white_tiger +# invokers_delight_buff +# invokers_delight_runeforge +# leg_sweep +# lights_judgment +# overcharged_anima_battery_item +# paralysis +# potion_of_spectral_agility_item +# pustule_eruption_soulbind +# quaking_palm +# rising_sun_kick +# rushing_jade_wind +# salvaged_fusion_amplifier_item +# serenity +# serenity_talent +# shadowgrasp_totem_item +# spear_hand_strike +# spinning_crane_kick +# storm_earth_and_fire +# the_emperors_capacitor_buff +# tiger_palm +# touch_of_death +# touch_of_karma +# war_stomp +# weapons_of_order +# weapons_of_order_ww +# whirling_dragon_punch +# whirling_dragon_punch_talent +# wrathstone_item `; scripts.registerScript( "MONK", diff --git a/src/scripts/ovale_monk_spells.ts b/src/scripts/ovale_monk_spells.ts index e46c78649..315cc4a63 100644 --- a/src/scripts/ovale_monk_spells.ts +++ b/src/scripts/ovale_monk_spells.ts @@ -51,10 +51,10 @@ Define(bonedust_brew 325216) # The Monk's abilities have a h chance to affect the target a second time at s1 effectiveness as Shadow damage or healing. SpellAddTargetDebuff(bonedust_brew bonedust_brew add=1) Define(breath_of_fire 115181) -# Breathe fire on targets in front of you, causing s1 Fire damage.rnrnTargets affected by Keg Smash will also burn, taking 123725o1 Fire damage and dealing 123725s2 reduced damage to you for 12 seconds. +# Breathe fire on targets in front of you, causing s1 Fire damage. Deals reduced damage to secondary targets.rnrnTargets affected by Keg Smash will also burn, taking 123725o1 Fire damage and dealing 123725s2 reduced damage to you for 12 seconds. SpellInfo(breath_of_fire cd=15 gcd=1) Define(breath_of_fire_debuff 123725) -# Breathe fire on targets in front of you, causing s1 Fire damage.rnrnTargets affected by Keg Smash will also burn, taking 123725o1 Fire damage and dealing 123725s2 reduced damage to you for 12 seconds. +# Breathe fire on targets in front of you, causing s1 Fire damage. Deals reduced damage to secondary targets.rnrnTargets affected by Keg Smash will also burn, taking 123725o1 Fire damage and dealing 123725s2 reduced damage to you for 12 seconds. SpellInfo(breath_of_fire_debuff duration=12 gcd=1 tick=2) # Burning for w1 Fire damage every t1 sec. Dealing w2 reduced damage to the Monk. SpellAddTargetDebuff(breath_of_fire_debuff breath_of_fire_debuff add=1) @@ -67,7 +67,7 @@ Define(charred_passions_buff 338140) # Your Breath of Fire ignites your right leg in flame for 8 seconds, causing your Blackout Kick and Spinning Crane Kick to deal m1 additional damage as Fire damage and refresh the duration of your Breath of Fire on the target. SpellInfo(charred_passions_buff duration=8 gcd=0 offgcd=1) Define(chi_burst 123986) -# Hurls a torrent of Chi energy up to 40 yds forward, dealing 148135s1 Nature damage to all enemies, and 130654s1 healing to the Monk and all allies in its path.?c1[rnrnCasting Chi Burst does not prevent avoiding attacks.][]?c3[rnrnChi Burst generates 1 Chi per enemy target damaged, up to a maximum of s3.][] +# Hurls a torrent of Chi energy up to 40 yds forward, dealing 148135s1 Nature damage to all enemies, and 130654s1 healing to the Monk and all allies in its path. Healing reduced beyond s1 targets.rn?c1[rnrnCasting Chi Burst does not prevent avoiding attacks.][]?c3[rnrnChi Burst generates 1 Chi per enemy target damaged, up to a maximum of s3.][] SpellInfo(chi_burst cd=30 duration=1) SpellRequire(chi_burst unusable set=1 enabled=(not hastalent(chi_burst_talent))) Define(chi_energy_buff 337571) @@ -127,7 +127,7 @@ Define(fist_of_the_white_tiger 261947) SpellInfo(fist_of_the_white_tiger energy=40 cd=30 gcd=1) SpellRequire(fist_of_the_white_tiger unusable set=1 enabled=(not hastalent(fist_of_the_white_tiger_talent))) Define(fists_of_fury 113656) -# Pummels all targets in front of you, dealing 5*s5 Physical damage over 4 seconds to your primary target and 5*s5*s6/100 damage over 4 seconds to up to s1 other targets. Can be channeled while moving. +# Pummels all targets in front of you, dealing 5*s5 Physical damage over 4 seconds to your primary target and 5*s5*s6/100 damage over 4 seconds to all other enemies. Deals reduced damage beyond s1 targets. Can be channeled while moving. SpellInfo(fists_of_fury chi=3 cd=24 duration=4 channel=4 gcd=1 tick=0.166) Define(fleshcraft 324631) # Form a shield of flesh and bone over 3 seconds that absorbs damage equal to s1 of your maximum health for 120 seconds.rnrnWhile channeling, your damage taken is reduced by s2.rnrn|cFFFFFFFFPassive:|r Moving near an enemy's corpse consumes their essence to reduce Fleshcraft's cooldown by sec. @@ -190,7 +190,7 @@ Define(rising_sun_kick 107428) # Kick upwards, dealing ?s137025[185099s1*/AP][185099s1] Physical damage?s128595[, and reducing the effectiveness of healing on the target for 10 seconds][]. SpellInfo(rising_sun_kick chi=2 cd=10) Define(rushing_jade_wind 116847) -# Summons a whirling tornado around you, causing (1+6 seconds/t1)*148187s1 Physical damage over 6 seconds to up to s1 enemies within 107270A1 yards. +# Summons a whirling tornado around you, causing (1+6 seconds/t1)*148187s1 Physical damage over 6 seconds to all enemies within 107270A1 yards. Deals reduced damage beyond s1 targets. SpellInfo(rushing_jade_wind chi=1 cd=6 duration=6 tick=0.75) SpellRequire(rushing_jade_wind unusable set=1 enabled=(not {hastalent(rushing_jade_wind_talent) or hastalent(rushing_jade_wind_talent_windwalker)})) # Dealing physical damage to nearby enemies every 116847t1 sec. @@ -205,7 +205,7 @@ Define(spear_hand_strike 116705) # Jabs the target in the throat, interrupting spellcasting and preventing any spell from that school of magic from being cast for 4 seconds. SpellInfo(spear_hand_strike cd=15 duration=4 gcd=0 offgcd=1 interrupt=1) Define(spinning_crane_kick 101546) -# Spin while kicking in the air, dealing ?s137025[4*107270s1*/AP][4*107270s1] Physical damage over 1.5 seconds to up to s1 enemies within 107270A1 yds.?c3[rnrnSpinning Crane Kick's damage is increased by 220358s1 for each unique target you've struck in the last 20 seconds with Tiger Palm, Blackout Kick, or Rising Sun Kick. Stacks up to 228287i times.][] +# Spin while kicking in the air, dealing ?s137025[4*107270s1*/AP][4*107270s1] Physical damage over 1.5 seconds to all enemies within 107270A1 yds. Deals reduced damage beyond s1 targets.?c3[rnrnSpinning Crane Kick's damage is increased by 220358s1 for each unique target you've struck in the last 20 seconds with Tiger Palm, Blackout Kick, or Rising Sun Kick. Stacks up to 228287i times.][] SpellInfo(spinning_crane_kick chi=2 energy=40 duration=1.5 channel=1.5 tick=0.5) SpellRequire(spinning_crane_kick replaced_by set=spinning_crane_kick_brewmaster enabled=(specialization("brewmaster"))) Define(spinning_crane_kick_brewmaster 322729) @@ -216,7 +216,7 @@ Define(spinning_crane_kick_brewmaster 322729) # Attacking all nearby enemies for Physical damage every 101546t1 sec. SpellAddBuff(spinning_crane_kick_brewmaster spinning_crane_kick_brewmaster add=1) Define(spinning_crane_kick_brewmaster_buff 107270) -# Spin while kicking in the air, dealing ?s137025[4*107270s1*/AP][4*107270s1] Physical damage over 1.5 seconds to up to s1 enemies within 107270A1 yds.?c3[rnrnSpinning Crane Kick's damage is increased by 220358s1 for each unique target you've struck in the last 20 seconds with Tiger Palm, Blackout Kick, or Rising Sun Kick. Stacks up to 228287i times.][] +# Spin while kicking in the air, dealing ?s137025[4*107270s1*/AP][4*107270s1] Physical damage over 1.5 seconds to all enemies within 107270A1 yds. Deals reduced damage beyond s1 targets.?c3[rnrnSpinning Crane Kick's damage is increased by 220358s1 for each unique target you've struck in the last 20 seconds with Tiger Palm, Blackout Kick, or Rising Sun Kick. Stacks up to 228287i times.][] SpellInfo(spinning_crane_kick_brewmaster_buff gcd=0 offgcd=1) Define(storm_earth_and_fire 137639) # Split into 3 elemental spirits for 15 seconds, each spirit dealing 100+m1 of normal damage and healing.rnrnYou directly control the Storm spirit, while Earth and Fire spirits mimic your attacks on nearby enemies.rnrnWhile active, casting Storm, Earth, and Fire again will cause the spirits to fixate on your target. @@ -268,7 +268,7 @@ Define(black_ox_brew_talent 19992) Define(blackout_combo_talent 22108) # Blackout Kick also empowers your next ability:rnrnTiger Palm: Damage increased by s1.rnBreath of Fire: Cooldown reduced by s2 sec.rnKeg Smash: Reduces the remaining cooldown on your Brews by s3 additional sec.rnCelestial Brew: Pauses Stagger damage for s4 sec. Define(chi_burst_talent 20185) -# Hurls a torrent of Chi energy up to 40 yds forward, dealing 148135s1 Nature damage to all enemies, and 130654s1 healing to the Monk and all allies in its path.?c1[rnrnCasting Chi Burst does not prevent avoiding attacks.][]?c3[rnrnChi Burst generates 1 Chi per enemy target damaged, up to a maximum of s3.][] +# Hurls a torrent of Chi energy up to 40 yds forward, dealing 148135s1 Nature damage to all enemies, and 130654s1 healing to the Monk and all allies in its path. Healing reduced beyond s1 targets.rn?c1[rnrnCasting Chi Burst does not prevent avoiding attacks.][]?c3[rnrnChi Burst generates 1 Chi per enemy target damaged, up to a maximum of s3.][] Define(chi_wave_talent 19820) # A wave of Chi energy flows through friends and foes, dealing 132467s1 Nature damage or 132463s1 healing. Bounces up to s1 times to targets within 132466a2 yards. Define(dampen_harm_talent 20175) @@ -282,9 +282,9 @@ Define(fist_of_the_white_tiger_talent 19771) Define(hit_combo_talent 22093) # Each successive attack that triggers Combo Strikes in a row grants 196741s1 increased damage, stacking up to 196741u times. Define(rushing_jade_wind_talent_windwalker 23122) -# Summons a whirling tornado around you, causing (1+6 seconds/t1)*148187s1 Physical damage over 6 seconds to up to s1 enemies within 107270A1 yards. +# Summons a whirling tornado around you, causing (1+6 seconds/t1)*148187s1 Physical damage over 6 seconds to all enemies within 107270A1 yards. Deals reduced damage beyond s1 targets. Define(rushing_jade_wind_talent 20184) -# Summons a whirling tornado around you, causing (1+6 seconds/t1)*148187s1 Physical damage over 6 seconds to up to s1 enemies within 107270A1 yards. +# Summons a whirling tornado around you, causing (1+6 seconds/t1)*148187s1 Physical damage over 6 seconds to all enemies within 107270A1 yards. Deals reduced damage beyond s1 targets. Define(serenity_talent 21191) # Enter an elevated state of mental and physical serenity for ?s115069[s1 sec][12 seconds]. While in this state, you deal s2 increased damage and healing, and all Chi consumers are free and cool down s4 more quickly. Define(spitfire_talent 22097) @@ -311,6 +311,8 @@ Define(shadowgrasp_totem_item 179356) ItemInfo(shadowgrasp_totem_item cd=120 proc=329878) Define(wrathstone_item 156000) ItemInfo(wrathstone_item shared_cd="item_cd_1141" cd=120 proc=64800) +Define(salvaged_fusion_amplifier_item 186432) + ItemInfo(salvaged_fusion_amplifier_item cd=90 rppm=20 proc=355333) Define(charred_passions_runeforge 7076) Define(shaohaos_might_runeforge 7079) Define(fatal_touch_runeforge 7081) diff --git a/src/scripts/ovale_paladin_spells.ts b/src/scripts/ovale_paladin_spells.ts index b6a2d812a..eb1a81eb1 100644 --- a/src/scripts/ovale_paladin_spells.ts +++ b/src/scripts/ovale_paladin_spells.ts @@ -56,7 +56,7 @@ Define(blessing_of_summer 328620) # Attacks have a h chance to deal w1 additional damage as Holy. SpellAddBuff(blessing_of_summer blessing_of_summer add=1) Define(blessing_of_winter 328281) -# Bless an ally for 30 seconds. Their attacks deal *s5 Frost damage and reduce enemies' movement speed by 328506s4 and attack speed by 328506s3, stacking 328506u times.rnrn|cFFFFFFFFBlessing of the Seasons:|r Turns to Spring after use. +# Bless an ally for 30 seconds. Their spells and abilities deal *s5 Frost damage and reduce enemies' movement speed by 328506s4 and attack speed by 328506s3, stacking 328506u times.rnrn|cFFFFFFFFBlessing of the Seasons:|r Turns to Spring after use. SpellInfo(blessing_of_winter cd=45 duration=30) # Attack speed reduced by w3.rnMovement speed reduced by w4. SpellAddBuff(blessing_of_winter blessing_of_winter_unused_0 add=1) @@ -65,7 +65,7 @@ Define(blessing_of_winter 328281) # Attacks deal *w5 Frost damage and reduce enemies' movement speed by 328506s4 and attack speed by 328506s3, stacking 328506u times. SpellAddTargetDebuff(blessing_of_winter blessing_of_winter add=1) Define(blessing_of_winter_unused_0 328506) -# Bless an ally for 30 seconds. Their attacks deal *s5 Frost damage and reduce enemies' movement speed by 328506s4 and attack speed by 328506s3, stacking 328506u times.rnrn|cFFFFFFFFBlessing of the Seasons:|r Turns to Spring after use. +# Bless an ally for 30 seconds. Their spells and abilities deal *s5 Frost damage and reduce enemies' movement speed by 328506s4 and attack speed by 328506s3, stacking 328506u times.rnrn|cFFFFFFFFBlessing of the Seasons:|r Turns to Spring after use. SpellInfo(blessing_of_winter_unused_0 duration=6 max_stacks=10 gcd=0 offgcd=1) Define(blinding_light 115750) # Emits dazzling light in all directions, blinding enemies within 105421A1 yards, causing them to wander disoriented for 105421d. Non-Holy damage will break the disorient effect. @@ -102,7 +102,7 @@ Define(divine_purpose_buff 223819) # Your next Holy Power ability is free and deals s2 increased damage and healing. SpellAddBuff(divine_purpose_buff divine_purpose_buff add=1) Define(divine_storm 53385) -# Unleashes a whirl of divine energy, dealing s1 Holy damage to up to s2 nearby enemies. +# Unleashes a whirl of divine energy, dealing s1 Holy damage to all nearby enemies. Deals reduced damage beyond s2 targets. SpellInfo(divine_storm holypower=3) Define(divine_toll 304971) # Instantly cast Holy Shock, Avenger's Shield, or Judgment on up to s1 targets within A2 yds (based on your current specialization).?c3[rnrnDivine Toll's Judgment deals 326011s1 increased damage.][] @@ -208,9 +208,9 @@ Define(templars_verdict 85256) # Unleashes a powerful weapon strike that deals 224266s1 Holy damage to an enemy target. SpellInfo(templars_verdict holypower=3) Define(vanquishers_hammer 328204) -# Throws a hammer at your target dealing (136 of Spell Power) Shadow damage, and empowering your next ?c3[Templar's Verdict to automatically trigger Divine Storm]?c1[Word of Glory to automatically trigger Light of Dawn][Word of Glory to automatically trigger Shield of the Righteous].rnrn|cFFFFFFFFGenerates s3 Holy Power. +# Throws a hammer at your target dealing (136 of Spell Power) Shadow damage, and empowering your next ?c3[Templar's Verdict to automatically trigger Divine Storm]?c1[Word of Glory to automatically trigger Light of Dawn][Word of Glory to automatically trigger Shield of the Righteous] with s2 increased effectiveness.rnrn|cFFFFFFFFGenerates s3 Holy Power. SpellInfo(vanquishers_hammer cd=30 duration=20 holypower=-1) - # Your next ?c3[Templar's Verdict automatically triggers Divine Storm]?c1[Word of Glory automatically triggers Light of Dawn][Word of Glory automatically triggers Shield of the Righteous]. + # Your next ?c3[Templar's Verdict automatically triggers Divine Storm]?c1[Word of Glory automatically triggers Light of Dawn][Word of Glory automatically triggers Shield of the Righteous] with s2 increased effectiveness. SpellAddBuff(vanquishers_hammer vanquishers_hammer add=1) Define(wake_of_ashes 255937) # Lash out at your enemies, dealing s1 Radiant damage to all enemies within a1 yd in front of you and reducing their movement speed by s2 for 5 seconds. Damage reduced on secondary targets.rnrnDemon and Undead enemies are also stunned for 5 seconds.rnrn|cFFFFFFFFGenerates s3 Holy Power. diff --git a/src/scripts/ovale_priest_spells.ts b/src/scripts/ovale_priest_spells.ts index add10f57f..7eac40b31 100644 --- a/src/scripts/ovale_priest_spells.ts +++ b/src/scripts/ovale_priest_spells.ts @@ -56,10 +56,10 @@ Define(desperate_prayer 19236) Define(devouring_plague 335467) # Afflicts the target with a disease that instantly causes (49.036 of Spell Power) Shadow damage plus an additional o2 Shadow damage over 6 seconds. Heals you for e2*100 of damage dealt.rnrnIf this effect is reapplied, any remaining damage will be added to the new Devouring Plague. SpellInfo(devouring_plague insanity=50 duration=6 tick=3) - # Suffering s2 damage every t2 sec. + # Suffering w2 damage every t2 sec. SpellAddTargetDebuff(devouring_plague devouring_plague add=1) Define(divine_star 110744) -# Throw a Divine Star forward 24 yds, healing allies in its path for (70 of Spell Power) and dealing (40 of Spell Power) Holy damage to enemies. After reaching its destination, the Divine Star returns to you, healing allies and damaging enemies in its path again. +# Throw a Divine Star forward 24 yds, healing allies in its path for (70 of Spell Power) and dealing (56.00000000000001 of Spell Power) Holy damage to enemies. After reaching its destination, the Divine Star returns to you, healing allies and damaging enemies in its path again. Healing reduced beyond s1 targets. SpellInfo(divine_star cd=15 duration=15) SpellRequire(divine_star unusable set=1 enabled=(not hastalent(divine_star_talent))) Define(fae_guardians 327661) @@ -78,8 +78,8 @@ Define(fleshcraft 324631) # Immune to crowd control effects.rnHealing s17 health every t17 sec. SpellAddBuff(fleshcraft ultimate_form_buff add=1) Define(halo 120517) -# Creates a ring of Holy energy around you that quickly expands to a 30 yd radius, healing allies for (144 of Spell Power) and dealing (103 of Spell Power) Holy damage to enemies. - SpellInfo(halo cd=40 duration=3.2) +# Creates a ring of Holy energy around you that quickly expands to a 30 yd radius, healing allies for (114.99999999999999 of Spell Power) and dealing (103 of Spell Power) Holy damage to enemies. Healing reduced beyond s1 targets.rn + SpellInfo(halo cd=40 duration=2.15) SpellRequire(halo unusable set=1 enabled=(not hastalent(halo_talent))) Define(holy_fire 14914) # Consumes the enemy in Holy flames that cause (150 of Spell Power) Holy damage and an additional o2 Holy damage over 7 seconds.?a231687[ Stacks up to u times.][] @@ -174,14 +174,14 @@ Define(searing_nightmare 341385) SpellInfo(searing_nightmare insanity=30) SpellRequire(searing_nightmare unusable set=1 enabled=(not hastalent(searing_nightmare_talent))) Define(shadow_covenant 314867) -# Make a shadowy pact, healing the target and s3-1 other injured allies within A2 yds for (150 of Spell Power). For 9 seconds, your Shadow spells deal 322105m2 increased damage and healing, but you cannot cast Holy spells. +# Make a shadowy pact, healing the target and s3-1 other injured allies within A2 yds for (165 of Spell Power). For 7 seconds, your Shadow spells deal 322105m2 increased damage and healing, but you cannot cast Holy spells. SpellInfo(shadow_covenant cd=30) SpellRequire(shadow_covenant unusable set=1 enabled=(not hastalent(shadow_covenant_talent))) # Shadow spells deal w2 increased damage and healing, but cannot cast Holy spells. SpellAddBuff(shadow_covenant shadow_covenant_buff add=1) Define(shadow_covenant_buff 322105) -# Make a shadowy pact, healing the target and s3-1 other injured allies within A2 yds for (150 of Spell Power). For 9 seconds, your Shadow spells deal 322105m2 increased damage and healing, but you cannot cast Holy spells. - SpellInfo(shadow_covenant_buff duration=9 gcd=0 offgcd=1) +# Make a shadowy pact, healing the target and s3-1 other injured allies within A2 yds for (165 of Spell Power). For 7 seconds, your Shadow spells deal 322105m2 increased damage and healing, but you cannot cast Holy spells. + SpellInfo(shadow_covenant_buff duration=7 gcd=0 offgcd=1) Define(shadow_crash 205385) # Hurl a bolt of slow-moving Shadow energy at the destination, dealing (153 of Spell Power) Shadow damage to all targets within 205386A1 yards.rnrn|cFFFFFFFFGenerates /100;s2 Insanity.|r SpellInfo(shadow_crash cd=30 insanity=-15) @@ -223,8 +223,8 @@ Define(spirit_shell 109964) # Penance, Power Word: Radiance, and Atonement create absorb shields for w1 of their healing. SpellAddBuff(spirit_shell spirit_shell add=1) Define(surrender_to_madness 319952) -# Deals (64.60000000000001 of Spell Power)*2 Shadow damage to the target and activates Voidform.rnrnFor the next 25 seconds, your Insanity-generating abilities generate s2 more Insanity and you can cast while moving.rnrnIf the target does not die within 25 seconds of using Surrender to Madness, you die. - SpellInfo(surrender_to_madness cd=90 duration=25) +# Deals (64.60000000000001 of Spell Power)*2 Shadow damage to the target and activates Voidform.rnrnFor the next 30 seconds, your Insanity-generating abilities generate s2 more Insanity and you can cast while moving.rnrnIf the target does not die within 30 seconds of using Surrender to Madness, you die. + SpellInfo(surrender_to_madness cd=90 duration=30) SpellRequire(surrender_to_madness unusable set=1 enabled=(not hastalent(surrender_to_madness_talent))) # The Priest has surrendered to madness, sharing its fate with its target. If the target doesn't die within d, the Priest dies.rnrnCan cast while moving, and Insanity-generating abilities generate w2 more Insanity. SpellAddBuff(surrender_to_madness surrender_to_madness add=1) @@ -293,9 +293,9 @@ Define(wrathful_faerie_debuff 342132) Define(damnation_talent 21718) # Instantly afflicts the target with Shadow Word: Pain, Vampiric Touch and Devouring Plague. Define(divine_star_talent 19760) -# Throw a Divine Star forward 24 yds, healing allies in its path for (70 of Spell Power) and dealing (40 of Spell Power) Holy damage to enemies. After reaching its destination, the Divine Star returns to you, healing allies and damaging enemies in its path again. +# Throw a Divine Star forward 24 yds, healing allies in its path for (70 of Spell Power) and dealing (56.00000000000001 of Spell Power) Holy damage to enemies. After reaching its destination, the Divine Star returns to you, healing allies and damaging enemies in its path again. Healing reduced beyond s1 targets. Define(halo_talent 19763) -# Creates a ring of Holy energy around you that quickly expands to a 30 yd radius, healing allies for (144 of Spell Power) and dealing (103 of Spell Power) Holy damage to enemies. +# Creates a ring of Holy energy around you that quickly expands to a 30 yd radius, healing allies for (114.99999999999999 of Spell Power) and dealing (103 of Spell Power) Holy damage to enemies. Healing reduced beyond s1 targets.rn Define(hungering_void_talent 21978) # Void Bolt causes the target to become vulnerable to the void, increasing their damage taken from you by 345219m2 for 6 seconds. This effect may only be active on one target at a time.rnrnCasting Void Bolt on an enemy that is already vulnerable extends the duration of your Voidform by m3 sec, or m4 sec if Void Bolt critically strikes. Define(mind_bomb_talent 23375) @@ -317,13 +317,13 @@ Define(schism_talent 22329) Define(searing_nightmare_talent 23127) # Instantly deals (43 of Spell Power) Shadow damage to enemies around the target and afflicts them with Shadow Word: Pain. If the enemy is already afflicted by your Shadow Word: Pain, Searing Nightmare's damage is increased by m1.rnrnOnly usable while channeling Mind Sear. Define(shadow_covenant_talent 19766) -# Make a shadowy pact, healing the target and s3-1 other injured allies within A2 yds for (150 of Spell Power). For 9 seconds, your Shadow spells deal 322105m2 increased damage and healing, but you cannot cast Holy spells. +# Make a shadowy pact, healing the target and s3-1 other injured allies within A2 yds for (165 of Spell Power). For 7 seconds, your Shadow spells deal 322105m2 increased damage and healing, but you cannot cast Holy spells. Define(shadow_crash_talent 21755) # Hurl a bolt of slow-moving Shadow energy at the destination, dealing (153 of Spell Power) Shadow damage to all targets within 205386A1 yards.rnrn|cFFFFFFFFGenerates /100;s2 Insanity.|r Define(spirit_shell_talent 21184) # For 10 seconds, Penance, Power Word: Radiance, and Atonement create absorb shields for s1 of their value, instead of healing. Define(surrender_to_madness_talent 21979) -# Deals (64.60000000000001 of Spell Power)*2 Shadow damage to the target and activates Voidform.rnrnFor the next 25 seconds, your Insanity-generating abilities generate s2 more Insanity and you can cast while moving.rnrnIf the target does not die within 25 seconds of using Surrender to Madness, you die. +# Deals (64.60000000000001 of Spell Power)*2 Shadow damage to the target and activates Voidform.rnrnFor the next 30 seconds, your Insanity-generating abilities generate s2 more Insanity and you can cast while moving.rnrnIf the target does not die within 30 seconds of using Surrender to Madness, you die. Define(twist_of_fate_talent_shadow 23125) # After damaging a target below s1 health, you gain 123254s2 increased damage and healing for 8 seconds. Define(void_torrent_talent 21720) diff --git a/src/scripts/ovale_rogue.ts b/src/scripts/ovale_rogue.ts index 9b3c2b8a2..f2e995d6e 100644 --- a/src/scripts/ovale_rogue.ts +++ b/src/scripts/ovale_rogue.ts @@ -283,8 +283,8 @@ AddFunction assassinationdotmainactions if not skip_cycle_rupture() and not skip_rupture() and not never(target_is_target) and combopoints() >= 4 and target.refreshable(rupture) and { persistentmultiplier(rupture) <= 1 or target.debuffremaining(rupture) <= target.currentticktime(rupture) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(rupture) <= target.currentticktime(rupture) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(rupture) > 4 + runeforge(dashing_scoundrel_runeforge) * 5 + runeforge(doomblade_runeforge) * 5 + regen_saturated() * 6 spell(rupture text=cycle) #crimson_tempest,if=spell_targets>=2&effective_combo_points>=4&remains<2+3*(spell_targets>=4) if enemies(tagged=1) >= 2 and combopoints() >= 4 and target.debuffremaining(crimson_tempest) < 2 + 3 * { enemies(tagged=1) >= 4 } spell(crimson_tempest) - #crimson_tempest,if=spell_targets=1&!runeforge.dashing_scoundrel&master_assassin_remains=0&effective_combo_points>=(cp_max_spend-1)&refreshable&!exsanguinated&(!debuff.shiv.up&(energy.deficit<=25+energy.regen_combined))&target.time_to_die-remains>4 - if enemies(tagged=1) == 1 and not runeforge(dashing_scoundrel_runeforge) and buffremaining(master_assassin_buff) == 0 and combopoints() >= maxcombopoints() - 1 and target.refreshable(crimson_tempest) and not target.debuffpresent(exsanguinated) and not target.debuffpresent(shiv_debuff) and energydeficit() <= 25 + energyregenrate() and target.timetodie() - target.debuffremaining(crimson_tempest) > 4 spell(crimson_tempest) + #crimson_tempest,if=spell_targets=1&(!runeforge.dashing_scoundrel|rune_word.frost.enabled)&master_assassin_remains=0&effective_combo_points>=(cp_max_spend-1)&refreshable&!exsanguinated&!debuff.shiv.up&target.time_to_die-remains>4 + if enemies(tagged=1) == 1 and { not runeforge(dashing_scoundrel_runeforge) or always(rune_word) } and buffremaining(master_assassin_buff) == 0 and combopoints() >= maxcombopoints() - 1 and target.refreshable(crimson_tempest) and not target.debuffpresent(exsanguinated) and not target.debuffpresent(shiv_debuff) and target.timetodie() - target.debuffremaining(crimson_tempest) > 4 spell(crimson_tempest) } } } @@ -299,7 +299,7 @@ AddFunction assassinationdotshortcdactions AddFunction assassinationdotshortcdpostconditions { - hastalent(exsanguinate_talent) and not targetdebuffremaining(garrote_exsanguinated) and target.debuffpersistentmultiplier(garrote) <= 1 and spellcooldown(exsanguinate) < 2 and enemies(tagged=1) == 1 and 600 > 6 and target.debuffremaining(garrote) * 0.5 < target.timetodie() and spell(garrote) or hastalent(exsanguinate_talent) and { combopoints() >= maxcombopoints() and spellcooldown(exsanguinate) < 1 } and target.debuffremaining(rupture) * 0.5 < target.timetodie() and spell(rupture) or target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 4 and buffremaining(master_assassin_buff) == 0 and spell(garrote) or not { target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 4 and buffremaining(master_assassin_buff) == 0 and { spellusable(garrote) and spellcooldown(garrote) < timetoenergyfor(garrote) } } and { not skip_cycle_garrote() and not never(target_is_target) and target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 12 and buffremaining(master_assassin_buff) == 0 and spell(garrote text=cycle) or not { not skip_cycle_garrote() and not never(target_is_target) and target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 12 and buffremaining(master_assassin_buff) == 0 and { spellusable(garrote) and spellcooldown(garrote) < timetoenergyfor(garrote) } } and { enemies(tagged=1) >= 2 and combopoints() >= 4 and energyregenrate() > 20 and { not spellcooldown(vendetta) <= 0 or target.debuffpresent(rupture) } and target.debuffremaining(crimson_tempest) < 2 + 3 * { enemies(tagged=1) >= 4 } and spell(crimson_tempest) or not skip_rupture() and combopoints() >= 4 and target.refreshable(rupture) and { persistentmultiplier(rupture) <= 1 or target.debuffremaining(rupture) <= target.currentticktime(rupture) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(rupture) <= target.currentticktime(rupture) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(rupture) > 4 + runeforge(dashing_scoundrel_runeforge) * 5 + runeforge(doomblade_runeforge) * 5 + regen_saturated() * 6 and spell(rupture) or not skip_cycle_rupture() and not skip_rupture() and not never(target_is_target) and combopoints() >= 4 and target.refreshable(rupture) and { persistentmultiplier(rupture) <= 1 or target.debuffremaining(rupture) <= target.currentticktime(rupture) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(rupture) <= target.currentticktime(rupture) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(rupture) > 4 + runeforge(dashing_scoundrel_runeforge) * 5 + runeforge(doomblade_runeforge) * 5 + regen_saturated() * 6 and spell(rupture text=cycle) or enemies(tagged=1) >= 2 and combopoints() >= 4 and target.debuffremaining(crimson_tempest) < 2 + 3 * { enemies(tagged=1) >= 4 } and spell(crimson_tempest) or enemies(tagged=1) == 1 and not runeforge(dashing_scoundrel_runeforge) and buffremaining(master_assassin_buff) == 0 and combopoints() >= maxcombopoints() - 1 and target.refreshable(crimson_tempest) and not target.debuffpresent(exsanguinated) and not target.debuffpresent(shiv_debuff) and energydeficit() <= 25 + energyregenrate() and target.timetodie() - target.debuffremaining(crimson_tempest) > 4 and spell(crimson_tempest) } } + hastalent(exsanguinate_talent) and not targetdebuffremaining(garrote_exsanguinated) and target.debuffpersistentmultiplier(garrote) <= 1 and spellcooldown(exsanguinate) < 2 and enemies(tagged=1) == 1 and 600 > 6 and target.debuffremaining(garrote) * 0.5 < target.timetodie() and spell(garrote) or hastalent(exsanguinate_talent) and { combopoints() >= maxcombopoints() and spellcooldown(exsanguinate) < 1 } and target.debuffremaining(rupture) * 0.5 < target.timetodie() and spell(rupture) or target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 4 and buffremaining(master_assassin_buff) == 0 and spell(garrote) or not { target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 4 and buffremaining(master_assassin_buff) == 0 and { spellusable(garrote) and spellcooldown(garrote) < timetoenergyfor(garrote) } } and { not skip_cycle_garrote() and not never(target_is_target) and target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 12 and buffremaining(master_assassin_buff) == 0 and spell(garrote text=cycle) or not { not skip_cycle_garrote() and not never(target_is_target) and target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 12 and buffremaining(master_assassin_buff) == 0 and { spellusable(garrote) and spellcooldown(garrote) < timetoenergyfor(garrote) } } and { enemies(tagged=1) >= 2 and combopoints() >= 4 and energyregenrate() > 20 and { not spellcooldown(vendetta) <= 0 or target.debuffpresent(rupture) } and target.debuffremaining(crimson_tempest) < 2 + 3 * { enemies(tagged=1) >= 4 } and spell(crimson_tempest) or not skip_rupture() and combopoints() >= 4 and target.refreshable(rupture) and { persistentmultiplier(rupture) <= 1 or target.debuffremaining(rupture) <= target.currentticktime(rupture) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(rupture) <= target.currentticktime(rupture) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(rupture) > 4 + runeforge(dashing_scoundrel_runeforge) * 5 + runeforge(doomblade_runeforge) * 5 + regen_saturated() * 6 and spell(rupture) or not skip_cycle_rupture() and not skip_rupture() and not never(target_is_target) and combopoints() >= 4 and target.refreshable(rupture) and { persistentmultiplier(rupture) <= 1 or target.debuffremaining(rupture) <= target.currentticktime(rupture) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(rupture) <= target.currentticktime(rupture) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(rupture) > 4 + runeforge(dashing_scoundrel_runeforge) * 5 + runeforge(doomblade_runeforge) * 5 + regen_saturated() * 6 and spell(rupture text=cycle) or enemies(tagged=1) >= 2 and combopoints() >= 4 and target.debuffremaining(crimson_tempest) < 2 + 3 * { enemies(tagged=1) >= 4 } and spell(crimson_tempest) or enemies(tagged=1) == 1 and { not runeforge(dashing_scoundrel_runeforge) or always(rune_word) } and buffremaining(master_assassin_buff) == 0 and combopoints() >= maxcombopoints() - 1 and target.refreshable(crimson_tempest) and not target.debuffpresent(exsanguinated) and not target.debuffpresent(shiv_debuff) and target.timetodie() - target.debuffremaining(crimson_tempest) > 4 and spell(crimson_tempest) } } } AddFunction assassinationdotcdactions @@ -308,15 +308,15 @@ AddFunction assassinationdotcdactions AddFunction assassinationdotcdpostconditions { - hastalent(exsanguinate_talent) and not targetdebuffremaining(garrote_exsanguinated) and target.debuffpersistentmultiplier(garrote) <= 1 and spellcooldown(exsanguinate) < 2 and enemies(tagged=1) == 1 and 600 > 6 and target.debuffremaining(garrote) * 0.5 < target.timetodie() and spell(garrote) or hastalent(exsanguinate_talent) and { combopoints() >= maxcombopoints() and spellcooldown(exsanguinate) < 1 } and target.debuffremaining(rupture) * 0.5 < target.timetodie() and spell(rupture) or target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 4 and buffremaining(master_assassin_buff) == 0 and spell(garrote) or not { target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 4 and buffremaining(master_assassin_buff) == 0 and { spellusable(garrote) and spellcooldown(garrote) < timetoenergyfor(garrote) } } and { not skip_cycle_garrote() and not never(target_is_target) and target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 12 and buffremaining(master_assassin_buff) == 0 and spell(garrote text=cycle) or not { not skip_cycle_garrote() and not never(target_is_target) and target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 12 and buffremaining(master_assassin_buff) == 0 and { spellusable(garrote) and spellcooldown(garrote) < timetoenergyfor(garrote) } } and { enemies(tagged=1) >= 2 and combopoints() >= 4 and energyregenrate() > 20 and { not spellcooldown(vendetta) <= 0 or target.debuffpresent(rupture) } and target.debuffremaining(crimson_tempest) < 2 + 3 * { enemies(tagged=1) >= 4 } and spell(crimson_tempest) or not skip_rupture() and combopoints() >= 4 and target.refreshable(rupture) and { persistentmultiplier(rupture) <= 1 or target.debuffremaining(rupture) <= target.currentticktime(rupture) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(rupture) <= target.currentticktime(rupture) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(rupture) > 4 + runeforge(dashing_scoundrel_runeforge) * 5 + runeforge(doomblade_runeforge) * 5 + regen_saturated() * 6 and spell(rupture) or not skip_cycle_rupture() and not skip_rupture() and not never(target_is_target) and combopoints() >= 4 and target.refreshable(rupture) and { persistentmultiplier(rupture) <= 1 or target.debuffremaining(rupture) <= target.currentticktime(rupture) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(rupture) <= target.currentticktime(rupture) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(rupture) > 4 + runeforge(dashing_scoundrel_runeforge) * 5 + runeforge(doomblade_runeforge) * 5 + regen_saturated() * 6 and spell(rupture text=cycle) or enemies(tagged=1) >= 2 and combopoints() >= 4 and target.debuffremaining(crimson_tempest) < 2 + 3 * { enemies(tagged=1) >= 4 } and spell(crimson_tempest) or enemies(tagged=1) == 1 and not runeforge(dashing_scoundrel_runeforge) and buffremaining(master_assassin_buff) == 0 and combopoints() >= maxcombopoints() - 1 and target.refreshable(crimson_tempest) and not target.debuffpresent(exsanguinated) and not target.debuffpresent(shiv_debuff) and energydeficit() <= 25 + energyregenrate() and target.timetodie() - target.debuffremaining(crimson_tempest) > 4 and spell(crimson_tempest) } } + hastalent(exsanguinate_talent) and not targetdebuffremaining(garrote_exsanguinated) and target.debuffpersistentmultiplier(garrote) <= 1 and spellcooldown(exsanguinate) < 2 and enemies(tagged=1) == 1 and 600 > 6 and target.debuffremaining(garrote) * 0.5 < target.timetodie() and spell(garrote) or hastalent(exsanguinate_talent) and { combopoints() >= maxcombopoints() and spellcooldown(exsanguinate) < 1 } and target.debuffremaining(rupture) * 0.5 < target.timetodie() and spell(rupture) or target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 4 and buffremaining(master_assassin_buff) == 0 and spell(garrote) or not { target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 4 and buffremaining(master_assassin_buff) == 0 and { spellusable(garrote) and spellcooldown(garrote) < timetoenergyfor(garrote) } } and { not skip_cycle_garrote() and not never(target_is_target) and target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 12 and buffremaining(master_assassin_buff) == 0 and spell(garrote text=cycle) or not { not skip_cycle_garrote() and not never(target_is_target) and target.refreshable(garrote) and combopointsdeficit() >= 1 and { persistentmultiplier(garrote) <= 1 or target.debuffremaining(garrote) <= target.currentticktime(garrote) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(garrote) <= target.currentticktime(garrote) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(garrote) > 12 and buffremaining(master_assassin_buff) == 0 and { spellusable(garrote) and spellcooldown(garrote) < timetoenergyfor(garrote) } } and { enemies(tagged=1) >= 2 and combopoints() >= 4 and energyregenrate() > 20 and { not spellcooldown(vendetta) <= 0 or target.debuffpresent(rupture) } and target.debuffremaining(crimson_tempest) < 2 + 3 * { enemies(tagged=1) >= 4 } and spell(crimson_tempest) or not skip_rupture() and combopoints() >= 4 and target.refreshable(rupture) and { persistentmultiplier(rupture) <= 1 or target.debuffremaining(rupture) <= target.currentticktime(rupture) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(rupture) <= target.currentticktime(rupture) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(rupture) > 4 + runeforge(dashing_scoundrel_runeforge) * 5 + runeforge(doomblade_runeforge) * 5 + regen_saturated() * 6 and spell(rupture) or not skip_cycle_rupture() and not skip_rupture() and not never(target_is_target) and combopoints() >= 4 and target.refreshable(rupture) and { persistentmultiplier(rupture) <= 1 or target.debuffremaining(rupture) <= target.currentticktime(rupture) and enemies(tagged=1) >= 3 } and { not target.debuffpresent(exsanguinated) or target.debuffremaining(rupture) <= target.currentticktime(rupture) * 2 and enemies(tagged=1) >= 3 } and target.timetodie() - target.debuffremaining(rupture) > 4 + runeforge(dashing_scoundrel_runeforge) * 5 + runeforge(doomblade_runeforge) * 5 + regen_saturated() * 6 and spell(rupture text=cycle) or enemies(tagged=1) >= 2 and combopoints() >= 4 and target.debuffremaining(crimson_tempest) < 2 + 3 * { enemies(tagged=1) >= 4 } and spell(crimson_tempest) or enemies(tagged=1) == 1 and { not runeforge(dashing_scoundrel_runeforge) or always(rune_word) } and buffremaining(master_assassin_buff) == 0 and combopoints() >= maxcombopoints() - 1 and target.refreshable(crimson_tempest) and not target.debuffpresent(exsanguinated) and not target.debuffpresent(shiv_debuff) and target.timetodie() - target.debuffremaining(crimson_tempest) > 4 and spell(crimson_tempest) } } } ### actions.direct AddFunction assassinationdirectmainactions { - #envenom,if=effective_combo_points>=4+talent.deeper_stratagem.enabled&(debuff.vendetta.up|debuff.shiv.up|debuff.flagellation.up|energy.deficit<=25+energy.regen_combined|!variable.single_target)&(!talent.exsanguinate.enabled|cooldown.exsanguinate.remains>2) - if combopoints() >= 4 + talentpoints(deeper_stratagem_talent) and { target.debuffpresent(vendetta) or target.debuffpresent(shiv_debuff) or target.debuffpresent(flagellation) or energydeficit() <= 25 + energyregenrate() or not single_target() } and { not hastalent(exsanguinate_talent) or spellcooldown(exsanguinate) > 2 } spell(envenom) + #envenom,if=effective_combo_points>=4+talent.deeper_stratagem.enabled&(debuff.vendetta.up|debuff.shiv.up|debuff.flagellation.up|energy.deficit<=25+energy.regen_combined|!variable.single_target|effective_combo_points>cp_max_spend)&(!talent.exsanguinate.enabled|cooldown.exsanguinate.remains>2) + if combopoints() >= 4 + talentpoints(deeper_stratagem_talent) and { target.debuffpresent(vendetta) or target.debuffpresent(shiv_debuff) or target.debuffpresent(flagellation) or energydeficit() <= 25 + energyregenrate() or not single_target() or combopoints() > maxcombopoints() } and { not hastalent(exsanguinate_talent) or spellcooldown(exsanguinate) > 2 } spell(envenom) #fan_of_knives,if=variable.use_filler&(buff.hidden_blades.stack>=19|(!priority_rotation&spell_targets.fan_of_knives>=4+stealthed.rogue)) if use_filler() and { buffstacks(hidden_blades_buff) >= 19 or not checkboxon(opt_priority_rotation) and enemies(tagged=1) >= 4 + buffpresent(rogue_stealthed_buff) } spell(fan_of_knives) #fan_of_knives,target_if=!dot.deadly_poison_dot.ticking&(!priority_rotation|dot.garrote.ticking|dot.rupture.ticking),if=variable.use_filler&spell_targets.fan_of_knives>=3 @@ -335,7 +335,7 @@ AddFunction assassinationdirectmainpostconditions AddFunction assassinationdirectshortcdactions { - unless combopoints() >= 4 + talentpoints(deeper_stratagem_talent) and { target.debuffpresent(vendetta) or target.debuffpresent(shiv_debuff) or target.debuffpresent(flagellation) or energydeficit() <= 25 + energyregenrate() or not single_target() } and { not hastalent(exsanguinate_talent) or spellcooldown(exsanguinate) > 2 } and spell(envenom) + unless combopoints() >= 4 + talentpoints(deeper_stratagem_talent) and { target.debuffpresent(vendetta) or target.debuffpresent(shiv_debuff) or target.debuffpresent(flagellation) or energydeficit() <= 25 + energyregenrate() or not single_target() or combopoints() > maxcombopoints() } and { not hastalent(exsanguinate_talent) or spellcooldown(exsanguinate) > 2 } and spell(envenom) { #variable,name=use_filler,value=combo_points.deficit>1|energy.deficit<=25+energy.regen_combined|!variable.single_target #serrated_bone_spike,if=variable.use_filler&!dot.serrated_bone_spike_dot.ticking @@ -355,7 +355,7 @@ AddFunction assassinationdirectshortcdactions AddFunction assassinationdirectshortcdpostconditions { - combopoints() >= 4 + talentpoints(deeper_stratagem_talent) and { target.debuffpresent(vendetta) or target.debuffpresent(shiv_debuff) or target.debuffpresent(flagellation) or energydeficit() <= 25 + energyregenrate() or not single_target() } and { not hastalent(exsanguinate_talent) or spellcooldown(exsanguinate) > 2 } and spell(envenom) or use_filler() and { buffstacks(hidden_blades_buff) >= 19 or not checkboxon(opt_priority_rotation) and enemies(tagged=1) >= 4 + buffpresent(rogue_stealthed_buff) } and spell(fan_of_knives) or not target.debuffpresent(deadly_poison) and { not checkboxon(opt_priority_rotation) or target.debuffpresent(garrote) or target.debuffpresent(rupture) } and { use_filler() and enemies(tagged=1) >= 3 } and spell(fan_of_knives) or use_filler() and { buffremaining(master_assassin_buff) == 0 and not runeforge(doomblade_runeforge) or buffpresent(blindside_buff) } and spell(ambush) or not target.debuffpresent(deadly_poison) and { use_filler() and enemies(tagged=1) == 2 } and spell(mutilate) or use_filler() and spell(mutilate) + combopoints() >= 4 + talentpoints(deeper_stratagem_talent) and { target.debuffpresent(vendetta) or target.debuffpresent(shiv_debuff) or target.debuffpresent(flagellation) or energydeficit() <= 25 + energyregenrate() or not single_target() or combopoints() > maxcombopoints() } and { not hastalent(exsanguinate_talent) or spellcooldown(exsanguinate) > 2 } and spell(envenom) or use_filler() and { buffstacks(hidden_blades_buff) >= 19 or not checkboxon(opt_priority_rotation) and enemies(tagged=1) >= 4 + buffpresent(rogue_stealthed_buff) } and spell(fan_of_knives) or not target.debuffpresent(deadly_poison) and { not checkboxon(opt_priority_rotation) or target.debuffpresent(garrote) or target.debuffpresent(rupture) } and { use_filler() and enemies(tagged=1) >= 3 } and spell(fan_of_knives) or use_filler() and { buffremaining(master_assassin_buff) == 0 and not runeforge(doomblade_runeforge) or buffpresent(blindside_buff) } and spell(ambush) or not target.debuffpresent(deadly_poison) and { use_filler() and enemies(tagged=1) == 2 } and spell(mutilate) or use_filler() and spell(mutilate) } AddFunction assassinationdirectcdactions @@ -364,7 +364,7 @@ AddFunction assassinationdirectcdactions AddFunction assassinationdirectcdpostconditions { - combopoints() >= 4 + talentpoints(deeper_stratagem_talent) and { target.debuffpresent(vendetta) or target.debuffpresent(shiv_debuff) or target.debuffpresent(flagellation) or energydeficit() <= 25 + energyregenrate() or not single_target() } and { not hastalent(exsanguinate_talent) or spellcooldown(exsanguinate) > 2 } and spell(envenom) or use_filler() and not target.debuffpresent(serrated_bone_spike_debuff) and spell(serrated_bone_spike) or use_filler() and not target.debuffpresent(serrated_bone_spike_debuff) and spell(serrated_bone_spike) or use_filler() and buffremaining(master_assassin_buff) < 0.8 and { fightremains() <= 5 or spellmaxcharges(serrated_bone_spike) - charges(serrated_bone_spike count=0) <= 0.25 or enabledsoulbind(lead_by_example_soulbind) and not buffpresent(lead_by_example_buff) and target.debuffpresent(vendetta) or buffpresent(marrowed_gemstone_enhancement_buff) } and spell(serrated_bone_spike) or use_filler() and { buffstacks(hidden_blades_buff) >= 19 or not checkboxon(opt_priority_rotation) and enemies(tagged=1) >= 4 + buffpresent(rogue_stealthed_buff) } and spell(fan_of_knives) or not target.debuffpresent(deadly_poison) and { not checkboxon(opt_priority_rotation) or target.debuffpresent(garrote) or target.debuffpresent(rupture) } and { use_filler() and enemies(tagged=1) >= 3 } and spell(fan_of_knives) or use_filler() and spellcooldown(vendetta) > 10 and spell(echoing_reprimand) or use_filler() and { buffremaining(master_assassin_buff) == 0 and not runeforge(doomblade_runeforge) or buffpresent(blindside_buff) } and spell(ambush) or not target.debuffpresent(deadly_poison) and { use_filler() and enemies(tagged=1) == 2 } and spell(mutilate) or use_filler() and spell(mutilate) + combopoints() >= 4 + talentpoints(deeper_stratagem_talent) and { target.debuffpresent(vendetta) or target.debuffpresent(shiv_debuff) or target.debuffpresent(flagellation) or energydeficit() <= 25 + energyregenrate() or not single_target() or combopoints() > maxcombopoints() } and { not hastalent(exsanguinate_talent) or spellcooldown(exsanguinate) > 2 } and spell(envenom) or use_filler() and not target.debuffpresent(serrated_bone_spike_debuff) and spell(serrated_bone_spike) or use_filler() and not target.debuffpresent(serrated_bone_spike_debuff) and spell(serrated_bone_spike) or use_filler() and buffremaining(master_assassin_buff) < 0.8 and { fightremains() <= 5 or spellmaxcharges(serrated_bone_spike) - charges(serrated_bone_spike count=0) <= 0.25 or enabledsoulbind(lead_by_example_soulbind) and not buffpresent(lead_by_example_buff) and target.debuffpresent(vendetta) or buffpresent(marrowed_gemstone_enhancement_buff) } and spell(serrated_bone_spike) or use_filler() and { buffstacks(hidden_blades_buff) >= 19 or not checkboxon(opt_priority_rotation) and enemies(tagged=1) >= 4 + buffpresent(rogue_stealthed_buff) } and spell(fan_of_knives) or not target.debuffpresent(deadly_poison) and { not checkboxon(opt_priority_rotation) or target.debuffpresent(garrote) or target.debuffpresent(rupture) } and { use_filler() and enemies(tagged=1) >= 3 } and spell(fan_of_knives) or use_filler() and spellcooldown(vendetta) > 10 and spell(echoing_reprimand) or use_filler() and { buffremaining(master_assassin_buff) == 0 and not runeforge(doomblade_runeforge) or buffpresent(blindside_buff) } and spell(ambush) or not target.debuffpresent(deadly_poison) and { use_filler() and enemies(tagged=1) == 2 } and spell(mutilate) or use_filler() and spell(mutilate) } ### actions.cds @@ -1285,6 +1285,12 @@ AddFunction use_priority_rotation checkboxon(opt_priority_rotation) and enemies(tagged=1) >= 2 } +AddFunction effective_combo_points +{ + if iscovenant("kyrian") and combopoints() > combopoints() and combopointsdeficit() > 2 and 1 < 0.5 and not { combopoints() == 2 and buffpresent(echoing_reprimand_3_buff) or combopoints() == 3 and buffpresent(echoing_reprimand_4_buff) or combopoints() == 4 and buffpresent(echoing_reprimand_5_buff) } combopoints() + combopoints() +} + AddFunction snd_condition { buffpresent(slice_and_dice) or enemies(tagged=1) >= 6 @@ -1349,20 +1355,20 @@ AddFunction subtletystealthedmainactions { #shadowstrike,if=(buff.stealth.up|buff.vanish.up)&(spell_targets.shuriken_storm<4|variable.use_priority_rotation)&master_assassin_remains=0 if { buffpresent(stealth) or buffpresent(vanish) } and { enemies(tagged=1) < 4 or use_priority_rotation() } and buffremaining(master_assassin_buff) == 0 spell(shadowstrike) - #call_action_list,name=finish,if=effective_combo_points>=cp_max_spend - if combopoints() >= maxcombopoints() subtletyfinishmainactions() + #call_action_list,name=finish,if=variable.effective_combo_points>=cp_max_spend + if effective_combo_points() >= maxcombopoints() subtletyfinishmainactions() - unless combopoints() >= maxcombopoints() and subtletyfinishmainpostconditions() + unless effective_combo_points() >= maxcombopoints() and subtletyfinishmainpostconditions() { #call_action_list,name=finish,if=buff.shuriken_tornado.up&combo_points.deficit<=2 if buffpresent(shuriken_tornado) and combopointsdeficit() <= 2 subtletyfinishmainactions() unless buffpresent(shuriken_tornado) and combopointsdeficit() <= 2 and subtletyfinishmainpostconditions() { - #call_action_list,name=finish,if=spell_targets.shuriken_storm>=4&effective_combo_points>=4 - if enemies(tagged=1) >= 4 and combopoints() >= 4 subtletyfinishmainactions() + #call_action_list,name=finish,if=spell_targets.shuriken_storm>=4&variable.effective_combo_points>=4 + if enemies(tagged=1) >= 4 and effective_combo_points() >= 4 subtletyfinishmainactions() - unless enemies(tagged=1) >= 4 and combopoints() >= 4 and subtletyfinishmainpostconditions() + unless enemies(tagged=1) >= 4 and effective_combo_points() >= 4 and subtletyfinishmainpostconditions() { #call_action_list,name=finish,if=combo_points.deficit<=1-(talent.deeper_stratagem.enabled&buff.vanish.up) if combopointsdeficit() <= 1 - { hastalent(deeper_stratagem_talent) and buffpresent(vanish) } subtletyfinishmainactions() @@ -1395,27 +1401,27 @@ AddFunction subtletystealthedmainactions AddFunction subtletystealthedmainpostconditions { - combopoints() >= maxcombopoints() and subtletyfinishmainpostconditions() or buffpresent(shuriken_tornado) and combopointsdeficit() <= 2 and subtletyfinishmainpostconditions() or enemies(tagged=1) >= 4 and combopoints() >= 4 and subtletyfinishmainpostconditions() or combopointsdeficit() <= 1 - { hastalent(deeper_stratagem_talent) and buffpresent(vanish) } and subtletyfinishmainpostconditions() + effective_combo_points() >= maxcombopoints() and subtletyfinishmainpostconditions() or buffpresent(shuriken_tornado) and combopointsdeficit() <= 2 and subtletyfinishmainpostconditions() or enemies(tagged=1) >= 4 and effective_combo_points() >= 4 and subtletyfinishmainpostconditions() or combopointsdeficit() <= 1 - { hastalent(deeper_stratagem_talent) and buffpresent(vanish) } and subtletyfinishmainpostconditions() } AddFunction subtletystealthedshortcdactions { unless { buffpresent(stealth) or buffpresent(vanish) } and { enemies(tagged=1) < 4 or use_priority_rotation() } and buffremaining(master_assassin_buff) == 0 and spell(shadowstrike) { - #call_action_list,name=finish,if=effective_combo_points>=cp_max_spend - if combopoints() >= maxcombopoints() subtletyfinishshortcdactions() + #call_action_list,name=finish,if=variable.effective_combo_points>=cp_max_spend + if effective_combo_points() >= maxcombopoints() subtletyfinishshortcdactions() - unless combopoints() >= maxcombopoints() and subtletyfinishshortcdpostconditions() + unless effective_combo_points() >= maxcombopoints() and subtletyfinishshortcdpostconditions() { #call_action_list,name=finish,if=buff.shuriken_tornado.up&combo_points.deficit<=2 if buffpresent(shuriken_tornado) and combopointsdeficit() <= 2 subtletyfinishshortcdactions() unless buffpresent(shuriken_tornado) and combopointsdeficit() <= 2 and subtletyfinishshortcdpostconditions() { - #call_action_list,name=finish,if=spell_targets.shuriken_storm>=4&effective_combo_points>=4 - if enemies(tagged=1) >= 4 and combopoints() >= 4 subtletyfinishshortcdactions() + #call_action_list,name=finish,if=spell_targets.shuriken_storm>=4&variable.effective_combo_points>=4 + if enemies(tagged=1) >= 4 and effective_combo_points() >= 4 subtletyfinishshortcdactions() - unless enemies(tagged=1) >= 4 and combopoints() >= 4 and subtletyfinishshortcdpostconditions() + unless enemies(tagged=1) >= 4 and effective_combo_points() >= 4 and subtletyfinishshortcdpostconditions() { #call_action_list,name=finish,if=combo_points.deficit<=1-(talent.deeper_stratagem.enabled&buff.vanish.up) if combopointsdeficit() <= 1 - { hastalent(deeper_stratagem_talent) and buffpresent(vanish) } subtletyfinishshortcdactions() @@ -1427,27 +1433,27 @@ AddFunction subtletystealthedshortcdactions AddFunction subtletystealthedshortcdpostconditions { - { buffpresent(stealth) or buffpresent(vanish) } and { enemies(tagged=1) < 4 or use_priority_rotation() } and buffremaining(master_assassin_buff) == 0 and spell(shadowstrike) or combopoints() >= maxcombopoints() and subtletyfinishshortcdpostconditions() or buffpresent(shuriken_tornado) and combopointsdeficit() <= 2 and subtletyfinishshortcdpostconditions() or enemies(tagged=1) >= 4 and combopoints() >= 4 and subtletyfinishshortcdpostconditions() or combopointsdeficit() <= 1 - { hastalent(deeper_stratagem_talent) and buffpresent(vanish) } and subtletyfinishshortcdpostconditions() or buffpresent(sepsis) and enemies(tagged=1) < 4 and spell(shadowstrike) or hastalent(nightstalker_talent) and runeforge(tiny_toxic_blade_runeforge) and enemies(tagged=1) < 5 and spell(shiv) or not use_priority_rotation() and target.debuffremaining(find_weakness_debuff) < 1 and enemies(tagged=1) <= 3 and target.timetodie() - buffremaining(shadowstrike) > 6 and spell(shadowstrike text=cycle) or use_priority_rotation() and { target.debuffremaining(find_weakness_debuff) < 1 or hastalent(weaponmaster_talent) and enemies(tagged=1) <= 4 } and spell(shadowstrike) or enemies(tagged=1) >= 3 + { buffpresent(the_rotten_buff) or runeforge(akaaris_soul_fragment_runeforge) } and { buffpresent(symbols_of_death_autocrit) or not buffpresent(premeditation_buff) or enemies(tagged=1) >= 5 } and spell(shuriken_storm) or { target.debuffremaining(find_weakness_debuff) <= 1 or spellcooldown(symbols_of_death) < 18 and target.debuffremaining(find_weakness_debuff) < spellcooldown(symbols_of_death) } and spell(shadowstrike) or buffstacks(perforated_veins_buff) >= 5 and conduitrank(perforated_veins_conduit) >= 13 and spell(gloomblade) or spell(shadowstrike) or not target.classification(worldboss) and combopointsdeficit() >= 1 and buffpresent(shot_in_the_dark_buff) and timetoenergy(40) > gcd() and spell(cheap_shot) + { buffpresent(stealth) or buffpresent(vanish) } and { enemies(tagged=1) < 4 or use_priority_rotation() } and buffremaining(master_assassin_buff) == 0 and spell(shadowstrike) or effective_combo_points() >= maxcombopoints() and subtletyfinishshortcdpostconditions() or buffpresent(shuriken_tornado) and combopointsdeficit() <= 2 and subtletyfinishshortcdpostconditions() or enemies(tagged=1) >= 4 and effective_combo_points() >= 4 and subtletyfinishshortcdpostconditions() or combopointsdeficit() <= 1 - { hastalent(deeper_stratagem_talent) and buffpresent(vanish) } and subtletyfinishshortcdpostconditions() or buffpresent(sepsis) and enemies(tagged=1) < 4 and spell(shadowstrike) or hastalent(nightstalker_talent) and runeforge(tiny_toxic_blade_runeforge) and enemies(tagged=1) < 5 and spell(shiv) or not use_priority_rotation() and target.debuffremaining(find_weakness_debuff) < 1 and enemies(tagged=1) <= 3 and target.timetodie() - buffremaining(shadowstrike) > 6 and spell(shadowstrike text=cycle) or use_priority_rotation() and { target.debuffremaining(find_weakness_debuff) < 1 or hastalent(weaponmaster_talent) and enemies(tagged=1) <= 4 } and spell(shadowstrike) or enemies(tagged=1) >= 3 + { buffpresent(the_rotten_buff) or runeforge(akaaris_soul_fragment_runeforge) } and { buffpresent(symbols_of_death_autocrit) or not buffpresent(premeditation_buff) or enemies(tagged=1) >= 5 } and spell(shuriken_storm) or { target.debuffremaining(find_weakness_debuff) <= 1 or spellcooldown(symbols_of_death) < 18 and target.debuffremaining(find_weakness_debuff) < spellcooldown(symbols_of_death) } and spell(shadowstrike) or buffstacks(perforated_veins_buff) >= 5 and conduitrank(perforated_veins_conduit) >= 13 and spell(gloomblade) or spell(shadowstrike) or not target.classification(worldboss) and combopointsdeficit() >= 1 and buffpresent(shot_in_the_dark_buff) and timetoenergy(40) > gcd() and spell(cheap_shot) } AddFunction subtletystealthedcdactions { unless { buffpresent(stealth) or buffpresent(vanish) } and { enemies(tagged=1) < 4 or use_priority_rotation() } and buffremaining(master_assassin_buff) == 0 and spell(shadowstrike) { - #call_action_list,name=finish,if=effective_combo_points>=cp_max_spend - if combopoints() >= maxcombopoints() subtletyfinishcdactions() + #call_action_list,name=finish,if=variable.effective_combo_points>=cp_max_spend + if effective_combo_points() >= maxcombopoints() subtletyfinishcdactions() - unless combopoints() >= maxcombopoints() and subtletyfinishcdpostconditions() + unless effective_combo_points() >= maxcombopoints() and subtletyfinishcdpostconditions() { #call_action_list,name=finish,if=buff.shuriken_tornado.up&combo_points.deficit<=2 if buffpresent(shuriken_tornado) and combopointsdeficit() <= 2 subtletyfinishcdactions() unless buffpresent(shuriken_tornado) and combopointsdeficit() <= 2 and subtletyfinishcdpostconditions() { - #call_action_list,name=finish,if=spell_targets.shuriken_storm>=4&effective_combo_points>=4 - if enemies(tagged=1) >= 4 and combopoints() >= 4 subtletyfinishcdactions() + #call_action_list,name=finish,if=spell_targets.shuriken_storm>=4&variable.effective_combo_points>=4 + if enemies(tagged=1) >= 4 and effective_combo_points() >= 4 subtletyfinishcdactions() - unless enemies(tagged=1) >= 4 and combopoints() >= 4 and subtletyfinishcdpostconditions() + unless enemies(tagged=1) >= 4 and effective_combo_points() >= 4 and subtletyfinishcdpostconditions() { #call_action_list,name=finish,if=combo_points.deficit<=1-(talent.deeper_stratagem.enabled&buff.vanish.up) if combopointsdeficit() <= 1 - { hastalent(deeper_stratagem_talent) and buffpresent(vanish) } subtletyfinishcdactions() @@ -1459,7 +1465,7 @@ AddFunction subtletystealthedcdactions AddFunction subtletystealthedcdpostconditions { - { buffpresent(stealth) or buffpresent(vanish) } and { enemies(tagged=1) < 4 or use_priority_rotation() } and buffremaining(master_assassin_buff) == 0 and spell(shadowstrike) or combopoints() >= maxcombopoints() and subtletyfinishcdpostconditions() or buffpresent(shuriken_tornado) and combopointsdeficit() <= 2 and subtletyfinishcdpostconditions() or enemies(tagged=1) >= 4 and combopoints() >= 4 and subtletyfinishcdpostconditions() or combopointsdeficit() <= 1 - { hastalent(deeper_stratagem_talent) and buffpresent(vanish) } and subtletyfinishcdpostconditions() or buffpresent(sepsis) and enemies(tagged=1) < 4 and spell(shadowstrike) or hastalent(nightstalker_talent) and runeforge(tiny_toxic_blade_runeforge) and enemies(tagged=1) < 5 and spell(shiv) or not use_priority_rotation() and target.debuffremaining(find_weakness_debuff) < 1 and enemies(tagged=1) <= 3 and target.timetodie() - buffremaining(shadowstrike) > 6 and spell(shadowstrike text=cycle) or use_priority_rotation() and { target.debuffremaining(find_weakness_debuff) < 1 or hastalent(weaponmaster_talent) and enemies(tagged=1) <= 4 } and spell(shadowstrike) or enemies(tagged=1) >= 3 + { buffpresent(the_rotten_buff) or runeforge(akaaris_soul_fragment_runeforge) } and { buffpresent(symbols_of_death_autocrit) or not buffpresent(premeditation_buff) or enemies(tagged=1) >= 5 } and spell(shuriken_storm) or { target.debuffremaining(find_weakness_debuff) <= 1 or spellcooldown(symbols_of_death) < 18 and target.debuffremaining(find_weakness_debuff) < spellcooldown(symbols_of_death) } and spell(shadowstrike) or buffstacks(perforated_veins_buff) >= 5 and conduitrank(perforated_veins_conduit) >= 13 and spell(gloomblade) or spell(shadowstrike) or not target.classification(worldboss) and combopointsdeficit() >= 1 and buffpresent(shot_in_the_dark_buff) and timetoenergy(40) > gcd() and spell(cheap_shot) + { buffpresent(stealth) or buffpresent(vanish) } and { enemies(tagged=1) < 4 or use_priority_rotation() } and buffremaining(master_assassin_buff) == 0 and spell(shadowstrike) or effective_combo_points() >= maxcombopoints() and subtletyfinishcdpostconditions() or buffpresent(shuriken_tornado) and combopointsdeficit() <= 2 and subtletyfinishcdpostconditions() or enemies(tagged=1) >= 4 and effective_combo_points() >= 4 and subtletyfinishcdpostconditions() or combopointsdeficit() <= 1 - { hastalent(deeper_stratagem_talent) and buffpresent(vanish) } and subtletyfinishcdpostconditions() or buffpresent(sepsis) and enemies(tagged=1) < 4 and spell(shadowstrike) or hastalent(nightstalker_talent) and runeforge(tiny_toxic_blade_runeforge) and enemies(tagged=1) < 5 and spell(shiv) or not use_priority_rotation() and target.debuffremaining(find_weakness_debuff) < 1 and enemies(tagged=1) <= 3 and target.timetodie() - buffremaining(shadowstrike) > 6 and spell(shadowstrike text=cycle) or use_priority_rotation() and { target.debuffremaining(find_weakness_debuff) < 1 or hastalent(weaponmaster_talent) and enemies(tagged=1) <= 4 } and spell(shadowstrike) or enemies(tagged=1) >= 3 + { buffpresent(the_rotten_buff) or runeforge(akaaris_soul_fragment_runeforge) } and { buffpresent(symbols_of_death_autocrit) or not buffpresent(premeditation_buff) or enemies(tagged=1) >= 5 } and spell(shuriken_storm) or { target.debuffremaining(find_weakness_debuff) <= 1 or spellcooldown(symbols_of_death) < 18 and target.debuffremaining(find_weakness_debuff) < spellcooldown(symbols_of_death) } and spell(shadowstrike) or buffstacks(perforated_veins_buff) >= 5 and conduitrank(perforated_veins_conduit) >= 13 and spell(gloomblade) or spell(shadowstrike) or not target.classification(worldboss) and combopointsdeficit() >= 1 and buffpresent(shot_in_the_dark_buff) and timetoenergy(40) > gcd() and spell(cheap_shot) } ### actions.stealth_cds @@ -1747,6 +1753,8 @@ AddFunction subtlety_defaultmainactions #stealth spell(stealth) #variable,name=snd_condition,value=buff.slice_and_dice.up|spell_targets.shuriken_storm>=6 + #variable,name=effective_combo_points,value=effective_combo_points + #variable,name=effective_combo_points,if=covenant.kyrian&effective_combo_points>combo_points&combo_points.deficit>2&time_to_sht.4.plus<0.5&!(combo_points=2&buff.echoing_reprimand_3.up|combo_points=3&buff.echoing_reprimand_4.up|combo_points=4&buff.echoing_reprimand_5.up),value=combo_points #call_action_list,name=cds subtletycdsmainactions() @@ -1771,20 +1779,20 @@ AddFunction subtlety_defaultmainactions unless energydeficit() <= stealth_threshold() and subtletystealth_cdsmainpostconditions() { - #call_action_list,name=finish,if=effective_combo_points>=cp_max_spend - if combopoints() >= maxcombopoints() subtletyfinishmainactions() + #call_action_list,name=finish,if=variable.effective_combo_points>=cp_max_spend + if effective_combo_points() >= maxcombopoints() subtletyfinishmainactions() - unless combopoints() >= maxcombopoints() and subtletyfinishmainpostconditions() + unless effective_combo_points() >= maxcombopoints() and subtletyfinishmainpostconditions() { - #call_action_list,name=finish,if=combo_points.deficit<=1|fight_remains<=1&effective_combo_points>=3|buff.symbols_of_death_autocrit.up&effective_combo_points>=4 - if combopointsdeficit() <= 1 or fightremains() <= 1 and combopoints() >= 3 or buffpresent(symbols_of_death_autocrit) and combopoints() >= 4 subtletyfinishmainactions() + #call_action_list,name=finish,if=combo_points.deficit<=1|fight_remains<=1&variable.effective_combo_points>=3|buff.symbols_of_death_autocrit.up&variable.effective_combo_points>=4 + if combopointsdeficit() <= 1 or fightremains() <= 1 and effective_combo_points() >= 3 or buffpresent(symbols_of_death_autocrit) and effective_combo_points() >= 4 subtletyfinishmainactions() - unless { combopointsdeficit() <= 1 or fightremains() <= 1 and combopoints() >= 3 or buffpresent(symbols_of_death_autocrit) and combopoints() >= 4 } and subtletyfinishmainpostconditions() + unless { combopointsdeficit() <= 1 or fightremains() <= 1 and effective_combo_points() >= 3 or buffpresent(symbols_of_death_autocrit) and effective_combo_points() >= 4 } and subtletyfinishmainpostconditions() { - #call_action_list,name=finish,if=spell_targets.shuriken_storm>=4&effective_combo_points>=4 - if enemies(tagged=1) >= 4 and combopoints() >= 4 subtletyfinishmainactions() + #call_action_list,name=finish,if=spell_targets.shuriken_storm>=4&variable.effective_combo_points>=4 + if enemies(tagged=1) >= 4 and effective_combo_points() >= 4 subtletyfinishmainactions() - unless enemies(tagged=1) >= 4 and combopoints() >= 4 and subtletyfinishmainpostconditions() + unless enemies(tagged=1) >= 4 and effective_combo_points() >= 4 and subtletyfinishmainpostconditions() { #call_action_list,name=build,if=energy.deficit<=variable.stealth_threshold if energydeficit() <= stealth_threshold() subtletybuildmainactions() @@ -1799,7 +1807,7 @@ AddFunction subtlety_defaultmainactions AddFunction subtlety_defaultmainpostconditions { - subtletycdsmainpostconditions() or buffpresent(stealthed_buff) and subtletystealthedmainpostconditions() or use_priority_rotation() and subtletystealth_cdsmainpostconditions() or energydeficit() <= stealth_threshold() and subtletystealth_cdsmainpostconditions() or combopoints() >= maxcombopoints() and subtletyfinishmainpostconditions() or { combopointsdeficit() <= 1 or fightremains() <= 1 and combopoints() >= 3 or buffpresent(symbols_of_death_autocrit) and combopoints() >= 4 } and subtletyfinishmainpostconditions() or enemies(tagged=1) >= 4 and combopoints() >= 4 and subtletyfinishmainpostconditions() or energydeficit() <= stealth_threshold() and subtletybuildmainpostconditions() + subtletycdsmainpostconditions() or buffpresent(stealthed_buff) and subtletystealthedmainpostconditions() or use_priority_rotation() and subtletystealth_cdsmainpostconditions() or energydeficit() <= stealth_threshold() and subtletystealth_cdsmainpostconditions() or effective_combo_points() >= maxcombopoints() and subtletyfinishmainpostconditions() or { combopointsdeficit() <= 1 or fightremains() <= 1 and effective_combo_points() >= 3 or buffpresent(symbols_of_death_autocrit) and effective_combo_points() >= 4 } and subtletyfinishmainpostconditions() or enemies(tagged=1) >= 4 and effective_combo_points() >= 4 and subtletyfinishmainpostconditions() or energydeficit() <= stealth_threshold() and subtletybuildmainpostconditions() } AddFunction subtlety_defaultshortcdactions @@ -1807,6 +1815,8 @@ AddFunction subtlety_defaultshortcdactions unless spell(stealth) { #variable,name=snd_condition,value=buff.slice_and_dice.up|spell_targets.shuriken_storm>=6 + #variable,name=effective_combo_points,value=effective_combo_points + #variable,name=effective_combo_points,if=covenant.kyrian&effective_combo_points>combo_points&combo_points.deficit>2&time_to_sht.4.plus<0.5&!(combo_points=2&buff.echoing_reprimand_3.up|combo_points=3&buff.echoing_reprimand_4.up|combo_points=4&buff.echoing_reprimand_5.up),value=combo_points #call_action_list,name=cds subtletycdsshortcdactions() @@ -1829,20 +1839,20 @@ AddFunction subtlety_defaultshortcdactions unless energydeficit() <= stealth_threshold() and subtletystealth_cdsshortcdpostconditions() { - #call_action_list,name=finish,if=effective_combo_points>=cp_max_spend - if combopoints() >= maxcombopoints() subtletyfinishshortcdactions() + #call_action_list,name=finish,if=variable.effective_combo_points>=cp_max_spend + if effective_combo_points() >= maxcombopoints() subtletyfinishshortcdactions() - unless combopoints() >= maxcombopoints() and subtletyfinishshortcdpostconditions() + unless effective_combo_points() >= maxcombopoints() and subtletyfinishshortcdpostconditions() { - #call_action_list,name=finish,if=combo_points.deficit<=1|fight_remains<=1&effective_combo_points>=3|buff.symbols_of_death_autocrit.up&effective_combo_points>=4 - if combopointsdeficit() <= 1 or fightremains() <= 1 and combopoints() >= 3 or buffpresent(symbols_of_death_autocrit) and combopoints() >= 4 subtletyfinishshortcdactions() + #call_action_list,name=finish,if=combo_points.deficit<=1|fight_remains<=1&variable.effective_combo_points>=3|buff.symbols_of_death_autocrit.up&variable.effective_combo_points>=4 + if combopointsdeficit() <= 1 or fightremains() <= 1 and effective_combo_points() >= 3 or buffpresent(symbols_of_death_autocrit) and effective_combo_points() >= 4 subtletyfinishshortcdactions() - unless { combopointsdeficit() <= 1 or fightremains() <= 1 and combopoints() >= 3 or buffpresent(symbols_of_death_autocrit) and combopoints() >= 4 } and subtletyfinishshortcdpostconditions() + unless { combopointsdeficit() <= 1 or fightremains() <= 1 and effective_combo_points() >= 3 or buffpresent(symbols_of_death_autocrit) and effective_combo_points() >= 4 } and subtletyfinishshortcdpostconditions() { - #call_action_list,name=finish,if=spell_targets.shuriken_storm>=4&effective_combo_points>=4 - if enemies(tagged=1) >= 4 and combopoints() >= 4 subtletyfinishshortcdactions() + #call_action_list,name=finish,if=spell_targets.shuriken_storm>=4&variable.effective_combo_points>=4 + if enemies(tagged=1) >= 4 and effective_combo_points() >= 4 subtletyfinishshortcdactions() - unless enemies(tagged=1) >= 4 and combopoints() >= 4 and subtletyfinishshortcdpostconditions() + unless enemies(tagged=1) >= 4 and effective_combo_points() >= 4 and subtletyfinishshortcdpostconditions() { #call_action_list,name=build,if=energy.deficit<=variable.stealth_threshold if energydeficit() <= stealth_threshold() subtletybuildshortcdactions() @@ -1864,7 +1874,7 @@ AddFunction subtlety_defaultshortcdactions AddFunction subtlety_defaultshortcdpostconditions { - spell(stealth) or subtletycdsshortcdpostconditions() or buffpresent(stealthed_buff) and subtletystealthedshortcdpostconditions() or enemies(tagged=1) < 6 and fightremains() > 6 and buffremaining(slice_and_dice) < gcd() and combopoints() >= 4 - { timeincombat() < 10 } * 2 and spell(slice_and_dice) or use_priority_rotation() and subtletystealth_cdsshortcdpostconditions() or energydeficit() <= stealth_threshold() and subtletystealth_cdsshortcdpostconditions() or combopoints() >= maxcombopoints() and subtletyfinishshortcdpostconditions() or { combopointsdeficit() <= 1 or fightremains() <= 1 and combopoints() >= 3 or buffpresent(symbols_of_death_autocrit) and combopoints() >= 4 } and subtletyfinishshortcdpostconditions() or enemies(tagged=1) >= 4 and combopoints() >= 4 and subtletyfinishshortcdpostconditions() or energydeficit() <= stealth_threshold() and subtletybuildshortcdpostconditions() + spell(stealth) or subtletycdsshortcdpostconditions() or buffpresent(stealthed_buff) and subtletystealthedshortcdpostconditions() or enemies(tagged=1) < 6 and fightremains() > 6 and buffremaining(slice_and_dice) < gcd() and combopoints() >= 4 - { timeincombat() < 10 } * 2 and spell(slice_and_dice) or use_priority_rotation() and subtletystealth_cdsshortcdpostconditions() or energydeficit() <= stealth_threshold() and subtletystealth_cdsshortcdpostconditions() or effective_combo_points() >= maxcombopoints() and subtletyfinishshortcdpostconditions() or { combopointsdeficit() <= 1 or fightremains() <= 1 and effective_combo_points() >= 3 or buffpresent(symbols_of_death_autocrit) and effective_combo_points() >= 4 } and subtletyfinishshortcdpostconditions() or enemies(tagged=1) >= 4 and effective_combo_points() >= 4 and subtletyfinishshortcdpostconditions() or energydeficit() <= stealth_threshold() and subtletybuildshortcdpostconditions() } AddFunction subtlety_defaultcdactions @@ -1874,6 +1884,8 @@ AddFunction subtlety_defaultcdactions #kick subtletyinterruptactions() #variable,name=snd_condition,value=buff.slice_and_dice.up|spell_targets.shuriken_storm>=6 + #variable,name=effective_combo_points,value=effective_combo_points + #variable,name=effective_combo_points,if=covenant.kyrian&effective_combo_points>combo_points&combo_points.deficit>2&time_to_sht.4.plus<0.5&!(combo_points=2&buff.echoing_reprimand_3.up|combo_points=3&buff.echoing_reprimand_4.up|combo_points=4&buff.echoing_reprimand_5.up),value=combo_points #call_action_list,name=cds subtletycdscdactions() @@ -1896,20 +1908,20 @@ AddFunction subtlety_defaultcdactions unless energydeficit() <= stealth_threshold() and subtletystealth_cdscdpostconditions() { - #call_action_list,name=finish,if=effective_combo_points>=cp_max_spend - if combopoints() >= maxcombopoints() subtletyfinishcdactions() + #call_action_list,name=finish,if=variable.effective_combo_points>=cp_max_spend + if effective_combo_points() >= maxcombopoints() subtletyfinishcdactions() - unless combopoints() >= maxcombopoints() and subtletyfinishcdpostconditions() + unless effective_combo_points() >= maxcombopoints() and subtletyfinishcdpostconditions() { - #call_action_list,name=finish,if=combo_points.deficit<=1|fight_remains<=1&effective_combo_points>=3|buff.symbols_of_death_autocrit.up&effective_combo_points>=4 - if combopointsdeficit() <= 1 or fightremains() <= 1 and combopoints() >= 3 or buffpresent(symbols_of_death_autocrit) and combopoints() >= 4 subtletyfinishcdactions() + #call_action_list,name=finish,if=combo_points.deficit<=1|fight_remains<=1&variable.effective_combo_points>=3|buff.symbols_of_death_autocrit.up&variable.effective_combo_points>=4 + if combopointsdeficit() <= 1 or fightremains() <= 1 and effective_combo_points() >= 3 or buffpresent(symbols_of_death_autocrit) and effective_combo_points() >= 4 subtletyfinishcdactions() - unless { combopointsdeficit() <= 1 or fightremains() <= 1 and combopoints() >= 3 or buffpresent(symbols_of_death_autocrit) and combopoints() >= 4 } and subtletyfinishcdpostconditions() + unless { combopointsdeficit() <= 1 or fightremains() <= 1 and effective_combo_points() >= 3 or buffpresent(symbols_of_death_autocrit) and effective_combo_points() >= 4 } and subtletyfinishcdpostconditions() { - #call_action_list,name=finish,if=spell_targets.shuriken_storm>=4&effective_combo_points>=4 - if enemies(tagged=1) >= 4 and combopoints() >= 4 subtletyfinishcdactions() + #call_action_list,name=finish,if=spell_targets.shuriken_storm>=4&variable.effective_combo_points>=4 + if enemies(tagged=1) >= 4 and effective_combo_points() >= 4 subtletyfinishcdactions() - unless enemies(tagged=1) >= 4 and combopoints() >= 4 and subtletyfinishcdpostconditions() + unless enemies(tagged=1) >= 4 and effective_combo_points() >= 4 and subtletyfinishcdpostconditions() { #call_action_list,name=build,if=energy.deficit<=variable.stealth_threshold if energydeficit() <= stealth_threshold() subtletybuildcdactions() @@ -1935,7 +1947,7 @@ AddFunction subtlety_defaultcdactions AddFunction subtlety_defaultcdpostconditions { - spell(stealth) or subtletycdscdpostconditions() or buffpresent(stealthed_buff) and subtletystealthedcdpostconditions() or enemies(tagged=1) < 6 and fightremains() > 6 and buffremaining(slice_and_dice) < gcd() and combopoints() >= 4 - { timeincombat() < 10 } * 2 and spell(slice_and_dice) or use_priority_rotation() and subtletystealth_cdscdpostconditions() or energydeficit() <= stealth_threshold() and subtletystealth_cdscdpostconditions() or combopoints() >= maxcombopoints() and subtletyfinishcdpostconditions() or { combopointsdeficit() <= 1 or fightremains() <= 1 and combopoints() >= 3 or buffpresent(symbols_of_death_autocrit) and combopoints() >= 4 } and subtletyfinishcdpostconditions() or enemies(tagged=1) >= 4 and combopoints() >= 4 and subtletyfinishcdpostconditions() or energydeficit() <= stealth_threshold() and subtletybuildcdpostconditions() or spell(bag_of_tricks) + spell(stealth) or subtletycdscdpostconditions() or buffpresent(stealthed_buff) and subtletystealthedcdpostconditions() or enemies(tagged=1) < 6 and fightremains() > 6 and buffremaining(slice_and_dice) < gcd() and combopoints() >= 4 - { timeincombat() < 10 } * 2 and spell(slice_and_dice) or use_priority_rotation() and subtletystealth_cdscdpostconditions() or energydeficit() <= stealth_threshold() and subtletystealth_cdscdpostconditions() or effective_combo_points() >= maxcombopoints() and subtletyfinishcdpostconditions() or { combopointsdeficit() <= 1 or fightremains() <= 1 and effective_combo_points() >= 3 or buffpresent(symbols_of_death_autocrit) and effective_combo_points() >= 4 } and subtletyfinishcdpostconditions() or enemies(tagged=1) >= 4 and effective_combo_points() >= 4 and subtletyfinishcdpostconditions() or energydeficit() <= stealth_threshold() and subtletybuildcdpostconditions() or spell(bag_of_tricks) } ### Subtlety icons. @@ -1997,6 +2009,9 @@ AddIcon enabled=(checkboxon(opt_rogue_subtlety_aoe) and specialization(subtlety) # deathly_shadows_runeforge # deeper_stratagem_talent # echoing_reprimand +# echoing_reprimand_3_buff +# echoing_reprimand_4_buff +# echoing_reprimand_5_buff # enveloping_shadows_talent # eviscerate # find_weakness_debuff diff --git a/src/scripts/ovale_rogue_spells.ts b/src/scripts/ovale_rogue_spells.ts index c7c99509b..b6f7485ea 100644 --- a/src/scripts/ovale_rogue_spells.ts +++ b/src/scripts/ovale_rogue_spells.ts @@ -45,7 +45,7 @@ Define(between_the_eyes 315341) # s2 increased chance to be critically struck by @auracaster. SpellAddTargetDebuff(between_the_eyes between_the_eyes add=1) Define(black_powder 319175) -# Finishing move that launches explosive Black Powder at up to s4 nearby targets dealing Physical damage.?s319178[ All nearby targets with your Find Weakness suffer an additional 319178s1 damage as Shadow.][]rnrn 1 point : m1*1 damagern 2 points: m1*2 damagern 3 points: m1*3 damagern 4 points: m1*4 damagern 5 points: m1*5 damage?s193531[rn 6 points: m1*6 damage][]rn +# Finishing move that launches explosive Black Powder at all nearby enemies dealing Physical damage. Deals reduced damage beyond s4 targets.?s319178[ All nearby targets with your Find Weakness suffer an additional 319178s1 damage as Shadow.][]rnrn 1 point : m1*1 damagern 2 points: m1*2 damagern 3 points: m1*3 damagern 4 points: m1*4 damagern 5 points: m1*5 damage?s193531[rn 6 points: m1*6 damage][]rn SpellInfo(black_powder energy=35 combopoints=1 max_combopoints=4 gcd=1) Define(blade_flurry 13877) # ?s331851[Strikes up to nearby 331850i targets for 331850s1 Physical damage, and causes][Causes] your single target attacks to also strike up to s3 nearby enemies for s2 of normal damage for 12 seconds. @@ -92,7 +92,7 @@ Define(concealed_blunderbuss_buff 340587) # Your next Pistol Shot fires 340088s2 additional times. SpellAddBuff(concealed_blunderbuss_buff concealed_blunderbuss_buff add=1) Define(crimson_tempest 121411) -# Finishing move that slashes at up to s3 enemies within A1 yards, dealing instant damage and causing victims to bleed for additional damage. Lasts longer per combo point.rnrn 1 point : s2*2 plus o1*2 over 4 secrn 2 points: s2*3 plus o1*3 over 6 secrn 3 points: s2*4 plus o1*4 over 8 secrn 4 points: s2*5 plus o1*5 over 10 secrn 5 points: s2*6 plus o1*6 over 12 sec?s193531[rn 6 points: s2*7 plus o1*7 over 14 sec][] +# Finishing move that slashes all enemies within A1 yards, dealing instant damage and causing victims to bleed for additional damage. Deals reduced damage beyond s3 targets. Lasts longer per combo point.rnrn 1 point : s2*2 plus o1*2 over 4 secrn 2 points: s2*3 plus o1*3 over 6 secrn 3 points: s2*4 plus o1*4 over 8 secrn 4 points: s2*5 plus o1*5 over 10 secrn 5 points: s2*6 plus o1*6 over 12 sec?s193531[rn 6 points: s2*7 plus o1*7 over 14 sec][] SpellInfo(crimson_tempest energy=35 combopoints=1 max_combopoints=4 duration=2 gcd=1 tick=2) SpellRequire(crimson_tempest unusable set=1 enabled=(not hastalent(crimson_tempest_talent))) # Bleeding for w1 damage every t1 sec. @@ -114,14 +114,29 @@ Define(dispatch 2098) # Finishing move that dispatches the enemy, dealing damage per combo point:rn 1 point : m1*1 damagern 2 points: m1*2 damagern 3 points: m1*3 damagern 4 points: m1*4 damagern 5 points: m1*5 damage?s193531[rn 6 points: m1*6 damage][] SpellInfo(dispatch energy=35 combopoints=1 max_combopoints=4 gcd=1) Define(dreadblades 343142) -# Strike at an enemy, dealing s1 Physical damage and empowering your weapons for 10 seconds, causing your Sinister Strike,?s196937[ Ghostly Strike,][]?s328305[ Sepsis,][]?s323547[ Echoing Reprimand,][]?s328547[ Serrated Bone Spike,][] Ambush, and Pistol Shot to fill your combo points, but your finishing moves consume 343145s1 of your current health. - SpellInfo(dreadblades energy=30 cd=90 duration=10 gcd=1) +# Strike at an enemy, dealing s1 Physical damage, filling your combo points, and empowering your weapons for 10 seconds, causing your Sinister Strike,?s196937[ Ghostly Strike,][]?s328305[ Sepsis,][]?s323547[ Echoing Reprimand,][]?s328547[ Serrated Bone Spike,][] Ambush, and Pistol Shot to fill your combo points, but your finishing moves consume 343145s1 of your current health. + SpellInfo(dreadblades energy=30 cd=90 duration=10 gcd=1 combopoints=-10) SpellRequire(dreadblades unusable set=1 enabled=(not hastalent(dreadblades_talent))) # Sinister Strike, ?s196937[Ghostly Strike, ][]Ambush, and Pistol Shot will refill all of your combo points when used. SpellAddBuff(dreadblades dreadblades add=1) Define(echoing_reprimand 323547) # Deal s1 Arcane damage to an enemy, extracting their anima to Animacharge a combo point for 45 seconds.rnrnDamaging finishing moves that consume the same number of combo points as your Animacharge function as if they consumed s2 combo points.rnrn|cFFFFFFFFAwards s3 combo lpoint:points;.|rrn SpellInfo(echoing_reprimand energy=0 cd=45 gcd=1 combopoints=-2) +Define(echoing_reprimand_3_buff 323559) +# Deal s1 Arcane damage to an enemy, extracting their anima to Animacharge a combo point for 45 seconds.rnrnDamaging finishing moves that consume the same number of combo points as your Animacharge function as if they consumed s2 combo points.rnrn|cFFFFFFFFAwards s3 combo lpoint:points;.|rrn + SpellInfo(echoing_reprimand_3_buff duration=45 max_stacks=3 gcd=0 offgcd=1) + # Rogue's third combo point is Animacharged. rnrnDamaging finishing moves using exactly 3 combo points deal damage as if 7 combo points are consumed. + SpellAddBuff(echoing_reprimand_3_buff echoing_reprimand_3_buff add=1) +Define(echoing_reprimand_4_buff 323560) +# Deal s1 Arcane damage to an enemy, extracting their anima to Animacharge a combo point for 45 seconds.rnrnDamaging finishing moves that consume the same number of combo points as your Animacharge function as if they consumed s2 combo points.rnrn|cFFFFFFFFAwards s3 combo lpoint:points;.|rrn + SpellInfo(echoing_reprimand_4_buff duration=45 max_stacks=4 gcd=0 offgcd=1) + # Rogue's fourth combo point is Animacharged. rnrnDamaging finishing moves using exactly 4 combo points deal damage as if 7 combo points are consumed. + SpellAddBuff(echoing_reprimand_4_buff echoing_reprimand_4_buff add=1) +Define(echoing_reprimand_5_buff 354838) +# Deal s1 Arcane damage to an enemy, extracting their anima to Animacharge a combo point for 45 seconds.rnrnDamaging finishing moves that consume the same number of combo points as your Animacharge function as if they consumed s2 combo points.rnrn|cFFFFFFFFAwards s3 combo lpoint:points;.|rrn + SpellInfo(echoing_reprimand_5_buff duration=45 max_stacks=5 gcd=0 offgcd=1) + # Rogue's fifth combo point is Animacharged. rnrnDamaging finishing moves using exactly 5 combo points deal damage as if 7 combo points are consumed. + SpellAddBuff(echoing_reprimand_5_buff echoing_reprimand_5_buff add=1) Define(envenom 32645) # Finishing move that drives your poisoned blades in deep, dealing instant Nature damage and increasing your poison application chance by s2. Damage and duration increased per combo point.rnrn 1 point : m1*1 damage, 2 secrn 2 points: m1*2 damage, 3 secrn 3 points: m1*3 damage, 4 secrn 4 points: m1*4 damage, 5 secrn 5 points: m1*5 damage, 6 sec?s193531[rn 6 points: m1*6 damage, 7 sec][] SpellInfo(envenom energy=35 combopoints=1 max_combopoints=4 duration=1 gcd=1 tick=5) @@ -137,7 +152,7 @@ Define(exsanguinate 200806) SpellInfo(exsanguinate energy=25 cd=45 gcd=1) SpellRequire(exsanguinate unusable set=1 enabled=(not hastalent(exsanguinate_talent))) Define(fan_of_knives 51723) -# Sprays knives at up to s3 targets within A1 yards, dealing s1 Physical damage and applying your active poisons at their normal rate.rnrn|cFFFFFFFFAwards s2 combo lpoint:points;.|r +# Sprays knives at all enemies within A1 yards, dealing s1 Physical damage and applying your active poisons at their normal rate. Deals reduced damage beyond s3 targets.rnrn|cFFFFFFFFAwards s2 combo lpoint:points;.|r SpellInfo(fan_of_knives energy=35 gcd=1) Define(find_weakness_debuff 316220) # Your Shadowstrike and Cheap Shot reveal a flaw in your target's defenses, causing all your attacks to bypass 91021s1 of that enemy's armor for 10 seconds. @@ -282,7 +297,7 @@ Define(rupture 1943) # Bleeding for w1 damage every t1 sec. SpellAddTargetDebuff(rupture rupture add=1) Define(secret_technique 280719) -# Finishing move that creates shadow clones of yourself. You and your shadow clones each perform a piercing attack on up to s6 enemies near your target, dealing Physical damage to the primary target and reduced damage to other targets.rn 1 point : 280720m1*1* total damagern 2 points: 280720m1*2* total damagern 3 points: 280720m1*3* total damagern 4 points: 280720m1*4* total damagern 5 points: 280720m1*5* total damage?s193531[rn 6 points: 280720m1*6* total damage][]rnrnCooldown is reduced by s5 sec for every combo point you spend. +# Finishing move that creates shadow clones of yourself. You and your shadow clones each perform a piercing attack on all enemies near your target, dealing Physical damage to the primary target and reduced damage to other targets.rn 1 point : 280720m1*1* total damagern 2 points: 280720m1*2* total damagern 3 points: 280720m1*3* total damagern 4 points: 280720m1*4* total damagern 5 points: 280720m1*5* total damage?s193531[rn 6 points: 280720m1*6* total damage][]rnrnCooldown is reduced by s5 sec for every combo point you spend. SpellInfo(secret_technique energy=30 combopoints=1 max_combopoints=4 cd=45 gcd=1) SpellRequire(secret_technique unusable set=1 enabled=(not hastalent(secret_technique_talent))) Define(sepsis 328305) @@ -338,7 +353,7 @@ Define(shot_in_the_dark_buff 257506) # Your next Cheap Shot is free. SpellAddBuff(shot_in_the_dark_buff shot_in_the_dark_buff add=1) Define(shuriken_storm 197835) -# Sprays shurikens at up to s4 targets within A1 yards, dealing s1*/AP Physical damage.?s319951[rnrnCritical strikes with Shuriken Storm apply Find Weakness for 319949s1 sec.][]rnrn|cFFFFFFFFAwards s2 combo lpoint:points; per target hit?a121471[ plus an additional 121471s2][].|r +# Sprays shurikens at all enemies within A1 yards, dealing s1*/AP Physical damage. Deals reduced damage beyond s4 targets.?s319951[rnrnCritical strikes with Shuriken Storm apply Find Weakness for 319949s1 sec.][]rnrn|cFFFFFFFFAwards s2 combo lpoint:points; per target hit?a121471[ plus an additional 121471s2][].|r SpellInfo(shuriken_storm energy=35 gcd=1) Define(shuriken_tornado 277925) # Focus intently, then release a Shuriken Storm every sec for the next 4 seconds. @@ -409,7 +424,7 @@ Define(alacrity_talent 19249) Define(blade_rush_talent 23075) # Charge to your target with your blades out, dealing 271881sw1*271881s2/100 Physical damage to the target and 271881sw1 to all other nearby enemies.rnrnWhile Blade Flurry is active, damage to non-primary targets is increased by s1.rnrn|cFFFFFFFFGenerates 271896s1*5 seconds/271896t1 Energy over 5 seconds. Define(crimson_tempest_talent 23174) -# Finishing move that slashes at up to s3 enemies within A1 yards, dealing instant damage and causing victims to bleed for additional damage. Lasts longer per combo point.rnrn 1 point : s2*2 plus o1*2 over 4 secrn 2 points: s2*3 plus o1*3 over 6 secrn 3 points: s2*4 plus o1*4 over 8 secrn 4 points: s2*5 plus o1*5 over 10 secrn 5 points: s2*6 plus o1*6 over 12 sec?s193531[rn 6 points: s2*7 plus o1*7 over 14 sec][] +# Finishing move that slashes all enemies within A1 yards, dealing instant damage and causing victims to bleed for additional damage. Deals reduced damage beyond s3 targets. Lasts longer per combo point.rnrn 1 point : s2*2 plus o1*2 over 4 secrn 2 points: s2*3 plus o1*3 over 6 secrn 3 points: s2*4 plus o1*4 over 8 secrn 4 points: s2*5 plus o1*5 over 10 secrn 5 points: s2*6 plus o1*6 over 12 sec?s193531[rn 6 points: s2*7 plus o1*7 over 14 sec][] Define(dark_shadow_talent 22335) # Shadow Dance now increases damage by s1+15. Define(deeper_stratagem_talent 19240) @@ -417,7 +432,7 @@ Define(deeper_stratagem_talent 19240) Define(dirty_tricks_talent 23077) # Cheap Shot, Gouge, ?s207777[Sap, and Dismantle][and Sap] no longer cost Energy. Define(dreadblades_talent 19250) -# Strike at an enemy, dealing s1 Physical damage and empowering your weapons for 10 seconds, causing your Sinister Strike,?s196937[ Ghostly Strike,][]?s328305[ Sepsis,][]?s323547[ Echoing Reprimand,][]?s328547[ Serrated Bone Spike,][] Ambush, and Pistol Shot to fill your combo points, but your finishing moves consume 343145s1 of your current health. +# Strike at an enemy, dealing s1 Physical damage, filling your combo points, and empowering your weapons for 10 seconds, causing your Sinister Strike,?s196937[ Ghostly Strike,][]?s328305[ Sepsis,][]?s323547[ Echoing Reprimand,][]?s328547[ Serrated Bone Spike,][] Ambush, and Pistol Shot to fill your combo points, but your finishing moves consume 343145s1 of your current health. Define(enveloping_shadows_talent 22336) # Deepening Shadows reduces the remaining cooldown of Shadow Dance by an additional @switch[s1/10][s1/10.1] sec per combo point spent.rnrnShadow Dance gains s2 additional charge. Define(exsanguinate_talent 22344) @@ -441,7 +456,7 @@ Define(premeditation_talent 19234) Define(quick_draw_talent 22119) # Half-cost uses of Pistol Shot granted by Sinister Strike now generate (25 of Spell Power) additional combo point, and deal s1 additional damage. Define(secret_technique_talent 23183) -# Finishing move that creates shadow clones of yourself. You and your shadow clones each perform a piercing attack on up to s6 enemies near your target, dealing Physical damage to the primary target and reduced damage to other targets.rn 1 point : 280720m1*1* total damagern 2 points: 280720m1*2* total damagern 3 points: 280720m1*3* total damagern 4 points: 280720m1*4* total damagern 5 points: 280720m1*5* total damage?s193531[rn 6 points: 280720m1*6* total damage][]rnrnCooldown is reduced by s5 sec for every combo point you spend. +# Finishing move that creates shadow clones of yourself. You and your shadow clones each perform a piercing attack on all enemies near your target, dealing Physical damage to the primary target and reduced damage to other targets.rn 1 point : 280720m1*1* total damagern 2 points: 280720m1*2* total damagern 3 points: 280720m1*3* total damagern 4 points: 280720m1*4* total damagern 5 points: 280720m1*5* total damage?s193531[rn 6 points: 280720m1*6* total damage][]rnrnCooldown is reduced by s5 sec for every combo point you spend. Define(shadow_focus_talent 22333) # ?c3[Abilities cost 112942m1 less Energy while Stealth or Shadow Dance is active.][Abilities cost 112942s1 less Energy while Stealth is active.] Define(shuriken_tornado_talent 21188) diff --git a/src/scripts/ovale_shaman_spells.ts b/src/scripts/ovale_shaman_spells.ts index 4cbe30958..b7a101f37 100644 --- a/src/scripts/ovale_shaman_spells.ts +++ b/src/scripts/ovale_shaman_spells.ts @@ -93,12 +93,12 @@ Define(elemental_equilibrium_buff 347348) # Damage dealt increased by s1. SpellAddBuff(elemental_equilibrium_buff elemental_equilibrium_buff add=1) Define(fae_transfusion 328923) -# Transfer the life force of up to 328928I enemies in the targeted area, dealing (117.5 of Spell Power)*3 seconds/t2 Nature damage evenly split to each enemy target over 3 seconds. ?a137041[rnrnFully channeling Fae Transfusion generates s4 Lstack:stacks; of Maelstrom Weapon.][]rnrnPressing Fae Transfusion again within 20 seconds will release s1 of all damage from Fae Transfusion, healing up to 328930s2 allies within 328930A1 yds. +# Transfer the life force of up to 328928I enemies in the targeted area, dealing ((117.5 of Spell Power)*3 seconds/t2) + (117.5 of Spell Power) Nature damage evenly split to each enemy target over 3 seconds. ?a137041[rnrnFully channeling Fae Transfusion generates s4 Lstack:stacks; of Maelstrom Weapon.][]rnrnPressing Fae Transfusion again within 20 seconds will release s1 of all damage from Fae Transfusion, healing up to 328930s2 allies within 328930A1 yds. SpellInfo(fae_transfusion cd=120 duration=3 channel=3 tick=0.5) # Fae Transfusion will heal up to 328930s2 nearby allies for w1. SpellAddBuff(fae_transfusion fae_transfusion_buff add=1) Define(fae_transfusion_buff 328933) -# Transfer the life force of up to 328928I enemies in the targeted area, dealing (117.5 of Spell Power)*3 seconds/t2 Nature damage evenly split to each enemy target over 3 seconds. ?a137041[rnrnFully channeling Fae Transfusion generates s4 Lstack:stacks; of Maelstrom Weapon.][]rnrnPressing Fae Transfusion again within 20 seconds will release s1 of all damage from Fae Transfusion, healing up to 328930s2 allies within 328930A1 yds. +# Transfer the life force of up to 328928I enemies in the targeted area, dealing ((117.5 of Spell Power)*3 seconds/t2) + (117.5 of Spell Power) Nature damage evenly split to each enemy target over 3 seconds. ?a137041[rnrnFully channeling Fae Transfusion generates s4 Lstack:stacks; of Maelstrom Weapon.][]rnrnPressing Fae Transfusion again within 20 seconds will release s1 of all damage from Fae Transfusion, healing up to 328930s2 allies within 328930A1 yds. SpellInfo(fae_transfusion_buff duration=20 gcd=0 offgcd=1 tick=0.5) Define(feral_lunge 196884) # Lunge at your enemy as a ghostly wolf, biting them to deal 215802s1 Physical damage. diff --git a/src/scripts/ovale_warlock.ts b/src/scripts/ovale_warlock.ts index ae1ed150f..362a85455 100644 --- a/src/scripts/ovale_warlock.ts +++ b/src/scripts/ovale_warlock.ts @@ -1636,6 +1636,8 @@ AddFunction demonologyopenercdactions { unless soulbind(grove_invigoration_soulbind) and spell(soul_rot) { + #nether_portal + spell(nether_portal) #grimoire_felguard spell(grimoire_felguard) } @@ -2408,6 +2410,8 @@ AddFunction demonologyopenercdactions { unless soulbind(grove_invigoration_soulbind) and spell(soul_rot) { + #nether_portal + spell(nether_portal) #grimoire_felguard spell(grimoire_felguard) } diff --git a/src/scripts/ovale_warlock_spells.ts b/src/scripts/ovale_warlock_spells.ts index 4fab38fc0..cd6e69c6c 100644 --- a/src/scripts/ovale_warlock_spells.ts +++ b/src/scripts/ovale_warlock_spells.ts @@ -202,7 +202,7 @@ Define(malefic_wrath_buff 337125) SpellInfo(malefic_wrath_buff duration=10 max_stacks=3 gcd=0 offgcd=1) Define(nether_portal 267217) # Tear open a portal to the Twisting Nether for 15 seconds. Every time you spend Soul Shards, you will also command demons from the Nether to come out and fight for you. - SpellInfo(nether_portal soulshards=1 cd=180 duration=15) + SpellInfo(nether_portal soulshards=1 cd=150 duration=15) SpellRequire(nether_portal unusable set=1 enabled=(not hastalent(nether_portal_talent))) Define(phantom_singularity 205179) # Places a phantom singularity above the target, which consumes the life of all enemies within 205246A2 yards, dealing 8*(22.5 of Spell Power) damage over 16 seconds, healing you for 205246e2*100 of the damage done. @@ -220,7 +220,7 @@ Define(rain_of_fire 5740) # 42223s1 Fire damage every 5740t2 sec. SpellAddBuff(rain_of_fire rain_of_fire add=1) Define(scouring_tithe 312321) -# Deal (54 of Spell Power) Arcane damage instantly, and o2 over 18 seconds. If the enemy dies while affected by Scouring Tithe, you generate ?a137043[s3/10]?a137044[s4/10][s5/10] Soul LShard:Shards;. If they survive, Scouring Tithe's cooldown is refreshed. +# Deal (65 of Spell Power) Arcane damage instantly, and o2 over 18 seconds. If the enemy dies while affected by Scouring Tithe, you generate ?a137043[s3/10]?a137044[s4/10][s5/10] Soul LShard:Shards;. If they survive, Scouring Tithe's cooldown is refreshed. SpellInfo(scouring_tithe cd=40 duration=18 tick=3) # Suffering w2 Arcane damage every t2 sec. SpellAddTargetDebuff(scouring_tithe scouring_tithe add=1) @@ -302,7 +302,7 @@ Define(ultimate_form_buff 323524) # While channeling Fleshcraft, you are immune to crowd control and you regenerate 323524s17 health every 323524t17 sec. rnrnIf you finish the full channel, you gain 3 seconds of crowd control immunity, during which you regenerate 323524s17 health every 323524t17 sec. SpellInfo(ultimate_form_buff duration=3 gcd=0 offgcd=1 tick=1) Define(unstable_affliction 316099) -# Afflicts one target with o2 Shadow damage over 16 seconds. rnrnIf dispelled, deals m2*s1/100 damage to the dispeller and silences them for 4 seconds.rnrn|cFFFFFFFFGenerates 231791m1 Soul LShard:Shards; if the target dies while afflicted.|r +# Afflicts one target with o2 Shadow damage over 16 seconds. rnrnIf dispelled, deals m2*s1/100 damage to the dispeller and silences them for 4 seconds.?s231791[rnrn|cFFFFFFFFGenerates 231791m1 Soul LShard:Shards; if the target dies while afflicted.|r][] SpellInfo(unstable_affliction duration=16 max_stacks=1 tick=2) # Suffering w2 Shadow damage every t2 sec. If dispelled, will cause w2*s1/100 damage to the dispeller and silence them for 196364d. SpellAddTargetDebuff(unstable_affliction unstable_affliction add=1) diff --git a/src/scripts/ovale_warrior_spells.ts b/src/scripts/ovale_warrior_spells.ts index dea0854f0..05b7e95c6 100644 --- a/src/scripts/ovale_warrior_spells.ts +++ b/src/scripts/ovale_warrior_spells.ts @@ -36,13 +36,13 @@ Define(berserking 26297) # Haste increased by s1. SpellAddBuff(berserking berserking add=1) Define(bladestorm 46924) -# Become an unstoppable storm of destructive force, striking up to s1 nearby targets for Physical damage over 4 seconds.rnrnYou are immune to movement impairing and loss of control effects, but can use defensive abilities and avoid attacks.rnrn|cFFFFFFFFGenerates o4/10 Rage over the duration.|r +# Become an unstoppable storm of destructive force, striking all nearby enemies for Physical damage over 4 seconds. Deals reduced damage beyond s1 targets.rnrnYou are immune to movement impairing and loss of control effects, but can use defensive abilities and avoid attacks.rnrn|cFFFFFFFFGenerates o4/10 Rage over the duration.|r SpellInfo(bladestorm cd=60 duration=4 tick=1) SpellRequire(bladestorm unusable set=1 enabled=(not hastalent(bladestorm_talent))) # Dealing damage to all nearby enemies every t1 sec.rnImmune to crowd control. SpellAddBuff(bladestorm bladestorm add=1) Define(bladestorm_arms 227847) -# Become an unstoppable storm of destructive force, striking up to s1 nearby targets for (1+6 seconds)*50622s1 Physical damage over 6 seconds.rnrnYou are immune to movement impairing and loss of control effects, but can use defensive abilities and can avoid attacks. +# Become an unstoppable storm of destructive force, striking all nearby enemies for (1+6 seconds)*50622s1 Physical damage over 6 seconds. Deals reduced damage beyond s1 targets.rnrnYou are immune to movement impairing and loss of control effects, but can use defensive abilities and can avoid attacks. SpellInfo(bladestorm_arms cd=90 duration=6 tick=1) SpellRequire(bladestorm_arms replaced_by set=ravager enabled=(hastalent(ravager_talent))) # Dealing damage to all nearby enemies every t1 sec.rnImmune to crowd control. @@ -67,7 +67,7 @@ Define(charge 100) # Charge to an enemy, dealing 126664s2 Physical damage, rooting it for 1 second?s103828[, and stunning it for 7922d][].rnrn|cFFFFFFFFGenerates /10;s2 Rage.|r SpellInfo(charge cd=20 gcd=0 offgcd=1 rage=-10) Define(cleave 845) -# Strikes up to s2 enemies in front of you for s1 Physical damage, inflicting Deep Wounds. Cleave will consume your Overpower effect to deal increased damage. +# Strikes all enemies in front of you for s1 Physical damage, inflicting Deep Wounds. Cleave will consume your Overpower effect to deal increased damage. Deals reduced damage beyond s2 targets. SpellInfo(cleave rage=20 cd=6) SpellRequire(cleave unusable set=1 enabled=(not hastalent(cleave_talent))) Define(colossus_smash 167105) @@ -197,13 +197,13 @@ Define(rampage 184367) # ?s316412[Enrages you and unleashes][Unleashes] a series of s1 brutal strikes for a total of Physical damage. SpellInfo(rampage rage=80) Define(ravager 152277) -# Throws a whirling weapon at the target location that chases nearby enemies, inflicting Physical damage and applying Deep Wounds to up to 156287s2 enemies over 12 seconds.rnrn|cFFFFFFFFGenerates 248439s1/10 Rage each time it deals damage.|r +# Throws a whirling weapon at the target location that chases nearby enemies, inflicting Physical damage and applying Deep Wounds to all enemies over 12 seconds. Deals reduced damage beyond 156287s2 targets.rnrn|cFFFFFFFFGenerates 248439s1/10 Rage each time it deals damage.|r SpellInfo(ravager cd=45 duration=12 tick=2) SpellRequire(ravager unusable set=1 enabled=(not hastalent(ravager_talent))) # Ravager is currently active. SpellAddBuff(ravager ravager add=1) Define(ravager_protection 228920) -# Throws a whirling weapon at the target location that chases nearby enemies, inflicting Physical damage to up to 156287s2 enemies over 12 seconds.rnrn|cFFFFFFFFGenerates 334934s1/10 Rage each time it deals damage.|r +# Throws a whirling weapon at the target location that chases nearby enemies, inflicting Physical damage to all enemies over 12 seconds. Deals reduced damage beyond 156287s2 targets.rnrn|cFFFFFFFFGenerates 334934s1/10 Rage each time it deals damage.|r SpellInfo(ravager_protection cd=45 duration=12 tick=2) SpellRequire(ravager_protection unusable set=1 enabled=(not hastalent(ravager_talent_protection))) # Ravager is currently active. @@ -292,7 +292,7 @@ Define(warbreaker 262161) SpellInfo(warbreaker cd=45) SpellRequire(warbreaker unusable set=1 enabled=(not hastalent(warbreaker_talent))) Define(whirlwind 1680) -# Unleashes a whirlwind of steel, ?s202316[hitting your primary target with Slam and ][]striking up to s1 nearby targets for Physical damage. +# Unleashes a whirlwind of steel, ?s202316[hitting your primary target with Slam and ][]striking all nearby targets for Physical damage. Deals reduced damage beyond s1 targets. SpellInfo(whirlwind rage=30) SpellRequire(whirlwind replaced_by set=whirlwind_fury enabled=(specialization("fury"))) Define(whirlwind_buff 85739) @@ -301,7 +301,7 @@ Define(whirlwind_buff 85739) # Your next single-target attack strikes up to w1 additional targets for w3 damage. SpellAddBuff(whirlwind_buff whirlwind_buff add=1) Define(whirlwind_fury 190411) -# Unleashes a whirlwind of steel, striking up to s3 nearby enemies for Physical damage.?s12950[rnrnCauses your next 85739u single-target melee lattack:attacks; to strike up to 85739s1 additional targets for 85739s3 damage.][]?s316435[rnrn|cFFFFFFFFGenerates s1 Rage, plus an additional s2 per target hit.|r][] +# Unleashes a whirlwind of steel, striking all nearby enemies for Physical damage. Deals reduced damage beyond s3 targets.?s12950[rnrnCauses your next 85739u single-target melee lattack:attacks; to strike up to 85739s1 additional targets for 85739s3 damage.][]?s316435[rnrn|cFFFFFFFFGenerates s1 Rage, plus an additional s2 per target hit.|r][] SpellInfo(whirlwind_fury rage=30) Define(will_of_the_berserker_buff 335597) # When Recklessness expires, your Critical Strike is increased by 335597s1 for 12 seconds. Your Raging Blow will refresh the duration of this effect. @@ -313,11 +313,11 @@ Define(anger_management_talent_fury 22405) Define(avatar_talent 22397) # Transform into a colossus for 20 seconds, causing you to deal s1 increased damage and removing all roots and snares.rnrn|cFFFFFFFFGenerates s5/10 Rage.|r Define(bladestorm_talent 22400) -# Become an unstoppable storm of destructive force, striking up to s1 nearby targets for Physical damage over 4 seconds.rnrnYou are immune to movement impairing and loss of control effects, but can use defensive abilities and avoid attacks.rnrn|cFFFFFFFFGenerates o4/10 Rage over the duration.|r +# Become an unstoppable storm of destructive force, striking all nearby enemies for Physical damage over 4 seconds. Deals reduced damage beyond s1 targets.rnrnYou are immune to movement impairing and loss of control effects, but can use defensive abilities and avoid attacks.rnrn|cFFFFFFFFGenerates o4/10 Rage over the duration.|r Define(booming_voice_talent 22626) # Demoralizing Shout also generates m1/10 Rage, and increases damage you deal to affected targets by s2. Define(cleave_talent 22362) -# Strikes up to s2 enemies in front of you for s1 Physical damage, inflicting Deep Wounds. Cleave will consume your Overpower effect to deal increased damage. +# Strikes all enemies in front of you for s1 Physical damage, inflicting Deep Wounds. Cleave will consume your Overpower effect to deal increased damage. Deals reduced damage beyond s2 targets. Define(cruelty_talent 19140) # While Enraged, Raging Blow deals s1 more damage and has a s2 chance to instantly reset its own cooldown. Define(deadly_calm_talent 22399) @@ -329,7 +329,7 @@ Define(dragon_roar_talent_protection 23260) Define(dragon_roar_talent 22398) # Roar explosively, dealing s1 Physical damage to enemies within A1 yds. Deals reduced damage to secondary targets. Dragon Roar critically strikes for times normal damage.rnrn|cFFFFFFFFGenerates s2/10 Rage.|r Define(dreadnaught_talent 22407) -# Overpower has 1+s1 charges and causes a seismic wave, dealing 315961s1 damage to up to 315961s2 enemies in a 315961A1 yd line. +# Overpower has 1+s1 charges and causes a seismic wave, dealing 315961s1 damage to all enemies in a 315961A1 yd line. Deals reduced damage beyond 315961s2 targets. Define(fervor_of_battle_talent 22489) # Whirlwind also Slams your primary target. Define(massacre_talent 22379) @@ -339,9 +339,9 @@ Define(massacre_talent_arms 22380) Define(onslaught_talent 23372) # Brutally attack an enemy for s1 Physical damage. Requires Enrage.rnrn|cFFFFFFFFGenerates m2/10 Rage.|r Define(ravager_talent_protection 22401) -# Throws a whirling weapon at the target location that chases nearby enemies, inflicting Physical damage to up to 156287s2 enemies over 12 seconds.rnrn|cFFFFFFFFGenerates 334934s1/10 Rage each time it deals damage.|r +# Throws a whirling weapon at the target location that chases nearby enemies, inflicting Physical damage to all enemies over 12 seconds. Deals reduced damage beyond 156287s2 targets.rnrn|cFFFFFFFFGenerates 334934s1/10 Rage each time it deals damage.|r Define(ravager_talent 21667) -# Throws a whirling weapon at the target location that chases nearby enemies, inflicting Physical damage and applying Deep Wounds to up to 156287s2 enemies over 12 seconds.rnrn|cFFFFFFFFGenerates 248439s1/10 Rage each time it deals damage.|r +# Throws a whirling weapon at the target location that chases nearby enemies, inflicting Physical damage and applying Deep Wounds to all enemies over 12 seconds. Deals reduced damage beyond 156287s2 targets.rnrn|cFFFFFFFFGenerates 248439s1/10 Rage each time it deals damage.|r Define(reckless_abandon_talent 22402) # Recklessness generates s1/10 Rage and greatly empowers Bloodthirst and Raging Blow. Define(rend_talent 19138) diff --git a/src/simulationcraft/definitions.ts b/src/simulationcraft/definitions.ts index 62e34bb15..aae90228d 100644 --- a/src/simulationcraft/definitions.ts +++ b/src/simulationcraft/definitions.ts @@ -873,6 +873,16 @@ export const miscOperands: LuaObj = { }, symbol: "runeforge", }, + ["rune_word"]: { + /* TODO implement rune_word.* (unique_gear_shadowlands.cpp) + * rune_word.. + * is blood, blood_link + * frost, winds_of_winter + * unholy, chaos_bane + * is enabled, disabled, rank + */ + code: "always(rune_word)", + }, ["runic_power"]: { name: "runicpower", modifiers: powerModifiers }, ["searing_touch"]: { modifiers: { @@ -944,6 +954,15 @@ export const miscOperands: LuaObj = { }, ["time"]: { name: "timeincombat" }, ["time_to_shard"]: { name: "timetoshard" }, + ["time_to_sht"]: { + /* TODO implement time_to_sht.{1,2,3,4,5}[.plus] (sc_rogue.cpp) + * Time to resource gain from Shadow Techniques, where first 3 + * auto-attacks by MH/OH have zero chance, 4th auto-attack has + * 50% chance, and 5th auto-attack has 100% chance to proc + * Shadow Techniques. + */ + code: "1", + }, }; export const runeOperands: LuaObj = { ["rune"]: "rune", diff --git a/src/tests/integration.spec.ts b/src/tests/integration.spec.ts index ddce74cf2..fdeaa6783 100644 --- a/src/tests/integration.spec.ts +++ b/src/tests/integration.spec.ts @@ -132,6 +132,8 @@ test("sc_t27_monk_windwalker_necrolord", () => integrationTest("sc_t27_monk_windwalker_necrolord")); test("sc_t27_monk_windwalker_night_fae", () => integrationTest("sc_t27_monk_windwalker_night_fae")); +test("sc_t27_monk_windwalker_venthyr", () => + integrationTest("sc_t27_monk_windwalker_venthyr")); test("sc_t27_paladin_holy", () => integrationTest("sc_t27_paladin_holy")); test("sc_t27_paladin_protection", () => integrationTest("sc_t27_paladin_protection")); diff --git a/src/utils/importsimc/export-data.ts b/src/utils/importsimc/export-data.ts index 2765ea1f4..2ce056f01 100644 --- a/src/utils/importsimc/export-data.ts +++ b/src/utils/importsimc/export-data.ts @@ -21,6 +21,9 @@ interface ConduitData { lines.push(`},`); } lines.push("};\n"); + lines.push("/* runeforgeBonusId[] = "); + lines.push(" * used by src/states/runeforge.ts"); + lines.push(" */"); lines.push("export const runeforgeBonusId: LuaArray = {"); for (const [id, runeforge] of dbc.runeforgeById.entries()) { lines.push(`[${runeforge.spell_id}]: ${id},`); diff --git a/src/utils/importsimc/fixes.ts b/src/utils/importsimc/fixes.ts index 2c6f9ecae..2e8e0824d 100644 --- a/src/utils/importsimc/fixes.ts +++ b/src/utils/importsimc/fixes.ts @@ -146,6 +146,10 @@ export function getFixes(spellData: ReturnType) { fixIdentifier("condemn_fury", 317485); fixIdentifier("corruption_affliction_debuff", 146739); fixIdentifier("devastator_passive", 236279); + fixIdentifier("echoing_reprimand_2_buff", 323558); + fixIdentifier("echoing_reprimand_3_buff", 323559); + fixIdentifier("echoing_reprimand_4_buff", 323560); + fixIdentifier("echoing_reprimand_5_buff", 354838); fixIdentifier("festering_wound_unholy_debuff", 194310); fixIdentifier("frenzy_pet_buff", 272790); fixIdentifier("kindred_empowerment_energize", 327139); diff --git a/src/utils/importsimc/types.ts b/src/utils/importsimc/types.ts index 2bd591067..826562d01 100644 --- a/src/utils/importsimc/types.ts +++ b/src/utils/importsimc/types.ts @@ -390,6 +390,7 @@ export interface Item { unk_1: number; unk_3: unknown; unk_4: number; + unk_5: number; } export interface ItemSparse {