diff --git a/.vscode/launch.json b/.vscode/launch.json index 12e9ac644..b41643adb 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,7 +10,7 @@ "name": "SimulationCraft", "program": "${workspaceFolder}/dist/src/utils/importsimc/index.js", "protocol": "inspector", - "args": ["../../simc/", "T26_Druid_Balance.simc"], + "args": ["../../simc/", "T26_Shaman_Enhancement.simc"], "outFiles": ["${workspaceFolder}/dist/**/*.js"] }, { diff --git a/src/scripts/ovale_deathknight.ts b/src/scripts/ovale_deathknight.ts index a6f0ce99f..cdd364486 100644 --- a/src/scripts/ovale_deathknight.ts +++ b/src/scripts/ovale_deathknight.ts @@ -218,6 +218,8 @@ AddFunction bloodcovenantscdpostconditions AddFunction blood_defaultmainactions { + #blood_fury,if=cooldown.dancing_rune_weapon.ready&(!cooldown.blooddrinker.ready|!talent.blooddrinker.enabled) + if spellcooldown(dancing_rune_weapon) <= 0 and { not spellcooldown(blooddrinker) <= 0 or not hastalent(blooddrinker_talent) } spell(blood_fury) #berserking spell(berserking) #blood_boil,if=charges>=2&(covenant.kyrian|buff.dancing_rune_weapon.up) @@ -244,7 +246,7 @@ AddFunction blood_defaultshortcdactions #auto_attack bloodgetinmeleerange() - unless spell(berserking) + unless spellcooldown(dancing_rune_weapon) <= 0 and { not spellcooldown(blooddrinker) <= 0 or not hastalent(blooddrinker_talent) } and spell(blood_fury) or spell(berserking) { #bag_of_tricks spell(bag_of_tricks) @@ -267,16 +269,14 @@ AddFunction blood_defaultshortcdactions AddFunction blood_defaultshortcdpostconditions { - spell(berserking) or charges(blood_boil) >= 2 and { iscovenant("kyrian") or buffpresent(dancing_rune_weapon_buff) } and spell(blood_boil) or fightremains() < 3 and spell(death_strike) or bloodcovenantsshortcdpostconditions() or bloodstandardshortcdpostconditions() + spellcooldown(dancing_rune_weapon) <= 0 and { not spellcooldown(blooddrinker) <= 0 or not hastalent(blooddrinker_talent) } and spell(blood_fury) or spell(berserking) or charges(blood_boil) >= 2 and { iscovenant("kyrian") or buffpresent(dancing_rune_weapon_buff) } and spell(blood_boil) or fightremains() < 3 and spell(death_strike) or bloodcovenantsshortcdpostconditions() or bloodstandardshortcdpostconditions() } AddFunction blood_defaultcdactions { bloodinterruptactions() - #blood_fury,if=cooldown.dancing_rune_weapon.ready&(!cooldown.blooddrinker.ready|!talent.blooddrinker.enabled) - if spellcooldown(dancing_rune_weapon) <= 0 and { not spellcooldown(blooddrinker) <= 0 or not hastalent(blooddrinker_talent) } spell(blood_fury) - unless spell(berserking) + unless spellcooldown(dancing_rune_weapon) <= 0 and { not spellcooldown(blooddrinker) <= 0 or not hastalent(blooddrinker_talent) } and spell(blood_fury) or spell(berserking) { #arcane_pulse,if=active_enemies>=2|rune<1&runic_power.deficit>60 if enemies() >= 2 or runecount() < 1 and runicpowerdeficit() > 60 spell(arcane_pulse) @@ -319,7 +319,7 @@ AddFunction blood_defaultcdactions AddFunction blood_defaultcdpostconditions { - spell(berserking) or spell(bag_of_tricks) or not buffpresent(dancing_rune_weapon_buff) and { not iscovenant("night_fae") or buffremaining(deaths_due_buff) > 7 } and spell(blooddrinker) or charges(blood_boil) >= 2 and { iscovenant("kyrian") or buffpresent(dancing_rune_weapon_buff) } and spell(blood_boil) or fightremains() < 3 and spell(death_strike) or bloodcovenantscdpostconditions() or bloodstandardcdpostconditions() + spellcooldown(dancing_rune_weapon) <= 0 and { not spellcooldown(blooddrinker) <= 0 or not hastalent(blooddrinker_talent) } and spell(blood_fury) or spell(berserking) or spell(bag_of_tricks) or not buffpresent(dancing_rune_weapon_buff) and { not iscovenant("night_fae") or buffremaining(deaths_due_buff) > 7 } and spell(blooddrinker) or charges(blood_boil) >= 2 and { iscovenant("kyrian") or buffpresent(dancing_rune_weapon_buff) } and spell(blood_boil) or fightremains() < 3 and spell(death_strike) or bloodcovenantscdpostconditions() or bloodstandardcdpostconditions() } ### Blood icons. @@ -464,9 +464,9 @@ AddFunction froststandardmainactions #frost_strike,if=conduit.eradicating_blow&buff.eradicating_blow.stack=2|conduit.unleashed_frenzy&buff.unleashed_frenzy.remains<3&buff.unleashed_frenzy.up if conduit(eradicating_blow_conduit) and buffstacks(eradicating_blow) == 2 or conduit(unleashed_frenzy_conduit) and buffremaining(unleashed_frenzy_buff) < 3 and buffpresent(unleashed_frenzy_buff) spell(frost_strike) #howling_blast,if=buff.rime.up - if buffpresent(rime_frost) spell(howling_blast) + if buffpresent(rime_buff) spell(howling_blast) #obliterate,if=!buff.frozen_pulse.up&talent.frozen_pulse|buff.killing_machine.react|death_and_decay.ticking&covenant.night_fae&buff.deaths_due.stack>8|rune.time_to_4<=gcd - if not buffpresent(frozen_pulse_frost) and hastalent(frozen_pulse_talent) or buffpresent(killing_machine_frost) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 or timetorunes(4) <= gcd() spell(obliterate) + if not buffpresent(frozen_pulse_frost) and hastalent(frozen_pulse_talent) or buffpresent(killing_machine_buff) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 or timetorunes(4) <= gcd() spell(obliterate) #frost_strike,if=runic_power.deficit<(15+talent.runic_attenuation*3) if runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 spell(frost_strike) #obliterate,if=runic_power.deficit>(25+talent.runic_attenuation*3) @@ -481,7 +481,7 @@ AddFunction froststandardmainpostconditions AddFunction froststandardshortcdactions { - unless { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } and spell(remorseless_winter) or not weaponenchantpresent(razorice_enchant) and { target.debuffstacks(razorice) < 5 or target.debuffremaining(razorice) < 7 } and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or { conduit(eradicating_blow_conduit) and buffstacks(eradicating_blow) == 2 or conduit(unleashed_frenzy_conduit) and buffremaining(unleashed_frenzy_buff) < 3 and buffpresent(unleashed_frenzy_buff) } and spell(frost_strike) or buffpresent(rime_frost) and spell(howling_blast) or { not buffpresent(frozen_pulse_frost) and hastalent(frozen_pulse_talent) or buffpresent(killing_machine_frost) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 or timetorunes(4) <= gcd() } and spell(obliterate) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(frost_strike) + unless { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } and spell(remorseless_winter) or not weaponenchantpresent(razorice_enchant) and { target.debuffstacks(razorice) < 5 or target.debuffremaining(razorice) < 7 } and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or { conduit(eradicating_blow_conduit) and buffstacks(eradicating_blow) == 2 or conduit(unleashed_frenzy_conduit) and buffremaining(unleashed_frenzy_buff) < 3 and buffpresent(unleashed_frenzy_buff) } and spell(frost_strike) or buffpresent(rime_buff) and spell(howling_blast) or { not buffpresent(frozen_pulse_frost) and hastalent(frozen_pulse_talent) or buffpresent(killing_machine_buff) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 or timetorunes(4) <= gcd() } and spell(obliterate) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(frost_strike) { #horn_of_winter spell(horn_of_winter) @@ -490,12 +490,12 @@ AddFunction froststandardshortcdactions AddFunction froststandardshortcdpostconditions { - { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } and spell(remorseless_winter) or not weaponenchantpresent(razorice_enchant) and { target.debuffstacks(razorice) < 5 or target.debuffremaining(razorice) < 7 } and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or { conduit(eradicating_blow_conduit) and buffstacks(eradicating_blow) == 2 or conduit(unleashed_frenzy_conduit) and buffremaining(unleashed_frenzy_buff) < 3 and buffpresent(unleashed_frenzy_buff) } and spell(frost_strike) or buffpresent(rime_frost) and spell(howling_blast) or { not buffpresent(frozen_pulse_frost) and hastalent(frozen_pulse_talent) or buffpresent(killing_machine_frost) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 or timetorunes(4) <= gcd() } and spell(obliterate) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(frost_strike) + { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } and spell(remorseless_winter) or not weaponenchantpresent(razorice_enchant) and { target.debuffstacks(razorice) < 5 or target.debuffremaining(razorice) < 7 } and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or { conduit(eradicating_blow_conduit) and buffstacks(eradicating_blow) == 2 or conduit(unleashed_frenzy_conduit) and buffremaining(unleashed_frenzy_buff) < 3 and buffpresent(unleashed_frenzy_buff) } and spell(frost_strike) or buffpresent(rime_buff) and spell(howling_blast) or { not buffpresent(frozen_pulse_frost) and hastalent(frozen_pulse_talent) or buffpresent(killing_machine_buff) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 or timetorunes(4) <= gcd() } and spell(obliterate) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(frost_strike) } AddFunction froststandardcdactions { - unless { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } and spell(remorseless_winter) or not weaponenchantpresent(razorice_enchant) and { target.debuffstacks(razorice) < 5 or target.debuffremaining(razorice) < 7 } and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or { conduit(eradicating_blow_conduit) and buffstacks(eradicating_blow) == 2 or conduit(unleashed_frenzy_conduit) and buffremaining(unleashed_frenzy_buff) < 3 and buffpresent(unleashed_frenzy_buff) } and spell(frost_strike) or buffpresent(rime_frost) and spell(howling_blast) or { not buffpresent(frozen_pulse_frost) and hastalent(frozen_pulse_talent) or buffpresent(killing_machine_frost) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 or timetorunes(4) <= gcd() } and spell(obliterate) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(frost_strike) or spell(horn_of_winter) + unless { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } and spell(remorseless_winter) or not weaponenchantpresent(razorice_enchant) and { target.debuffstacks(razorice) < 5 or target.debuffremaining(razorice) < 7 } and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or { conduit(eradicating_blow_conduit) and buffstacks(eradicating_blow) == 2 or conduit(unleashed_frenzy_conduit) and buffremaining(unleashed_frenzy_buff) < 3 and buffpresent(unleashed_frenzy_buff) } and spell(frost_strike) or buffpresent(rime_buff) and spell(howling_blast) or { not buffpresent(frozen_pulse_frost) and hastalent(frozen_pulse_talent) or buffpresent(killing_machine_buff) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 or timetorunes(4) <= gcd() } and spell(obliterate) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(frost_strike) or spell(horn_of_winter) { #arcane_torrent spell(arcane_torrent) @@ -504,7 +504,7 @@ AddFunction froststandardcdactions AddFunction froststandardcdpostconditions { - { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } and spell(remorseless_winter) or not weaponenchantpresent(razorice_enchant) and { target.debuffstacks(razorice) < 5 or target.debuffremaining(razorice) < 7 } and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or { conduit(eradicating_blow_conduit) and buffstacks(eradicating_blow) == 2 or conduit(unleashed_frenzy_conduit) and buffremaining(unleashed_frenzy_buff) < 3 and buffpresent(unleashed_frenzy_buff) } and spell(frost_strike) or buffpresent(rime_frost) and spell(howling_blast) or { not buffpresent(frozen_pulse_frost) and hastalent(frozen_pulse_talent) or buffpresent(killing_machine_frost) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 or timetorunes(4) <= gcd() } and spell(obliterate) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(frost_strike) or spell(horn_of_winter) + { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } and spell(remorseless_winter) or not weaponenchantpresent(razorice_enchant) and { target.debuffstacks(razorice) < 5 or target.debuffremaining(razorice) < 7 } and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or { conduit(eradicating_blow_conduit) and buffstacks(eradicating_blow) == 2 or conduit(unleashed_frenzy_conduit) and buffremaining(unleashed_frenzy_buff) < 3 and buffpresent(unleashed_frenzy_buff) } and spell(frost_strike) or buffpresent(rime_buff) and spell(howling_blast) or { not buffpresent(frozen_pulse_frost) and hastalent(frozen_pulse_talent) or buffpresent(killing_machine_buff) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 or timetorunes(4) <= gcd() } and spell(obliterate) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(frost_strike) or spell(horn_of_winter) } ### actions.precombat @@ -540,9 +540,9 @@ AddFunction frostobliteration_poolingmainactions #remorseless_winter,if=talent.gathering_storm|conduit.everfrost|runeforge.biting_cold|active_enemies>=2 if hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) or enemies() >= 2 spell(remorseless_winter) #howling_blast,if=buff.rime.up - if buffpresent(rime_frost) spell(howling_blast) + if buffpresent(rime_buff) spell(howling_blast) #obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice,if=buff.killing_machine.react - if buffpresent(killing_machine_frost) spell(obliterate) + if buffpresent(killing_machine_buff) spell(obliterate) #glacial_advance,if=spell_targets.glacial_advance>=2&runic_power.deficit<60 if enemies(tagged=1) >= 2 and runicpowerdeficit() < 60 spell(glacial_advance) #frost_strike,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice,if=runic_power.deficit<70 @@ -563,7 +563,7 @@ AddFunction frostobliteration_poolingshortcdactions AddFunction frostobliteration_poolingshortcdpostconditions { - { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) or enemies() >= 2 } and spell(remorseless_winter) or buffpresent(rime_frost) and spell(howling_blast) or buffpresent(killing_machine_frost) and spell(obliterate) or enemies(tagged=1) >= 2 and runicpowerdeficit() < 60 and spell(glacial_advance) or runicpowerdeficit() < 70 and spell(frost_strike) or runecount() > 4 and spell(obliterate) or enemies() >= 4 and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) + { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) or enemies() >= 2 } and spell(remorseless_winter) or buffpresent(rime_buff) and spell(howling_blast) or buffpresent(killing_machine_buff) and spell(obliterate) or enemies(tagged=1) >= 2 and runicpowerdeficit() < 60 and spell(glacial_advance) or runicpowerdeficit() < 70 and spell(frost_strike) or runecount() > 4 and spell(obliterate) or enemies() >= 4 and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) } AddFunction frostobliteration_poolingcdactions @@ -572,7 +572,7 @@ AddFunction frostobliteration_poolingcdactions AddFunction frostobliteration_poolingcdpostconditions { - { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) or enemies() >= 2 } and spell(remorseless_winter) or buffpresent(rime_frost) and spell(howling_blast) or buffpresent(killing_machine_frost) and spell(obliterate) or enemies(tagged=1) >= 2 and runicpowerdeficit() < 60 and spell(glacial_advance) or runicpowerdeficit() < 70 and spell(frost_strike) or runecount() > 4 and spell(obliterate) or enemies() >= 4 and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) + { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) or enemies() >= 2 } and spell(remorseless_winter) or buffpresent(rime_buff) and spell(howling_blast) or buffpresent(killing_machine_buff) and spell(obliterate) or enemies(tagged=1) >= 2 and runicpowerdeficit() < 60 and spell(glacial_advance) or runicpowerdeficit() < 70 and spell(frost_strike) or runecount() > 4 and spell(obliterate) or enemies() >= 4 and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) } ### actions.obliteration @@ -582,23 +582,23 @@ AddFunction frostobliterationmainactions #remorseless_winter,if=active_enemies>=3&(talent.gathering_storm|conduit.everfrost|runeforge.biting_cold) if enemies() >= 3 and { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } spell(remorseless_winter) #howling_blast,if=!dot.frost_fever.ticking&!buff.killing_machine.up - if not target.debuffpresent(frost_fever) and not buffpresent(killing_machine_frost) spell(howling_blast) + if not target.debuffpresent(frost_fever_debuff) and not buffpresent(killing_machine_buff) spell(howling_blast) #frostscythe,if=buff.killing_machine.react&spell_targets.frostscythe>=2&(buff.deaths_due.stack=8|!death_and_decay.ticking|!covenant.night_fae) - if buffpresent(killing_machine_frost) and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } spell(frostscythe) + if buffpresent(killing_machine_buff) and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } spell(frostscythe) #obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice,if=buff.killing_machine.react|!buff.rime.up&spell_targets.howling_blast>=3 - if buffpresent(killing_machine_frost) or not buffpresent(rime_frost) and enemies(tagged=1) >= 3 spell(obliterate) + if buffpresent(killing_machine_buff) or not buffpresent(rime_buff) and enemies(tagged=1) >= 3 spell(obliterate) #glacial_advance,if=spell_targets.glacial_advance>=2&(runic_power.deficit<10|rune.time_to_2>gcd)|(debuff.razorice.stack<5|debuff.razorice.remains<15) if enemies(tagged=1) >= 2 and { runicpowerdeficit() < 10 or timetorunes(2) > gcd() } or target.debuffstacks(razorice) < 5 or target.debuffremaining(razorice) < 15 spell(glacial_advance) #frost_strike,if=conduit.eradicating_blow&buff.eradicating_blow.stack=2&active_enemies=1 if conduit(eradicating_blow_conduit) and buffstacks(eradicating_blow) == 2 and enemies() == 1 spell(frost_strike) #howling_blast,if=buff.rime.up&spell_targets.howling_blast>=2 - if buffpresent(rime_frost) and enemies(tagged=1) >= 2 spell(howling_blast) + if buffpresent(rime_buff) and enemies(tagged=1) >= 2 spell(howling_blast) #glacial_advance,if=spell_targets.glacial_advance>=2 if enemies(tagged=1) >= 2 spell(glacial_advance) #frost_strike,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice,if=!talent.avalanche&!buff.killing_machine.up|talent.avalanche&!buff.rime.up - if not hastalent(avalanche_talent) and not buffpresent(killing_machine_frost) or hastalent(avalanche_talent) and not buffpresent(rime_frost) spell(frost_strike) + if not hastalent(avalanche_talent) and not buffpresent(killing_machine_buff) or hastalent(avalanche_talent) and not buffpresent(rime_buff) spell(frost_strike) #howling_blast,if=buff.rime.up - if buffpresent(rime_frost) spell(howling_blast) + if buffpresent(rime_buff) spell(howling_blast) #obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice spell(obliterate) } @@ -613,7 +613,7 @@ AddFunction frostobliterationshortcdactions AddFunction frostobliterationshortcdpostconditions { - enemies() >= 3 and { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } and spell(remorseless_winter) or not target.debuffpresent(frost_fever) and not buffpresent(killing_machine_frost) and spell(howling_blast) or buffpresent(killing_machine_frost) and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or { buffpresent(killing_machine_frost) or not buffpresent(rime_frost) and enemies(tagged=1) >= 3 } and spell(obliterate) or { enemies(tagged=1) >= 2 and { runicpowerdeficit() < 10 or timetorunes(2) > gcd() } or target.debuffstacks(razorice) < 5 or target.debuffremaining(razorice) < 15 } and spell(glacial_advance) or conduit(eradicating_blow_conduit) and buffstacks(eradicating_blow) == 2 and enemies() == 1 and spell(frost_strike) or buffpresent(rime_frost) and enemies(tagged=1) >= 2 and spell(howling_blast) or enemies(tagged=1) >= 2 and spell(glacial_advance) or { not hastalent(avalanche_talent) and not buffpresent(killing_machine_frost) or hastalent(avalanche_talent) and not buffpresent(rime_frost) } and spell(frost_strike) or buffpresent(rime_frost) and spell(howling_blast) or spell(obliterate) + enemies() >= 3 and { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } and spell(remorseless_winter) or not target.debuffpresent(frost_fever_debuff) and not buffpresent(killing_machine_buff) and spell(howling_blast) or buffpresent(killing_machine_buff) and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or { buffpresent(killing_machine_buff) or not buffpresent(rime_buff) and enemies(tagged=1) >= 3 } and spell(obliterate) or { enemies(tagged=1) >= 2 and { runicpowerdeficit() < 10 or timetorunes(2) > gcd() } or target.debuffstacks(razorice) < 5 or target.debuffremaining(razorice) < 15 } and spell(glacial_advance) or conduit(eradicating_blow_conduit) and buffstacks(eradicating_blow) == 2 and enemies() == 1 and spell(frost_strike) or buffpresent(rime_buff) and enemies(tagged=1) >= 2 and spell(howling_blast) or enemies(tagged=1) >= 2 and spell(glacial_advance) or { not hastalent(avalanche_talent) and not buffpresent(killing_machine_buff) or hastalent(avalanche_talent) and not buffpresent(rime_buff) } and spell(frost_strike) or buffpresent(rime_buff) and spell(howling_blast) or spell(obliterate) } AddFunction frostobliterationcdactions @@ -622,7 +622,7 @@ AddFunction frostobliterationcdactions AddFunction frostobliterationcdpostconditions { - enemies() >= 3 and { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } and spell(remorseless_winter) or not target.debuffpresent(frost_fever) and not buffpresent(killing_machine_frost) and spell(howling_blast) or buffpresent(killing_machine_frost) and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or { buffpresent(killing_machine_frost) or not buffpresent(rime_frost) and enemies(tagged=1) >= 3 } and spell(obliterate) or { enemies(tagged=1) >= 2 and { runicpowerdeficit() < 10 or timetorunes(2) > gcd() } or target.debuffstacks(razorice) < 5 or target.debuffremaining(razorice) < 15 } and spell(glacial_advance) or conduit(eradicating_blow_conduit) and buffstacks(eradicating_blow) == 2 and enemies() == 1 and spell(frost_strike) or buffpresent(rime_frost) and enemies(tagged=1) >= 2 and spell(howling_blast) or enemies(tagged=1) >= 2 and spell(glacial_advance) or { not hastalent(avalanche_talent) and not buffpresent(killing_machine_frost) or hastalent(avalanche_talent) and not buffpresent(rime_frost) } and spell(frost_strike) or buffpresent(rime_frost) and spell(howling_blast) or spell(obliterate) + enemies() >= 3 and { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } and spell(remorseless_winter) or not target.debuffpresent(frost_fever_debuff) and not buffpresent(killing_machine_buff) and spell(howling_blast) or buffpresent(killing_machine_buff) and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or { buffpresent(killing_machine_buff) or not buffpresent(rime_buff) and enemies(tagged=1) >= 3 } and spell(obliterate) or { enemies(tagged=1) >= 2 and { runicpowerdeficit() < 10 or timetorunes(2) > gcd() } or target.debuffstacks(razorice) < 5 or target.debuffremaining(razorice) < 15 } and spell(glacial_advance) or conduit(eradicating_blow_conduit) and buffstacks(eradicating_blow) == 2 and enemies() == 1 and spell(frost_strike) or buffpresent(rime_buff) and enemies(tagged=1) >= 2 and spell(howling_blast) or enemies(tagged=1) >= 2 and spell(glacial_advance) or { not hastalent(avalanche_talent) and not buffpresent(killing_machine_buff) or hastalent(avalanche_talent) and not buffpresent(rime_buff) } and spell(frost_strike) or buffpresent(rime_buff) and spell(howling_blast) or spell(obliterate) } ### actions.covenants @@ -679,6 +679,8 @@ AddFunction frostcovenantscdpostconditions AddFunction frostcooldownsmainactions { + #blood_fury,if=buff.pillar_of_frost.up&buff.empower_rune_weapon.up + if buffpresent(pillar_of_frost) and buffpresent(empower_rune_weapon) spell(blood_fury) #berserking,if=buff.pillar_of_frost.up if buffpresent(pillar_of_frost) spell(berserking) } @@ -689,7 +691,7 @@ AddFunction frostcooldownsmainpostconditions AddFunction frostcooldownsshortcdactions { - unless buffpresent(pillar_of_frost) and spell(berserking) + unless buffpresent(pillar_of_frost) and buffpresent(empower_rune_weapon) and spell(blood_fury) or buffpresent(pillar_of_frost) and spell(berserking) { #bag_of_tricks,if=buff.pillar_of_frost.up&active_enemies=1&(buff.pillar_of_frost.remains<5&talent.cold_heart.enabled|!talent.cold_heart.enabled&buff.pillar_of_frost.remains<3) if buffpresent(pillar_of_frost) and enemies() == 1 and { buffremaining(pillar_of_frost) < 5 and hastalent(cold_heart_talent) or not hastalent(cold_heart_talent) and buffremaining(pillar_of_frost) < 3 } spell(bag_of_tricks) @@ -708,7 +710,7 @@ AddFunction frostcooldownsshortcdactions AddFunction frostcooldownsshortcdpostconditions { - buffpresent(pillar_of_frost) and spell(berserking) + buffpresent(pillar_of_frost) and buffpresent(empower_rune_weapon) and spell(blood_fury) or buffpresent(pillar_of_frost) and spell(berserking) } AddFunction frostcooldownscdactions @@ -717,10 +719,8 @@ AddFunction frostcooldownscdactions if spellcooldown(pillar_of_frost) <= 0 or spellcooldown(pillar_of_frost) > 20 frostuseitemactions() #potion,if=buff.pillar_of_frost.up&buff.empower_rune_weapon.up if buffpresent(pillar_of_frost) and buffpresent(empower_rune_weapon) and { checkboxon(opt_use_consumables) and target.classification(worldboss) } item(potion_of_spectral_strength_item usable=1) - #blood_fury,if=buff.pillar_of_frost.up&buff.empower_rune_weapon.up - if buffpresent(pillar_of_frost) and buffpresent(empower_rune_weapon) spell(blood_fury) - unless buffpresent(pillar_of_frost) and spell(berserking) + unless buffpresent(pillar_of_frost) and buffpresent(empower_rune_weapon) and spell(blood_fury) or buffpresent(pillar_of_frost) and spell(berserking) { #arcane_pulse,if=(!buff.pillar_of_frost.up&active_enemies>=2)|!buff.pillar_of_frost.up&(rune.deficit>=5&runic_power.deficit>=60) if not buffpresent(pillar_of_frost) and enemies() >= 2 or not buffpresent(pillar_of_frost) and runedeficit() >= 5 and runicpowerdeficit() >= 60 spell(arcane_pulse) @@ -765,7 +765,7 @@ AddFunction frostcooldownscdactions AddFunction frostcooldownscdpostconditions { - buffpresent(pillar_of_frost) and spell(berserking) or buffpresent(pillar_of_frost) and enemies() == 1 and { buffremaining(pillar_of_frost) < 5 and hastalent(cold_heart_talent) or not hastalent(cold_heart_talent) and buffremaining(pillar_of_frost) < 3 } and spell(bag_of_tricks) or hastalent(breath_of_sindragosa_talent) and { spellcooldown(breath_of_sindragosa) > 0 or spellcooldown(breath_of_sindragosa) <= 0 and runicpowerdeficit() < 60 } and spell(pillar_of_frost) or hastalent(icecap_talent) and not buffpresent(pillar_of_frost) and spell(pillar_of_frost) or hastalent(obliteration_talent) and { hastalent(gathering_storm_talent) and buffpresent(remorseless_winter) or not hastalent(gathering_storm_talent) } and spell(pillar_of_frost) or { hastalent(breath_of_sindragosa_talent) and runicpowerdeficit() > 40 and runecount() >= 3 and buffpresent(pillar_of_frost) or not hastalent(breath_of_sindragosa_talent) and runicpowerdeficit() >= 25 } and spell(hypothermic_presence) or { enemies() > 5 or runeforge(phearomones_runeforge) } and spell(death_and_decay) + buffpresent(pillar_of_frost) and buffpresent(empower_rune_weapon) and spell(blood_fury) or buffpresent(pillar_of_frost) and spell(berserking) or buffpresent(pillar_of_frost) and enemies() == 1 and { buffremaining(pillar_of_frost) < 5 and hastalent(cold_heart_talent) or not hastalent(cold_heart_talent) and buffremaining(pillar_of_frost) < 3 } and spell(bag_of_tricks) or hastalent(breath_of_sindragosa_talent) and { spellcooldown(breath_of_sindragosa) > 0 or spellcooldown(breath_of_sindragosa) <= 0 and runicpowerdeficit() < 60 } and spell(pillar_of_frost) or hastalent(icecap_talent) and not buffpresent(pillar_of_frost) and spell(pillar_of_frost) or hastalent(obliteration_talent) and { hastalent(gathering_storm_talent) and buffpresent(remorseless_winter) or not hastalent(gathering_storm_talent) } and spell(pillar_of_frost) or { hastalent(breath_of_sindragosa_talent) and runicpowerdeficit() > 40 and runecount() >= 3 and buffpresent(pillar_of_frost) or not hastalent(breath_of_sindragosa_talent) and runicpowerdeficit() >= 25 } and spell(hypothermic_presence) or { enemies() > 5 or runeforge(phearomones_runeforge) } and spell(death_and_decay) } ### actions.cold_heart @@ -815,17 +815,17 @@ AddFunction frostbos_tickingmainactions #remorseless_winter,if=talent.gathering_storm|conduit.everfrost|runeforge.biting_cold|active_enemies>=2 if hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) or enemies() >= 2 spell(remorseless_winter) #howling_blast,if=buff.rime.up&(runic_power.deficit<55|rune.time_to_3<=gcd|spell_targets.howling_blast>=2) - if buffpresent(rime_frost) and { runicpowerdeficit() < 55 or timetorunes(3) <= gcd() or enemies(tagged=1) >= 2 } spell(howling_blast) + if buffpresent(rime_buff) and { runicpowerdeficit() < 55 or timetorunes(3) <= gcd() or enemies(tagged=1) >= 2 } spell(howling_blast) #obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice,if=rune.time_to_4=45 if timetorunes(4) < gcd() or runicpowerdeficit() >= 45 spell(obliterate) #frostscythe,if=buff.killing_machine.up&spell_targets.frostscythe>=2&(!death_and_decay.ticking&covenant.night_fae|!covenant.night_fae) - if buffpresent(killing_machine_frost) and enemies(tagged=1) >= 2 and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } spell(frostscythe) + if buffpresent(killing_machine_buff) and enemies(tagged=1) >= 2 and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } spell(frostscythe) #frostscythe,if=spell_targets.frostscythe>=2&(buff.deaths_due.stack=8|!death_and_decay.ticking|!covenant.night_fae) if enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } spell(frostscythe) #obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice,if=runic_power.deficit>25&rune>3 if runicpowerdeficit() > 25 and runecount() > 3 spell(obliterate) #howling_blast,if=buff.rime.up - if buffpresent(rime_frost) spell(howling_blast) + if buffpresent(rime_buff) spell(howling_blast) } AddFunction frostbos_tickingmainpostconditions @@ -834,7 +834,7 @@ AddFunction frostbos_tickingmainpostconditions AddFunction frostbos_tickingshortcdactions { - unless runicpowerdeficit() >= 60 and spell(obliterate) or { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) or enemies() >= 2 } and spell(remorseless_winter) or buffpresent(rime_frost) and { runicpowerdeficit() < 55 or timetorunes(3) <= gcd() or enemies(tagged=1) >= 2 } and spell(howling_blast) or { timetorunes(4) < gcd() or runicpowerdeficit() >= 45 } and spell(obliterate) or buffpresent(killing_machine_frost) and enemies(tagged=1) >= 2 and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) + unless runicpowerdeficit() >= 60 and spell(obliterate) or { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) or enemies() >= 2 } and spell(remorseless_winter) or buffpresent(rime_buff) and { runicpowerdeficit() < 55 or timetorunes(3) <= gcd() or enemies(tagged=1) >= 2 } and spell(howling_blast) or { timetorunes(4) < gcd() or runicpowerdeficit() >= 45 } and spell(obliterate) or buffpresent(killing_machine_buff) and enemies(tagged=1) >= 2 and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) { #horn_of_winter,if=runic_power.deficit>=40&rune.time_to_3>gcd if runicpowerdeficit() >= 40 and timetorunes(3) > gcd() spell(horn_of_winter) @@ -843,12 +843,12 @@ AddFunction frostbos_tickingshortcdactions AddFunction frostbos_tickingshortcdpostconditions { - runicpowerdeficit() >= 60 and spell(obliterate) or { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) or enemies() >= 2 } and spell(remorseless_winter) or buffpresent(rime_frost) and { runicpowerdeficit() < 55 or timetorunes(3) <= gcd() or enemies(tagged=1) >= 2 } and spell(howling_blast) or { timetorunes(4) < gcd() or runicpowerdeficit() >= 45 } and spell(obliterate) or buffpresent(killing_machine_frost) and enemies(tagged=1) >= 2 and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() > 25 and runecount() > 3 and spell(obliterate) or buffpresent(rime_frost) and spell(howling_blast) + runicpowerdeficit() >= 60 and spell(obliterate) or { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) or enemies() >= 2 } and spell(remorseless_winter) or buffpresent(rime_buff) and { runicpowerdeficit() < 55 or timetorunes(3) <= gcd() or enemies(tagged=1) >= 2 } and spell(howling_blast) or { timetorunes(4) < gcd() or runicpowerdeficit() >= 45 } and spell(obliterate) or buffpresent(killing_machine_buff) and enemies(tagged=1) >= 2 and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() > 25 and runecount() > 3 and spell(obliterate) or buffpresent(rime_buff) and spell(howling_blast) } AddFunction frostbos_tickingcdactions { - unless runicpowerdeficit() >= 60 and spell(obliterate) or { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) or enemies() >= 2 } and spell(remorseless_winter) or buffpresent(rime_frost) and { runicpowerdeficit() < 55 or timetorunes(3) <= gcd() or enemies(tagged=1) >= 2 } and spell(howling_blast) or { timetorunes(4) < gcd() or runicpowerdeficit() >= 45 } and spell(obliterate) or buffpresent(killing_machine_frost) and enemies(tagged=1) >= 2 and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() >= 40 and timetorunes(3) > gcd() and spell(horn_of_winter) or enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() > 25 and runecount() > 3 and spell(obliterate) or buffpresent(rime_frost) and spell(howling_blast) + unless runicpowerdeficit() >= 60 and spell(obliterate) or { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) or enemies() >= 2 } and spell(remorseless_winter) or buffpresent(rime_buff) and { runicpowerdeficit() < 55 or timetorunes(3) <= gcd() or enemies(tagged=1) >= 2 } and spell(howling_blast) or { timetorunes(4) < gcd() or runicpowerdeficit() >= 45 } and spell(obliterate) or buffpresent(killing_machine_buff) and enemies(tagged=1) >= 2 and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() >= 40 and timetorunes(3) > gcd() and spell(horn_of_winter) or enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() > 25 and runecount() > 3 and spell(obliterate) or buffpresent(rime_buff) and spell(howling_blast) { #arcane_torrent,if=runic_power.deficit>50 if runicpowerdeficit() > 50 spell(arcane_torrent) @@ -857,7 +857,7 @@ AddFunction frostbos_tickingcdactions AddFunction frostbos_tickingcdpostconditions { - runicpowerdeficit() >= 60 and spell(obliterate) or { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) or enemies() >= 2 } and spell(remorseless_winter) or buffpresent(rime_frost) and { runicpowerdeficit() < 55 or timetorunes(3) <= gcd() or enemies(tagged=1) >= 2 } and spell(howling_blast) or { timetorunes(4) < gcd() or runicpowerdeficit() >= 45 } and spell(obliterate) or buffpresent(killing_machine_frost) and enemies(tagged=1) >= 2 and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() >= 40 and timetorunes(3) > gcd() and spell(horn_of_winter) or enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() > 25 and runecount() > 3 and spell(obliterate) or buffpresent(rime_frost) and spell(howling_blast) + runicpowerdeficit() >= 60 and spell(obliterate) or { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) or enemies() >= 2 } and spell(remorseless_winter) or buffpresent(rime_buff) and { runicpowerdeficit() < 55 or timetorunes(3) <= gcd() or enemies(tagged=1) >= 2 } and spell(howling_blast) or { timetorunes(4) < gcd() or runicpowerdeficit() >= 45 } and spell(obliterate) or buffpresent(killing_machine_buff) and enemies(tagged=1) >= 2 and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() >= 40 and timetorunes(3) > gcd() and spell(horn_of_winter) or enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() > 25 and runecount() > 3 and spell(obliterate) or buffpresent(rime_buff) and spell(howling_blast) } ### actions.bos_pooling @@ -865,7 +865,7 @@ AddFunction frostbos_tickingcdpostconditions AddFunction frostbos_poolingmainactions { #howling_blast,if=buff.rime.up - if buffpresent(rime_frost) spell(howling_blast) + if buffpresent(rime_buff) spell(howling_blast) #remorseless_winter,if=active_enemies>=2|rune.time_to_5<=gcd&(talent.gathering_storm|conduit.everfrost|runeforge.biting_cold) if enemies() >= 2 or timetorunes(5) <= gcd() and { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } spell(remorseless_winter) #obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice,if=runic_power.deficit>=25 @@ -875,7 +875,7 @@ AddFunction frostbos_poolingmainactions #frost_strike,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice,if=runic_power.deficit<20&cooldown.pillar_of_frost.remains>5 if runicpowerdeficit() < 20 and spellcooldown(pillar_of_frost) > 5 spell(frost_strike) #frostscythe,if=buff.killing_machine.react&runic_power.deficit>(15+talent.runic_attenuation*3)&spell_targets.frostscythe>=2&(buff.deaths_due.stack=8|!death_and_decay.ticking|!covenant.night_fae) - if buffpresent(killing_machine_frost) and runicpowerdeficit() > 15 + talentpoints(runic_attenuation_talent) * 3 and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } spell(frostscythe) + if buffpresent(killing_machine_buff) and runicpowerdeficit() > 15 + talentpoints(runic_attenuation_talent) * 3 and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } spell(frostscythe) #frostscythe,if=runic_power.deficit>=(35+talent.runic_attenuation*3)&spell_targets.frostscythe>=2&(buff.deaths_due.stack=8|!death_and_decay.ticking|!covenant.night_fae) if runicpowerdeficit() >= 35 + talentpoints(runic_attenuation_talent) * 3 and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } spell(frostscythe) #glacial_advance,if=cooldown.pillar_of_frost.remains>rune.time_to_4&runic_power.deficit<40&spell_targets.glacial_advance>=2 @@ -894,7 +894,7 @@ AddFunction frostbos_poolingshortcdactions AddFunction frostbos_poolingshortcdpostconditions { - buffpresent(rime_frost) and spell(howling_blast) or { enemies() >= 2 or timetorunes(5) <= gcd() and { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } } and spell(remorseless_winter) or runicpowerdeficit() >= 25 and spell(obliterate) or runicpowerdeficit() < 20 and enemies(tagged=1) >= 2 and spellcooldown(pillar_of_frost) > 5 and spell(glacial_advance) or runicpowerdeficit() < 20 and spellcooldown(pillar_of_frost) > 5 and spell(frost_strike) or buffpresent(killing_machine_frost) and runicpowerdeficit() > 15 + talentpoints(runic_attenuation_talent) * 3 and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() >= 35 + talentpoints(runic_attenuation_talent) * 3 and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or spellcooldown(pillar_of_frost) > timetorunes(4) and runicpowerdeficit() < 40 and enemies(tagged=1) >= 2 and spell(glacial_advance) or spellcooldown(pillar_of_frost) > timetorunes(4) and runicpowerdeficit() < 40 and spell(frost_strike) + buffpresent(rime_buff) and spell(howling_blast) or { enemies() >= 2 or timetorunes(5) <= gcd() and { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } } and spell(remorseless_winter) or runicpowerdeficit() >= 25 and spell(obliterate) or runicpowerdeficit() < 20 and enemies(tagged=1) >= 2 and spellcooldown(pillar_of_frost) > 5 and spell(glacial_advance) or runicpowerdeficit() < 20 and spellcooldown(pillar_of_frost) > 5 and spell(frost_strike) or buffpresent(killing_machine_buff) and runicpowerdeficit() > 15 + talentpoints(runic_attenuation_talent) * 3 and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() >= 35 + talentpoints(runic_attenuation_talent) * 3 and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or spellcooldown(pillar_of_frost) > timetorunes(4) and runicpowerdeficit() < 40 and enemies(tagged=1) >= 2 and spell(glacial_advance) or spellcooldown(pillar_of_frost) > timetorunes(4) and runicpowerdeficit() < 40 and spell(frost_strike) } AddFunction frostbos_poolingcdactions @@ -903,7 +903,7 @@ AddFunction frostbos_poolingcdactions AddFunction frostbos_poolingcdpostconditions { - buffpresent(rime_frost) and spell(howling_blast) or { enemies() >= 2 or timetorunes(5) <= gcd() and { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } } and spell(remorseless_winter) or runicpowerdeficit() >= 25 and spell(obliterate) or runicpowerdeficit() < 20 and enemies(tagged=1) >= 2 and spellcooldown(pillar_of_frost) > 5 and spell(glacial_advance) or runicpowerdeficit() < 20 and spellcooldown(pillar_of_frost) > 5 and spell(frost_strike) or buffpresent(killing_machine_frost) and runicpowerdeficit() > 15 + talentpoints(runic_attenuation_talent) * 3 and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() >= 35 + talentpoints(runic_attenuation_talent) * 3 and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or spellcooldown(pillar_of_frost) > timetorunes(4) and runicpowerdeficit() < 40 and enemies(tagged=1) >= 2 and spell(glacial_advance) or spellcooldown(pillar_of_frost) > timetorunes(4) and runicpowerdeficit() < 40 and spell(frost_strike) + buffpresent(rime_buff) and spell(howling_blast) or { enemies() >= 2 or timetorunes(5) <= gcd() and { hastalent(gathering_storm_talent) or conduit(everfrost_conduit) or runeforge(biting_cold_runeforge) } } and spell(remorseless_winter) or runicpowerdeficit() >= 25 and spell(obliterate) or runicpowerdeficit() < 20 and enemies(tagged=1) >= 2 and spellcooldown(pillar_of_frost) > 5 and spell(glacial_advance) or runicpowerdeficit() < 20 and spellcooldown(pillar_of_frost) > 5 and spell(frost_strike) or buffpresent(killing_machine_buff) and runicpowerdeficit() > 15 + talentpoints(runic_attenuation_talent) * 3 and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() >= 35 + talentpoints(runic_attenuation_talent) * 3 and enemies(tagged=1) >= 2 and { buffstacks(deaths_due_buff) == 8 or not buffpresent(death_and_decay) or not iscovenant("night_fae") } and spell(frostscythe) or spellcooldown(pillar_of_frost) > timetorunes(4) and runicpowerdeficit() < 40 and enemies(tagged=1) >= 2 and spell(glacial_advance) or spellcooldown(pillar_of_frost) > timetorunes(4) and runicpowerdeficit() < 40 and spell(frost_strike) } ### actions.aoe @@ -917,11 +917,11 @@ AddFunction frostaoemainactions #frost_strike,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice,if=cooldown.remorseless_winter.remains<=2*gcd&talent.gathering_storm if spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) spell(frost_strike) #howling_blast,if=buff.rime.up - if buffpresent(rime_frost) spell(howling_blast) + if buffpresent(rime_buff) spell(howling_blast) #obliterate,if=death_and_decay.ticking&covenant.night_fae&buff.deaths_due.stack>8 if buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 spell(obliterate) #frostscythe,if=buff.killing_machine.react&(!death_and_decay.ticking&covenant.night_fae|!covenant.night_fae) - if buffpresent(killing_machine_frost) and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } spell(frostscythe) + if buffpresent(killing_machine_buff) and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } spell(frostscythe) #glacial_advance,if=runic_power.deficit<(15+talent.runic_attenuation*3) if runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 spell(glacial_advance) #frost_strike,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice,if=runic_power.deficit<(15+talent.runic_attenuation*3) @@ -944,7 +944,7 @@ AddFunction frostaoemainpostconditions AddFunction frostaoeshortcdactions { - unless spell(remorseless_winter) or hastalent(frostscythe_talent) and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or buffpresent(rime_frost) and spell(howling_blast) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 and spell(obliterate) or buffpresent(killing_machine_frost) and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(glacial_advance) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or spell(remorseless_winter) or { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(glacial_advance) or spell(frost_strike) + unless spell(remorseless_winter) or hastalent(frostscythe_talent) and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or buffpresent(rime_buff) and spell(howling_blast) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 and spell(obliterate) or buffpresent(killing_machine_buff) and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(glacial_advance) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or spell(remorseless_winter) or { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(glacial_advance) or spell(frost_strike) { #horn_of_winter spell(horn_of_winter) @@ -953,12 +953,12 @@ AddFunction frostaoeshortcdactions AddFunction frostaoeshortcdpostconditions { - spell(remorseless_winter) or hastalent(frostscythe_talent) and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or buffpresent(rime_frost) and spell(howling_blast) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 and spell(obliterate) or buffpresent(killing_machine_frost) and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(glacial_advance) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or spell(remorseless_winter) or { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(glacial_advance) or spell(frost_strike) + spell(remorseless_winter) or hastalent(frostscythe_talent) and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or buffpresent(rime_buff) and spell(howling_blast) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 and spell(obliterate) or buffpresent(killing_machine_buff) and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(glacial_advance) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or spell(remorseless_winter) or { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(glacial_advance) or spell(frost_strike) } AddFunction frostaoecdactions { - unless spell(remorseless_winter) or hastalent(frostscythe_talent) and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or buffpresent(rime_frost) and spell(howling_blast) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 and spell(obliterate) or buffpresent(killing_machine_frost) and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(glacial_advance) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or spell(remorseless_winter) or { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(glacial_advance) or spell(frost_strike) or spell(horn_of_winter) + unless spell(remorseless_winter) or hastalent(frostscythe_talent) and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or buffpresent(rime_buff) and spell(howling_blast) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 and spell(obliterate) or buffpresent(killing_machine_buff) and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(glacial_advance) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or spell(remorseless_winter) or { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(glacial_advance) or spell(frost_strike) or spell(horn_of_winter) { #arcane_torrent spell(arcane_torrent) @@ -967,7 +967,7 @@ AddFunction frostaoecdactions AddFunction frostaoecdpostconditions { - spell(remorseless_winter) or hastalent(frostscythe_talent) and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or buffpresent(rime_frost) and spell(howling_blast) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 and spell(obliterate) or buffpresent(killing_machine_frost) and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(glacial_advance) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or spell(remorseless_winter) or { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(glacial_advance) or spell(frost_strike) or spell(horn_of_winter) + spell(remorseless_winter) or hastalent(frostscythe_talent) and spell(glacial_advance) or spellcooldown(remorseless_winter) <= 2 * gcd() and hastalent(gathering_storm_talent) and spell(frost_strike) or buffpresent(rime_buff) and spell(howling_blast) or buffpresent(death_and_decay) and iscovenant("night_fae") and buffstacks(deaths_due_buff) > 8 and spell(obliterate) or buffpresent(killing_machine_buff) and { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(glacial_advance) or runicpowerdeficit() < 15 + talentpoints(runic_attenuation_talent) * 3 and spell(frost_strike) or spell(remorseless_winter) or { not buffpresent(death_and_decay) and iscovenant("night_fae") or not iscovenant("night_fae") } and spell(frostscythe) or runicpowerdeficit() > 25 + talentpoints(runic_attenuation_talent) * 3 and spell(obliterate) or spell(glacial_advance) or spell(frost_strike) or spell(horn_of_winter) } ### actions.default @@ -975,7 +975,7 @@ AddFunction frostaoecdpostconditions AddFunction frost_defaultmainactions { #howling_blast,if=!dot.frost_fever.ticking&(talent.icecap|cooldown.breath_of_sindragosa.remains>15|talent.obliteration&cooldown.pillar_of_frost.remains&!buff.killing_machine.up) - if not target.debuffpresent(frost_fever) and { hastalent(icecap_talent) or spellcooldown(breath_of_sindragosa) > 15 or hastalent(obliteration_talent) and spellcooldown(pillar_of_frost) > 0 and not buffpresent(killing_machine_frost) } spell(howling_blast) + if not target.debuffpresent(frost_fever_debuff) and { hastalent(icecap_talent) or spellcooldown(breath_of_sindragosa) > 15 or hastalent(obliteration_talent) and spellcooldown(pillar_of_frost) > 0 and not buffpresent(killing_machine_buff) } spell(howling_blast) #glacial_advance,if=buff.icy_talons.remains<=gcd&buff.icy_talons.up&spell_targets.glacial_advance>=2&(!talent.breath_of_sindragosa|cooldown.breath_of_sindragosa.remains>15) if buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and enemies(tagged=1) >= 2 and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } spell(glacial_advance) #frost_strike,if=buff.icy_talons.remains<=gcd&buff.icy_talons.up&(!talent.breath_of_sindragosa|cooldown.breath_of_sindragosa.remains>15) @@ -1042,7 +1042,7 @@ AddFunction frost_defaultshortcdactions #auto_attack frostgetinmeleerange() - unless not target.debuffpresent(frost_fever) and { hastalent(icecap_talent) or spellcooldown(breath_of_sindragosa) > 15 or hastalent(obliteration_talent) and spellcooldown(pillar_of_frost) > 0 and not buffpresent(killing_machine_frost) } and spell(howling_blast) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and enemies(tagged=1) >= 2 and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(glacial_advance) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(frost_strike) + unless not target.debuffpresent(frost_fever_debuff) and { hastalent(icecap_talent) or spellcooldown(breath_of_sindragosa) > 15 or hastalent(obliteration_talent) and spellcooldown(pillar_of_frost) > 0 and not buffpresent(killing_machine_buff) } and spell(howling_blast) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and enemies(tagged=1) >= 2 and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(glacial_advance) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(frost_strike) { #call_action_list,name=covenants frostcovenantsshortcdactions() @@ -1099,14 +1099,14 @@ AddFunction frost_defaultshortcdactions AddFunction frost_defaultshortcdpostconditions { - not target.debuffpresent(frost_fever) and { hastalent(icecap_talent) or spellcooldown(breath_of_sindragosa) > 15 or hastalent(obliteration_talent) and spellcooldown(pillar_of_frost) > 0 and not buffpresent(killing_machine_frost) } and spell(howling_blast) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and enemies(tagged=1) >= 2 and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(glacial_advance) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(frost_strike) or frostcovenantsshortcdpostconditions() or frostcooldownsshortcdpostconditions() or hastalent(cold_heart_talent) and { buffstacks(cold_heart_buff) >= 10 and { target.debuffstacks(razorice) == 5 or not weaponenchantpresent(razorice_enchant) } or fightremains() <= gcd() } and frostcold_heartshortcdpostconditions() or buffpresent(breath_of_sindragosa) and frostbos_tickingshortcdpostconditions() or hastalent(breath_of_sindragosa_talent) and spellcooldown(breath_of_sindragosa) < 10 and frostbos_poolingshortcdpostconditions() or buffpresent(pillar_of_frost) and hastalent(obliteration_talent) and frostobliterationshortcdpostconditions() or hastalent(obliteration_talent) and spellcooldown(pillar_of_frost) < 10 and frostobliteration_poolingshortcdpostconditions() or enemies() >= 2 and frostaoeshortcdpostconditions() or froststandardshortcdpostconditions() + not target.debuffpresent(frost_fever_debuff) and { hastalent(icecap_talent) or spellcooldown(breath_of_sindragosa) > 15 or hastalent(obliteration_talent) and spellcooldown(pillar_of_frost) > 0 and not buffpresent(killing_machine_buff) } and spell(howling_blast) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and enemies(tagged=1) >= 2 and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(glacial_advance) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(frost_strike) or frostcovenantsshortcdpostconditions() or frostcooldownsshortcdpostconditions() or hastalent(cold_heart_talent) and { buffstacks(cold_heart_buff) >= 10 and { target.debuffstacks(razorice) == 5 or not weaponenchantpresent(razorice_enchant) } or fightremains() <= gcd() } and frostcold_heartshortcdpostconditions() or buffpresent(breath_of_sindragosa) and frostbos_tickingshortcdpostconditions() or hastalent(breath_of_sindragosa_talent) and spellcooldown(breath_of_sindragosa) < 10 and frostbos_poolingshortcdpostconditions() or buffpresent(pillar_of_frost) and hastalent(obliteration_talent) and frostobliterationshortcdpostconditions() or hastalent(obliteration_talent) and spellcooldown(pillar_of_frost) < 10 and frostobliteration_poolingshortcdpostconditions() or enemies() >= 2 and frostaoeshortcdpostconditions() or froststandardshortcdpostconditions() } AddFunction frost_defaultcdactions { frostinterruptactions() - unless not target.debuffpresent(frost_fever) and { hastalent(icecap_talent) or spellcooldown(breath_of_sindragosa) > 15 or hastalent(obliteration_talent) and spellcooldown(pillar_of_frost) > 0 and not buffpresent(killing_machine_frost) } and spell(howling_blast) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and enemies(tagged=1) >= 2 and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(glacial_advance) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(frost_strike) + unless not target.debuffpresent(frost_fever_debuff) and { hastalent(icecap_talent) or spellcooldown(breath_of_sindragosa) > 15 or hastalent(obliteration_talent) and spellcooldown(pillar_of_frost) > 0 and not buffpresent(killing_machine_buff) } and spell(howling_blast) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and enemies(tagged=1) >= 2 and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(glacial_advance) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(frost_strike) { #call_action_list,name=covenants frostcovenantscdactions() @@ -1163,7 +1163,7 @@ AddFunction frost_defaultcdactions AddFunction frost_defaultcdpostconditions { - not target.debuffpresent(frost_fever) and { hastalent(icecap_talent) or spellcooldown(breath_of_sindragosa) > 15 or hastalent(obliteration_talent) and spellcooldown(pillar_of_frost) > 0 and not buffpresent(killing_machine_frost) } and spell(howling_blast) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and enemies(tagged=1) >= 2 and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(glacial_advance) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(frost_strike) or frostcovenantscdpostconditions() or frostcooldownscdpostconditions() or hastalent(cold_heart_talent) and { buffstacks(cold_heart_buff) >= 10 and { target.debuffstacks(razorice) == 5 or not weaponenchantpresent(razorice_enchant) } or fightremains() <= gcd() } and frostcold_heartcdpostconditions() or buffpresent(breath_of_sindragosa) and frostbos_tickingcdpostconditions() or hastalent(breath_of_sindragosa_talent) and spellcooldown(breath_of_sindragosa) < 10 and frostbos_poolingcdpostconditions() or buffpresent(pillar_of_frost) and hastalent(obliteration_talent) and frostobliterationcdpostconditions() or hastalent(obliteration_talent) and spellcooldown(pillar_of_frost) < 10 and frostobliteration_poolingcdpostconditions() or enemies() >= 2 and frostaoecdpostconditions() or froststandardcdpostconditions() + not target.debuffpresent(frost_fever_debuff) and { hastalent(icecap_talent) or spellcooldown(breath_of_sindragosa) > 15 or hastalent(obliteration_talent) and spellcooldown(pillar_of_frost) > 0 and not buffpresent(killing_machine_buff) } and spell(howling_blast) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and enemies(tagged=1) >= 2 and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(glacial_advance) or buffremaining(icy_talons_buff) <= gcd() and buffpresent(icy_talons_buff) and { not hastalent(breath_of_sindragosa_talent) or spellcooldown(breath_of_sindragosa) > 15 } and spell(frost_strike) or frostcovenantscdpostconditions() or frostcooldownscdpostconditions() or hastalent(cold_heart_talent) and { buffstacks(cold_heart_buff) >= 10 and { target.debuffstacks(razorice) == 5 or not weaponenchantpresent(razorice_enchant) } or fightremains() <= gcd() } and frostcold_heartcdpostconditions() or buffpresent(breath_of_sindragosa) and frostbos_tickingcdpostconditions() or hastalent(breath_of_sindragosa_talent) and spellcooldown(breath_of_sindragosa) < 10 and frostbos_poolingcdpostconditions() or buffpresent(pillar_of_frost) and hastalent(obliteration_talent) and frostobliterationcdpostconditions() or hastalent(obliteration_talent) and spellcooldown(pillar_of_frost) < 10 and frostobliteration_poolingcdpostconditions() or enemies() >= 2 and frostaoecdpostconditions() or froststandardcdpostconditions() } ### Frost icons. @@ -1232,7 +1232,7 @@ AddIcon enabled=(checkboxon(opt_deathknight_frost_aoe) and specialization(frost) # everfrost_conduit # fallen_crusader_enchant # fireblood -# frost_fever +# frost_fever_debuff # frost_strike # frostscythe # frostscythe_talent @@ -1246,7 +1246,7 @@ AddIcon enabled=(checkboxon(opt_deathknight_frost_aoe) and specialization(frost) # hypothermic_presence # icecap_talent # icy_talons_buff -# killing_machine_frost +# killing_machine_buff # lights_judgment # mind_freeze # obliterate @@ -1258,7 +1258,7 @@ AddIcon enabled=(checkboxon(opt_deathknight_frost_aoe) and specialization(frost) # razorice # razorice_enchant # remorseless_winter -# rime_frost +# rime_buff # runic_attenuation_talent # sacrificial_pact # shackle_the_unworthy @@ -1370,11 +1370,11 @@ AddFunction unholygeneric_aoemainactions #epidemic,if=!variable.pooling_for_gargoyle if not pooling_for_gargoyle() spell(epidemic) #wound_spender,target_if=max:debuff.festering_wound.stack,if=(cooldown.apocalypse.remains>5&debuff.festering_wound.up|debuff.festering_wound.stack>4)&(fight_remainscooldown.apocalypse.remains) - if { spellcooldown(apocalypse) > 5 and target.debuffpresent(festering_wound) or target.debuffstacks(festering_wound) > 4 } and { fightremains() < spellcooldown(death_and_decay) + 10 or fightremains() > spellcooldown(apocalypse) } spell(scourge_strike) + if { spellcooldown(apocalypse) > 5 and target.debuffpresent(festering_wound_unholy) or target.debuffstacks(festering_wound_unholy) > 4 } and { fightremains() < spellcooldown(death_and_decay) + 10 or fightremains() > spellcooldown(apocalypse) } spell(scourge_strike) #festering_strike,target_if=max:debuff.festering_wound.stack,if=debuff.festering_wound.stack<=3&cooldown.apocalypse.remains<3|debuff.festering_wound.stack<1 - if target.debuffstacks(festering_wound) <= 3 and spellcooldown(apocalypse) < 3 or target.debuffstacks(festering_wound) < 1 spell(festering_strike) + if target.debuffstacks(festering_wound_unholy) <= 3 and spellcooldown(apocalypse) < 3 or target.debuffstacks(festering_wound_unholy) < 1 spell(festering_strike) #festering_strike,target_if=min:debuff.festering_wound.stack,if=cooldown.apocalypse.remains>5&debuff.festering_wound.stack<1 - if spellcooldown(apocalypse) > 5 and target.debuffstacks(festering_wound) < 1 spell(festering_strike) + if spellcooldown(apocalypse) > 5 and target.debuffstacks(festering_wound_unholy) < 1 spell(festering_strike) } AddFunction unholygeneric_aoemainpostconditions @@ -1387,7 +1387,7 @@ AddFunction unholygeneric_aoeshortcdactions AddFunction unholygeneric_aoeshortcdpostconditions { - pet.buffpresent(dark_transformation) and runeforge(deadliest_coil_runeforge) and enemies() <= 3 and spell(death_coil) or buffpresent(sudden_doom_buff) and spell(epidemic) or not pooling_for_gargoyle() and spell(epidemic) or { spellcooldown(apocalypse) > 5 and target.debuffpresent(festering_wound) or target.debuffstacks(festering_wound) > 4 } and { fightremains() < spellcooldown(death_and_decay) + 10 or fightremains() > spellcooldown(apocalypse) } and spell(scourge_strike) or { target.debuffstacks(festering_wound) <= 3 and spellcooldown(apocalypse) < 3 or target.debuffstacks(festering_wound) < 1 } and spell(festering_strike) or spellcooldown(apocalypse) > 5 and target.debuffstacks(festering_wound) < 1 and spell(festering_strike) + pet.buffpresent(dark_transformation) and runeforge(deadliest_coil_runeforge) and enemies() <= 3 and spell(death_coil) or buffpresent(sudden_doom_buff) and spell(epidemic) or not pooling_for_gargoyle() and spell(epidemic) or { spellcooldown(apocalypse) > 5 and target.debuffpresent(festering_wound_unholy) or target.debuffstacks(festering_wound_unholy) > 4 } and { fightremains() < spellcooldown(death_and_decay) + 10 or fightremains() > spellcooldown(apocalypse) } and spell(scourge_strike) or { target.debuffstacks(festering_wound_unholy) <= 3 and spellcooldown(apocalypse) < 3 or target.debuffstacks(festering_wound_unholy) < 1 } and spell(festering_strike) or spellcooldown(apocalypse) > 5 and target.debuffstacks(festering_wound_unholy) < 1 and spell(festering_strike) } AddFunction unholygeneric_aoecdactions @@ -1396,7 +1396,7 @@ AddFunction unholygeneric_aoecdactions AddFunction unholygeneric_aoecdpostconditions { - pet.buffpresent(dark_transformation) and runeforge(deadliest_coil_runeforge) and enemies() <= 3 and spell(death_coil) or buffpresent(sudden_doom_buff) and spell(epidemic) or not pooling_for_gargoyle() and spell(epidemic) or { spellcooldown(apocalypse) > 5 and target.debuffpresent(festering_wound) or target.debuffstacks(festering_wound) > 4 } and { fightremains() < spellcooldown(death_and_decay) + 10 or fightremains() > spellcooldown(apocalypse) } and spell(scourge_strike) or { target.debuffstacks(festering_wound) <= 3 and spellcooldown(apocalypse) < 3 or target.debuffstacks(festering_wound) < 1 } and spell(festering_strike) or spellcooldown(apocalypse) > 5 and target.debuffstacks(festering_wound) < 1 and spell(festering_strike) + pet.buffpresent(dark_transformation) and runeforge(deadliest_coil_runeforge) and enemies() <= 3 and spell(death_coil) or buffpresent(sudden_doom_buff) and spell(epidemic) or not pooling_for_gargoyle() and spell(epidemic) or { spellcooldown(apocalypse) > 5 and target.debuffpresent(festering_wound_unholy) or target.debuffstacks(festering_wound_unholy) > 4 } and { fightremains() < spellcooldown(death_and_decay) + 10 or fightremains() > spellcooldown(apocalypse) } and spell(scourge_strike) or { target.debuffstacks(festering_wound_unholy) <= 3 and spellcooldown(apocalypse) < 3 or target.debuffstacks(festering_wound_unholy) < 1 } and spell(festering_strike) or spellcooldown(apocalypse) > 5 and target.debuffstacks(festering_wound_unholy) < 1 and spell(festering_strike) } ### actions.generic @@ -1408,19 +1408,19 @@ AddFunction unholygenericmainactions #death_coil,if=runic_power.deficit<13&!variable.pooling_for_gargoyle if runicpowerdeficit() < 13 and not pooling_for_gargoyle() spell(death_coil) #wound_spender,if=debuff.festering_wound.stack>4 - if target.debuffstacks(festering_wound) > 4 spell(scourge_strike) + if target.debuffstacks(festering_wound_unholy) > 4 spell(scourge_strike) #wound_spender,if=debuff.festering_wound.up&cooldown.apocalypse.remains>5&(!talent.unholy_blight|talent.army_of_the_damned&conduit.convocation_of_the_dead.rank<5|!talent.army_of_the_damned&conduit.convocation_of_the_dead.rank>=5|!conduit.convocation_of_the_dead) - if target.debuffpresent(festering_wound) and spellcooldown(apocalypse) > 5 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or not conduit(convocation_of_the_dead_conduit) } spell(scourge_strike) + if target.debuffpresent(festering_wound_unholy) and spellcooldown(apocalypse) > 5 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or not conduit(convocation_of_the_dead_conduit) } spell(scourge_strike) #wound_spender,if=debuff.festering_wound.up&talent.unholy_blight&(!talent.army_of_the_damned&conduit.convocation_of_the_dead.rank<5|talent.army_of_the_damned&conduit.convocation_of_the_dead.rank>=5)&(cooldown.unholy_blight.remains>10&!dot.unholy_blight_dot.remains|cooldown.apocalypse.remains>10) - if target.debuffpresent(festering_wound) and hastalent(unholy_blight_talent) and { not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 } and { spellcooldown(unholy_blight) > 10 and not target.debuffremaining(unholy_blight) or spellcooldown(apocalypse) > 10 } spell(scourge_strike) + if target.debuffpresent(festering_wound_unholy) and hastalent(unholy_blight_talent) and { not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 } and { spellcooldown(unholy_blight) > 10 and not target.debuffremaining(unholy_blight) or spellcooldown(apocalypse) > 10 } spell(scourge_strike) #death_coil,if=runic_power.deficit<20&!variable.pooling_for_gargoyle if runicpowerdeficit() < 20 and not pooling_for_gargoyle() spell(death_coil) #festering_strike,if=debuff.festering_wound.stack<1 - if target.debuffstacks(festering_wound) < 1 spell(festering_strike) + if target.debuffstacks(festering_wound_unholy) < 1 spell(festering_strike) #festering_strike,if=debuff.festering_wound.stack<4&cooldown.apocalypse.remains<5&(!talent.unholy_blight|talent.army_of_the_damned&conduit.convocation_of_the_dead.rank<5|!talent.army_of_the_damned&conduit.convocation_of_the_dead.rank>=5|!conduit.convocation_of_the_dead) - if target.debuffstacks(festering_wound) < 4 and spellcooldown(apocalypse) < 5 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or not conduit(convocation_of_the_dead_conduit) } spell(festering_strike) + if target.debuffstacks(festering_wound_unholy) < 4 and spellcooldown(apocalypse) < 5 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or not conduit(convocation_of_the_dead_conduit) } spell(festering_strike) #festering_strike,if=debuff.festering_wound.stack<4&talent.unholy_blight&(!talent.army_of_the_damned&conduit.convocation_of_the_dead.rank<5|talent.army_of_the_damned&conduit.convocation_of_the_dead.rank>=5)&(cooldown.unholy_blight.remains<10|cooldown.apocalypse.remains<10&dot.unholy_blight_dot.remains) - if target.debuffstacks(festering_wound) < 4 and hastalent(unholy_blight_talent) and { not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 } and { spellcooldown(unholy_blight) < 10 or spellcooldown(apocalypse) < 10 and target.debuffremaining(unholy_blight) } spell(festering_strike) + if target.debuffstacks(festering_wound_unholy) < 4 and hastalent(unholy_blight_talent) and { not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 } and { spellcooldown(unholy_blight) < 10 or spellcooldown(apocalypse) < 10 and target.debuffremaining(unholy_blight) } spell(festering_strike) #death_coil,if=!variable.pooling_for_gargoyle if not pooling_for_gargoyle() spell(death_coil) } @@ -1440,7 +1440,7 @@ AddFunction unholygenericshortcdactions AddFunction unholygenericshortcdpostconditions { - { buffpresent(sudden_doom_buff) and not pooling_for_gargoyle() or totempresent(summon_gargoyle) } and spell(death_coil) or runicpowerdeficit() < 13 and not pooling_for_gargoyle() and spell(death_coil) or target.debuffstacks(festering_wound) > 4 and spell(scourge_strike) or target.debuffpresent(festering_wound) and spellcooldown(apocalypse) > 5 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or not conduit(convocation_of_the_dead_conduit) } and spell(scourge_strike) or target.debuffpresent(festering_wound) and hastalent(unholy_blight_talent) and { not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 } and { spellcooldown(unholy_blight) > 10 and not target.debuffremaining(unholy_blight) or spellcooldown(apocalypse) > 10 } and spell(scourge_strike) or runicpowerdeficit() < 20 and not pooling_for_gargoyle() and spell(death_coil) or target.debuffstacks(festering_wound) < 1 and spell(festering_strike) or target.debuffstacks(festering_wound) < 4 and spellcooldown(apocalypse) < 5 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or not conduit(convocation_of_the_dead_conduit) } and spell(festering_strike) or target.debuffstacks(festering_wound) < 4 and hastalent(unholy_blight_talent) and { not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 } and { spellcooldown(unholy_blight) < 10 or spellcooldown(apocalypse) < 10 and target.debuffremaining(unholy_blight) } and spell(festering_strike) or not pooling_for_gargoyle() and spell(death_coil) + { buffpresent(sudden_doom_buff) and not pooling_for_gargoyle() or totempresent(summon_gargoyle) } and spell(death_coil) or runicpowerdeficit() < 13 and not pooling_for_gargoyle() and spell(death_coil) or target.debuffstacks(festering_wound_unholy) > 4 and spell(scourge_strike) or target.debuffpresent(festering_wound_unholy) and spellcooldown(apocalypse) > 5 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or not conduit(convocation_of_the_dead_conduit) } and spell(scourge_strike) or target.debuffpresent(festering_wound_unholy) and hastalent(unholy_blight_talent) and { not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 } and { spellcooldown(unholy_blight) > 10 and not target.debuffremaining(unholy_blight) or spellcooldown(apocalypse) > 10 } and spell(scourge_strike) or runicpowerdeficit() < 20 and not pooling_for_gargoyle() and spell(death_coil) or target.debuffstacks(festering_wound_unholy) < 1 and spell(festering_strike) or target.debuffstacks(festering_wound_unholy) < 4 and spellcooldown(apocalypse) < 5 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or not conduit(convocation_of_the_dead_conduit) } and spell(festering_strike) or target.debuffstacks(festering_wound_unholy) < 4 and hastalent(unholy_blight_talent) and { not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 } and { spellcooldown(unholy_blight) < 10 or spellcooldown(apocalypse) < 10 and target.debuffremaining(unholy_blight) } and spell(festering_strike) or not pooling_for_gargoyle() and spell(death_coil) } AddFunction unholygenericcdactions @@ -1449,7 +1449,7 @@ AddFunction unholygenericcdactions AddFunction unholygenericcdpostconditions { - { buffpresent(sudden_doom_buff) and not pooling_for_gargoyle() or totempresent(summon_gargoyle) } and spell(death_coil) or runicpowerdeficit() < 13 and not pooling_for_gargoyle() and spell(death_coil) or spellcooldown(apocalypse) > 0 and { hastalent(defile_talent) or iscovenant("night_fae") or runeforge(phearomones_runeforge) } and spell(death_and_decay) or target.debuffstacks(festering_wound) > 4 and spell(scourge_strike) or target.debuffpresent(festering_wound) and spellcooldown(apocalypse) > 5 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or not conduit(convocation_of_the_dead_conduit) } and spell(scourge_strike) or target.debuffpresent(festering_wound) and hastalent(unholy_blight_talent) and { not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 } and { spellcooldown(unholy_blight) > 10 and not target.debuffremaining(unholy_blight) or spellcooldown(apocalypse) > 10 } and spell(scourge_strike) or runicpowerdeficit() < 20 and not pooling_for_gargoyle() and spell(death_coil) or target.debuffstacks(festering_wound) < 1 and spell(festering_strike) or target.debuffstacks(festering_wound) < 4 and spellcooldown(apocalypse) < 5 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or not conduit(convocation_of_the_dead_conduit) } and spell(festering_strike) or target.debuffstacks(festering_wound) < 4 and hastalent(unholy_blight_talent) and { not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 } and { spellcooldown(unholy_blight) < 10 or spellcooldown(apocalypse) < 10 and target.debuffremaining(unholy_blight) } and spell(festering_strike) or not pooling_for_gargoyle() and spell(death_coil) + { buffpresent(sudden_doom_buff) and not pooling_for_gargoyle() or totempresent(summon_gargoyle) } and spell(death_coil) or runicpowerdeficit() < 13 and not pooling_for_gargoyle() and spell(death_coil) or spellcooldown(apocalypse) > 0 and { hastalent(defile_talent) or iscovenant("night_fae") or runeforge(phearomones_runeforge) } and spell(death_and_decay) or target.debuffstacks(festering_wound_unholy) > 4 and spell(scourge_strike) or target.debuffpresent(festering_wound_unholy) and spellcooldown(apocalypse) > 5 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or not conduit(convocation_of_the_dead_conduit) } and spell(scourge_strike) or target.debuffpresent(festering_wound_unholy) and hastalent(unholy_blight_talent) and { not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 } and { spellcooldown(unholy_blight) > 10 and not target.debuffremaining(unholy_blight) or spellcooldown(apocalypse) > 10 } and spell(scourge_strike) or runicpowerdeficit() < 20 and not pooling_for_gargoyle() and spell(death_coil) or target.debuffstacks(festering_wound_unholy) < 1 and spell(festering_strike) or target.debuffstacks(festering_wound_unholy) < 4 and spellcooldown(apocalypse) < 5 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or not conduit(convocation_of_the_dead_conduit) } and spell(festering_strike) or target.debuffstacks(festering_wound_unholy) < 4 and hastalent(unholy_blight_talent) and { not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 or hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 } and { spellcooldown(unholy_blight) < 10 or spellcooldown(apocalypse) < 10 and target.debuffremaining(unholy_blight) } and spell(festering_strike) or not pooling_for_gargoyle() and spell(death_coil) } ### actions.covenants @@ -1521,17 +1521,17 @@ AddFunction unholycooldownsshortcdactions #dark_transformation,if=active_enemies>=2|fight_remains<21 if enemies() >= 2 or fightremains() < 21 spell(dark_transformation) #apocalypse,if=active_enemies=1&debuff.festering_wound.stack>=4&talent.unholy_blight&talent.army_of_the_damned&runeforge.deadliest_coil&conduit.convocation_of_the_dead.rank>=5&dot.unholy_blight_dot.remains - if enemies() == 1 and target.debuffstacks(festering_wound) >= 4 and hastalent(unholy_blight_talent) and hastalent(army_of_the_damned_talent) and runeforge(deadliest_coil_runeforge) and conduitrank(convocation_of_the_dead_conduit) >= 5 and target.debuffremaining(unholy_blight) spell(apocalypse) + if enemies() == 1 and target.debuffstacks(festering_wound_unholy) >= 4 and hastalent(unholy_blight_talent) and hastalent(army_of_the_damned_talent) and runeforge(deadliest_coil_runeforge) and conduitrank(convocation_of_the_dead_conduit) >= 5 and target.debuffremaining(unholy_blight) spell(apocalypse) #apocalypse,if=active_enemies=1&debuff.festering_wound.stack>=4&talent.unholy_blight&dot.unholy_blight_dot.remains>10&!talent.army_of_the_damned&conduit.convocation_of_the_dead.rank<5 - if enemies() == 1 and target.debuffstacks(festering_wound) >= 4 and hastalent(unholy_blight_talent) and target.debuffremaining(unholy_blight) > 10 and not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 spell(apocalypse) + if enemies() == 1 and target.debuffstacks(festering_wound_unholy) >= 4 and hastalent(unholy_blight_talent) and target.debuffremaining(unholy_blight) > 10 and not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 spell(apocalypse) #apocalypse,if=active_enemies=1&debuff.festering_wound.stack>=4&(!talent.unholy_blight|talent.army_of_the_damned&(!runeforge.deadliest_coil|conduit.convocation_of_the_dead.rank<5)|!talent.army_of_the_damned&conduit.convocation_of_the_dead.rank>=5|fight_remains<16) - if enemies() == 1 and target.debuffstacks(festering_wound) >= 4 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and { not runeforge(deadliest_coil_runeforge) or conduitrank(convocation_of_the_dead_conduit) < 5 } or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or fightremains() < 16 } spell(apocalypse) + if enemies() == 1 and target.debuffstacks(festering_wound_unholy) >= 4 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and { not runeforge(deadliest_coil_runeforge) or conduitrank(convocation_of_the_dead_conduit) < 5 } or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or fightremains() < 16 } spell(apocalypse) #apocalypse,target_if=max:debuff.festering_wound.stack,if=active_enemies>=2&debuff.festering_wound.stack>=4&!death_and_decay.ticking - if enemies() >= 2 and target.debuffstacks(festering_wound) >= 4 and not buffpresent(death_and_decay) spell(apocalypse) + if enemies() >= 2 and target.debuffstacks(festering_wound_unholy) >= 4 and not buffpresent(death_and_decay) spell(apocalypse) #unholy_assault,if=variable.st_planning&debuff.festering_wound.stack<2&(pet.apoc_ghoul.active|conduit.convocation_of_the_dead&buff.dark_transformation.up&!pet.army_ghoul.active) - if st_planning() and target.debuffstacks(festering_wound) < 2 and { spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 or conduit(convocation_of_the_dead_conduit) and pet.buffpresent(dark_transformation) and not spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 } spell(unholy_assault) + if st_planning() and target.debuffstacks(festering_wound_unholy) < 2 and { spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 or conduit(convocation_of_the_dead_conduit) and pet.buffpresent(dark_transformation) and not spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 } spell(unholy_assault) #unholy_assault,target_if=min:debuff.festering_wound.stack,if=active_enemies>=2&debuff.festering_wound.stack<2 - if enemies() >= 2 and target.debuffstacks(festering_wound) < 2 spell(unholy_assault) + if enemies() >= 2 and target.debuffstacks(festering_wound_unholy) < 2 spell(unholy_assault) unless target.timetohealthpercent(35) < 5 and target.timetodie() > 5 and spell(soul_reaper) { @@ -1564,12 +1564,12 @@ AddFunction unholycooldownscdactions #army_of_the_dead,if=cooldown.unholy_blight.remains<3&cooldown.abomination_limb.ready&soulbind.lead_by_example if spellcooldown(unholy_blight) < 3 and spellcooldown(abomination_limb) <= 0 and soulbind(lead_by_example_soulbind) spell(army_of_the_dead) - unless st_planning() and { spellcooldown(dark_transformation) < gcd() or pet.buffpresent(dark_transformation) } and { not runeforge(deadliest_coil_runeforge) or not hastalent(army_of_the_damned_talent) or conduitrank(convocation_of_the_dead_conduit) < 5 } and spell(unholy_blight) or st_planning() and runeforge(deadliest_coil_runeforge) and hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 and spellcooldown(apocalypse) < 3 and { spellcooldown(dark_transformation) < gcd() or pet.buffpresent(dark_transformation) } and spell(unholy_blight) or { enemies() >= 2 or fightremains() < 21 } and spell(unholy_blight) or st_planning() and { target.debuffremaining(unholy_blight) or not hastalent(unholy_blight_talent) } and spell(dark_transformation) or { enemies() >= 2 or fightremains() < 21 } and spell(dark_transformation) or enemies() == 1 and target.debuffstacks(festering_wound) >= 4 and hastalent(unholy_blight_talent) and hastalent(army_of_the_damned_talent) and runeforge(deadliest_coil_runeforge) and conduitrank(convocation_of_the_dead_conduit) >= 5 and target.debuffremaining(unholy_blight) and spell(apocalypse) or enemies() == 1 and target.debuffstacks(festering_wound) >= 4 and hastalent(unholy_blight_talent) and target.debuffremaining(unholy_blight) > 10 and not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 and spell(apocalypse) or enemies() == 1 and target.debuffstacks(festering_wound) >= 4 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and { not runeforge(deadliest_coil_runeforge) or conduitrank(convocation_of_the_dead_conduit) < 5 } or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or fightremains() < 16 } and spell(apocalypse) or enemies() >= 2 and target.debuffstacks(festering_wound) >= 4 and not buffpresent(death_and_decay) and spell(apocalypse) + unless st_planning() and { spellcooldown(dark_transformation) < gcd() or pet.buffpresent(dark_transformation) } and { not runeforge(deadliest_coil_runeforge) or not hastalent(army_of_the_damned_talent) or conduitrank(convocation_of_the_dead_conduit) < 5 } and spell(unholy_blight) or st_planning() and runeforge(deadliest_coil_runeforge) and hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 and spellcooldown(apocalypse) < 3 and { spellcooldown(dark_transformation) < gcd() or pet.buffpresent(dark_transformation) } and spell(unholy_blight) or { enemies() >= 2 or fightremains() < 21 } and spell(unholy_blight) or st_planning() and { target.debuffremaining(unholy_blight) or not hastalent(unholy_blight_talent) } and spell(dark_transformation) or { enemies() >= 2 or fightremains() < 21 } and spell(dark_transformation) or enemies() == 1 and target.debuffstacks(festering_wound_unholy) >= 4 and hastalent(unholy_blight_talent) and hastalent(army_of_the_damned_talent) and runeforge(deadliest_coil_runeforge) and conduitrank(convocation_of_the_dead_conduit) >= 5 and target.debuffremaining(unholy_blight) and spell(apocalypse) or enemies() == 1 and target.debuffstacks(festering_wound_unholy) >= 4 and hastalent(unholy_blight_talent) and target.debuffremaining(unholy_blight) > 10 and not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 and spell(apocalypse) or enemies() == 1 and target.debuffstacks(festering_wound_unholy) >= 4 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and { not runeforge(deadliest_coil_runeforge) or conduitrank(convocation_of_the_dead_conduit) < 5 } or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or fightremains() < 16 } and spell(apocalypse) or enemies() >= 2 and target.debuffstacks(festering_wound_unholy) >= 4 and not buffpresent(death_and_decay) and spell(apocalypse) { #summon_gargoyle,if=runic_power.deficit<14&(cooldown.unholy_blight.remains<10|dot.unholy_blight_dot.remains) if runicpowerdeficit() < 14 and { spellcooldown(unholy_blight) < 10 or target.debuffremaining(unholy_blight) } spell(summon_gargoyle) - unless st_planning() and target.debuffstacks(festering_wound) < 2 and { spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 or conduit(convocation_of_the_dead_conduit) and pet.buffpresent(dark_transformation) and not spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 } and spell(unholy_assault) or enemies() >= 2 and target.debuffstacks(festering_wound) < 2 and spell(unholy_assault) or target.timetohealthpercent(35) < 5 and target.timetodie() > 5 and spell(soul_reaper) or not pet.present() and spell(raise_dead_unholy) + unless st_planning() and target.debuffstacks(festering_wound_unholy) < 2 and { spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 or conduit(convocation_of_the_dead_conduit) and pet.buffpresent(dark_transformation) and not spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 } and spell(unholy_assault) or enemies() >= 2 and target.debuffstacks(festering_wound_unholy) < 2 and spell(unholy_assault) or target.timetohealthpercent(35) < 5 and target.timetodie() > 5 and spell(soul_reaper) or not pet.present() and spell(raise_dead_unholy) { #sacrificial_pact,if=active_enemies>=2&!buff.dark_transformation.up&!cooldown.dark_transformation.ready|fight_remains= 2 and not pet.buffpresent(dark_transformation) and not spellcooldown(dark_transformation) <= 0 or fightremains() < gcd() spell(sacrificial_pact) @@ -1579,7 +1579,7 @@ AddFunction unholycooldownscdactions AddFunction unholycooldownscdpostconditions { - st_planning() and { spellcooldown(dark_transformation) < gcd() or pet.buffpresent(dark_transformation) } and { not runeforge(deadliest_coil_runeforge) or not hastalent(army_of_the_damned_talent) or conduitrank(convocation_of_the_dead_conduit) < 5 } and spell(unholy_blight) or st_planning() and runeforge(deadliest_coil_runeforge) and hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 and spellcooldown(apocalypse) < 3 and { spellcooldown(dark_transformation) < gcd() or pet.buffpresent(dark_transformation) } and spell(unholy_blight) or { enemies() >= 2 or fightremains() < 21 } and spell(unholy_blight) or st_planning() and { target.debuffremaining(unholy_blight) or not hastalent(unholy_blight_talent) } and spell(dark_transformation) or { enemies() >= 2 or fightremains() < 21 } and spell(dark_transformation) or enemies() == 1 and target.debuffstacks(festering_wound) >= 4 and hastalent(unholy_blight_talent) and hastalent(army_of_the_damned_talent) and runeforge(deadliest_coil_runeforge) and conduitrank(convocation_of_the_dead_conduit) >= 5 and target.debuffremaining(unholy_blight) and spell(apocalypse) or enemies() == 1 and target.debuffstacks(festering_wound) >= 4 and hastalent(unholy_blight_talent) and target.debuffremaining(unholy_blight) > 10 and not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 and spell(apocalypse) or enemies() == 1 and target.debuffstacks(festering_wound) >= 4 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and { not runeforge(deadliest_coil_runeforge) or conduitrank(convocation_of_the_dead_conduit) < 5 } or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or fightremains() < 16 } and spell(apocalypse) or enemies() >= 2 and target.debuffstacks(festering_wound) >= 4 and not buffpresent(death_and_decay) and spell(apocalypse) or st_planning() and target.debuffstacks(festering_wound) < 2 and { spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 or conduit(convocation_of_the_dead_conduit) and pet.buffpresent(dark_transformation) and not spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 } and spell(unholy_assault) or enemies() >= 2 and target.debuffstacks(festering_wound) < 2 and spell(unholy_assault) or target.timetohealthpercent(35) < 5 and target.timetodie() > 5 and spell(soul_reaper) or not pet.present() and spell(raise_dead_unholy) + st_planning() and { spellcooldown(dark_transformation) < gcd() or pet.buffpresent(dark_transformation) } and { not runeforge(deadliest_coil_runeforge) or not hastalent(army_of_the_damned_talent) or conduitrank(convocation_of_the_dead_conduit) < 5 } and spell(unholy_blight) or st_planning() and runeforge(deadliest_coil_runeforge) and hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 and spellcooldown(apocalypse) < 3 and { spellcooldown(dark_transformation) < gcd() or pet.buffpresent(dark_transformation) } and spell(unholy_blight) or { enemies() >= 2 or fightremains() < 21 } and spell(unholy_blight) or st_planning() and { target.debuffremaining(unholy_blight) or not hastalent(unholy_blight_talent) } and spell(dark_transformation) or { enemies() >= 2 or fightremains() < 21 } and spell(dark_transformation) or enemies() == 1 and target.debuffstacks(festering_wound_unholy) >= 4 and hastalent(unholy_blight_talent) and hastalent(army_of_the_damned_talent) and runeforge(deadliest_coil_runeforge) and conduitrank(convocation_of_the_dead_conduit) >= 5 and target.debuffremaining(unholy_blight) and spell(apocalypse) or enemies() == 1 and target.debuffstacks(festering_wound_unholy) >= 4 and hastalent(unholy_blight_talent) and target.debuffremaining(unholy_blight) > 10 and not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) < 5 and spell(apocalypse) or enemies() == 1 and target.debuffstacks(festering_wound_unholy) >= 4 and { not hastalent(unholy_blight_talent) or hastalent(army_of_the_damned_talent) and { not runeforge(deadliest_coil_runeforge) or conduitrank(convocation_of_the_dead_conduit) < 5 } or not hastalent(army_of_the_damned_talent) and conduitrank(convocation_of_the_dead_conduit) >= 5 or fightremains() < 16 } and spell(apocalypse) or enemies() >= 2 and target.debuffstacks(festering_wound_unholy) >= 4 and not buffpresent(death_and_decay) and spell(apocalypse) or st_planning() and target.debuffstacks(festering_wound_unholy) < 2 and { spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 or conduit(convocation_of_the_dead_conduit) and pet.buffpresent(dark_transformation) and not spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 } and spell(unholy_assault) or enemies() >= 2 and target.debuffstacks(festering_wound_unholy) < 2 and spell(unholy_assault) or target.timetohealthpercent(35) < 5 and target.timetodie() > 5 and spell(soul_reaper) or not pet.present() and spell(raise_dead_unholy) } ### actions.aoe_setup @@ -1591,9 +1591,9 @@ AddFunction unholyaoe_setupmainactions #epidemic,if=!variable.pooling_for_gargoyle if not pooling_for_gargoyle() spell(epidemic) #festering_strike,target_if=max:debuff.festering_wound.stack,if=debuff.festering_wound.stack<=3&cooldown.apocalypse.remains<3 - if target.debuffstacks(festering_wound) <= 3 and spellcooldown(apocalypse) < 3 spell(festering_strike) + if target.debuffstacks(festering_wound_unholy) <= 3 and spellcooldown(apocalypse) < 3 spell(festering_strike) #festering_strike,target_if=debuff.festering_wound.stack<1 - if target.debuffstacks(festering_wound) < 1 spell(festering_strike) + if target.debuffstacks(festering_wound_unholy) < 1 spell(festering_strike) #festering_strike,target_if=min:debuff.festering_wound.stack,if=rune.time_to_4<(cooldown.death_and_decay.remains&!talent.defile|cooldown.defile.remains&talent.defile) if timetorunes(4) < { spellcooldown(death_and_decay) > 0 and not hastalent(defile_talent) or spellcooldown(defile) > 0 and hastalent(defile_talent) } spell(festering_strike) } @@ -1612,7 +1612,7 @@ AddFunction unholyaoe_setupshortcdactions AddFunction unholyaoe_setupshortcdpostconditions { - pet.buffpresent(dark_transformation) and runeforge(deadliest_coil_runeforge) and enemies() <= 3 and spell(death_coil) or not pooling_for_gargoyle() and spell(epidemic) or target.debuffstacks(festering_wound) <= 3 and spellcooldown(apocalypse) < 3 and spell(festering_strike) or target.debuffstacks(festering_wound) < 1 and spell(festering_strike) or timetorunes(4) < { spellcooldown(death_and_decay) > 0 and not hastalent(defile_talent) or spellcooldown(defile) > 0 and hastalent(defile_talent) } and spell(festering_strike) + pet.buffpresent(dark_transformation) and runeforge(deadliest_coil_runeforge) and enemies() <= 3 and spell(death_coil) or not pooling_for_gargoyle() and spell(epidemic) or target.debuffstacks(festering_wound_unholy) <= 3 and spellcooldown(apocalypse) < 3 and spell(festering_strike) or target.debuffstacks(festering_wound_unholy) < 1 and spell(festering_strike) or timetorunes(4) < { spellcooldown(death_and_decay) > 0 and not hastalent(defile_talent) or spellcooldown(defile) > 0 and hastalent(defile_talent) } and spell(festering_strike) } AddFunction unholyaoe_setupcdactions @@ -1621,7 +1621,7 @@ AddFunction unholyaoe_setupcdactions AddFunction unholyaoe_setupcdpostconditions { - { buffcountonany == enemies() or never(raid_event_adds_exists) and 0 <= 11 } and spell(death_and_decay) or buffcountonany >= 5 and spell(death_and_decay) or pet.buffpresent(dark_transformation) and runeforge(deadliest_coil_runeforge) and enemies() <= 3 and spell(death_coil) or not pooling_for_gargoyle() and spell(epidemic) or target.debuffstacks(festering_wound) <= 3 and spellcooldown(apocalypse) < 3 and spell(festering_strike) or target.debuffstacks(festering_wound) < 1 and spell(festering_strike) or timetorunes(4) < { spellcooldown(death_and_decay) > 0 and not hastalent(defile_talent) or spellcooldown(defile) > 0 and hastalent(defile_talent) } and spell(festering_strike) + { buffcountonany == enemies() or never(raid_event_adds_exists) and 0 <= 11 } and spell(death_and_decay) or buffcountonany >= 5 and spell(death_and_decay) or pet.buffpresent(dark_transformation) and runeforge(deadliest_coil_runeforge) and enemies() <= 3 and spell(death_coil) or not pooling_for_gargoyle() and spell(epidemic) or target.debuffstacks(festering_wound_unholy) <= 3 and spellcooldown(apocalypse) < 3 and spell(festering_strike) or target.debuffstacks(festering_wound_unholy) < 1 and spell(festering_strike) or timetorunes(4) < { spellcooldown(death_and_decay) > 0 and not hastalent(defile_talent) or spellcooldown(defile) > 0 and hastalent(defile_talent) } and spell(festering_strike) } ### actions.aoe_burst @@ -1668,6 +1668,8 @@ AddFunction unholyaoe_burstcdpostconditions AddFunction unholy_defaultmainactions { + #blood_fury,if=pet.gargoyle.active|buff.unholy_assault.up|talent.army_of_the_damned&pet.apoc_ghoul.active&(pet.army_ghoul.active|cooldown.army_of_the_dead.remains>cooldown.blood_fury.duration%3)|target.time_to_die<=buff.blood_fury.duration + if totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(blood_fury) / 3 } or target.timetodie() <= baseduration(blood_fury_buff) spell(blood_fury) #berserking,if=pet.gargoyle.active|buff.unholy_assault.up|talent.army_of_the_damned&pet.apoc_ghoul.active&(pet.army_ghoul.active|cooldown.army_of_the_dead.remains>cooldown.berserking.duration%3)|target.time_to_die<=buff.berserking.duration if totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(berserking) / 3 } or target.timetodie() <= baseduration(berserking_buff) spell(berserking) #outbreak,if=dot.virulent_plague.refreshable&!talent.unholy_blight&!raid_event.adds.exists @@ -1675,7 +1677,7 @@ AddFunction unholy_defaultmainactions #outbreak,if=dot.virulent_plague.refreshable&active_enemies>=2&(!talent.unholy_blight|talent.unholy_blight&cooldown.unholy_blight.remains) if target.debuffrefreshable(virulent_plague) and enemies() >= 2 and { not hastalent(unholy_blight_talent) or hastalent(unholy_blight_talent) and spellcooldown(unholy_blight) > 0 } spell(outbreak) #outbreak,if=runeforge.superstrain&(dot.frost_fever.refreshable|dot.blood_plague.refreshable) - if runeforge(superstrain_runeforge) and { target.debuffrefreshable(frost_fever) or target.debuffrefreshable(blood_plague) } spell(outbreak) + if runeforge(superstrain_runeforge) and { target.debuffrefreshable(frost_fever_debuff) or target.debuffrefreshable(blood_plague) } spell(outbreak) #call_action_list,name=covenants unholycovenantsmainactions() @@ -1720,12 +1722,12 @@ AddFunction unholy_defaultshortcdactions #auto_attack unholygetinmeleerange() - unless { totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(berserking) / 3 } or target.timetodie() <= baseduration(berserking_buff) } and spell(berserking) + unless { totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(blood_fury) / 3 } or target.timetodie() <= baseduration(blood_fury_buff) } and spell(blood_fury) or { totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(berserking) / 3 } or target.timetodie() <= baseduration(berserking_buff) } and spell(berserking) { #bag_of_tricks,if=buff.unholy_strength.up&active_enemies=1 if buffpresent(unholy_strength) and enemies() == 1 spell(bag_of_tricks) - unless target.debuffrefreshable(virulent_plague) and not hastalent(unholy_blight_talent) and not never(raid_event_adds_exists) and spell(outbreak) or target.debuffrefreshable(virulent_plague) and enemies() >= 2 and { not hastalent(unholy_blight_talent) or hastalent(unholy_blight_talent) and spellcooldown(unholy_blight) > 0 } and spell(outbreak) or runeforge(superstrain_runeforge) and { target.debuffrefreshable(frost_fever) or target.debuffrefreshable(blood_plague) } and spell(outbreak) + unless target.debuffrefreshable(virulent_plague) and not hastalent(unholy_blight_talent) and not never(raid_event_adds_exists) and spell(outbreak) or target.debuffrefreshable(virulent_plague) and enemies() >= 2 and { not hastalent(unholy_blight_talent) or hastalent(unholy_blight_talent) and spellcooldown(unholy_blight) > 0 } and spell(outbreak) or runeforge(superstrain_runeforge) and { target.debuffrefreshable(frost_fever_debuff) or target.debuffrefreshable(blood_plague) } and spell(outbreak) { #call_action_list,name=covenants unholycovenantsshortcdactions() @@ -1765,7 +1767,7 @@ AddFunction unholy_defaultshortcdactions AddFunction unholy_defaultshortcdpostconditions { - { totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(berserking) / 3 } or target.timetodie() <= baseduration(berserking_buff) } and spell(berserking) or target.debuffrefreshable(virulent_plague) and not hastalent(unholy_blight_talent) and not never(raid_event_adds_exists) and spell(outbreak) or target.debuffrefreshable(virulent_plague) and enemies() >= 2 and { not hastalent(unholy_blight_talent) or hastalent(unholy_blight_talent) and spellcooldown(unholy_blight) > 0 } and spell(outbreak) or runeforge(superstrain_runeforge) and { target.debuffrefreshable(frost_fever) or target.debuffrefreshable(blood_plague) } and spell(outbreak) or unholycovenantsshortcdpostconditions() or unholycooldownsshortcdpostconditions() or enemies() >= 2 and { spellcooldown(death_and_decay) < 10 and not hastalent(defile_talent) or spellcooldown(defile) < 10 and hastalent(defile_talent) } and not buffpresent(death_and_decay) and unholyaoe_setupshortcdpostconditions() or enemies() >= 2 and buffpresent(death_and_decay) and unholyaoe_burstshortcdpostconditions() or enemies() >= 2 and not buffpresent(death_and_decay) and { spellcooldown(death_and_decay) > 10 and not hastalent(defile_talent) or spellcooldown(defile) > 10 and hastalent(defile_talent) } and unholygeneric_aoeshortcdpostconditions() or enemies() == 1 and unholygenericshortcdpostconditions() + { totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(blood_fury) / 3 } or target.timetodie() <= baseduration(blood_fury_buff) } and spell(blood_fury) or { totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(berserking) / 3 } or target.timetodie() <= baseduration(berserking_buff) } and spell(berserking) or target.debuffrefreshable(virulent_plague) and not hastalent(unholy_blight_talent) and not never(raid_event_adds_exists) and spell(outbreak) or target.debuffrefreshable(virulent_plague) and enemies() >= 2 and { not hastalent(unholy_blight_talent) or hastalent(unholy_blight_talent) and spellcooldown(unholy_blight) > 0 } and spell(outbreak) or runeforge(superstrain_runeforge) and { target.debuffrefreshable(frost_fever_debuff) or target.debuffrefreshable(blood_plague) } and spell(outbreak) or unholycovenantsshortcdpostconditions() or unholycooldownsshortcdpostconditions() or enemies() >= 2 and { spellcooldown(death_and_decay) < 10 and not hastalent(defile_talent) or spellcooldown(defile) < 10 and hastalent(defile_talent) } and not buffpresent(death_and_decay) and unholyaoe_setupshortcdpostconditions() or enemies() >= 2 and buffpresent(death_and_decay) and unholyaoe_burstshortcdpostconditions() or enemies() >= 2 and not buffpresent(death_and_decay) and { spellcooldown(death_and_decay) > 10 and not hastalent(defile_talent) or spellcooldown(defile) > 10 and hastalent(defile_talent) } and unholygeneric_aoeshortcdpostconditions() or enemies() == 1 and unholygenericshortcdpostconditions() } AddFunction unholy_defaultcdactions @@ -1775,10 +1777,8 @@ AddFunction unholy_defaultcdactions #variable,name=st_planning,value=active_enemies=1&(!raid_event.adds.exists|raid_event.adds.in>15) #arcane_torrent,if=runic_power.deficit>65&(pet.gargoyle.active|!talent.summon_gargoyle.enabled)&rune.deficit>=5 if runicpowerdeficit() > 65 and { totempresent(summon_gargoyle) or not hastalent(summon_gargoyle_talent) } and runedeficit() >= 5 spell(arcane_torrent) - #blood_fury,if=pet.gargoyle.active|buff.unholy_assault.up|talent.army_of_the_damned&pet.apoc_ghoul.active&(pet.army_ghoul.active|cooldown.army_of_the_dead.remains>cooldown.blood_fury.duration%3)|target.time_to_die<=buff.blood_fury.duration - if totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(blood_fury) / 3 } or target.timetodie() <= baseduration(blood_fury) spell(blood_fury) - unless { totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(berserking) / 3 } or target.timetodie() <= baseduration(berserking_buff) } and spell(berserking) + unless { totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(blood_fury) / 3 } or target.timetodie() <= baseduration(blood_fury_buff) } and spell(blood_fury) or { totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(berserking) / 3 } or target.timetodie() <= baseduration(berserking_buff) } and spell(berserking) { #lights_judgment,if=buff.unholy_strength.up if buffpresent(unholy_strength) spell(lights_judgment) @@ -1789,7 +1789,7 @@ AddFunction unholy_defaultcdactions #fireblood,if=pet.gargoyle.active|buff.unholy_assault.up|talent.army_of_the_damned&pet.apoc_ghoul.active&(pet.army_ghoul.active|cooldown.army_of_the_dead.remains>cooldown.fireblood.duration%3)|target.time_to_die<=buff.fireblood.duration if totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(fireblood) / 3 } or target.timetodie() <= baseduration(fireblood_buff) spell(fireblood) - unless buffpresent(unholy_strength) and enemies() == 1 and spell(bag_of_tricks) or target.debuffrefreshable(virulent_plague) and not hastalent(unholy_blight_talent) and not never(raid_event_adds_exists) and spell(outbreak) or target.debuffrefreshable(virulent_plague) and enemies() >= 2 and { not hastalent(unholy_blight_talent) or hastalent(unholy_blight_talent) and spellcooldown(unholy_blight) > 0 } and spell(outbreak) or runeforge(superstrain_runeforge) and { target.debuffrefreshable(frost_fever) or target.debuffrefreshable(blood_plague) } and spell(outbreak) + unless buffpresent(unholy_strength) and enemies() == 1 and spell(bag_of_tricks) or target.debuffrefreshable(virulent_plague) and not hastalent(unholy_blight_talent) and not never(raid_event_adds_exists) and spell(outbreak) or target.debuffrefreshable(virulent_plague) and enemies() >= 2 and { not hastalent(unholy_blight_talent) or hastalent(unholy_blight_talent) and spellcooldown(unholy_blight) > 0 } and spell(outbreak) or runeforge(superstrain_runeforge) and { target.debuffrefreshable(frost_fever_debuff) or target.debuffrefreshable(blood_plague) } and spell(outbreak) { #call_action_list,name=covenants unholycovenantscdactions() @@ -1829,7 +1829,7 @@ AddFunction unholy_defaultcdactions AddFunction unholy_defaultcdpostconditions { - { totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(berserking) / 3 } or target.timetodie() <= baseduration(berserking_buff) } and spell(berserking) or buffpresent(unholy_strength) and enemies() == 1 and spell(bag_of_tricks) or target.debuffrefreshable(virulent_plague) and not hastalent(unholy_blight_talent) and not never(raid_event_adds_exists) and spell(outbreak) or target.debuffrefreshable(virulent_plague) and enemies() >= 2 and { not hastalent(unholy_blight_talent) or hastalent(unholy_blight_talent) and spellcooldown(unholy_blight) > 0 } and spell(outbreak) or runeforge(superstrain_runeforge) and { target.debuffrefreshable(frost_fever) or target.debuffrefreshable(blood_plague) } and spell(outbreak) or unholycovenantscdpostconditions() or unholycooldownscdpostconditions() or enemies() >= 2 and { spellcooldown(death_and_decay) < 10 and not hastalent(defile_talent) or spellcooldown(defile) < 10 and hastalent(defile_talent) } and not buffpresent(death_and_decay) and unholyaoe_setupcdpostconditions() or enemies() >= 2 and buffpresent(death_and_decay) and unholyaoe_burstcdpostconditions() or enemies() >= 2 and not buffpresent(death_and_decay) and { spellcooldown(death_and_decay) > 10 and not hastalent(defile_talent) or spellcooldown(defile) > 10 and hastalent(defile_talent) } and unholygeneric_aoecdpostconditions() or enemies() == 1 and unholygenericcdpostconditions() + { totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(blood_fury) / 3 } or target.timetodie() <= baseduration(blood_fury_buff) } and spell(blood_fury) or { totempresent(summon_gargoyle) or buffpresent(unholy_assault) or hastalent(army_of_the_damned_talent) and spellcooldownduration(apocalypse) - spellcooldown(apocalypse) < 15 and { spellcooldownduration(army_of_the_dead) - spellcooldown(army_of_the_dead) < 30 or spellcooldown(army_of_the_dead) > spellcooldownduration(berserking) / 3 } or target.timetodie() <= baseduration(berserking_buff) } and spell(berserking) or buffpresent(unholy_strength) and enemies() == 1 and spell(bag_of_tricks) or target.debuffrefreshable(virulent_plague) and not hastalent(unholy_blight_talent) and not never(raid_event_adds_exists) and spell(outbreak) or target.debuffrefreshable(virulent_plague) and enemies() >= 2 and { not hastalent(unholy_blight_talent) or hastalent(unholy_blight_talent) and spellcooldown(unholy_blight) > 0 } and spell(outbreak) or runeforge(superstrain_runeforge) and { target.debuffrefreshable(frost_fever_debuff) or target.debuffrefreshable(blood_plague) } and spell(outbreak) or unholycovenantscdpostconditions() or unholycooldownscdpostconditions() or enemies() >= 2 and { spellcooldown(death_and_decay) < 10 and not hastalent(defile_talent) or spellcooldown(defile) < 10 and hastalent(defile_talent) } and not buffpresent(death_and_decay) and unholyaoe_setupcdpostconditions() or enemies() >= 2 and buffpresent(death_and_decay) and unholyaoe_burstcdpostconditions() or enemies() >= 2 and not buffpresent(death_and_decay) and { spellcooldown(death_and_decay) > 10 and not hastalent(defile_talent) or spellcooldown(defile) > 10 and hastalent(defile_talent) } and unholygeneric_aoecdpostconditions() or enemies() == 1 and unholygenericcdpostconditions() } ### Unholy icons. @@ -1885,6 +1885,7 @@ AddIcon enabled=(checkboxon(opt_deathknight_unholy_aoe) and specialization(unhol # berserking # berserking_buff # blood_fury +# blood_fury_buff # blood_plague # convocation_of_the_dead_conduit # dark_transformation @@ -1896,10 +1897,10 @@ AddIcon enabled=(checkboxon(opt_deathknight_unholy_aoe) and specialization(unhol # defile_talent # epidemic # festering_strike -# festering_wound +# festering_wound_unholy # fireblood # fireblood_buff -# frost_fever +# frost_fever_debuff # inscrutable_quantum_device # inscrutable_quantum_device_item # lead_by_example_soulbind diff --git a/src/scripts/ovale_deathknight_spells.ts b/src/scripts/ovale_deathknight_spells.ts index 794d3ebc6..fce3513a1 100644 --- a/src/scripts/ovale_deathknight_spells.ts +++ b/src/scripts/ovale_deathknight_spells.ts @@ -37,9 +37,10 @@ Define(army_of_the_dead 42650) SpellInfo(army_of_the_dead runes=1 runicpower=-10 cd=480 duration=4 tick=0.5) # Summoning ghouls. SpellAddBuff(army_of_the_dead army_of_the_dead add=1) -Define(asphyxiate 221562) -# Lifts the enemy target off the ground, crushing their throat with dark energy and stunning them for 5 seconds. - SpellInfo(asphyxiate cd=45 duration=5) +Define(asphyxiate 108194) +# Lifts the enemy target off the ground, crushing their throat with dark energy and stunning them for 4 seconds. + SpellInfo(asphyxiate cd=45 duration=4) + SpellRequire(asphyxiate unusable set=1 enabled=(not {hastalent(asphyxiate_talent) or hastalent(asphyxiate_talent_unholy)})) # Stunned. SpellAddTargetDebuff(asphyxiate asphyxiate add=1) Define(bag_of_tricks 312411) @@ -62,11 +63,14 @@ Define(blinding_sleet 207167) Define(blood_boil 50842) # Deals s1 Shadow damage?s212744[ to all enemies within A1 yds.][ and infects all enemies within A1 yds with Blood Plague.rnrn|Tinterfaceiconsspell_deathknight_bloodplague.blp:24|t |cFFFFFFFFBlood Plague|rrnA shadowy disease that drains o1 health from the target over 24 seconds. ] SpellInfo(blood_boil cd=7.5) -Define(blood_fury 20572) +Define(blood_fury 24571) +# Instantly increases your rage by 300/10. + SpellInfo(blood_fury gcd=0 offgcd=1 rage=-30) +Define(blood_fury_buff 20572) # Increases your attack power by s1 for 15 seconds. - SpellInfo(blood_fury cd=120 duration=15 gcd=0 offgcd=1) + SpellInfo(blood_fury_buff cd=120 duration=15 gcd=0 offgcd=1) # Attack power increased by w1. - SpellAddBuff(blood_fury blood_fury add=1) + SpellAddBuff(blood_fury_buff blood_fury_buff add=1) Define(blood_plague 55078) # A shadowy disease that drains o1 health from the target over 24 seconds. SpellInfo(blood_plague duration=24 gcd=0 offgcd=1 tick=3) @@ -171,11 +175,9 @@ Define(eradicating_blow 337936) Define(festering_strike 85948) # Strikes for s1 Physical damage and infects the target with m2-M2 Festering Wounds.rnrn|Tinterfaceiconsspell_yorsahj_bloodboil_purpleoil.blp:24|t |cFFFFFFFFFestering Wound|rrnA pustulent lesion that will burst on death or when damaged by Scourge Strike, dealing 194311s1 Shadow damage and generating 195757s1 Runic Power. SpellInfo(festering_strike runes=2 runicpower=-20) -Define(festering_wound 194310) -# A pustulent lesion that will burst on death or when damaged by Scourge Strike, dealing 194311s1 Shadow damage and generating 195757s1 Runic Power. - SpellInfo(festering_wound duration=30 max_stacks=6 gcd=0 offgcd=1) - # Suffering from a wound that will deal 194311s1/s1 Shadow damage when damaged by Scourge Strike. - SpellAddTargetDebuff(festering_wound festering_wound add=1) +Define(festering_wound_unholy 197147) +# Festering Strike applies a pustulent lesion that will burst on death or when damaged by Scourge Strike, dealing 194311s1 Shadow damage and generating 195757s1 Runic Power.rnrnStacks up to 194310u times on any target. + SpellInfo(festering_wound_unholy gcd=0 offgcd=1 unusable=1) Define(fireblood 265221) # Removes all poison, disease, curse, magic, and bleed effects and increases your ?a162700[Agility]?a162702[Strength]?a162697[Agility]?a162698[Strength]?a162699[Intellect]?a162701[Intellect][primary stat] by 265226s1*3 and an additional 265226s1 for each effect removed. Lasts 8 seconds. ?s195710[This effect shares a 30 sec cooldown with other similar effects.][] SpellInfo(fireblood cd=120 gcd=0 offgcd=1) @@ -184,11 +186,11 @@ Define(fireblood_buff 265226) SpellInfo(fireblood_buff duration=8 max_stacks=6 gcd=0 offgcd=1) # Increases ?a162700[Agility]?a162702[Strength]?a162697[Agility]?a162698[Strength]?a162699[Intellect]?a162701[Intellect][primary stat] by w1. SpellAddBuff(fireblood_buff fireblood_buff add=1) -Define(frost_fever 55095) +Define(frost_fever_debuff 55095) # A disease that deals o1*/AP Frost damage over 24 seconds and has a chance to grant the Death Knight 195617m1/10 Runic Power each time it deals damage. - SpellInfo(frost_fever duration=24 gcd=0 offgcd=1 tick=3) + SpellInfo(frost_fever_debuff duration=24 gcd=0 offgcd=1 tick=3) # Suffering w1 Frost damage every t1 sec. - SpellAddTargetDebuff(frost_fever frost_fever add=1) + SpellAddTargetDebuff(frost_fever_debuff frost_fever_debuff add=1) 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) @@ -234,9 +236,9 @@ Define(icy_talons_buff 194879) Define(inscrutable_quantum_device 330323) # ??? SpellInfo(inscrutable_quantum_device cd=180 gcd=0 offgcd=1) -Define(killing_machine_frost 317214) -# Your next Obliterate also deals Frost damage. - SpellInfo(killing_machine_frost gcd=0 offgcd=1 unusable=1) +Define(killing_machine_buff 51124) +# Your auto attack has a chance to cause your next Obliterate ?s207230[or Frostscythe ][]to be a guaranteed critical strike. + SpellInfo(killing_machine_buff duration=10 max_stacks=1 gcd=0 offgcd=1) Define(lights_judgment 255647) # Call down a strike of Holy energy, dealing Holy damage to enemies within A1 yards after 3 sec. SpellInfo(lights_judgment cd=150) @@ -278,9 +280,9 @@ Define(remorseless_winter 196770) SpellInfo(remorseless_winter runes=1 runicpower=-10 cd=20 duration=8 tick=1) # Dealing 196771s1 Frost damage to enemies within 196771A1 yards each second. SpellAddBuff(remorseless_winter remorseless_winter add=1) -Define(rime_frost 316838) -# Increases Howling Blasts damage done by an additional s1. - SpellInfo(rime_frost gcd=0 offgcd=1 unusable=1) +Define(rime_buff 59052) +# Your next Howling Blast will consume no Runes, generate no Runic Power, and deal s2 additional damage. + SpellInfo(rime_buff duration=15 max_stacks=1 gcd=0 offgcd=1) Define(runic_corruption 51460) # Increases your rune regeneration rate for 3 seconds. SpellInfo(runic_corruption duration=3 gcd=0 offgcd=1) @@ -357,6 +359,10 @@ Define(war_stomp 20549) SpellAddTargetDebuff(war_stomp war_stomp add=1) Define(army_of_the_damned_talent 22030) # ?s207317[Death Coil and Epidemic reduce][Death Coil reduces] the cooldown of Apocalypse by sec and Army of the Dead by sec. rnrnAdditionally Apocalypse and Army of the Dead summon a Magus of the Dead for 15 seconds who hurls Frostbolts and Shadow Bolts at your foes.rn +Define(asphyxiate_talent_unholy 22520) +# Lifts the enemy target off the ground, crushing their throat with dark energy and stunning them for 4 seconds. +Define(asphyxiate_talent 22517) +# Lifts the enemy target off the ground, crushing their throat with dark energy and stunning them for 4 seconds. Define(avalanche_talent 22521) # Casting Howling Blast with Rime active causes jagged icicles to fall on enemies nearby your target, dealing 207150s1 Frost damage. Define(blinding_sleet_talent 22519) diff --git a/src/scripts/ovale_demonhunter_spells.ts b/src/scripts/ovale_demonhunter_spells.ts index 8d427cfa7..769461cd3 100644 --- a/src/scripts/ovale_demonhunter_spells.ts +++ b/src/scripts/ovale_demonhunter_spells.ts @@ -36,6 +36,9 @@ Define(chaos_strike 344862) SpellInfo(chaos_strike fury=40) SpellRequire(chaos_strike replaced_by set=chaos_strike_havoc enabled=(specialization("havoc"))) SpellRequire(chaos_strike replaced_by set=soul_cleave enabled=(specialization("vengeance"))) +Define(chaos_strike_havoc 343206) +# Chaos Strike damage increased by s1. + SpellInfo(chaos_strike_havoc gcd=0 offgcd=1 unusable=1) Define(chaos_strike_havoc 162794) # Slice your target for 222031s1+199547s1 Chaos damage. Chaos Strike has a 197125h chance to refund 193840s1 Fury. SpellInfo(chaos_strike_havoc fury=40) @@ -101,9 +104,9 @@ Define(fel_eruption 211881) SpellRequire(fel_eruption unusable set=1 enabled=(not hastalent(fel_eruption_talent))) # Stunned. SpellAddTargetDebuff(fel_eruption fel_eruption add=1) -Define(fel_rush_havoc 195072) -# Rush forward, incinerating anything in your path for 192611s1 Chaos damage. - SpellInfo(fel_rush_havoc cd=10 gcd=0.25) +Define(fel_rush_havoc 343017) +# Fel Rush damage increased by s1. + SpellInfo(fel_rush_havoc gcd=0 offgcd=1 unusable=1) Define(felblade 232893) # Charge to your target and deal 213243sw2 Fire damage.rnrn?s203513[Shear has a chance to reset the cooldown of Felblade.rnrn|cFFFFFFFFGenerates 213243s3 Fury.|r]?a203555[Demon Blades has a chance to reset the cooldown of Felblade.rnrn|cFFFFFFFFGenerates 213243s3 Fury.|r][Demon's Bite has a chance to reset the cooldown of Felblade.rnrn|cFFFFFFFFGenerates 213243s3 Fury.|r] SpellInfo(felblade cd=15) diff --git a/src/scripts/ovale_hunter.ts b/src/scripts/ovale_hunter.ts index 301ee6e8f..19797ee8f 100644 --- a/src/scripts/ovale_hunter.ts +++ b/src/scripts/ovale_hunter.ts @@ -189,7 +189,7 @@ AddFunction beast_masterycleavemainactions #barbed_shot,target_if=min:dot.barbed_shot.remains,if=pet.main.buff.frenzy.up&pet.main.buff.frenzy.remains<=gcd if pet.buffpresent(frenzy_pet_buff) and pet.buffremaining(frenzy_pet_buff) <= gcd() spell(barbed_shot) #multishot,if=gcd-pet.main.buff.beast_cleave.remains>0.25 - if gcd() - pet.buffremaining(beast_cleave_buff) > 0.25 spell(multishot) + if gcd() - pet.buffremaining(beast_cleave_beast_mastery) > 0.25 spell(multishot) #flare,if=tar_trap.up&runeforge.soulforge_embers if buffpresent(tar_trap) and runeforge(soulforge_embers_runeforge) spell(flare) #barbed_shot,target_if=min:dot.barbed_shot.remains,if=full_recharge_time 0.25 and spell(multishot) + unless pet.buffpresent(frenzy_pet_buff) and pet.buffremaining(frenzy_pet_buff) <= gcd() and spell(barbed_shot) or gcd() - pet.buffremaining(beast_cleave_beast_mastery) > 0.25 and spell(multishot) { #tar_trap,if=runeforge.soulforge_embers&tar_trap.remains 0.25 and spell(multishot) or buffpresent(tar_trap) and runeforge(soulforge_embers_runeforge) and spell(flare) or { spellfullrecharge(barbed_shot) < gcd() and spellcooldown(bestial_wrath) > 0 or spellcooldown(bestial_wrath) < 12 + gcd() and hastalent(scent_of_blood_talent_beast_mastery) } and spell(barbed_shot) or spell(kill_shot) or spell(chimaera_shot) or pet.buffremaining(frenzy_pet_buff) > executetime(barrage) and spell(barrage) or focus() > powercost(kill_command) + powercost(multishot) and { pet.present() and not pet.isincapacitated() and not pet.isfeared() and not pet.isstunned() } and spell(kill_command) or spell(dire_beast) or target.timetodie() < 9 and spell(barbed_shot) or timetomaxfocus() < gcd() * 2 and spell(cobra_shot) + pet.buffpresent(frenzy_pet_buff) and pet.buffremaining(frenzy_pet_buff) <= gcd() and spell(barbed_shot) or gcd() - pet.buffremaining(beast_cleave_beast_mastery) > 0.25 and spell(multishot) or buffpresent(tar_trap) and runeforge(soulforge_embers_runeforge) and spell(flare) or { spellfullrecharge(barbed_shot) < gcd() and spellcooldown(bestial_wrath) > 0 or spellcooldown(bestial_wrath) < 12 + gcd() and hastalent(scent_of_blood_talent_beast_mastery) } and spell(barbed_shot) or spell(kill_shot) or spell(chimaera_shot) or pet.buffremaining(frenzy_pet_buff) > executetime(barrage) and spell(barrage) or focus() > powercost(kill_command) + powercost(multishot) and { pet.present() and not pet.isincapacitated() and not pet.isfeared() and not pet.isstunned() } and spell(kill_command) or spell(dire_beast) or target.timetodie() < 9 and spell(barbed_shot) or timetomaxfocus() < gcd() * 2 and spell(cobra_shot) } AddFunction beast_masterycleavecdactions @@ -271,7 +271,7 @@ AddFunction beast_masterycleavecdactions #aspect_of_the_wild spell(aspect_of_the_wild) - unless pet.buffpresent(frenzy_pet_buff) and pet.buffremaining(frenzy_pet_buff) <= gcd() and spell(barbed_shot) or gcd() - pet.buffremaining(beast_cleave_buff) > 0.25 and spell(multishot) or runeforge(soulforge_embers_runeforge) and buffremaining(tar_trap) < gcd() and spellcooldown(flare) < gcd() and spell(tar_trap) or buffpresent(tar_trap) and runeforge(soulforge_embers_runeforge) and spell(flare) or focus() + focuscastingregen(death_chakram) < maxfocus() and spell(death_chakram) + unless pet.buffpresent(frenzy_pet_buff) and pet.buffremaining(frenzy_pet_buff) <= gcd() and spell(barbed_shot) or gcd() - pet.buffremaining(beast_cleave_beast_mastery) > 0.25 and spell(multishot) or runeforge(soulforge_embers_runeforge) and buffremaining(tar_trap) < gcd() and spellcooldown(flare) < gcd() and spell(tar_trap) or buffpresent(tar_trap) and runeforge(soulforge_embers_runeforge) and spell(flare) or focus() + focuscastingregen(death_chakram) < maxfocus() and spell(death_chakram) { #wild_spirits spell(wild_spirits) @@ -286,7 +286,7 @@ AddFunction beast_masterycleavecdactions AddFunction beast_masterycleavecdpostconditions { - pet.buffpresent(frenzy_pet_buff) and pet.buffremaining(frenzy_pet_buff) <= gcd() and spell(barbed_shot) or gcd() - pet.buffremaining(beast_cleave_buff) > 0.25 and spell(multishot) or runeforge(soulforge_embers_runeforge) and buffremaining(tar_trap) < gcd() and spellcooldown(flare) < gcd() and spell(tar_trap) or buffpresent(tar_trap) and runeforge(soulforge_embers_runeforge) and spell(flare) or focus() + focuscastingregen(death_chakram) < maxfocus() and spell(death_chakram) or { spellfullrecharge(barbed_shot) < gcd() and spellcooldown(bestial_wrath) > 0 or spellcooldown(bestial_wrath) < 12 + gcd() and hastalent(scent_of_blood_talent_beast_mastery) } and spell(barbed_shot) or spell(bestial_wrath) or spell(resonating_arrow) or spell(flayed_shot) or spell(kill_shot) or spell(chimaera_shot) or spell(bloodshed) or spell(a_murder_of_crows) or pet.buffremaining(frenzy_pet_buff) > executetime(barrage) and spell(barrage) or focus() > powercost(kill_command) + powercost(multishot) and { pet.present() and not pet.isincapacitated() and not pet.isfeared() and not pet.isstunned() } and spell(kill_command) or { buffexpires(bestial_wrath) or target.timetodie() < 5 } and spell(bag_of_tricks) or spell(dire_beast) or target.timetodie() < 9 and spell(barbed_shot) or timetomaxfocus() < gcd() * 2 and spell(cobra_shot) or { runeforge(soulforge_embers_runeforge) or runeforge(nessingwarys_trapping_apparatus_runeforge) } and spell(tar_trap) or runeforge(nessingwarys_trapping_apparatus_runeforge) and spell(freezing_trap) + pet.buffpresent(frenzy_pet_buff) and pet.buffremaining(frenzy_pet_buff) <= gcd() and spell(barbed_shot) or gcd() - pet.buffremaining(beast_cleave_beast_mastery) > 0.25 and spell(multishot) or runeforge(soulforge_embers_runeforge) and buffremaining(tar_trap) < gcd() and spellcooldown(flare) < gcd() and spell(tar_trap) or buffpresent(tar_trap) and runeforge(soulforge_embers_runeforge) and spell(flare) or focus() + focuscastingregen(death_chakram) < maxfocus() and spell(death_chakram) or { spellfullrecharge(barbed_shot) < gcd() and spellcooldown(bestial_wrath) > 0 or spellcooldown(bestial_wrath) < 12 + gcd() and hastalent(scent_of_blood_talent_beast_mastery) } and spell(barbed_shot) or spell(bestial_wrath) or spell(resonating_arrow) or spell(flayed_shot) or spell(kill_shot) or spell(chimaera_shot) or spell(bloodshed) or spell(a_murder_of_crows) or pet.buffremaining(frenzy_pet_buff) > executetime(barrage) and spell(barrage) or focus() > powercost(kill_command) + powercost(multishot) and { pet.present() and not pet.isincapacitated() and not pet.isfeared() and not pet.isstunned() } and spell(kill_command) or { buffexpires(bestial_wrath) or target.timetodie() < 5 } and spell(bag_of_tricks) or spell(dire_beast) or target.timetodie() < 9 and spell(barbed_shot) or timetomaxfocus() < gcd() * 2 and spell(cobra_shot) or { runeforge(soulforge_embers_runeforge) or runeforge(nessingwarys_trapping_apparatus_runeforge) } and spell(tar_trap) or runeforge(nessingwarys_trapping_apparatus_runeforge) and spell(freezing_trap) } ### actions.cds @@ -295,6 +295,8 @@ AddFunction beast_masterycdsmainactions { #berserking,if=(buff.wild_spirits.up|!covenant.night_fae&buff.aspect_of_the_wild.up&buff.bestial_wrath.up)&(target.time_to_die>cooldown.berserking.duration+duration|(target.health.pct<35|!talent.killer_instinct))|target.time_to_die<13 if { buffpresent(wild_spirits) or not iscovenant("night_fae") and buffpresent(aspect_of_the_wild) and buffpresent(bestial_wrath) } and { target.timetodie() > spellcooldownduration(berserking) + baseduration(berserking) or target.healthpercent() < 35 or not hastalent(killer_instinct_talent) } or target.timetodie() < 13 spell(berserking) + #blood_fury,if=(buff.wild_spirits.up|!covenant.night_fae&buff.aspect_of_the_wild.up&buff.bestial_wrath.up)&(target.time_to_die>cooldown.blood_fury.duration+duration|(target.health.pct<35|!talent.killer_instinct))|target.time_to_die<16 + if { buffpresent(wild_spirits) or not iscovenant("night_fae") and buffpresent(aspect_of_the_wild) and buffpresent(bestial_wrath) } and { target.timetodie() > spellcooldownduration(blood_fury) + baseduration(blood_fury) or target.healthpercent() < 35 or not hastalent(killer_instinct_talent) } or target.timetodie() < 16 spell(blood_fury) } AddFunction beast_masterycdsmainpostconditions @@ -307,7 +309,7 @@ AddFunction beast_masterycdsshortcdactions AddFunction beast_masterycdsshortcdpostconditions { - { { buffpresent(wild_spirits) or not iscovenant("night_fae") and buffpresent(aspect_of_the_wild) and buffpresent(bestial_wrath) } and { target.timetodie() > spellcooldownduration(berserking) + baseduration(berserking) or target.healthpercent() < 35 or not hastalent(killer_instinct_talent) } or target.timetodie() < 13 } and spell(berserking) + { { buffpresent(wild_spirits) or not iscovenant("night_fae") and buffpresent(aspect_of_the_wild) and buffpresent(bestial_wrath) } and { target.timetodie() > spellcooldownduration(berserking) + baseduration(berserking) or target.healthpercent() < 35 or not hastalent(killer_instinct_talent) } or target.timetodie() < 13 } and spell(berserking) or { { buffpresent(wild_spirits) or not iscovenant("night_fae") and buffpresent(aspect_of_the_wild) and buffpresent(bestial_wrath) } and { target.timetodie() > spellcooldownduration(blood_fury) + baseduration(blood_fury) or target.healthpercent() < 35 or not hastalent(killer_instinct_talent) } or target.timetodie() < 16 } and spell(blood_fury) } AddFunction beast_masterycdscdactions @@ -317,10 +319,8 @@ AddFunction beast_masterycdscdactions #fireblood,if=cooldown.bestial_wrath.remains>30 if spellcooldown(bestial_wrath) > 30 spell(fireblood) - unless { { buffpresent(wild_spirits) or not iscovenant("night_fae") and buffpresent(aspect_of_the_wild) and buffpresent(bestial_wrath) } and { target.timetodie() > spellcooldownduration(berserking) + baseduration(berserking) or target.healthpercent() < 35 or not hastalent(killer_instinct_talent) } or target.timetodie() < 13 } and spell(berserking) + unless { { buffpresent(wild_spirits) or not iscovenant("night_fae") and buffpresent(aspect_of_the_wild) and buffpresent(bestial_wrath) } and { target.timetodie() > spellcooldownduration(berserking) + baseduration(berserking) or target.healthpercent() < 35 or not hastalent(killer_instinct_talent) } or target.timetodie() < 13 } and spell(berserking) or { { buffpresent(wild_spirits) or not iscovenant("night_fae") and buffpresent(aspect_of_the_wild) and buffpresent(bestial_wrath) } and { target.timetodie() > spellcooldownduration(blood_fury) + baseduration(blood_fury) or target.healthpercent() < 35 or not hastalent(killer_instinct_talent) } or target.timetodie() < 16 } and spell(blood_fury) { - #blood_fury,if=(buff.wild_spirits.up|!covenant.night_fae&buff.aspect_of_the_wild.up&buff.bestial_wrath.up)&(target.time_to_die>cooldown.blood_fury.duration+duration|(target.health.pct<35|!talent.killer_instinct))|target.time_to_die<16 - if { buffpresent(wild_spirits) or not iscovenant("night_fae") and buffpresent(aspect_of_the_wild) and buffpresent(bestial_wrath) } and { target.timetodie() > spellcooldownduration(blood_fury) + baseduration(blood_fury) or target.healthpercent() < 35 or not hastalent(killer_instinct_talent) } or target.timetodie() < 16 spell(blood_fury) #lights_judgment spell(lights_judgment) #potion,if=buff.aspect_of_the_wild.up|target.time_to_die<26 @@ -330,7 +330,7 @@ AddFunction beast_masterycdscdactions AddFunction beast_masterycdscdpostconditions { - { { buffpresent(wild_spirits) or not iscovenant("night_fae") and buffpresent(aspect_of_the_wild) and buffpresent(bestial_wrath) } and { target.timetodie() > spellcooldownduration(berserking) + baseduration(berserking) or target.healthpercent() < 35 or not hastalent(killer_instinct_talent) } or target.timetodie() < 13 } and spell(berserking) + { { buffpresent(wild_spirits) or not iscovenant("night_fae") and buffpresent(aspect_of_the_wild) and buffpresent(bestial_wrath) } and { target.timetodie() > spellcooldownduration(berserking) + baseduration(berserking) or target.healthpercent() < 35 or not hastalent(killer_instinct_talent) } or target.timetodie() < 13 } and spell(berserking) or { { buffpresent(wild_spirits) or not iscovenant("night_fae") and buffpresent(aspect_of_the_wild) and buffpresent(bestial_wrath) } and { target.timetodie() > spellcooldownduration(blood_fury) + baseduration(blood_fury) or target.healthpercent() < 35 or not hastalent(killer_instinct_talent) } or target.timetodie() < 16 } and spell(blood_fury) } ### actions.default @@ -457,7 +457,7 @@ AddIcon enabled=(checkboxon(opt_hunter_beast_mastery_aoe) and specialization(bea # bag_of_tricks # barbed_shot # barrage -# beast_cleave_buff +# beast_cleave_beast_mastery # berserking # bestial_wrath # blood_fury @@ -761,6 +761,8 @@ AddFunction marksmanshipcdsmainactions { #berserking,if=buff.trueshot.up|target.time_to_die<13 if buffpresent(trueshot) or target.timetodie() < 13 spell(berserking) + #blood_fury,if=buff.trueshot.up|target.time_to_die<16 + if buffpresent(trueshot) or target.timetodie() < 16 spell(blood_fury) } AddFunction marksmanshipcdsmainpostconditions @@ -769,7 +771,7 @@ AddFunction marksmanshipcdsmainpostconditions AddFunction marksmanshipcdsshortcdactions { - unless { buffpresent(trueshot) or target.timetodie() < 13 } and spell(berserking) + unless { buffpresent(trueshot) or target.timetodie() < 13 } and spell(berserking) or { buffpresent(trueshot) or target.timetodie() < 16 } and spell(blood_fury) { #bag_of_tricks,if=buff.trueshot.down if buffexpires(trueshot) spell(bag_of_tricks) @@ -778,15 +780,13 @@ AddFunction marksmanshipcdsshortcdactions AddFunction marksmanshipcdsshortcdpostconditions { - { buffpresent(trueshot) or target.timetodie() < 13 } and spell(berserking) + { buffpresent(trueshot) or target.timetodie() < 13 } and spell(berserking) or { buffpresent(trueshot) or target.timetodie() < 16 } and spell(blood_fury) } AddFunction marksmanshipcdscdactions { - unless { buffpresent(trueshot) or target.timetodie() < 13 } and spell(berserking) + unless { buffpresent(trueshot) or target.timetodie() < 13 } and spell(berserking) or { buffpresent(trueshot) or target.timetodie() < 16 } and spell(blood_fury) { - #blood_fury,if=buff.trueshot.up|target.time_to_die<16 - if buffpresent(trueshot) or target.timetodie() < 16 spell(blood_fury) #ancestral_call,if=buff.trueshot.up|target.time_to_die<16 if buffpresent(trueshot) or target.timetodie() < 16 spell(ancestral_call) #fireblood,if=buff.trueshot.up|target.time_to_die<9 @@ -804,7 +804,7 @@ AddFunction marksmanshipcdscdactions AddFunction marksmanshipcdscdpostconditions { - { buffpresent(trueshot) or target.timetodie() < 13 } and spell(berserking) or buffexpires(trueshot) and spell(bag_of_tricks) + { buffpresent(trueshot) or target.timetodie() < 13 } and spell(berserking) or { buffpresent(trueshot) or target.timetodie() < 16 } and spell(blood_fury) or buffexpires(trueshot) and spell(bag_of_tricks) } ### actions.default @@ -1262,6 +1262,8 @@ AddFunction survivalcleavecdpostconditions AddFunction survivalcdsmainactions { + #blood_fury,if=cooldown.coordinated_assault.remains>30 + if spellcooldown(coordinated_assault) > 30 spell(blood_fury) #berserking,if=cooldown.coordinated_assault.remains>60|time_to_die<13 if spellcooldown(coordinated_assault) > 60 or target.timetodie() < 13 spell(berserking) #flare,if=focus+cast_regen4*gcd @@ -1282,37 +1284,39 @@ AddFunction survivalcdsshortcdactions { #harpoon,if=talent.terms_of_engagement.enabled&focusgcd - if spellcooldown(kill_command_survival) > gcd() spell(bag_of_tricks) - unless { spellcooldown(coordinated_assault) > 60 or target.timetodie() < 13 } and spell(berserking) + unless spellcooldown(coordinated_assault) > 30 and spell(blood_fury) { - #steel_trap,if=runeforge.nessingwarys_trapping_apparatus.equipped&focus+cast_regen1|active_enemies=1&time_to_die>5*gcd) - if equippedruneforge(nessingwarys_trapping_apparatus_runeforge) and focus() + focuscastingregen(tar_trap) < maxfocus() or focus() + focuscastingregen(tar_trap) < maxfocus() and equippedruneforge(soulforge_embers_runeforge) and buffremaining(tar_trap) < gcd() and spellcooldown(flare) < gcd() and { enemies() > 1 or enemies() == 1 and target.timetodie() > 5 * gcd() } spell(tar_trap) - - unless focus() + focuscastingregen(flare) < maxfocus() and buffpresent(tar_trap) and equippedruneforge(soulforge_embers_runeforge) and target.timetodie() > 4 * gcd() and spell(flare) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(kill_shot_survival) } * gcd() and spell(kill_shot_survival) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(mongoose_bite) } * gcd() and spell(mongoose_bite) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(raptor_strike) } * gcd() and spell(raptor_strike) + #bag_of_tricks,if=cooldown.kill_command.full_recharge_time>gcd + if spellcooldown(kill_command_survival) > gcd() spell(bag_of_tricks) + + unless { spellcooldown(coordinated_assault) > 60 or target.timetodie() < 13 } and spell(berserking) { - #aspect_of_the_eagle,if=target.distance>=6 - if target.distance() >= 6 spell(aspect_of_the_eagle) + #steel_trap,if=runeforge.nessingwarys_trapping_apparatus.equipped&focus+cast_regen1|active_enemies=1&time_to_die>5*gcd) + if equippedruneforge(nessingwarys_trapping_apparatus_runeforge) and focus() + focuscastingregen(tar_trap) < maxfocus() or focus() + focuscastingregen(tar_trap) < maxfocus() and equippedruneforge(soulforge_embers_runeforge) and buffremaining(tar_trap) < gcd() and spellcooldown(flare) < gcd() and { enemies() > 1 or enemies() == 1 and target.timetodie() > 5 * gcd() } spell(tar_trap) + + unless focus() + focuscastingregen(flare) < maxfocus() and buffpresent(tar_trap) and equippedruneforge(soulforge_embers_runeforge) and target.timetodie() > 4 * gcd() and spell(flare) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(kill_shot_survival) } * gcd() and spell(kill_shot_survival) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(mongoose_bite) } * gcd() and spell(mongoose_bite) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(raptor_strike) } * gcd() and spell(raptor_strike) + { + #aspect_of_the_eagle,if=target.distance>=6 + if target.distance() >= 6 spell(aspect_of_the_eagle) + } } } } AddFunction survivalcdsshortcdpostconditions { - { spellcooldown(coordinated_assault) > 60 or target.timetodie() < 13 } and spell(berserking) or focus() + focuscastingregen(flare) < maxfocus() and buffpresent(tar_trap) and equippedruneforge(soulforge_embers_runeforge) and target.timetodie() > 4 * gcd() and spell(flare) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(kill_shot_survival) } * gcd() and spell(kill_shot_survival) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(mongoose_bite) } * gcd() and spell(mongoose_bite) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(raptor_strike) } * gcd() and spell(raptor_strike) + spellcooldown(coordinated_assault) > 30 and spell(blood_fury) or { spellcooldown(coordinated_assault) > 60 or target.timetodie() < 13 } and spell(berserking) or focus() + focuscastingregen(flare) < maxfocus() and buffpresent(tar_trap) and equippedruneforge(soulforge_embers_runeforge) and target.timetodie() > 4 * gcd() and spell(flare) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(kill_shot_survival) } * gcd() and spell(kill_shot_survival) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(mongoose_bite) } * gcd() and spell(mongoose_bite) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(raptor_strike) } * gcd() and spell(raptor_strike) } AddFunction survivalcdscdactions { - unless hastalent(terms_of_engagement_talent) and focus() < maxfocus() and checkboxon(opt_harpoon) and spell(harpoon) + unless hastalent(terms_of_engagement_talent) and focus() < maxfocus() and checkboxon(opt_harpoon) and spell(harpoon) or spellcooldown(coordinated_assault) > 30 and spell(blood_fury) { - #blood_fury,if=cooldown.coordinated_assault.remains>30 - if spellcooldown(coordinated_assault) > 30 spell(blood_fury) #ancestral_call,if=cooldown.coordinated_assault.remains>30 if spellcooldown(coordinated_assault) > 30 spell(ancestral_call) #fireblood,if=cooldown.coordinated_assault.remains>30 @@ -1332,7 +1336,7 @@ AddFunction survivalcdscdactions AddFunction survivalcdscdpostconditions { - hastalent(terms_of_engagement_talent) and focus() < maxfocus() and checkboxon(opt_harpoon) and spell(harpoon) or spellcooldown(kill_command_survival) > gcd() and spell(bag_of_tricks) or { spellcooldown(coordinated_assault) > 60 or target.timetodie() < 13 } and spell(berserking) or equippedruneforge(nessingwarys_trapping_apparatus_runeforge) and focus() + focuscastingregen(steel_trap) < maxfocus() and spell(steel_trap) or equippedruneforge(nessingwarys_trapping_apparatus_runeforge) and focus() + focuscastingregen(freezing_trap) < maxfocus() and spell(freezing_trap) or { equippedruneforge(nessingwarys_trapping_apparatus_runeforge) and focus() + focuscastingregen(tar_trap) < maxfocus() or focus() + focuscastingregen(tar_trap) < maxfocus() and equippedruneforge(soulforge_embers_runeforge) and buffremaining(tar_trap) < gcd() and spellcooldown(flare) < gcd() and { enemies() > 1 or enemies() == 1 and target.timetodie() > 5 * gcd() } } and spell(tar_trap) or focus() + focuscastingregen(flare) < maxfocus() and buffpresent(tar_trap) and equippedruneforge(soulforge_embers_runeforge) and target.timetodie() > 4 * gcd() and spell(flare) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(kill_shot_survival) } * gcd() and spell(kill_shot_survival) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(mongoose_bite) } * gcd() and spell(mongoose_bite) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(raptor_strike) } * gcd() and spell(raptor_strike) or target.distance() >= 6 and spell(aspect_of_the_eagle) + hastalent(terms_of_engagement_talent) and focus() < maxfocus() and checkboxon(opt_harpoon) and spell(harpoon) or spellcooldown(coordinated_assault) > 30 and spell(blood_fury) or spellcooldown(kill_command_survival) > gcd() and spell(bag_of_tricks) or { spellcooldown(coordinated_assault) > 60 or target.timetodie() < 13 } and spell(berserking) or equippedruneforge(nessingwarys_trapping_apparatus_runeforge) and focus() + focuscastingregen(steel_trap) < maxfocus() and spell(steel_trap) or equippedruneforge(nessingwarys_trapping_apparatus_runeforge) and focus() + focuscastingregen(freezing_trap) < maxfocus() and spell(freezing_trap) or { equippedruneforge(nessingwarys_trapping_apparatus_runeforge) and focus() + focuscastingregen(tar_trap) < maxfocus() or focus() + focuscastingregen(tar_trap) < maxfocus() and equippedruneforge(soulforge_embers_runeforge) and buffremaining(tar_trap) < gcd() and spellcooldown(flare) < gcd() and { enemies() > 1 or enemies() == 1 and target.timetodie() > 5 * gcd() } } and spell(tar_trap) or focus() + focuscastingregen(flare) < maxfocus() and buffpresent(tar_trap) and equippedruneforge(soulforge_embers_runeforge) and target.timetodie() > 4 * gcd() and spell(flare) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(kill_shot_survival) } * gcd() and spell(kill_shot_survival) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(mongoose_bite) } * gcd() and spell(mongoose_bite) or enemies() == 1 and target.timetodie() < focus() / { powercost(mongoose_bite) - focuscastingregen(raptor_strike) } * gcd() and spell(raptor_strike) or target.distance() >= 6 and spell(aspect_of_the_eagle) } ### actions.bop diff --git a/src/scripts/ovale_hunter_spells.ts b/src/scripts/ovale_hunter_spells.ts index 4a1aebdf0..b3337f9b9 100644 --- a/src/scripts/ovale_hunter_spells.ts +++ b/src/scripts/ovale_hunter_spells.ts @@ -53,11 +53,9 @@ 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. 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) +Define(beast_cleave_beast_mastery 115939) # 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. - 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) + SpellInfo(beast_cleave_beast_mastery gcd=0 offgcd=1 unusable=1) Define(berserking 59621) # Permanently enchant a melee weapon to sometimes increase your attack power by 59620s1, but at the cost of reduced armor. Cannot be applied to items higher than level ecix SpellInfo(berserking gcd=0 offgcd=1) @@ -66,11 +64,9 @@ Define(bestial_wrath 19574) SpellInfo(bestial_wrath cd=90 duration=15) # Damage dealt increased by w1. SpellAddBuff(bestial_wrath bestial_wrath add=1) -Define(blood_fury 20572) -# Increases your attack power by s1 for 15 seconds. - SpellInfo(blood_fury cd=120 duration=15 gcd=0 offgcd=1) - # Attack power increased by w1. - SpellAddBuff(blood_fury blood_fury add=1) +Define(blood_fury 24571) +# Instantly increases your rage by 300/10. + SpellInfo(blood_fury gcd=0 offgcd=1 rage=-30) Define(bloodlust 2825) # Increases haste by (25 of Spell Power) for all party and raid members for 40 seconds.rnrnAllies receiving this effect will become Sated and unable to benefit from Bloodlust or Time Warp again for 600 seconds. SpellInfo(bloodlust cd=300 duration=40 gcd=0 offgcd=1) diff --git a/src/scripts/ovale_mage.ts b/src/scripts/ovale_mage.ts index c5392b1de..2e14ab3aa 100644 --- a/src/scripts/ovale_mage.ts +++ b/src/scripts/ovale_mage.ts @@ -138,7 +138,7 @@ AddFunction rs_max_delay_for_totm AddFunction final_burn { - if arcanecharges() == maxarcanecharges() and not buffpresent(rule_of_threes_arcane) and fightremains() <= mana() / powercost(arcane_blast) * executetime(arcane_blast) 1 + if arcanecharges() == maxarcanecharges() and not buffpresent(rule_of_threes_buff) and fightremains() <= mana() / powercost(arcane_blast) * executetime(arcane_blast) 1 0 } @@ -210,6 +210,8 @@ AddFunction arcaneshared_cdsmainactions { #berserking,if=buff.arcane_power.up if buffpresent(arcane_power) spell(berserking) + #blood_fury,if=buff.arcane_power.up + if buffpresent(arcane_power) spell(blood_fury) } AddFunction arcaneshared_cdsmainpostconditions @@ -218,56 +220,57 @@ AddFunction arcaneshared_cdsmainpostconditions AddFunction arcaneshared_cdsshortcdactions { + #use_mana_gem,if=(talent.enlightened&mana.pct<=80&mana.pct>=65)|(!talent.enlightened&mana.pct<=85) + if hastalent(enlightened_talent) and manapercent() <= 80 and manapercent() >= 65 or not hastalent(enlightened_talent) and manapercent() <= 85 spell(replenish_mana) #bag_of_tricks,if=buff.arcane_power.down&buff.rune_of_power.down&debuff.touch_of_the_magi.down if buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) spell(bag_of_tricks) } AddFunction arcaneshared_cdsshortcdpostconditions { - buffpresent(arcane_power) and spell(berserking) + buffpresent(arcane_power) and spell(berserking) or buffpresent(arcane_power) and spell(blood_fury) } AddFunction arcaneshared_cdscdactions { - #use_mana_gem,if=(talent.enlightened&mana.pct<=80&mana.pct>=65)|(!talent.enlightened&mana.pct<=85) - if hastalent(enlightened_talent) and manapercent() <= 80 and manapercent() >= 65 or not hastalent(enlightened_talent) and manapercent() <= 85 spell(replenish_mana) - #potion,if=buff.arcane_power.up - if buffpresent(arcane_power) and { checkboxon(opt_use_consumables) and target.classification(worldboss) } item(potion_of_spectral_intellect_item usable=1) - #time_warp,if=runeforge.temporal_warp&buff.exhaustion.up&(cooldown.arcane_power.ready|fight_remains<=40) - if runeforge(temporal_warp_runeforge) and buffpresent(exhaustion) and { spellcooldown(arcane_power) <= 0 or fightremains() <= 40 } and { checkboxon(opt_time_warp) and debuffexpires(burst_haste_debuff any=1) } spell(time_warp) - #lights_judgment,if=buff.arcane_power.down&buff.rune_of_power.down&debuff.touch_of_the_magi.down - if buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) spell(lights_judgment) - - unless buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and spell(bag_of_tricks) or buffpresent(arcane_power) and spell(berserking) + unless { hastalent(enlightened_talent) and manapercent() <= 80 and manapercent() >= 65 or not hastalent(enlightened_talent) and manapercent() <= 85 } and spell(replenish_mana) { - #blood_fury,if=buff.arcane_power.up - if buffpresent(arcane_power) spell(blood_fury) - #fireblood,if=buff.arcane_power.up - if buffpresent(arcane_power) spell(fireblood) - #ancestral_call,if=buff.arcane_power.up - if buffpresent(arcane_power) spell(ancestral_call) - #use_items,if=buff.arcane_power.up - if buffpresent(arcane_power) arcaneuseitemactions() - #use_item,effect_name=gladiators_badge,if=buff.arcane_power.up|cooldown.arcane_power.remains>=55&debuff.touch_of_the_magi.up - if buffpresent(arcane_power) or spellcooldown(arcane_power) >= 55 and target.debuffpresent(touch_of_the_magi) arcaneuseitemactions() - #use_item,name=empyreal_ordnance,if=cooldown.arcane_power.remains<=20 - if spellcooldown(arcane_power) <= 20 arcaneuseitemactions() - #use_item,name=dreadfire_vessel,if=cooldown.arcane_power.remains>=20|!variable.ap_on_use=1|(time=0&variable.inverted_opener=1&runeforge.siphon_storm) - if spellcooldown(arcane_power) >= 20 or not ap_on_use() == 1 or timeincombat() == 0 and inverted_opener() == 1 and runeforge(siphon_storm_runeforge) arcaneuseitemactions() - #use_item,name=soul_igniter,if=cooldown.arcane_power.remains>=20|!variable.ap_on_use=1|(time=0&variable.inverted_opener=1&runeforge.siphon_storm) - if spellcooldown(arcane_power) >= 20 or not ap_on_use() == 1 or timeincombat() == 0 and inverted_opener() == 1 and runeforge(siphon_storm_runeforge) arcaneuseitemactions() - #use_item,name=glyph_of_assimilation,if=cooldown.arcane_power.remains>=20|!variable.ap_on_use=1|(time=0&variable.inverted_opener=1&runeforge.siphon_storm) - if spellcooldown(arcane_power) >= 20 or not ap_on_use() == 1 or timeincombat() == 0 and inverted_opener() == 1 and runeforge(siphon_storm_runeforge) arcaneuseitemactions() - #use_item,name=macabre_sheet_music,if=cooldown.arcane_power.remains<=5&(!variable.inverted_opener=1|time>30) - if spellcooldown(arcane_power) <= 5 and { not inverted_opener() == 1 or timeincombat() > 30 } arcaneuseitemactions() - #use_item,name=macabre_sheet_music,if=cooldown.arcane_power.remains<=5&variable.inverted_opener=1&buff.rune_of_power.up&buff.rune_of_power.remains<=(10-5*runeforge.siphon_storm)&time<30 - if spellcooldown(arcane_power) <= 5 and inverted_opener() == 1 and buffpresent(rune_of_power_buff) and totemremaining(rune_of_power) <= 10 - 5 * runeforge(siphon_storm_runeforge) and timeincombat() < 30 arcaneuseitemactions() + #potion,if=buff.arcane_power.up + if buffpresent(arcane_power) and { checkboxon(opt_use_consumables) and target.classification(worldboss) } item(potion_of_spectral_intellect_item usable=1) + #time_warp,if=runeforge.temporal_warp&buff.exhaustion.up&(cooldown.arcane_power.ready|fight_remains<=40) + if runeforge(temporal_warp_runeforge) and buffpresent(exhaustion) and { spellcooldown(arcane_power) <= 0 or fightremains() <= 40 } and { checkboxon(opt_time_warp) and debuffexpires(burst_haste_debuff any=1) } spell(time_warp) + #lights_judgment,if=buff.arcane_power.down&buff.rune_of_power.down&debuff.touch_of_the_magi.down + if buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) spell(lights_judgment) + + unless buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and spell(bag_of_tricks) or buffpresent(arcane_power) and spell(berserking) or buffpresent(arcane_power) and spell(blood_fury) + { + #fireblood,if=buff.arcane_power.up + if buffpresent(arcane_power) spell(fireblood) + #ancestral_call,if=buff.arcane_power.up + if buffpresent(arcane_power) spell(ancestral_call) + #use_items,if=buff.arcane_power.up + if buffpresent(arcane_power) arcaneuseitemactions() + #use_item,effect_name=gladiators_badge,if=buff.arcane_power.up|cooldown.arcane_power.remains>=55&debuff.touch_of_the_magi.up + if buffpresent(arcane_power) or spellcooldown(arcane_power) >= 55 and target.debuffpresent(touch_of_the_magi) arcaneuseitemactions() + #use_item,name=empyreal_ordnance,if=cooldown.arcane_power.remains<=20 + if spellcooldown(arcane_power) <= 20 arcaneuseitemactions() + #use_item,name=dreadfire_vessel,if=cooldown.arcane_power.remains>=20|!variable.ap_on_use=1|(time=0&variable.inverted_opener=1&runeforge.siphon_storm) + if spellcooldown(arcane_power) >= 20 or not ap_on_use() == 1 or timeincombat() == 0 and inverted_opener() == 1 and runeforge(siphon_storm_runeforge) arcaneuseitemactions() + #use_item,name=soul_igniter,if=cooldown.arcane_power.remains>=20|!variable.ap_on_use=1|(time=0&variable.inverted_opener=1&runeforge.siphon_storm) + if spellcooldown(arcane_power) >= 20 or not ap_on_use() == 1 or timeincombat() == 0 and inverted_opener() == 1 and runeforge(siphon_storm_runeforge) arcaneuseitemactions() + #use_item,name=glyph_of_assimilation,if=cooldown.arcane_power.remains>=20|!variable.ap_on_use=1|(time=0&variable.inverted_opener=1&runeforge.siphon_storm) + if spellcooldown(arcane_power) >= 20 or not ap_on_use() == 1 or timeincombat() == 0 and inverted_opener() == 1 and runeforge(siphon_storm_runeforge) arcaneuseitemactions() + #use_item,name=macabre_sheet_music,if=cooldown.arcane_power.remains<=5&(!variable.inverted_opener=1|time>30) + if spellcooldown(arcane_power) <= 5 and { not inverted_opener() == 1 or timeincombat() > 30 } arcaneuseitemactions() + #use_item,name=macabre_sheet_music,if=cooldown.arcane_power.remains<=5&variable.inverted_opener=1&buff.rune_of_power.up&buff.rune_of_power.remains<=(10-5*runeforge.siphon_storm)&time<30 + if spellcooldown(arcane_power) <= 5 and inverted_opener() == 1 and buffpresent(rune_of_power_buff) and totemremaining(rune_of_power) <= 10 - 5 * runeforge(siphon_storm_runeforge) and timeincombat() < 30 arcaneuseitemactions() + } } } AddFunction arcaneshared_cdscdpostconditions { - buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and spell(bag_of_tricks) or buffpresent(arcane_power) and spell(berserking) + { hastalent(enlightened_talent) and manapercent() <= 80 and manapercent() >= 65 or not hastalent(enlightened_talent) and manapercent() <= 85 } and spell(replenish_mana) or buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and spell(bag_of_tricks) or buffpresent(arcane_power) and spell(berserking) or buffpresent(arcane_power) and spell(blood_fury) } ### actions.rotation @@ -305,7 +308,7 @@ AddFunction arcanerotationmainactions #supernova,if=mana.pct<=95&buff.arcane_power.down&buff.rune_of_power.down&debuff.touch_of_the_magi.down if manapercent() <= 95 and buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) spell(supernova) #arcane_blast,if=buff.rule_of_threes.up&buff.arcane_charge.stack>3 - if buffpresent(rule_of_threes_arcane) and arcanecharges() > 3 and mana() > manacost(arcane_blast) spell(arcane_blast) + if buffpresent(rule_of_threes_buff) and arcanecharges() > 3 and mana() > manacost(arcane_blast) spell(arcane_blast) #arcane_barrage,if=mana.pct<=variable.barrage_mana_pct&buff.arcane_power.down&buff.rune_of_power.down&debuff.touch_of_the_magi.down&buff.arcane_charge.stack=buff.arcane_charge.max_stack&cooldown.evocation.remains if manapercent() <= barrage_mana_pct() and buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 spell(arcane_barrage) #arcane_barrage,if=buff.arcane_power.down&buff.rune_of_power.down&debuff.touch_of_the_magi.down&buff.arcane_charge.stack=buff.arcane_charge.max_stack&talent.arcane_orb&cooldown.arcane_orb.remains<=gcd&mana.pct<=90&cooldown.evocation.remains @@ -336,7 +339,7 @@ AddFunction arcanerotationshortcdactions AddFunction arcanerotationshortcdpostconditions { - channeling(evocation) and manapercent() >= 95 and { not runeforge(siphon_storm_runeforge) or buffstacks(siphon_storm_buff) == spelldata(siphon_storm_buff max_stacks) } and texture(inv_pet_exitbattle text=cancel) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and spellcooldown(arcane_power) <= executetime(arcane_barrage) and manapercent() > ap_minimum_mana_pct() } and buffexpires(rune_of_power_buff) and spell(arcane_barrage) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and hastalent(rune_of_power_talent) and spellcooldown(rune_of_power) <= executetime(arcane_barrage) } and spellcooldown(arcane_power) > totm_max_delay_for_ap() and spell(arcane_barrage) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and { not hastalent(rune_of_power_talent) or spellcooldown(rune_of_power) > totm_max_delay_for_rop() } } and spellcooldown(arcane_power) > totm_max_delay_for_ap() and spell(arcane_barrage) or target.debuffstacks(radiant_spark_vulnerability) == spelldata(radiant_spark_vulnerability max_stacks) and { buffexpires(arcane_power) or buffremaining(arcane_power) <= gcd() } and { buffexpires(rune_of_power_buff) or totemremaining(rune_of_power) <= gcd() } and spell(arcane_barrage) or { target.debuffremaining(radiant_spark) > 8 or target.debuffstacks(radiant_spark_vulnerability) > 0 and target.debuffstacks(radiant_spark_vulnerability) < spelldata(radiant_spark_vulnerability max_stacks) } and mana() > manacost(arcane_blast) and spell(arcane_blast) or buffpresent(presence_of_mind) and target.debuffpresent(touch_of_the_magi) and target.debuffremaining(touch_of_the_magi) <= executetime(arcane_blast) and mana() > manacost(arcane_blast) and spell(arcane_blast) or target.debuffpresent(touch_of_the_magi) and hastalent(arcane_echo_talent) and { buffexpires(deathborne) or enemies() == 1 } and { target.debuffremaining(touch_of_the_magi) > executetime(arcane_missiles) or spellcooldown(presence_of_mind) > 0 or iscovenant("kyrian") } and { not hasazeritetrait(arcane_pummeling_trait) or buffexpires(clearcasting_channel_buff) } and spell(arcane_missiles) or buffpresent(clearcasting) and buffpresent(expanded_potential_buff) and spell(arcane_missiles) or buffpresent(clearcasting) and { buffpresent(arcane_power) or buffpresent(rune_of_power_buff) or target.debuffremaining(touch_of_the_magi) > executetime(arcane_missiles) } and spell(arcane_missiles) or buffpresent(clearcasting) and buffstacks(clearcasting) == spelldata(clearcasting max_stacks) and spell(arcane_missiles) or buffpresent(clearcasting) and buffremaining(clearcasting) <= buffstacks(clearcasting) * executetime(arcane_missiles) + gcd() and spell(arcane_missiles) or { target.refreshable(nether_tempest) or not target.debuffpresent(nether_tempest) } and arcanecharges() == maxarcanecharges() and buffexpires(arcane_power) and target.debuffexpires(touch_of_the_magi) and spell(nether_tempest) or arcanecharges() <= totm_max_charges() and spell(arcane_orb) or manapercent() <= 95 and buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and spell(supernova) or buffpresent(rule_of_threes_arcane) and arcanecharges() > 3 and mana() > manacost(arcane_blast) and spell(arcane_blast) or manapercent() <= barrage_mana_pct() and buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and arcanecharges() == maxarcanecharges() and hastalent(arcane_orb_talent) and spellcooldown(arcane_orb) <= gcd() and manapercent() <= 90 and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffpresent(arcane_power) and buffremaining(arcane_power) <= gcd() and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffpresent(rune_of_power_buff) and buffexpires(arcane_power) and totemremaining(rune_of_power) <= gcd() and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffpresent(touch_of_the_magi) and target.debuffremaining(touch_of_the_magi) <= gcd() and arcanecharges() == maxarcanecharges() and spell(arcane_barrage) or target.healthpercent() < 35 and arcanecharges() == maxarcanecharges() and runeforge(arcane_bombardment_runeforge) and enemies() > 1 and buffexpires(deathborne) and spell(arcane_barrage) or target.healthpercent() < 35 and arcanecharges() < maxarcanecharges() and runeforge(arcane_bombardment_runeforge) and enemies() > 1 and buffexpires(deathborne) and spell(arcane_explosion) or mana() > manacost(arcane_blast) and spell(arcane_blast) or spell(arcane_barrage) + channeling(evocation) and manapercent() >= 95 and { not runeforge(siphon_storm_runeforge) or buffstacks(siphon_storm_buff) == spelldata(siphon_storm_buff max_stacks) } and texture(inv_pet_exitbattle text=cancel) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and spellcooldown(arcane_power) <= executetime(arcane_barrage) and manapercent() > ap_minimum_mana_pct() } and buffexpires(rune_of_power_buff) and spell(arcane_barrage) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and hastalent(rune_of_power_talent) and spellcooldown(rune_of_power) <= executetime(arcane_barrage) } and spellcooldown(arcane_power) > totm_max_delay_for_ap() and spell(arcane_barrage) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and { not hastalent(rune_of_power_talent) or spellcooldown(rune_of_power) > totm_max_delay_for_rop() } } and spellcooldown(arcane_power) > totm_max_delay_for_ap() and spell(arcane_barrage) or target.debuffstacks(radiant_spark_vulnerability) == spelldata(radiant_spark_vulnerability max_stacks) and { buffexpires(arcane_power) or buffremaining(arcane_power) <= gcd() } and { buffexpires(rune_of_power_buff) or totemremaining(rune_of_power) <= gcd() } and spell(arcane_barrage) or { target.debuffremaining(radiant_spark) > 8 or target.debuffstacks(radiant_spark_vulnerability) > 0 and target.debuffstacks(radiant_spark_vulnerability) < spelldata(radiant_spark_vulnerability max_stacks) } and mana() > manacost(arcane_blast) and spell(arcane_blast) or buffpresent(presence_of_mind) and target.debuffpresent(touch_of_the_magi) and target.debuffremaining(touch_of_the_magi) <= executetime(arcane_blast) and mana() > manacost(arcane_blast) and spell(arcane_blast) or target.debuffpresent(touch_of_the_magi) and hastalent(arcane_echo_talent) and { buffexpires(deathborne) or enemies() == 1 } and { target.debuffremaining(touch_of_the_magi) > executetime(arcane_missiles) or spellcooldown(presence_of_mind) > 0 or iscovenant("kyrian") } and { not hasazeritetrait(arcane_pummeling_trait) or buffexpires(clearcasting_channel_buff) } and spell(arcane_missiles) or buffpresent(clearcasting) and buffpresent(expanded_potential_buff) and spell(arcane_missiles) or buffpresent(clearcasting) and { buffpresent(arcane_power) or buffpresent(rune_of_power_buff) or target.debuffremaining(touch_of_the_magi) > executetime(arcane_missiles) } and spell(arcane_missiles) or buffpresent(clearcasting) and buffstacks(clearcasting) == spelldata(clearcasting max_stacks) and spell(arcane_missiles) or buffpresent(clearcasting) and buffremaining(clearcasting) <= buffstacks(clearcasting) * executetime(arcane_missiles) + gcd() and spell(arcane_missiles) or { target.refreshable(nether_tempest) or not target.debuffpresent(nether_tempest) } and arcanecharges() == maxarcanecharges() and buffexpires(arcane_power) and target.debuffexpires(touch_of_the_magi) and spell(nether_tempest) or arcanecharges() <= totm_max_charges() and spell(arcane_orb) or manapercent() <= 95 and buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and spell(supernova) or buffpresent(rule_of_threes_buff) and arcanecharges() > 3 and mana() > manacost(arcane_blast) and spell(arcane_blast) or manapercent() <= barrage_mana_pct() and buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and arcanecharges() == maxarcanecharges() and hastalent(arcane_orb_talent) and spellcooldown(arcane_orb) <= gcd() and manapercent() <= 90 and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffpresent(arcane_power) and buffremaining(arcane_power) <= gcd() and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffpresent(rune_of_power_buff) and buffexpires(arcane_power) and totemremaining(rune_of_power) <= gcd() and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffpresent(touch_of_the_magi) and target.debuffremaining(touch_of_the_magi) <= gcd() and arcanecharges() == maxarcanecharges() and spell(arcane_barrage) or target.healthpercent() < 35 and arcanecharges() == maxarcanecharges() and runeforge(arcane_bombardment_runeforge) and enemies() > 1 and buffexpires(deathborne) and spell(arcane_barrage) or target.healthpercent() < 35 and arcanecharges() < maxarcanecharges() and runeforge(arcane_bombardment_runeforge) and enemies() > 1 and buffexpires(deathborne) and spell(arcane_explosion) or mana() > manacost(arcane_blast) and spell(arcane_blast) or spell(arcane_barrage) } AddFunction arcanerotationcdactions @@ -348,7 +351,7 @@ AddFunction arcanerotationcdactions #evocation,if=runeforge.siphon_storm&cooldown.arcane_power.remains<=action.evocation.execute_time if runeforge(siphon_storm_runeforge) and spellcooldown(arcane_power) <= executetime(evocation) spell(evocation) - unless spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and spellcooldown(arcane_power) <= executetime(arcane_barrage) and manapercent() > ap_minimum_mana_pct() } and buffexpires(rune_of_power_buff) and spell(arcane_barrage) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and hastalent(rune_of_power_talent) and spellcooldown(rune_of_power) <= executetime(arcane_barrage) } and spellcooldown(arcane_power) > totm_max_delay_for_ap() and spell(arcane_barrage) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and { not hastalent(rune_of_power_talent) or spellcooldown(rune_of_power) > totm_max_delay_for_rop() } } and spellcooldown(arcane_power) > totm_max_delay_for_ap() and spell(arcane_barrage) or target.debuffstacks(radiant_spark_vulnerability) == spelldata(radiant_spark_vulnerability max_stacks) and { buffexpires(arcane_power) or buffremaining(arcane_power) <= gcd() } and { buffexpires(rune_of_power_buff) or totemremaining(rune_of_power) <= gcd() } and spell(arcane_barrage) or { target.debuffremaining(radiant_spark) > 8 or target.debuffstacks(radiant_spark_vulnerability) > 0 and target.debuffstacks(radiant_spark_vulnerability) < spelldata(radiant_spark_vulnerability max_stacks) } and mana() > manacost(arcane_blast) and spell(arcane_blast) or buffpresent(presence_of_mind) and target.debuffpresent(touch_of_the_magi) and target.debuffremaining(touch_of_the_magi) <= executetime(arcane_blast) and mana() > manacost(arcane_blast) and spell(arcane_blast) or target.debuffpresent(touch_of_the_magi) and hastalent(arcane_echo_talent) and { buffexpires(deathborne) or enemies() == 1 } and { target.debuffremaining(touch_of_the_magi) > executetime(arcane_missiles) or spellcooldown(presence_of_mind) > 0 or iscovenant("kyrian") } and { not hasazeritetrait(arcane_pummeling_trait) or buffexpires(clearcasting_channel_buff) } and spell(arcane_missiles) or buffpresent(clearcasting) and buffpresent(expanded_potential_buff) and spell(arcane_missiles) or buffpresent(clearcasting) and { buffpresent(arcane_power) or buffpresent(rune_of_power_buff) or target.debuffremaining(touch_of_the_magi) > executetime(arcane_missiles) } and spell(arcane_missiles) or buffpresent(clearcasting) and buffstacks(clearcasting) == spelldata(clearcasting max_stacks) and spell(arcane_missiles) or buffpresent(clearcasting) and buffremaining(clearcasting) <= buffstacks(clearcasting) * executetime(arcane_missiles) + gcd() and spell(arcane_missiles) or { target.refreshable(nether_tempest) or not target.debuffpresent(nether_tempest) } and arcanecharges() == maxarcanecharges() and buffexpires(arcane_power) and target.debuffexpires(touch_of_the_magi) and spell(nether_tempest) or arcanecharges() <= totm_max_charges() and spell(arcane_orb) or manapercent() <= 95 and buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and spell(supernova) or buffpresent(rule_of_threes_arcane) and arcanecharges() > 3 and mana() > manacost(arcane_blast) and spell(arcane_blast) or manapercent() <= barrage_mana_pct() and buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and arcanecharges() == maxarcanecharges() and hastalent(arcane_orb_talent) and spellcooldown(arcane_orb) <= gcd() and manapercent() <= 90 and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffpresent(arcane_power) and buffremaining(arcane_power) <= gcd() and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffpresent(rune_of_power_buff) and buffexpires(arcane_power) and totemremaining(rune_of_power) <= gcd() and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffpresent(touch_of_the_magi) and target.debuffremaining(touch_of_the_magi) <= gcd() and arcanecharges() == maxarcanecharges() and spell(arcane_barrage) or target.healthpercent() < 35 and arcanecharges() == maxarcanecharges() and runeforge(arcane_bombardment_runeforge) and enemies() > 1 and buffexpires(deathborne) and spell(arcane_barrage) or target.healthpercent() < 35 and arcanecharges() < maxarcanecharges() and runeforge(arcane_bombardment_runeforge) and enemies() > 1 and buffexpires(deathborne) and spell(arcane_explosion) or mana() > manacost(arcane_blast) and spell(arcane_blast) + unless spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and spellcooldown(arcane_power) <= executetime(arcane_barrage) and manapercent() > ap_minimum_mana_pct() } and buffexpires(rune_of_power_buff) and spell(arcane_barrage) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and hastalent(rune_of_power_talent) and spellcooldown(rune_of_power) <= executetime(arcane_barrage) } and spellcooldown(arcane_power) > totm_max_delay_for_ap() and spell(arcane_barrage) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and { not hastalent(rune_of_power_talent) or spellcooldown(rune_of_power) > totm_max_delay_for_rop() } } and spellcooldown(arcane_power) > totm_max_delay_for_ap() and spell(arcane_barrage) or target.debuffstacks(radiant_spark_vulnerability) == spelldata(radiant_spark_vulnerability max_stacks) and { buffexpires(arcane_power) or buffremaining(arcane_power) <= gcd() } and { buffexpires(rune_of_power_buff) or totemremaining(rune_of_power) <= gcd() } and spell(arcane_barrage) or { target.debuffremaining(radiant_spark) > 8 or target.debuffstacks(radiant_spark_vulnerability) > 0 and target.debuffstacks(radiant_spark_vulnerability) < spelldata(radiant_spark_vulnerability max_stacks) } and mana() > manacost(arcane_blast) and spell(arcane_blast) or buffpresent(presence_of_mind) and target.debuffpresent(touch_of_the_magi) and target.debuffremaining(touch_of_the_magi) <= executetime(arcane_blast) and mana() > manacost(arcane_blast) and spell(arcane_blast) or target.debuffpresent(touch_of_the_magi) and hastalent(arcane_echo_talent) and { buffexpires(deathborne) or enemies() == 1 } and { target.debuffremaining(touch_of_the_magi) > executetime(arcane_missiles) or spellcooldown(presence_of_mind) > 0 or iscovenant("kyrian") } and { not hasazeritetrait(arcane_pummeling_trait) or buffexpires(clearcasting_channel_buff) } and spell(arcane_missiles) or buffpresent(clearcasting) and buffpresent(expanded_potential_buff) and spell(arcane_missiles) or buffpresent(clearcasting) and { buffpresent(arcane_power) or buffpresent(rune_of_power_buff) or target.debuffremaining(touch_of_the_magi) > executetime(arcane_missiles) } and spell(arcane_missiles) or buffpresent(clearcasting) and buffstacks(clearcasting) == spelldata(clearcasting max_stacks) and spell(arcane_missiles) or buffpresent(clearcasting) and buffremaining(clearcasting) <= buffstacks(clearcasting) * executetime(arcane_missiles) + gcd() and spell(arcane_missiles) or { target.refreshable(nether_tempest) or not target.debuffpresent(nether_tempest) } and arcanecharges() == maxarcanecharges() and buffexpires(arcane_power) and target.debuffexpires(touch_of_the_magi) and spell(nether_tempest) or arcanecharges() <= totm_max_charges() and spell(arcane_orb) or manapercent() <= 95 and buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and spell(supernova) or buffpresent(rule_of_threes_buff) and arcanecharges() > 3 and mana() > manacost(arcane_blast) and spell(arcane_blast) or manapercent() <= barrage_mana_pct() and buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and arcanecharges() == maxarcanecharges() and hastalent(arcane_orb_talent) and spellcooldown(arcane_orb) <= gcd() and manapercent() <= 90 and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffpresent(arcane_power) and buffremaining(arcane_power) <= gcd() and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffpresent(rune_of_power_buff) and buffexpires(arcane_power) and totemremaining(rune_of_power) <= gcd() and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffpresent(touch_of_the_magi) and target.debuffremaining(touch_of_the_magi) <= gcd() and arcanecharges() == maxarcanecharges() and spell(arcane_barrage) or target.healthpercent() < 35 and arcanecharges() == maxarcanecharges() and runeforge(arcane_bombardment_runeforge) and enemies() > 1 and buffexpires(deathborne) and spell(arcane_barrage) or target.healthpercent() < 35 and arcanecharges() < maxarcanecharges() and runeforge(arcane_bombardment_runeforge) and enemies() > 1 and buffexpires(deathborne) and spell(arcane_explosion) or mana() > manacost(arcane_blast) and spell(arcane_blast) { #evocation,if=buff.rune_of_power.down&buff.arcane_power.down&debuff.touch_of_the_magi.down if buffexpires(rune_of_power_buff) and buffexpires(arcane_power) and target.debuffexpires(touch_of_the_magi) spell(evocation) @@ -358,7 +361,7 @@ AddFunction arcanerotationcdactions AddFunction arcanerotationcdpostconditions { - channeling(evocation) and manapercent() >= 95 and { not runeforge(siphon_storm_runeforge) or buffstacks(siphon_storm_buff) == spelldata(siphon_storm_buff max_stacks) } and texture(inv_pet_exitbattle text=cancel) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and spellcooldown(arcane_power) <= executetime(arcane_barrage) and manapercent() > ap_minimum_mana_pct() } and buffexpires(rune_of_power_buff) and spell(arcane_barrage) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and hastalent(rune_of_power_talent) and spellcooldown(rune_of_power) <= executetime(arcane_barrage) } and spellcooldown(arcane_power) > totm_max_delay_for_ap() and spell(arcane_barrage) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and { not hastalent(rune_of_power_talent) or spellcooldown(rune_of_power) > totm_max_delay_for_rop() } } and spellcooldown(arcane_power) > totm_max_delay_for_ap() and spell(arcane_barrage) or target.debuffstacks(radiant_spark_vulnerability) == spelldata(radiant_spark_vulnerability max_stacks) and { buffexpires(arcane_power) or buffremaining(arcane_power) <= gcd() } and { buffexpires(rune_of_power_buff) or totemremaining(rune_of_power) <= gcd() } and spell(arcane_barrage) or { target.debuffremaining(radiant_spark) > 8 or target.debuffstacks(radiant_spark_vulnerability) > 0 and target.debuffstacks(radiant_spark_vulnerability) < spelldata(radiant_spark_vulnerability max_stacks) } and mana() > manacost(arcane_blast) and spell(arcane_blast) or buffpresent(presence_of_mind) and target.debuffpresent(touch_of_the_magi) and target.debuffremaining(touch_of_the_magi) <= executetime(arcane_blast) and mana() > manacost(arcane_blast) and spell(arcane_blast) or target.debuffpresent(touch_of_the_magi) and hastalent(arcane_echo_talent) and { buffexpires(deathborne) or enemies() == 1 } and { target.debuffremaining(touch_of_the_magi) > executetime(arcane_missiles) or spellcooldown(presence_of_mind) > 0 or iscovenant("kyrian") } and { not hasazeritetrait(arcane_pummeling_trait) or buffexpires(clearcasting_channel_buff) } and spell(arcane_missiles) or buffpresent(clearcasting) and buffpresent(expanded_potential_buff) and spell(arcane_missiles) or buffpresent(clearcasting) and { buffpresent(arcane_power) or buffpresent(rune_of_power_buff) or target.debuffremaining(touch_of_the_magi) > executetime(arcane_missiles) } and spell(arcane_missiles) or buffpresent(clearcasting) and buffstacks(clearcasting) == spelldata(clearcasting max_stacks) and spell(arcane_missiles) or buffpresent(clearcasting) and buffremaining(clearcasting) <= buffstacks(clearcasting) * executetime(arcane_missiles) + gcd() and spell(arcane_missiles) or { target.refreshable(nether_tempest) or not target.debuffpresent(nether_tempest) } and arcanecharges() == maxarcanecharges() and buffexpires(arcane_power) and target.debuffexpires(touch_of_the_magi) and spell(nether_tempest) or arcanecharges() <= totm_max_charges() and spell(arcane_orb) or manapercent() <= 95 and buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and spell(supernova) or buffpresent(rule_of_threes_arcane) and arcanecharges() > 3 and mana() > manacost(arcane_blast) and spell(arcane_blast) or manapercent() <= barrage_mana_pct() and buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and arcanecharges() == maxarcanecharges() and hastalent(arcane_orb_talent) and spellcooldown(arcane_orb) <= gcd() and manapercent() <= 90 and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffpresent(arcane_power) and buffremaining(arcane_power) <= gcd() and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffpresent(rune_of_power_buff) and buffexpires(arcane_power) and totemremaining(rune_of_power) <= gcd() and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffpresent(touch_of_the_magi) and target.debuffremaining(touch_of_the_magi) <= gcd() and arcanecharges() == maxarcanecharges() and spell(arcane_barrage) or target.healthpercent() < 35 and arcanecharges() == maxarcanecharges() and runeforge(arcane_bombardment_runeforge) and enemies() > 1 and buffexpires(deathborne) and spell(arcane_barrage) or target.healthpercent() < 35 and arcanecharges() < maxarcanecharges() and runeforge(arcane_bombardment_runeforge) and enemies() > 1 and buffexpires(deathborne) and spell(arcane_explosion) or mana() > manacost(arcane_blast) and spell(arcane_blast) or spell(arcane_barrage) + channeling(evocation) and manapercent() >= 95 and { not runeforge(siphon_storm_runeforge) or buffstacks(siphon_storm_buff) == spelldata(siphon_storm_buff max_stacks) } and texture(inv_pet_exitbattle text=cancel) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and spellcooldown(arcane_power) <= executetime(arcane_barrage) and manapercent() > ap_minimum_mana_pct() } and buffexpires(rune_of_power_buff) and spell(arcane_barrage) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and hastalent(rune_of_power_talent) and spellcooldown(rune_of_power) <= executetime(arcane_barrage) } and spellcooldown(arcane_power) > totm_max_delay_for_ap() and spell(arcane_barrage) or spellcooldown(touch_of_the_magi) <= 0 and { arcanecharges() > totm_max_charges() and { not hastalent(rune_of_power_talent) or spellcooldown(rune_of_power) > totm_max_delay_for_rop() } } and spellcooldown(arcane_power) > totm_max_delay_for_ap() and spell(arcane_barrage) or target.debuffstacks(radiant_spark_vulnerability) == spelldata(radiant_spark_vulnerability max_stacks) and { buffexpires(arcane_power) or buffremaining(arcane_power) <= gcd() } and { buffexpires(rune_of_power_buff) or totemremaining(rune_of_power) <= gcd() } and spell(arcane_barrage) or { target.debuffremaining(radiant_spark) > 8 or target.debuffstacks(radiant_spark_vulnerability) > 0 and target.debuffstacks(radiant_spark_vulnerability) < spelldata(radiant_spark_vulnerability max_stacks) } and mana() > manacost(arcane_blast) and spell(arcane_blast) or buffpresent(presence_of_mind) and target.debuffpresent(touch_of_the_magi) and target.debuffremaining(touch_of_the_magi) <= executetime(arcane_blast) and mana() > manacost(arcane_blast) and spell(arcane_blast) or target.debuffpresent(touch_of_the_magi) and hastalent(arcane_echo_talent) and { buffexpires(deathborne) or enemies() == 1 } and { target.debuffremaining(touch_of_the_magi) > executetime(arcane_missiles) or spellcooldown(presence_of_mind) > 0 or iscovenant("kyrian") } and { not hasazeritetrait(arcane_pummeling_trait) or buffexpires(clearcasting_channel_buff) } and spell(arcane_missiles) or buffpresent(clearcasting) and buffpresent(expanded_potential_buff) and spell(arcane_missiles) or buffpresent(clearcasting) and { buffpresent(arcane_power) or buffpresent(rune_of_power_buff) or target.debuffremaining(touch_of_the_magi) > executetime(arcane_missiles) } and spell(arcane_missiles) or buffpresent(clearcasting) and buffstacks(clearcasting) == spelldata(clearcasting max_stacks) and spell(arcane_missiles) or buffpresent(clearcasting) and buffremaining(clearcasting) <= buffstacks(clearcasting) * executetime(arcane_missiles) + gcd() and spell(arcane_missiles) or { target.refreshable(nether_tempest) or not target.debuffpresent(nether_tempest) } and arcanecharges() == maxarcanecharges() and buffexpires(arcane_power) and target.debuffexpires(touch_of_the_magi) and spell(nether_tempest) or arcanecharges() <= totm_max_charges() and spell(arcane_orb) or manapercent() <= 95 and buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and spell(supernova) or buffpresent(rule_of_threes_buff) and arcanecharges() > 3 and mana() > manacost(arcane_blast) and spell(arcane_blast) or manapercent() <= barrage_mana_pct() and buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffexpires(touch_of_the_magi) and arcanecharges() == maxarcanecharges() and hastalent(arcane_orb_talent) and spellcooldown(arcane_orb) <= gcd() and manapercent() <= 90 and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffpresent(arcane_power) and buffremaining(arcane_power) <= gcd() and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffpresent(rune_of_power_buff) and buffexpires(arcane_power) and totemremaining(rune_of_power) <= gcd() and arcanecharges() == maxarcanecharges() and spellcooldown(evocation) > 0 and spell(arcane_barrage) or buffexpires(arcane_power) and buffexpires(rune_of_power_buff) and target.debuffpresent(touch_of_the_magi) and target.debuffremaining(touch_of_the_magi) <= gcd() and arcanecharges() == maxarcanecharges() and spell(arcane_barrage) or target.healthpercent() < 35 and arcanecharges() == maxarcanecharges() and runeforge(arcane_bombardment_runeforge) and enemies() > 1 and buffexpires(deathborne) and spell(arcane_barrage) or target.healthpercent() < 35 and arcanecharges() < maxarcanecharges() and runeforge(arcane_bombardment_runeforge) and enemies() > 1 and buffexpires(deathborne) and spell(arcane_explosion) or mana() > manacost(arcane_blast) and spell(arcane_blast) or spell(arcane_barrage) } ### actions.precombat @@ -1160,7 +1163,7 @@ AddIcon enabled=(checkboxon(opt_mage_arcane_aoe) and specialization(arcane)) hel # radiant_spark_vulnerability # replenish_mana # resonance_talent -# rule_of_threes_arcane +# rule_of_threes_buff # rune_of_power # rune_of_power_buff # rune_of_power_talent @@ -1660,6 +1663,8 @@ AddFunction firecombustion_phasecdpostconditions AddFunction firecombustion_cooldownsmainactions { + #blood_fury + spell(blood_fury) #berserking spell(berserking) } @@ -1674,17 +1679,15 @@ AddFunction firecombustion_cooldownsshortcdactions AddFunction firecombustion_cooldownsshortcdpostconditions { - spell(berserking) + spell(blood_fury) or spell(berserking) } AddFunction firecombustion_cooldownscdactions { #potion if checkboxon(opt_use_consumables) and target.classification(worldboss) item(potion_of_spectral_intellect_item usable=1) - #blood_fury - spell(blood_fury) - unless spell(berserking) + unless spell(blood_fury) or spell(berserking) { #fireblood spell(fireblood) @@ -1701,7 +1704,7 @@ AddFunction firecombustion_cooldownscdactions AddFunction firecombustion_cooldownscdpostconditions { - spell(berserking) + spell(blood_fury) or spell(berserking) } ### actions.active_talents @@ -1748,7 +1751,7 @@ AddFunction fire_defaultmainactions #fire_blast,use_while_casting=1,if=action.mirrors_of_torment.executing&full_recharge_time-action.mirrors_of_torment.execute_remains<4&!hot_streak_spells_in_flight&!buff.hot_streak.react if executetime(mirrors_of_torment) > 0 and spellfullrecharge(fire_blast_fire) - executetime(mirrors_of_torment) < 4 and not inflighttotarget(hot_streak) and not buffpresent(hot_streak) spell(fire_blast_fire) #cancel_buff,name=soul_ignition,if=!conduit.infernal_cascade&time<5|buff.infernal_cascade.stack=buff.infernal_cascade.max_stack - if { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade) == spelldata(infernal_cascade max_stacks) } and buffpresent(soul_ignition) texture(soul_ignition text=cancel) + if { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade) == spelldata(infernal_cascade max_stacks) } and buffpresent(soul_ignition_buff) texture(soul_ignition text=cancel) #arcane_explosion,if=runeforge.disciplinary_command&cooldown.buff_disciplinary_command.ready&buff.disciplinary_command_arcane.down&!buff.disciplinary_command.up&variable.time_to_combustion>25 if runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command__arcane_aura_dnt) and not buffpresent(disciplinary_command) and time_to_combustion() > 25 spell(arcane_explosion) #frostbolt,if=runeforge.disciplinary_command&cooldown.buff_disciplinary_command.ready&buff.disciplinary_command_frost.down&!buff.disciplinary_command.up&variable.time_to_combustion>25 @@ -1801,7 +1804,7 @@ AddFunction fire_defaultshortcdactions #mirrors_of_torment,if=variable.time_to_combustion<=3&buff.combustion.down if time_to_combustion() <= 3 and buffexpires(combustion) 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) and not buffpresent(hot_streak) and spell(fire_blast_fire) or { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade) == spelldata(infernal_cascade max_stacks) } and buffpresent(soul_ignition) and texture(soul_ignition text=cancel) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command__arcane_aura_dnt) and not buffpresent(disciplinary_command) and time_to_combustion() > 25 and spell(arcane_explosion) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command__frost_aura_dnt) and not buffpresent(disciplinary_command) and time_to_combustion() > 25 and spell(frostbolt) + unless executetime(mirrors_of_torment) > 0 and spellfullrecharge(fire_blast_fire) - executetime(mirrors_of_torment) < 4 and not inflighttotarget(hot_streak) and not buffpresent(hot_streak) and spell(fire_blast_fire) or { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade) == spelldata(infernal_cascade max_stacks) } and buffpresent(soul_ignition_buff) and texture(soul_ignition text=cancel) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command__arcane_aura_dnt) and not buffpresent(disciplinary_command) and time_to_combustion() > 25 and spell(arcane_explosion) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command__frost_aura_dnt) and not buffpresent(disciplinary_command) and time_to_combustion() > 25 and spell(frostbolt) { #call_action_list,name=combustion_phase,if=!variable.disable_combustion&variable.time_to_combustion<=0 if not disable_combustion() and time_to_combustion() <= 0 firecombustion_phaseshortcdactions() @@ -1826,7 +1829,7 @@ AddFunction fire_defaultshortcdactions AddFunction fire_defaultshortcdpostconditions { - executetime(mirrors_of_torment) > 0 and spellfullrecharge(fire_blast_fire) - executetime(mirrors_of_torment) < 4 and not inflighttotarget(hot_streak) and not buffpresent(hot_streak) and spell(fire_blast_fire) or { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade) == spelldata(infernal_cascade max_stacks) } and buffpresent(soul_ignition) and texture(soul_ignition text=cancel) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command__arcane_aura_dnt) and not buffpresent(disciplinary_command) and time_to_combustion() > 25 and spell(arcane_explosion) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command__frost_aura_dnt) and not buffpresent(disciplinary_command) and time_to_combustion() > 25 and spell(frostbolt) or not disable_combustion() and time_to_combustion() <= 0 and firecombustion_phaseshortcdpostconditions() or buffpresent(rune_of_power_buff) and { time_to_combustion() > 0 or disable_combustion() } and firerop_phaseshortcdpostconditions() or not fire_blast_pooling() and { time_to_combustion() > 0 or disable_combustion() } and enemies() >= hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and not buffpresent(hot_streak) and { buffpresent(heating_up) 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 charges(fire_blast_fire) >= 1 and not fire_blast_pooling() and { not executetime(fireball) > 0 and not inflighttotarget(pyroblast) and buffpresent(heating_up) or executetime(fireball) > 0 and not buffpresent(hot_streak) or inflighttotarget(pyroblast) and buffpresent(heating_up) and not buffpresent(hot_streak) } and spell(fire_blast_fire) or executetime(shifting_power) > 0 and spellfullrecharge(fire_blast_fire) < 0 and buffexpires(hot_streak) and timeincombat() > 10 and spell(fire_blast_fire) or { time_to_combustion() > 0 or disable_combustion() } and buffexpires(rune_of_power_buff) and firestandard_rotationshortcdpostconditions() or spell(scorch) + executetime(mirrors_of_torment) > 0 and spellfullrecharge(fire_blast_fire) - executetime(mirrors_of_torment) < 4 and not inflighttotarget(hot_streak) and not buffpresent(hot_streak) and spell(fire_blast_fire) or { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade) == spelldata(infernal_cascade max_stacks) } and buffpresent(soul_ignition_buff) and texture(soul_ignition text=cancel) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command__arcane_aura_dnt) and not buffpresent(disciplinary_command) and time_to_combustion() > 25 and spell(arcane_explosion) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command__frost_aura_dnt) and not buffpresent(disciplinary_command) and time_to_combustion() > 25 and spell(frostbolt) or not disable_combustion() and time_to_combustion() <= 0 and firecombustion_phaseshortcdpostconditions() or buffpresent(rune_of_power_buff) and { time_to_combustion() > 0 or disable_combustion() } and firerop_phaseshortcdpostconditions() or not fire_blast_pooling() and { time_to_combustion() > 0 or disable_combustion() } and enemies() >= hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and not buffpresent(hot_streak) and { buffpresent(heating_up) 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 charges(fire_blast_fire) >= 1 and not fire_blast_pooling() and { not executetime(fireball) > 0 and not inflighttotarget(pyroblast) and buffpresent(heating_up) or executetime(fireball) > 0 and not buffpresent(hot_streak) or inflighttotarget(pyroblast) and buffpresent(heating_up) and not buffpresent(hot_streak) } and spell(fire_blast_fire) or executetime(shifting_power) > 0 and spellfullrecharge(fire_blast_fire) < 0 and buffexpires(hot_streak) and timeincombat() > 10 and spell(fire_blast_fire) or { time_to_combustion() > 0 or disable_combustion() } and buffexpires(rune_of_power_buff) and firestandard_rotationshortcdpostconditions() or spell(scorch) } AddFunction fire_defaultcdactions @@ -1856,7 +1859,7 @@ AddFunction fire_defaultcdactions #use_item,name=soul_igniter,if=(variable.time_to_combustion>=30*(variable.on_use_cutoff>0)|cooldown.item_cd_1141.remains)&(!equipped.dreadfire_vessel|cooldown.dreadfire_vessel_344732.remains>5) if { time_to_combustion() >= 30 * { on_use_cutoff() > 0 } or itemcooldown(shared="item_cd_1141") > 0 } and { not hasequippeditem(dreadfire_vessel_item) or spellcooldown(dreadfire_vessel) > 5 } fireuseitemactions() - unless { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade) == spelldata(infernal_cascade max_stacks) } and buffpresent(soul_ignition) and texture(soul_ignition text=cancel) + unless { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade) == spelldata(infernal_cascade max_stacks) } and buffpresent(soul_ignition_buff) and texture(soul_ignition text=cancel) { #counterspell,if=runeforge.disciplinary_command&cooldown.buff_disciplinary_command.ready&buff.disciplinary_command_arcane.down&!buff.disciplinary_command.up&variable.time_to_combustion>25 if runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command__arcane_aura_dnt) and not buffpresent(disciplinary_command) and time_to_combustion() > 25 fireinterruptactions() @@ -1885,7 +1888,7 @@ AddFunction fire_defaultcdactions AddFunction fire_defaultcdpostconditions { - buffexpires(combustion) and time_to_combustion() > 0 and { spellcooldown(rune_of_power) > 0 or not hastalent(rune_of_power_talent) } and not { buffpresent(infernal_cascade) and buffpresent(hot_streak) } and { enemies() < combustion_shifting_power() or enemies() < combustion_flamestrike() or time_to_combustion() - 0 > spellcooldown(shifting_power) } and spell(shifting_power) or { buffexpires(combustion) and buffexpires(rune_of_power_buff) and { time_to_combustion() < executetime(radiant_spark) or time_to_combustion() > spellcooldownduration(radiant_spark) } or buffpresent(rune_of_power_buff) and time_to_combustion() > 30 } and spell(radiant_spark) or time_to_combustion() <= 3 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) and not buffpresent(hot_streak) and spell(fire_blast_fire) or { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade) == spelldata(infernal_cascade max_stacks) } and buffpresent(soul_ignition) and texture(soul_ignition text=cancel) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command__arcane_aura_dnt) and not buffpresent(disciplinary_command) and time_to_combustion() > 25 and spell(arcane_explosion) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command__frost_aura_dnt) and not buffpresent(disciplinary_command) and time_to_combustion() > 25 and spell(frostbolt) or not disable_combustion() and time_to_combustion() <= 0 and firecombustion_phasecdpostconditions() or 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() or disable_combustion() } and spell(rune_of_power) or buffpresent(rune_of_power_buff) and { time_to_combustion() > 0 or disable_combustion() } and firerop_phasecdpostconditions() or not fire_blast_pooling() and { time_to_combustion() > 0 or disable_combustion() } and enemies() >= hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and not buffpresent(hot_streak) and { buffpresent(heating_up) 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 charges(fire_blast_fire) >= 1 and not fire_blast_pooling() and { not executetime(fireball) > 0 and not inflighttotarget(pyroblast) and buffpresent(heating_up) or executetime(fireball) > 0 and not buffpresent(hot_streak) or inflighttotarget(pyroblast) and buffpresent(heating_up) and not buffpresent(hot_streak) } and spell(fire_blast_fire) or executetime(shifting_power) > 0 and spellfullrecharge(fire_blast_fire) < 0 and buffexpires(hot_streak) and timeincombat() > 10 and spell(fire_blast_fire) or { time_to_combustion() > 0 or disable_combustion() } and buffexpires(rune_of_power_buff) and firestandard_rotationcdpostconditions() or spell(scorch) + buffexpires(combustion) and time_to_combustion() > 0 and { spellcooldown(rune_of_power) > 0 or not hastalent(rune_of_power_talent) } and not { buffpresent(infernal_cascade) and buffpresent(hot_streak) } and { enemies() < combustion_shifting_power() or enemies() < combustion_flamestrike() or time_to_combustion() - 0 > spellcooldown(shifting_power) } and spell(shifting_power) or { buffexpires(combustion) and buffexpires(rune_of_power_buff) and { time_to_combustion() < executetime(radiant_spark) or time_to_combustion() > spellcooldownduration(radiant_spark) } or buffpresent(rune_of_power_buff) and time_to_combustion() > 30 } and spell(radiant_spark) or time_to_combustion() <= 3 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) and not buffpresent(hot_streak) and spell(fire_blast_fire) or { not conduit(infernal_cascade_conduit) and timeincombat() < 5 or buffstacks(infernal_cascade) == spelldata(infernal_cascade max_stacks) } and buffpresent(soul_ignition_buff) and texture(soul_ignition text=cancel) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command__arcane_aura_dnt) and not buffpresent(disciplinary_command) and time_to_combustion() > 25 and spell(arcane_explosion) or runeforge(disciplinary_command_runeforge) and spellcooldown(disciplinary_command) <= 0 and buffexpires(disciplinary_command__frost_aura_dnt) and not buffpresent(disciplinary_command) and time_to_combustion() > 25 and spell(frostbolt) or not disable_combustion() and time_to_combustion() <= 0 and firecombustion_phasecdpostconditions() or 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() or disable_combustion() } and spell(rune_of_power) or buffpresent(rune_of_power_buff) and { time_to_combustion() > 0 or disable_combustion() } and firerop_phasecdpostconditions() or not fire_blast_pooling() and { time_to_combustion() > 0 or disable_combustion() } and enemies() >= hard_cast_flamestrike() and not { talent(firestarter_talent) and target.healthpercent() >= 90 } and not buffpresent(hot_streak) and { buffpresent(heating_up) 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 charges(fire_blast_fire) >= 1 and not fire_blast_pooling() and { not executetime(fireball) > 0 and not inflighttotarget(pyroblast) and buffpresent(heating_up) or executetime(fireball) > 0 and not buffpresent(hot_streak) or inflighttotarget(pyroblast) and buffpresent(heating_up) and not buffpresent(hot_streak) } and spell(fire_blast_fire) or executetime(shifting_power) > 0 and spellfullrecharge(fire_blast_fire) < 0 and buffexpires(hot_streak) and timeincombat() > 10 and spell(fire_blast_fire) or { time_to_combustion() > 0 or disable_combustion() } and buffexpires(rune_of_power_buff) and firestandard_rotationcdpostconditions() or spell(scorch) } ### Fire icons. @@ -1992,6 +1995,7 @@ AddIcon enabled=(checkboxon(opt_mage_fire_aoe) and specialization(fire)) help=cd # searing_touch_talent # shifting_power # soul_ignition +# soul_ignition_buff # sun_kings_blessing_ready_buff # sun_kings_blessing_runeforge # sunblood_amethyst_item @@ -2199,6 +2203,8 @@ AddFunction frostmovementcdpostconditions AddFunction frostcdsmainactions { + #blood_fury + spell(blood_fury) #berserking spell(berserking) } @@ -2214,7 +2220,7 @@ AddFunction frostcdsshortcdactions #rune_of_power,if=cooldown.icy_veins.remains>12&buff.rune_of_power.down if spellcooldown(icy_veins) > 12 and buffexpires(rune_of_power_buff) spell(rune_of_power) - unless spell(berserking) + unless spell(blood_fury) or spell(berserking) { #bag_of_tricks spell(bag_of_tricks) @@ -2223,7 +2229,7 @@ AddFunction frostcdsshortcdactions AddFunction frostcdsshortcdpostconditions { - spell(berserking) + spell(blood_fury) or spell(berserking) } AddFunction frostcdscdactions @@ -2241,10 +2247,8 @@ AddFunction frostcdscdactions if runeforge(temporal_warp_runeforge) and buffpresent(exhaustion) and { previousoffgcdspell(icy_veins) or fightremains() < 30 } and { checkboxon(opt_time_warp) and debuffexpires(burst_haste_debuff any=1) } spell(time_warp) #use_items frostuseitemactions() - #blood_fury - spell(blood_fury) - unless spell(berserking) + unless spell(blood_fury) or spell(berserking) { #lights_judgment spell(lights_judgment) @@ -2258,7 +2262,7 @@ AddFunction frostcdscdactions AddFunction frostcdscdpostconditions { - enemies() < 3 and { conduit(siphoned_malice_conduit) or soulbind(wasteland_propriety_soulbind) } and spell(mirrors_of_torment) or spellcooldown(icy_veins) > 12 and buffexpires(rune_of_power_buff) and spell(rune_of_power) or spell(berserking) or spell(bag_of_tricks) + enemies() < 3 and { conduit(siphoned_malice_conduit) or soulbind(wasteland_propriety_soulbind) } and spell(mirrors_of_torment) or spellcooldown(icy_veins) > 12 and buffexpires(rune_of_power_buff) and spell(rune_of_power) or spell(blood_fury) or spell(berserking) or spell(bag_of_tricks) } ### actions.aoe diff --git a/src/scripts/ovale_mage_spells.ts b/src/scripts/ovale_mage_spells.ts index 5d958abf4..37b202c29 100644 --- a/src/scripts/ovale_mage_spells.ts +++ b/src/scripts/ovale_mage_spells.ts @@ -62,11 +62,9 @@ Define(blizzard_debuff 12486) SpellInfo(blizzard_debuff duration=3 gcd=0 offgcd=1) # Movement speed reduced by w1. SpellAddTargetDebuff(blizzard_debuff blizzard_debuff add=1) -Define(blood_fury 20572) -# Increases your attack power by s1 for 15 seconds. - SpellInfo(blood_fury cd=120 duration=15 gcd=0 offgcd=1) - # Attack power increased by w1. - SpellAddBuff(blood_fury blood_fury add=1) +Define(blood_fury 24571) +# Instantly increases your rage by 300/10. + SpellInfo(blood_fury gcd=0 offgcd=1 rage=-30) Define(brain_freeze 190446) # Frostbolt has a m1 chance to empower your next Flurry to be instant cast?a231584[,][ and] deal 190446s2 increased damage?a231584[, and apply Winter's Chill to the target. rnrnWinter's Chill causes the target to take damage from your spells as if it were frozen][]. SpellInfo(brain_freeze duration=15 max_stacks=1 gcd=0 offgcd=1) @@ -329,15 +327,14 @@ Define(ray_of_frost 205021) SpellRequire(ray_of_frost unusable set=1 enabled=(not hastalent(ray_of_frost_talent))) # Movement slowed by w1.rnTaking w2 Frost damage every t2 sec. SpellAddTargetDebuff(ray_of_frost ray_of_frost add=1) -Define(replenish_mana 5405) +Define(replenish_mana 33394) # Restores s1 mana. - SpellInfo(replenish_mana cd=120 gcd=0 offgcd=1) - # Restoring w2 mana every t1 sec. - SpellAddBuff(replenish_mana replenish_mana add=1) -Define(rule_of_threes_arcane 264354) -# When you gain your third Arcane Charge, the cost of your next Arcane Blast or Arcane Missiles is reduced by 264774s1. - SpellInfo(rule_of_threes_arcane gcd=0 offgcd=1 unusable=1) - SpellRequire(rule_of_threes_arcane unusable set=1 enabled=(not hastalent(rule_of_threes_talent))) + SpellInfo(replenish_mana cd=60 gcd=0 offgcd=1 mana=0) +Define(rule_of_threes_buff 187292) +# Arcane Missiles now fires m2 additional Missiles. + SpellInfo(rule_of_threes_buff duration=10 gcd=0 offgcd=1) + # Arcane Missiles now fires m2 additional Missiles. + SpellAddBuff(rule_of_threes_buff rule_of_threes_buff add=1) Define(rune_of_power 116011) # Places a Rune of Power on the ground for 12 seconds which increases your spell damage by 116014s1 while you stand within 8 yds.rnrnCasting ?a137021[Arcane Power]?a137019[Combustion][Icy Veins] will also create a Rune of Power at your location. SpellInfo(rune_of_power cd=45 duration=12) @@ -368,11 +365,14 @@ Define(siphon_storm_buff 332934) SpellInfo(siphon_storm_buff duration=30 max_stacks=6 gcd=0 offgcd=1) # Intellect increased by s1 SpellAddBuff(siphon_storm_buff siphon_storm_buff add=1) -Define(soul_ignition 345211) +Define(soul_ignition 345251) # Activate Soul Igniter, sacrificing up to 345214s1 health over 15 seconds to empower Blazing Surge.rnrnReactivate to cast Blazing Surge, dealing 345214s2*(1+@versadmg) Fire damage split between enemies in a 345215a1 yd cone, plus up to 345214s4 additional damage, based on how long Soul Igniter was active.rnrnDamage is increased per enemy struck, up to s2 enemies. (1 min Cooldown) - SpellInfo(soul_ignition duration=15 gcd=0 offgcd=1 tick=1) + SpellInfo(soul_ignition cd=0.5 gcd=0 offgcd=1) +Define(soul_ignition_buff 345211) +# Activate Soul Igniter, sacrificing up to 345214s1 health over 15 seconds to empower Blazing Surge.rnrnReactivate to cast Blazing Surge, dealing 345214s2*(1+@versadmg) Fire damage split between enemies in a 345215a1 yd cone, plus up to 345214s4 additional damage, based on how long Soul Igniter was active.rnrnDamage is increased per enemy struck, up to s2 enemies. (1 min Cooldown) + SpellInfo(soul_ignition_buff duration=15 gcd=0 offgcd=1 tick=1) # Reactivate Soul Igniter to cast Blazing Surge. - SpellAddBuff(soul_ignition soul_ignition add=1) + SpellAddBuff(soul_ignition_buff soul_ignition_buff add=1) Define(summon_water_elemental 31687) # Summons a Water Elemental to follow and fight for you. SpellInfo(summon_water_elemental cd=30) @@ -448,8 +448,6 @@ Define(ray_of_frost_talent 22309) # Channel an icy beam at the enemy for 5 seconds, dealing (120 of Spell Power) Frost damage every t2 sec and slowing movement by s4. Each time Ray of Frost deals damage, its damage and snare increases by 208141s1.rnrnGenerates s3 charges of Fingers of Frost over its duration. Define(resonance_talent 22453) # Arcane Barrage deals s1 increased damage per target it hits. -Define(rule_of_threes_talent 22461) -# When you gain your third Arcane Charge, the cost of your next Arcane Blast or Arcane Missiles is reduced by 264774s1. Define(rune_of_power_talent 22447) # Places a Rune of Power on the ground for 12 seconds which increases your spell damage by 116014s1 while you stand within 8 yds.rnrnCasting ?a137021[Arcane Power]?a137019[Combustion][Icy Veins] will also create a Rune of Power at your location. Define(searing_touch_talent 22462) diff --git a/src/scripts/ovale_monk.ts b/src/scripts/ovale_monk.ts index 7435baf54..878c7f65e 100644 --- a/src/scripts/ovale_monk.ts +++ b/src/scripts/ovale_monk.ts @@ -86,6 +86,8 @@ AddFunction brewmasterprecombatcdpostconditions AddFunction brewmaster_defaultmainactions { + #blood_fury + spell(blood_fury) #berserking spell(berserking) #weapons_of_order @@ -131,7 +133,7 @@ AddFunction brewmaster_defaultshortcdactions #auto_attack brewmastergetinmeleerange() - unless spell(berserking) + unless spell(blood_fury) or spell(berserking) { #bag_of_tricks spell(bag_of_tricks) @@ -170,7 +172,7 @@ AddFunction brewmaster_defaultshortcdactions AddFunction brewmaster_defaultshortcdpostconditions { - spell(berserking) or spell(weapons_of_order) or spell(purifying_brew) or enemies(tagged=1) >= 2 and spell(keg_smash) or buffpresent(weapons_of_order_buff) and spell(keg_smash) or hastalent(rushing_jade_wind_talent) and buffpresent(blackout_combo_buff) and buffpresent(rushing_jade_wind) and spell(tiger_palm) or buffexpires(charred_passions_buff) and equippedruneforge(charred_passions_runeforge) and spell(breath_of_fire) or spell(blackout_kick_brewmaster) or spell(keg_smash) or buffstacks(gift_of_the_ox) >= 3 and spell(expel_harm) or buffexpires(rushing_jade_wind) and spell(rushing_jade_wind) or buffpresent(charred_passions_buff) and spell(spinning_crane_kick_brewmaster) or buffexpires(blackout_combo_buff) and { buffexpires(bloodlust) or buffpresent(bloodlust) and target.debuffrefreshable(breath_of_fire_debuff) } and spell(breath_of_fire) or spell(chi_wave) or enemies() >= 3 and spellcooldown(keg_smash) > gcd() and energy() + energyregenrate() * { spellcooldown(keg_smash) + executetime(spinning_crane_kick_brewmaster) } >= 65 and { not hastalent(spitfire_talent) or not equippedruneforge(charred_passions_runeforge) } and spell(spinning_crane_kick_brewmaster) or not hastalent(blackout_combo_talent) and spellcooldown(keg_smash) > gcd() and energy() + energyregenrate() * { spellcooldown(keg_smash) + gcd() } >= 65 and spell(tiger_palm) or spell(rushing_jade_wind) + spell(blood_fury) or spell(berserking) or spell(weapons_of_order) or spell(purifying_brew) or enemies(tagged=1) >= 2 and spell(keg_smash) or buffpresent(weapons_of_order_buff) and spell(keg_smash) or hastalent(rushing_jade_wind_talent) and buffpresent(blackout_combo_buff) and buffpresent(rushing_jade_wind) and spell(tiger_palm) or buffexpires(charred_passions_buff) and equippedruneforge(charred_passions_runeforge) and spell(breath_of_fire) or spell(blackout_kick_brewmaster) or spell(keg_smash) or buffstacks(gift_of_the_ox) >= 3 and spell(expel_harm) or buffexpires(rushing_jade_wind) and spell(rushing_jade_wind) or buffpresent(charred_passions_buff) and spell(spinning_crane_kick_brewmaster) or buffexpires(blackout_combo_buff) and { buffexpires(bloodlust) or buffpresent(bloodlust) and target.debuffrefreshable(breath_of_fire_debuff) } and spell(breath_of_fire) or spell(chi_wave) or enemies() >= 3 and spellcooldown(keg_smash) > gcd() and energy() + energyregenrate() * { spellcooldown(keg_smash) + executetime(spinning_crane_kick_brewmaster) } >= 65 and { not hastalent(spitfire_talent) or not equippedruneforge(charred_passions_runeforge) } and spell(spinning_crane_kick_brewmaster) or not hastalent(blackout_combo_talent) and spellcooldown(keg_smash) > gcd() and energy() + energyregenrate() * { spellcooldown(keg_smash) + gcd() } >= 65 and spell(tiger_palm) or spell(rushing_jade_wind) } AddFunction brewmaster_defaultcdactions @@ -186,10 +188,8 @@ AddFunction brewmaster_defaultcdactions brewmasteruseitemactions() #potion if checkboxon(opt_use_consumables) and target.classification(worldboss) item(phantom_fire usable=1) - #blood_fury - spell(blood_fury) - unless spell(berserking) + unless spell(blood_fury) or spell(berserking) { #lights_judgment spell(lights_judgment) @@ -236,7 +236,7 @@ AddFunction brewmaster_defaultcdactions AddFunction brewmaster_defaultcdpostconditions { - spell(berserking) or spell(bag_of_tricks) or spell(weapons_of_order) or spell(bonedust_brew) or spell(purifying_brew) or enemies(tagged=1) >= 2 and spell(keg_smash) or enemies(tagged=1) >= 2 and spell(faeline_stomp) or buffpresent(weapons_of_order_buff) and spell(keg_smash) or buffexpires(blackout_combo_buff) and incomingdamage(1.999) > maxhealth() * 0.1 + staggertick() and buffstacks(elusive_brawler) < 2 and spell(celestial_brew) or hastalent(rushing_jade_wind_talent) and buffpresent(blackout_combo_buff) and buffpresent(rushing_jade_wind) and spell(tiger_palm) or buffexpires(charred_passions_buff) and equippedruneforge(charred_passions_runeforge) and spell(breath_of_fire) or spell(blackout_kick_brewmaster) or spell(keg_smash) or spell(faeline_stomp) or buffstacks(gift_of_the_ox) >= 3 and spell(expel_harm) or buffexpires(rushing_jade_wind) and spell(rushing_jade_wind) or buffpresent(charred_passions_buff) and spell(spinning_crane_kick_brewmaster) or buffexpires(blackout_combo_buff) and { buffexpires(bloodlust) or buffpresent(bloodlust) and target.debuffrefreshable(breath_of_fire_debuff) } and spell(breath_of_fire) or checkboxon(opt_chi_burst) and spell(chi_burst) or spell(chi_wave) or enemies() >= 3 and spellcooldown(keg_smash) > gcd() and energy() + energyregenrate() * { spellcooldown(keg_smash) + executetime(spinning_crane_kick_brewmaster) } >= 65 and { not hastalent(spitfire_talent) or not equippedruneforge(charred_passions_runeforge) } and spell(spinning_crane_kick_brewmaster) or not hastalent(blackout_combo_talent) and spellcooldown(keg_smash) > gcd() and energy() + energyregenrate() * { spellcooldown(keg_smash) + gcd() } >= 65 and spell(tiger_palm) or spell(rushing_jade_wind) + spell(blood_fury) or spell(berserking) or spell(bag_of_tricks) or spell(weapons_of_order) or spell(bonedust_brew) or spell(purifying_brew) or enemies(tagged=1) >= 2 and spell(keg_smash) or enemies(tagged=1) >= 2 and spell(faeline_stomp) or buffpresent(weapons_of_order_buff) and spell(keg_smash) or buffexpires(blackout_combo_buff) and incomingdamage(1.999) > maxhealth() * 0.1 + staggertick() and buffstacks(elusive_brawler) < 2 and spell(celestial_brew) or hastalent(rushing_jade_wind_talent) and buffpresent(blackout_combo_buff) and buffpresent(rushing_jade_wind) and spell(tiger_palm) or buffexpires(charred_passions_buff) and equippedruneforge(charred_passions_runeforge) and spell(breath_of_fire) or spell(blackout_kick_brewmaster) or spell(keg_smash) or spell(faeline_stomp) or buffstacks(gift_of_the_ox) >= 3 and spell(expel_harm) or buffexpires(rushing_jade_wind) and spell(rushing_jade_wind) or buffpresent(charred_passions_buff) and spell(spinning_crane_kick_brewmaster) or buffexpires(blackout_combo_buff) and { buffexpires(bloodlust) or buffpresent(bloodlust) and target.debuffrefreshable(breath_of_fire_debuff) } and spell(breath_of_fire) or checkboxon(opt_chi_burst) and spell(chi_burst) or spell(chi_wave) or enemies() >= 3 and spellcooldown(keg_smash) > gcd() and energy() + energyregenrate() * { spellcooldown(keg_smash) + executetime(spinning_crane_kick_brewmaster) } >= 65 and { not hastalent(spitfire_talent) or not equippedruneforge(charred_passions_runeforge) } and spell(spinning_crane_kick_brewmaster) or not hastalent(blackout_combo_talent) and spellcooldown(keg_smash) > gcd() and energy() + energyregenrate() * { spellcooldown(keg_smash) + gcd() } >= 65 and spell(tiger_palm) or spell(rushing_jade_wind) } ### Brewmaster icons. @@ -715,6 +715,8 @@ AddFunction windwalkeropenercdpostconditions AddFunction windwalkercd_serenitymainactions { + #blood_fury,if=variable.serenity_burst + if serenity_burst() spell(blood_fury) #berserking,if=variable.serenity_burst if serenity_burst() spell(berserking) #weapons_of_order,if=cooldown.rising_sun_kick.remains=1 if maxchi() - chi() >= 1 spell(arcane_torrent) @@ -790,7 +790,7 @@ AddFunction windwalkercd_serenitycdactions AddFunction windwalkercd_serenitycdpostconditions { - serenity_burst() and spell(berserking) or 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 spellcooldown(rising_sun_kick) < executetime(weapons_of_order) and spell(weapons_of_order) or spell(faeline_stomp) or spell(bonedust_brew) or { spellcooldown(rising_sun_kick) < 2 or fightremains() < 15 } and spell(serenity) or spell(bag_of_tricks) + serenity_burst() and spell(blood_fury) or serenity_burst() and spell(berserking) or 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 spellcooldown(rising_sun_kick) < executetime(weapons_of_order) and spell(weapons_of_order) or spell(faeline_stomp) or spell(bonedust_brew) or { spellcooldown(rising_sun_kick) < 2 or fightremains() < 15 } and spell(serenity) or spell(bag_of_tricks) } ### actions.cd_sef @@ -801,6 +801,8 @@ AddFunction windwalkercd_sefmainactions if { 600 > 45 or never(raid_event_adds_exists) } and spellcooldown(rising_sun_kick) < executetime(weapons_of_order) spell(weapons_of_order) #storm_earth_and_fire_fixate,if=conduit.coordinated_offensive.enabled if conduit(coordinated_offensive_conduit) spell(storm_earth_and_fire_fixate) + #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) #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) } @@ -827,7 +829,7 @@ AddFunction windwalkercd_sefshortcdactions #touch_of_karma,if=fight_remains>159|pet.xuen_the_white_tiger.active|variable.hold_xuen if { fightremains() > 159 or pet.present() or hold_xuen() } and checkboxon(opt_touch_of_karma) spell(touch_of_karma) - unless { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and spell(berserking) + unless { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 20 } and spell(blood_fury) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and spell(berserking) { #bag_of_tricks,if=buff.storm_earth_and_fire.down if buffexpires(storm_earth_and_fire) spell(bag_of_tricks) @@ -838,7 +840,7 @@ AddFunction windwalkercd_sefshortcdactions AddFunction windwalkercd_sefshortcdpostconditions { - { 600 > 45 or never(raid_event_adds_exists) } and spellcooldown(rising_sun_kick) < executetime(weapons_of_order) and spell(weapons_of_order) or conduit(coordinated_offensive_conduit) and spell(storm_earth_and_fire_fixate) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and spell(berserking) + { 600 > 45 or never(raid_event_adds_exists) } and spellcooldown(rising_sun_kick) < executetime(weapons_of_order) and spell(weapons_of_order) or conduit(coordinated_offensive_conduit) and spell(storm_earth_and_fire_fixate) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 20 } and spell(blood_fury) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and spell(berserking) } AddFunction windwalkercd_sefcdactions @@ -860,20 +862,14 @@ AddFunction windwalkercd_sefcdactions #use_item,name=dreadfire_vessel windwalkeruseitemactions() - unless { fightremains() > 159 or pet.present() or hold_xuen() } and checkboxon(opt_touch_of_karma) and spell(touch_of_karma) + unless { fightremains() > 159 or pet.present() or hold_xuen() } and checkboxon(opt_touch_of_karma) and spell(touch_of_karma) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 20 } and spell(blood_fury) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and spell(berserking) { - #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) - - unless { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and 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) - } + #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) } } } @@ -881,7 +877,7 @@ AddFunction windwalkercd_sefcdactions AddFunction windwalkercd_sefcdpostconditions { - { 600 > 45 or never(raid_event_adds_exists) } and spellcooldown(rising_sun_kick) < executetime(weapons_of_order) and spell(weapons_of_order) or not previousspell(faeline_stomp) and { 600 > 10 or never(raid_event_adds_exists) } and spell(faeline_stomp) or { 600 > 50 or never(raid_event_adds_exists) } and timesincepreviousspell(bonedust_brew) > 60 and spell(bonedust_brew) or conduit(coordinated_offensive_conduit) and spell(storm_earth_and_fire_fixate) or { spellcharges(storm_earth_and_fire) == 2 or fightremains() < 20 or 0 > 15 or not iscovenant("kyrian") 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_buff) 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 { fightremains() > 159 or pet.present() or hold_xuen() } and checkboxon(opt_touch_of_karma) and spell(touch_of_karma) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and spell(berserking) or buffexpires(storm_earth_and_fire) and spell(bag_of_tricks) + { 600 > 45 or never(raid_event_adds_exists) } and spellcooldown(rising_sun_kick) < executetime(weapons_of_order) and spell(weapons_of_order) or not previousspell(faeline_stomp) and { 600 > 10 or never(raid_event_adds_exists) } and spell(faeline_stomp) or { 600 > 50 or never(raid_event_adds_exists) } and timesincepreviousspell(bonedust_brew) > 60 and spell(bonedust_brew) or conduit(coordinated_offensive_conduit) and spell(storm_earth_and_fire_fixate) or { spellcharges(storm_earth_and_fire) == 2 or fightremains() < 20 or 0 > 15 or not iscovenant("kyrian") 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_buff) 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 { fightremains() > 159 or pet.present() or hold_xuen() } and checkboxon(opt_touch_of_karma) and spell(touch_of_karma) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 20 } and spell(blood_fury) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and spell(berserking) or buffexpires(storm_earth_and_fire) and spell(bag_of_tricks) } ### actions.aoe @@ -1588,6 +1584,8 @@ AddFunction windwalkeropenercdpostconditions AddFunction windwalkercd_serenitymainactions { + #blood_fury,if=variable.serenity_burst + if serenity_burst() spell(blood_fury) #berserking,if=variable.serenity_burst if serenity_burst() spell(berserking) #weapons_of_order,if=cooldown.rising_sun_kick.remains=1 if maxchi() - chi() >= 1 spell(arcane_torrent) @@ -1663,7 +1659,7 @@ AddFunction windwalkercd_serenitycdactions AddFunction windwalkercd_serenitycdpostconditions { - serenity_burst() and spell(berserking) or 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 spellcooldown(rising_sun_kick) < executetime(weapons_of_order) and spell(weapons_of_order) or spell(faeline_stomp) or spell(bonedust_brew) or { spellcooldown(rising_sun_kick) < 2 or fightremains() < 15 } and spell(serenity) or spell(bag_of_tricks) + serenity_burst() and spell(blood_fury) or serenity_burst() and spell(berserking) or 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 spellcooldown(rising_sun_kick) < executetime(weapons_of_order) and spell(weapons_of_order) or spell(faeline_stomp) or spell(bonedust_brew) or { spellcooldown(rising_sun_kick) < 2 or fightremains() < 15 } and spell(serenity) or spell(bag_of_tricks) } ### actions.cd_sef @@ -1674,6 +1670,8 @@ AddFunction windwalkercd_sefmainactions if { 600 > 45 or never(raid_event_adds_exists) } and spellcooldown(rising_sun_kick) < executetime(weapons_of_order) spell(weapons_of_order) #storm_earth_and_fire_fixate,if=conduit.coordinated_offensive.enabled if conduit(coordinated_offensive_conduit) spell(storm_earth_and_fire_fixate) + #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) #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) } @@ -1700,7 +1698,7 @@ AddFunction windwalkercd_sefshortcdactions #touch_of_karma,if=fight_remains>159|pet.xuen_the_white_tiger.active|variable.hold_xuen if { fightremains() > 159 or pet.present() or hold_xuen() } and checkboxon(opt_touch_of_karma) spell(touch_of_karma) - unless { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and spell(berserking) + unless { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 20 } and spell(blood_fury) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and spell(berserking) { #bag_of_tricks,if=buff.storm_earth_and_fire.down if buffexpires(storm_earth_and_fire) spell(bag_of_tricks) @@ -1711,7 +1709,7 @@ AddFunction windwalkercd_sefshortcdactions AddFunction windwalkercd_sefshortcdpostconditions { - { 600 > 45 or never(raid_event_adds_exists) } and spellcooldown(rising_sun_kick) < executetime(weapons_of_order) and spell(weapons_of_order) or conduit(coordinated_offensive_conduit) and spell(storm_earth_and_fire_fixate) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and spell(berserking) + { 600 > 45 or never(raid_event_adds_exists) } and spellcooldown(rising_sun_kick) < executetime(weapons_of_order) and spell(weapons_of_order) or conduit(coordinated_offensive_conduit) and spell(storm_earth_and_fire_fixate) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 20 } and spell(blood_fury) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and spell(berserking) } AddFunction windwalkercd_sefcdactions @@ -1733,20 +1731,14 @@ AddFunction windwalkercd_sefcdactions #use_item,name=dreadfire_vessel windwalkeruseitemactions() - unless { fightremains() > 159 or pet.present() or hold_xuen() } and checkboxon(opt_touch_of_karma) and spell(touch_of_karma) + unless { fightremains() > 159 or pet.present() or hold_xuen() } and checkboxon(opt_touch_of_karma) and spell(touch_of_karma) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 20 } and spell(blood_fury) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and spell(berserking) { - #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) - - unless { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and 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) - } + #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) } } } @@ -1754,7 +1746,7 @@ AddFunction windwalkercd_sefcdactions AddFunction windwalkercd_sefcdpostconditions { - { 600 > 45 or never(raid_event_adds_exists) } and spellcooldown(rising_sun_kick) < executetime(weapons_of_order) and spell(weapons_of_order) or not previousspell(faeline_stomp) and { 600 > 10 or never(raid_event_adds_exists) } and spell(faeline_stomp) or { 600 > 50 or never(raid_event_adds_exists) } and timesincepreviousspell(bonedust_brew) > 60 and spell(bonedust_brew) or conduit(coordinated_offensive_conduit) and spell(storm_earth_and_fire_fixate) or { spellcharges(storm_earth_and_fire) == 2 or fightremains() < 20 or 0 > 15 or not iscovenant("kyrian") 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_buff) 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 { fightremains() > 159 or pet.present() or hold_xuen() } and checkboxon(opt_touch_of_karma) and spell(touch_of_karma) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and spell(berserking) or buffexpires(storm_earth_and_fire) and spell(bag_of_tricks) + { 600 > 45 or never(raid_event_adds_exists) } and spellcooldown(rising_sun_kick) < executetime(weapons_of_order) and spell(weapons_of_order) or not previousspell(faeline_stomp) and { 600 > 10 or never(raid_event_adds_exists) } and spell(faeline_stomp) or { 600 > 50 or never(raid_event_adds_exists) } and timesincepreviousspell(bonedust_brew) > 60 and spell(bonedust_brew) or conduit(coordinated_offensive_conduit) and spell(storm_earth_and_fire_fixate) or { spellcharges(storm_earth_and_fire) == 2 or fightremains() < 20 or 0 > 15 or not iscovenant("kyrian") 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_buff) 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 { fightremains() > 159 or pet.present() or hold_xuen() } and checkboxon(opt_touch_of_karma) and spell(touch_of_karma) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 20 } and spell(blood_fury) or { spellcooldown(invoke_xuen_the_white_tiger) > 30 or hold_xuen() or fightremains() < 15 } and spell(berserking) or buffexpires(storm_earth_and_fire) and spell(bag_of_tricks) } ### actions.aoe diff --git a/src/scripts/ovale_monk_spells.ts b/src/scripts/ovale_monk_spells.ts index f159bc60c..38dbdf988 100644 --- a/src/scripts/ovale_monk_spells.ts +++ b/src/scripts/ovale_monk_spells.ts @@ -33,11 +33,9 @@ Define(blackout_kick_aura 116768) Define(blackout_kick_brewmaster 205523) # Strike with a blast of Chi energy, dealing s1 Physical damage?s117906[ and granting Shuffle for s2 sec][]. SpellInfo(blackout_kick_brewmaster cd=4) -Define(blood_fury 20572) -# Increases your attack power by s1 for 15 seconds. - SpellInfo(blood_fury cd=120 duration=15 gcd=0 offgcd=1) - # Attack power increased by w1. - SpellAddBuff(blood_fury blood_fury add=1) +Define(blood_fury 24571) +# Instantly increases your rage by 300/10. + SpellInfo(blood_fury gcd=0 offgcd=1 rage=-30) Define(bloodlust 2825) # Increases haste by (25 of Spell Power) for all party and raid members for 40 seconds.rnrnAllies receiving this effect will become Sated and unable to benefit from Bloodlust or Time Warp again for 600 seconds. SpellInfo(bloodlust cd=300 duration=40 gcd=0 offgcd=1) diff --git a/src/scripts/ovale_priest.ts b/src/scripts/ovale_priest.ts index 8d8e2f6a1..4c4fa65fd 100644 --- a/src/scripts/ovale_priest.ts +++ b/src/scripts/ovale_priest.ts @@ -28,6 +28,8 @@ AddFunction disciplineuseitemactions AddFunction disciplineracialsmainactions { + #blood_fury + spell(blood_fury) #berserking spell(berserking) } @@ -38,7 +40,7 @@ AddFunction disciplineracialsmainpostconditions AddFunction disciplineracialsshortcdactions { - unless spell(berserking) + unless spell(blood_fury) or spell(berserking) { #bag_of_tricks spell(bag_of_tricks) @@ -47,17 +49,15 @@ AddFunction disciplineracialsshortcdactions AddFunction disciplineracialsshortcdpostconditions { - spell(berserking) + spell(blood_fury) or spell(berserking) } AddFunction disciplineracialscdactions { #arcane_torrent,if=mana.pct<=95 if manapercent() <= 95 spell(arcane_torrent) - #blood_fury - spell(blood_fury) - unless spell(berserking) + unless spell(blood_fury) or spell(berserking) { #arcane_torrent spell(arcane_torrent) @@ -72,7 +72,7 @@ AddFunction disciplineracialscdactions AddFunction disciplineracialscdpostconditions { - spell(berserking) or spell(bag_of_tricks) + spell(blood_fury) or spell(berserking) or spell(bag_of_tricks) } ### actions.precombat diff --git a/src/scripts/ovale_priest_spells.ts b/src/scripts/ovale_priest_spells.ts index cfae1cdff..202ac6fdd 100644 --- a/src/scripts/ovale_priest_spells.ts +++ b/src/scripts/ovale_priest_spells.ts @@ -22,11 +22,9 @@ Define(bag_of_tricks 312411) Define(berserking 59621) # Permanently enchant a melee weapon to sometimes increase your attack power by 59620s1, but at the cost of reduced armor. Cannot be applied to items higher than level ecix SpellInfo(berserking gcd=0 offgcd=1) -Define(blood_fury 20572) -# Increases your attack power by s1 for 15 seconds. - SpellInfo(blood_fury cd=120 duration=15 gcd=0 offgcd=1) - # Attack power increased by w1. - SpellAddBuff(blood_fury blood_fury add=1) +Define(blood_fury 24571) +# Instantly increases your rage by 300/10. + SpellInfo(blood_fury gcd=0 offgcd=1 rage=-30) Define(bloodlust 2825) # Increases haste by (25 of Spell Power) for all party and raid members for 40 seconds.rnrnAllies receiving this effect will become Sated and unable to benefit from Bloodlust or Time Warp again for 600 seconds. SpellInfo(bloodlust cd=300 duration=40 gcd=0 offgcd=1) @@ -113,11 +111,11 @@ Define(mind_sear_debuff 49821) Define(mindbender 123040) # Summons a Mindbender to attack the target for 12 seconds. You regenerate 123051m1/100.1 of maximum mana each time the Mindbender attacks. SpellInfo(mindbender cd=60 duration=12) - SpellRequire(mindbender unusable set=1 enabled=(not hastalent(mindbender_talent_unknown))) + SpellRequire(mindbender unusable set=1 enabled=(not hastalent(mindbender_talent))) Define(mindbender_shadow 200174) # Summons a Mindbender to attack the target for 15 seconds.rnrn|cFFFFFFFFGenerates 200010s1/100 Insanity each time the Mindbender attacks.|r SpellInfo(mindbender_shadow cd=60 duration=15) - SpellRequire(mindbender_shadow unusable set=1 enabled=(not hastalent(mindbender_talent))) + SpellRequire(mindbender_shadow unusable set=1 enabled=(not hastalent(mindbender_talent_shadow))) Define(mindgames 323673) # Assault an enemy's mind, dealing (300 of Spell Power)*m3/100 Shadow damage and briefly reversing their perception of reality.rnrn?c3[For 5 seconds, the next damage they deal will heal their target, and the next healing they deal will damage their target.rnrn|cFFFFFFFFReversed damage and healing generate up to 323706s2*2 Insanity.|r]rn][For 5 seconds, the next damage they deal will heal their target, and the next healing they deal will damage their target.rnrn|cFFFFFFFFReversed damage and healing restore up to 323706s3*2 mana.|r] SpellInfo(mindgames cd=45 duration=5) @@ -184,8 +182,8 @@ Define(shadow_word_pain 589) Define(shadowfiend 34433) # Summons a shadowy fiend to attack the target for 15 seconds.?s319904[rnrn|cFFFFFFFFGenerates 262485s1/100 Insanity each time the Shadowfiend attacks.|r][]?s343726[rnrn|cFFFFFFFFGenerates 343726s1 Mana each time the Shadowfiend attacks.|r][] SpellInfo(shadowfiend cd=180 duration=15) - SpellRequire(shadowfiend replaced_by set=mindbender_shadow enabled=(hastalent(mindbender_talent))) - SpellRequire(shadowfiend replaced_by set=mindbender enabled=(hastalent(mindbender_talent_unknown))) + SpellRequire(shadowfiend replaced_by set=mindbender_shadow enabled=(hastalent(mindbender_talent_shadow))) + SpellRequire(shadowfiend replaced_by set=mindbender enabled=(hastalent(mindbender_talent))) # 343726 SpellAddBuff(shadowfiend shadowfiend add=1) Define(shadowform 232698) @@ -278,9 +276,9 @@ 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) # Inflicts the target with a Mind Bomb.rnrnAfter 2 seconds or if the target dies, it unleashes a psychic explosion, disorienting all enemies within 226943A1 yds of the target for 6 seconds. -Define(mindbender_talent 21719) +Define(mindbender_talent_shadow 21719) # Summons a Mindbender to attack the target for 15 seconds.rnrn|cFFFFFFFFGenerates 200010s1/100 Insanity each time the Mindbender attacks.|r -Define(mindbender_talent_unknown 22094) +Define(mindbender_talent 22094) # Summons a Mindbender to attack the target for 12 seconds. You regenerate 123051m1/100.1 of maximum mana each time the Mindbender attacks. Define(misery_talent 23126) # Vampiric Touch also applies Shadow Word: Pain to the target. diff --git a/src/scripts/ovale_rogue.ts b/src/scripts/ovale_rogue.ts index a06f54264..e4e7ea369 100644 --- a/src/scripts/ovale_rogue.ts +++ b/src/scripts/ovale_rogue.ts @@ -328,6 +328,8 @@ AddFunction assassinationcdsmainactions { #shiv,if=dot.rupture.ticking|dot.sepsis.ticking if target.debuffpresent(rupture) or target.debuffpresent(sepsis) spell(shiv) + #blood_fury,if=debuff.vendetta.up + if target.debuffpresent(vendetta) spell(blood_fury) #berserking,if=debuff.vendetta.up if target.debuffpresent(vendetta) spell(berserking) #call_action_list,name=vanish,if=!stealthed.all&master_assassin_remains=0 @@ -352,7 +354,7 @@ AddFunction assassinationcdsshortcdactions #exsanguinate,if=!stealthed.rogue&(!dot.garrote.refreshable&dot.rupture.remains>4+4*cp_max_spend|dot.rupture.remains*0.5>target.time_to_die)&target.time_to_die>4 if not buffpresent(rogue_stealthed_buff) and { not target.debuffrefreshable(garrote) and target.debuffremaining(rupture) > 4 + 4 * maxcombopoints() or target.debuffremaining(rupture) * 0.5 > target.timetodie() } and target.timetodie() > 4 spell(exsanguinate) - unless { target.debuffpresent(rupture) or target.debuffpresent(sepsis) } and spell(shiv) or target.debuffpresent(vendetta) and spell(berserking) + unless { target.debuffpresent(rupture) or target.debuffpresent(sepsis) } and spell(shiv) or target.debuffpresent(vendetta) and spell(blood_fury) or target.debuffpresent(vendetta) and spell(berserking) { #call_action_list,name=vanish,if=!stealthed.all&master_assassin_remains=0 if not buffpresent(stealthed_buff) and buffremaining(master_assassin) == 0 assassinationvanishshortcdactions() @@ -361,7 +363,7 @@ AddFunction assassinationcdsshortcdactions AddFunction assassinationcdsshortcdpostconditions { - { target.debuffpresent(rupture) or target.debuffpresent(sepsis) } and spell(shiv) or target.debuffpresent(vendetta) and spell(berserking) or not buffpresent(stealthed_buff) and buffremaining(master_assassin) == 0 and assassinationvanishshortcdpostconditions() + { target.debuffpresent(rupture) or target.debuffpresent(sepsis) } and spell(shiv) or target.debuffpresent(vendetta) and spell(blood_fury) or target.debuffpresent(vendetta) and spell(berserking) or not buffpresent(stealthed_buff) and buffremaining(master_assassin) == 0 and assassinationvanishshortcdpostconditions() } AddFunction assassinationcdscdactions @@ -376,10 +378,8 @@ AddFunction assassinationcdscdactions { #potion,if=buff.bloodlust.react|fight_remains<30|debuff.vendetta.up if { buffpresent(bloodlust) or fightremains() < 30 or target.debuffpresent(vendetta) } and { checkboxon(opt_use_consumables) and target.classification(worldboss) } item(phantom_fire usable=1) - #blood_fury,if=debuff.vendetta.up - if target.debuffpresent(vendetta) spell(blood_fury) - unless target.debuffpresent(vendetta) and spell(berserking) + unless target.debuffpresent(vendetta) and spell(blood_fury) or target.debuffpresent(vendetta) and spell(berserking) { #fireblood,if=debuff.vendetta.up if target.debuffpresent(vendetta) spell(fireblood) @@ -404,7 +404,7 @@ AddFunction assassinationcdscdactions AddFunction assassinationcdscdpostconditions { - spell(flagellation) or target.debuffremaining(flagellation) < 2 and spell(flagellation) or never(raid_event_adds_exists) and { target.timetodie() < combopointsdeficit() * 1.5 or combopointsdeficit() >= maxcombopoints() } and spell(marked_for_death) or 600 > 30 - 10 and combopointsdeficit() >= maxcombopoints() and spell(marked_for_death) or not buffpresent(rogue_stealthed_buff) and { not target.debuffrefreshable(garrote) and target.debuffremaining(rupture) > 4 + 4 * maxcombopoints() or target.debuffremaining(rupture) * 0.5 > target.timetodie() } and target.timetodie() > 4 and spell(exsanguinate) or { target.debuffpresent(rupture) or target.debuffpresent(sepsis) } and spell(shiv) or target.debuffpresent(vendetta) and spell(berserking) or not buffpresent(stealthed_buff) and buffremaining(master_assassin) == 0 and assassinationvanishcdpostconditions() + spell(flagellation) or target.debuffremaining(flagellation) < 2 and spell(flagellation) or never(raid_event_adds_exists) and { target.timetodie() < combopointsdeficit() * 1.5 or combopointsdeficit() >= maxcombopoints() } and spell(marked_for_death) or 600 > 30 - 10 and combopointsdeficit() >= maxcombopoints() and spell(marked_for_death) or not buffpresent(rogue_stealthed_buff) and { not target.debuffrefreshable(garrote) and target.debuffremaining(rupture) > 4 + 4 * maxcombopoints() or target.debuffremaining(rupture) * 0.5 > target.timetodie() } and target.timetodie() > 4 and spell(exsanguinate) or { target.debuffpresent(rupture) or target.debuffpresent(sepsis) } and spell(shiv) or target.debuffpresent(vendetta) and spell(blood_fury) or target.debuffpresent(vendetta) and spell(berserking) or not buffpresent(stealthed_buff) and buffremaining(master_assassin) == 0 and assassinationvanishcdpostconditions() } ### actions.default @@ -813,6 +813,8 @@ AddFunction outlawfinishcdpostconditions AddFunction outlawcdsmainactions { + #blood_fury + spell(blood_fury) #berserking spell(berserking) } @@ -843,7 +845,7 @@ AddFunction outlawcdsshortcdactions AddFunction outlawcdsshortcdpostconditions { - spell(berserking) + spell(blood_fury) or spell(berserking) } AddFunction outlawcdscdactions @@ -869,10 +871,8 @@ AddFunction outlawcdscdactions if not buffpresent(stealthed_buff) and ambush_condition() spell(shadowmeld) #potion,if=buff.bloodlust.react|fight_remains<30|buff.adrenaline_rush.up if { buffpresent(bloodlust) or fightremains() < 30 or buffpresent(adrenaline_rush) } and { checkboxon(opt_use_consumables) and target.classification(worldboss) } item(phantom_fire usable=1) - #blood_fury - spell(blood_fury) - unless spell(berserking) + unless spell(blood_fury) or spell(berserking) { #fireblood spell(fireblood) @@ -889,7 +889,7 @@ AddFunction outlawcdscdactions AddFunction outlawcdscdpostconditions { - enemies(tagged=1) >= 2 and not buffpresent(blade_flurry) and checkboxon(opt_blade_flurry) and spell(blade_flurry) or spell(flagellation) or target.debuffremaining(flagellation) < 2 and spell(flagellation) or { buffremaining(roll_the_bones_buff) <= 3 or rtb_reroll() } and spell(roll_the_bones) or never(raid_event_adds_exists) and { target.timetodie() < combopointsdeficit() or not buffpresent(rogue_stealthed_buff) and combopointsdeficit() >= maxcombopoints() - 1 } and spell(marked_for_death) or 600 > 30 - 10 and not buffpresent(rogue_stealthed_buff) and combopointsdeficit() >= maxcombopoints() - 1 and spell(marked_for_death) or blade_flurry_sync() and { timetomaxenergy() > 2 or enemies(tagged=1) > 2 } and spell(blade_rush) or not buffpresent(stealthed_buff) and combopoints() <= 1 and spell(dreadblades) or spell(berserking) + enemies(tagged=1) >= 2 and not buffpresent(blade_flurry) and checkboxon(opt_blade_flurry) and spell(blade_flurry) or spell(flagellation) or target.debuffremaining(flagellation) < 2 and spell(flagellation) or { buffremaining(roll_the_bones_buff) <= 3 or rtb_reroll() } and spell(roll_the_bones) or never(raid_event_adds_exists) and { target.timetodie() < combopointsdeficit() or not buffpresent(rogue_stealthed_buff) and combopointsdeficit() >= maxcombopoints() - 1 } and spell(marked_for_death) or 600 > 30 - 10 and not buffpresent(rogue_stealthed_buff) and combopointsdeficit() >= maxcombopoints() - 1 and spell(marked_for_death) or blade_flurry_sync() and { timetomaxenergy() > 2 or enemies(tagged=1) > 2 } and spell(blade_rush) or not buffpresent(stealthed_buff) and combopoints() <= 1 and spell(dreadblades) or spell(blood_fury) or spell(berserking) } ### actions.build @@ -1511,6 +1511,8 @@ AddFunction subtletycdsmainactions if snd_condition() and not target.debuffpresent(serrated_bone_spike_debuff) and target.timetodie() >= 21 or fightremains() <= 5 and enemies(tagged=1) < 3 spell(serrated_bone_spike) #sepsis,if=variable.snd_condition&combo_points.deficit>=1 if snd_condition() and combopointsdeficit() >= 1 spell(sepsis) + #blood_fury,if=buff.symbols_of_death.up + if buffpresent(symbols_of_death) spell(blood_fury) #berserking,if=buff.symbols_of_death.up if buffpresent(symbols_of_death) spell(berserking) } @@ -1556,7 +1558,7 @@ AddFunction subtletycdsshortcdactions AddFunction subtletycdsshortcdpostconditions { - not { hastalent(shuriken_tornado_talent) and not hastalent(shadow_focus_talent) } and { { snd_condition() and not target.debuffpresent(serrated_bone_spike_debuff) and target.timetodie() >= 21 or fightremains() <= 5 and enemies(tagged=1) < 3 } and spell(serrated_bone_spike) or snd_condition() and combopointsdeficit() >= 1 and spell(sepsis) or buffpresent(symbols_of_death) and spell(berserking) } + not { hastalent(shuriken_tornado_talent) and not hastalent(shadow_focus_talent) } and { { snd_condition() and not target.debuffpresent(serrated_bone_spike_debuff) and target.timetodie() >= 21 or fightremains() <= 5 and enemies(tagged=1) < 3 } and spell(serrated_bone_spike) or snd_condition() and combopointsdeficit() >= 1 and spell(sepsis) or buffpresent(symbols_of_death) and spell(blood_fury) or buffpresent(symbols_of_death) and spell(berserking) } } AddFunction subtletycdscdactions @@ -1577,10 +1579,8 @@ AddFunction subtletycdscdactions { #potion,if=buff.bloodlust.react|fight_remains<30|buff.symbols_of_death.up&(buff.shadow_blades.up|cooldown.shadow_blades.remains<=10) if { buffpresent(bloodlust) or fightremains() < 30 or buffpresent(symbols_of_death) and { buffpresent(shadow_blades) or spellcooldown(shadow_blades) <= 10 } } and { checkboxon(opt_use_consumables) and target.classification(worldboss) } item(phantom_fire usable=1) - #blood_fury,if=buff.symbols_of_death.up - if buffpresent(symbols_of_death) spell(blood_fury) - unless buffpresent(symbols_of_death) and spell(berserking) + unless buffpresent(symbols_of_death) and spell(blood_fury) or buffpresent(symbols_of_death) and spell(berserking) { #fireblood,if=buff.symbols_of_death.up if buffpresent(symbols_of_death) spell(fireblood) @@ -1597,7 +1597,7 @@ AddFunction subtletycdscdactions AddFunction subtletycdscdpostconditions { - not buffpresent(shadow_dance_buff) and buffpresent(shuriken_tornado) and buffremaining(shuriken_tornado) <= 3.5 and spell(shadow_dance) or buffpresent(shuriken_tornado) and buffremaining(shuriken_tornado) <= 3.5 and spell(symbols_of_death) or snd_condition() and not buffpresent(mantle_stealthed_buff) and spell(flagellation) or target.debuffremaining(flagellation) < 2 and spell(flagellation) or not { hastalent(shuriken_tornado_talent) and not hastalent(shadow_focus_talent) } and { energy() >= 60 and snd_condition() and not spellcooldown(symbols_of_death) > 0 and spellcharges(shadow_dance) >= 1 and spell(shuriken_tornado) or { snd_condition() and not target.debuffpresent(serrated_bone_spike_debuff) and target.timetodie() >= 21 or fightremains() <= 5 and enemies(tagged=1) < 3 } and spell(serrated_bone_spike) or snd_condition() and combopointsdeficit() >= 1 and spell(sepsis) or snd_condition() and { hastalent(enveloping_shadows_talent) or spellcharges(shadow_dance) >= 1 } and { not hastalent(shuriken_tornado_talent) or hastalent(shadow_focus_talent) or spellcooldown(shuriken_tornado) > 2 } and spell(symbols_of_death) or never(raid_event_adds_exists) and { target.timetodie() < combopointsdeficit() or not buffpresent(stealthed_buff) and combopointsdeficit() >= maxcombopoints() } and spell(marked_for_death) or 600 > 30 - 10 and combopointsdeficit() >= maxcombopoints() and spell(marked_for_death) or snd_condition() and combopointsdeficit() >= 2 and { use_priority_rotation() or enemies(tagged=1) <= 4 } and spell(echoing_reprimand) or hastalent(shadow_focus_talent) and snd_condition() and buffpresent(symbols_of_death) and spell(shuriken_tornado) or not buffpresent(shadow_dance_buff) and fightremains() <= 8 + talentpoints(subterfuge_talent) and spell(shadow_dance) or buffpresent(symbols_of_death) and spell(berserking) } + not buffpresent(shadow_dance_buff) and buffpresent(shuriken_tornado) and buffremaining(shuriken_tornado) <= 3.5 and spell(shadow_dance) or buffpresent(shuriken_tornado) and buffremaining(shuriken_tornado) <= 3.5 and spell(symbols_of_death) or snd_condition() and not buffpresent(mantle_stealthed_buff) and spell(flagellation) or target.debuffremaining(flagellation) < 2 and spell(flagellation) or not { hastalent(shuriken_tornado_talent) and not hastalent(shadow_focus_talent) } and { energy() >= 60 and snd_condition() and not spellcooldown(symbols_of_death) > 0 and spellcharges(shadow_dance) >= 1 and spell(shuriken_tornado) or { snd_condition() and not target.debuffpresent(serrated_bone_spike_debuff) and target.timetodie() >= 21 or fightremains() <= 5 and enemies(tagged=1) < 3 } and spell(serrated_bone_spike) or snd_condition() and combopointsdeficit() >= 1 and spell(sepsis) or snd_condition() and { hastalent(enveloping_shadows_talent) or spellcharges(shadow_dance) >= 1 } and { not hastalent(shuriken_tornado_talent) or hastalent(shadow_focus_talent) or spellcooldown(shuriken_tornado) > 2 } and spell(symbols_of_death) or never(raid_event_adds_exists) and { target.timetodie() < combopointsdeficit() or not buffpresent(stealthed_buff) and combopointsdeficit() >= maxcombopoints() } and spell(marked_for_death) or 600 > 30 - 10 and combopointsdeficit() >= maxcombopoints() and spell(marked_for_death) or snd_condition() and combopointsdeficit() >= 2 and { use_priority_rotation() or enemies(tagged=1) <= 4 } and spell(echoing_reprimand) or hastalent(shadow_focus_talent) and snd_condition() and buffpresent(symbols_of_death) and spell(shuriken_tornado) or not buffpresent(shadow_dance_buff) and fightremains() <= 8 + talentpoints(subterfuge_talent) and spell(shadow_dance) or buffpresent(symbols_of_death) and spell(blood_fury) or buffpresent(symbols_of_death) and spell(berserking) } } ### actions.build diff --git a/src/scripts/ovale_rogue_spells.ts b/src/scripts/ovale_rogue_spells.ts index dcc639cb3..ddeff04d5 100644 --- a/src/scripts/ovale_rogue_spells.ts +++ b/src/scripts/ovale_rogue_spells.ts @@ -55,11 +55,9 @@ Define(blade_rush 271877) # 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. SpellInfo(blade_rush cd=45 gcd=1) SpellRequire(blade_rush unusable set=1 enabled=(not hastalent(blade_rush_talent))) -Define(blood_fury 20572) -# Increases your attack power by s1 for 15 seconds. - SpellInfo(blood_fury cd=120 duration=15 gcd=0 offgcd=1) - # Attack power increased by w1. - SpellAddBuff(blood_fury blood_fury add=1) +Define(blood_fury 24571) +# Instantly increases your rage by 300/10. + SpellInfo(blood_fury gcd=0 offgcd=1 rage=-30) Define(bloodlust 2825) # Increases haste by (25 of Spell Power) for all party and raid members for 40 seconds.rnrnAllies receiving this effect will become Sated and unable to benefit from Bloodlust or Time Warp again for 600 seconds. SpellInfo(bloodlust cd=300 duration=40 gcd=0 offgcd=1) @@ -129,9 +127,14 @@ Define(exsanguinate 200806) 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 SpellInfo(fan_of_knives energy=35 gcd=1) -Define(find_weakness 107988) -# Increases critical strike by (100 of Spell Power) for 20 seconds. - SpellInfo(find_weakness duration=20 gcd=0 offgcd=1) +Define(find_weakness 316219) +# Cheap Shot and Shadowstrike reveal a flaw in your target's defenses, causing all of your attacks to bypass 316220s1 of that enemy's armor for 18 seconds. + SpellInfo(find_weakness gcd=0 offgcd=1 unusable=1) + # w1 of armor is ignored by the attacking Rogue. + SpellAddBuff(find_weakness find_weakness_buff_unused_1 add=1) +Define(find_weakness_buff_unused_1 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. + SpellInfo(find_weakness_buff_unused_1 duration=18 gcd=0 offgcd=1) Define(fireblood 265221) # Removes all poison, disease, curse, magic, and bleed effects and increases your ?a162700[Agility]?a162702[Strength]?a162697[Agility]?a162698[Strength]?a162699[Intellect]?a162701[Intellect][primary stat] by 265226s1*3 and an additional 265226s1 for each effect removed. Lasts 8 seconds. ?s195710[This effect shares a 30 sec cooldown with other similar effects.][] SpellInfo(fireblood cd=120 gcd=0 offgcd=1) diff --git a/src/scripts/ovale_shaman.ts b/src/scripts/ovale_shaman.ts index 3df71f0da..dbf6d2144 100644 --- a/src/scripts/ovale_shaman.ts +++ b/src/scripts/ovale_shaman.ts @@ -369,6 +369,8 @@ AddFunction elemental_defaultmainactions { #flame_shock,if=!ticking if not target.debuffpresent(flame_shock) spell(flame_shock) + #blood_fury,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 + if not hastalent(ascendance_talent) or buffpresent(ascendance_buff) or spellcooldown(ascendance) > 50 spell(blood_fury) #berserking,if=!talent.ascendance.enabled|buff.ascendance.up if not hastalent(ascendance_talent) or buffpresent(ascendance_buff) spell(berserking) #run_action_list,name=aoe,if=active_enemies>2&(spell_targets.chain_lightning>2|spell_targets.lava_beam>2) @@ -394,7 +396,7 @@ AddFunction elemental_defaultmainpostconditions AddFunction elemental_defaultshortcdactions { - unless not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) + unless not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) or spellcooldown(ascendance) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) { #bag_of_tricks,if=!talent.ascendance.enabled|!buff.ascendance.up if not hastalent(ascendance_talent) or not buffpresent(ascendance_buff) spell(bag_of_tricks) @@ -421,7 +423,7 @@ AddFunction elemental_defaultshortcdactions AddFunction elemental_defaultshortcdpostconditions { - not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) or enemies() > 2 and { enemies(tagged=1) > 2 or enemies(tagged=1) > 2 } and elementalaoeshortcdpostconditions() or not hastalent(storm_elemental_talent) and enemies() <= 2 and elementalsingle_targetshortcdpostconditions() or hastalent(storm_elemental_talent) and enemies() <= 2 and elementalse_single_targetshortcdpostconditions() + not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) or spellcooldown(ascendance) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) or enemies() > 2 and { enemies(tagged=1) > 2 or enemies(tagged=1) > 2 } and elementalaoeshortcdpostconditions() or not hastalent(storm_elemental_talent) and enemies() <= 2 and elementalsingle_targetshortcdpostconditions() or hastalent(storm_elemental_talent) and enemies() <= 2 and elementalse_single_targetshortcdpostconditions() } AddFunction elemental_defaultcdactions @@ -441,10 +443,8 @@ AddFunction elemental_defaultcdactions spell(fire_elemental) #storm_elemental spell(storm_elemental) - #blood_fury,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 - if not hastalent(ascendance_talent) or buffpresent(ascendance_buff) or spellcooldown(ascendance) > 50 spell(blood_fury) - unless { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) + unless { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) or spellcooldown(ascendance) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) { #fireblood,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 if not hastalent(ascendance_talent) or buffpresent(ascendance_buff) or spellcooldown(ascendance) > 50 spell(fireblood) @@ -476,7 +476,7 @@ AddFunction elemental_defaultcdactions AddFunction elemental_defaultcdpostconditions { - not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) or { not hastalent(ascendance_talent) or not buffpresent(ascendance_buff) } and spell(bag_of_tricks) or not buffpresent(primordial_wave_buff) and spell(primordial_wave) or iscovenant("kyrian") and spell(vesper_totem) or enemies() > 2 and { enemies(tagged=1) > 2 or enemies(tagged=1) > 2 } and elementalaoecdpostconditions() or not hastalent(storm_elemental_talent) and enemies() <= 2 and elementalsingle_targetcdpostconditions() or hastalent(storm_elemental_talent) and enemies() <= 2 and elementalse_single_targetcdpostconditions() + not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) or spellcooldown(ascendance) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) or { not hastalent(ascendance_talent) or not buffpresent(ascendance_buff) } and spell(bag_of_tricks) or not buffpresent(primordial_wave_buff) and spell(primordial_wave) or iscovenant("kyrian") and spell(vesper_totem) or enemies() > 2 and { enemies(tagged=1) > 2 or enemies(tagged=1) > 2 } and elementalaoecdpostconditions() or not hastalent(storm_elemental_talent) and enemies() <= 2 and elementalsingle_targetcdpostconditions() or hastalent(storm_elemental_talent) and enemies() <= 2 and elementalse_single_targetcdpostconditions() } ### Elemental icons. @@ -953,6 +953,8 @@ AddFunction elemental_defaultmainactions { #flame_shock,if=!ticking if not target.debuffpresent(flame_shock) spell(flame_shock) + #blood_fury,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 + if not hastalent(ascendance_talent) or buffpresent(ascendance_buff) or spellcooldown(ascendance) > 50 spell(blood_fury) #berserking,if=!talent.ascendance.enabled|buff.ascendance.up if not hastalent(ascendance_talent) or buffpresent(ascendance_buff) spell(berserking) #run_action_list,name=aoe,if=active_enemies>2&(spell_targets.chain_lightning>2|spell_targets.lava_beam>2) @@ -978,7 +980,7 @@ AddFunction elemental_defaultmainpostconditions AddFunction elemental_defaultshortcdactions { - unless not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) + unless not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) or spellcooldown(ascendance) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) { #bag_of_tricks,if=!talent.ascendance.enabled|!buff.ascendance.up if not hastalent(ascendance_talent) or not buffpresent(ascendance_buff) spell(bag_of_tricks) @@ -1005,7 +1007,7 @@ AddFunction elemental_defaultshortcdactions AddFunction elemental_defaultshortcdpostconditions { - not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) or enemies() > 2 and { enemies(tagged=1) > 2 or enemies(tagged=1) > 2 } and elementalaoeshortcdpostconditions() or not hastalent(storm_elemental_talent) and enemies() <= 2 and elementalsingle_targetshortcdpostconditions() or hastalent(storm_elemental_talent) and enemies() <= 2 and elementalse_single_targetshortcdpostconditions() + not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) or spellcooldown(ascendance) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) or enemies() > 2 and { enemies(tagged=1) > 2 or enemies(tagged=1) > 2 } and elementalaoeshortcdpostconditions() or not hastalent(storm_elemental_talent) and enemies() <= 2 and elementalsingle_targetshortcdpostconditions() or hastalent(storm_elemental_talent) and enemies() <= 2 and elementalse_single_targetshortcdpostconditions() } AddFunction elemental_defaultcdactions @@ -1025,10 +1027,8 @@ AddFunction elemental_defaultcdactions spell(fire_elemental) #storm_elemental spell(storm_elemental) - #blood_fury,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 - if not hastalent(ascendance_talent) or buffpresent(ascendance_buff) or spellcooldown(ascendance) > 50 spell(blood_fury) - unless { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) + unless { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) or spellcooldown(ascendance) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) { #fireblood,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 if not hastalent(ascendance_talent) or buffpresent(ascendance_buff) or spellcooldown(ascendance) > 50 spell(fireblood) @@ -1060,7 +1060,7 @@ AddFunction elemental_defaultcdactions AddFunction elemental_defaultcdpostconditions { - not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) or { not hastalent(ascendance_talent) or not buffpresent(ascendance_buff) } and spell(bag_of_tricks) or not buffpresent(primordial_wave_buff) and spell(primordial_wave) or iscovenant("kyrian") and spell(vesper_totem) or enemies() > 2 and { enemies(tagged=1) > 2 or enemies(tagged=1) > 2 } and elementalaoecdpostconditions() or not hastalent(storm_elemental_talent) and enemies() <= 2 and elementalsingle_targetcdpostconditions() or hastalent(storm_elemental_talent) and enemies() <= 2 and elementalse_single_targetcdpostconditions() + not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) or spellcooldown(ascendance) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent) or buffpresent(ascendance_buff) } and spell(berserking) or { not hastalent(ascendance_talent) or not buffpresent(ascendance_buff) } and spell(bag_of_tricks) or not buffpresent(primordial_wave_buff) and spell(primordial_wave) or iscovenant("kyrian") and spell(vesper_totem) or enemies() > 2 and { enemies(tagged=1) > 2 or enemies(tagged=1) > 2 } and elementalaoecdpostconditions() or not hastalent(storm_elemental_talent) and enemies() <= 2 and elementalsingle_targetcdpostconditions() or hastalent(storm_elemental_talent) and enemies() <= 2 and elementalse_single_targetcdpostconditions() } ### Elemental icons. @@ -1515,6 +1515,8 @@ AddFunction enhancement_defaultmainactions { #heart_essence spell(296208) + #blood_fury,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 + if not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) or spellcooldown(ascendance_enhancement) > 50 spell(blood_fury) #berserking,if=!talent.ascendance.enabled|buff.ascendance.up if not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) spell(berserking) #windfury_totem,if=runeforge.doom_winds.equipped&buff.doom_winds_debuff.down&(raid_event.adds.in>=60|active_enemies>1) @@ -1539,7 +1541,7 @@ AddFunction enhancement_defaultshortcdactions #auto_attack enhancementgetinmeleerange() - unless spell(296208) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) + unless spell(296208) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) or spellcooldown(ascendance_enhancement) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) { #bag_of_tricks,if=!talent.ascendance.enabled|!buff.ascendance.up if not hastalent(ascendance_talent_enhancement) or not buffpresent(ascendance_enhancement) spell(bag_of_tricks) @@ -1560,7 +1562,7 @@ AddFunction enhancement_defaultshortcdactions AddFunction enhancement_defaultshortcdpostconditions { - spell(296208) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) or equippedruneforge(doom_winds_runeforge) and buffexpires(doom_winds) and { 600 >= 60 or enemies() > 1 } and spell(windfury_totem) or enemies() == 1 and enhancementsingleshortcdpostconditions() or enemies() > 1 and enhancementaoeshortcdpostconditions() + spell(296208) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) or spellcooldown(ascendance_enhancement) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) or equippedruneforge(doom_winds_runeforge) and buffexpires(doom_winds) and { 600 >= 60 or enemies() > 1 } and spell(windfury_totem) or enemies() == 1 and enhancementsingleshortcdpostconditions() or enemies() > 1 and enhancementaoeshortcdpostconditions() } AddFunction enhancement_defaultcdactions @@ -1576,10 +1578,8 @@ AddFunction enhancement_defaultcdactions { #use_items enhancementuseitemactions() - #blood_fury,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 - if not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) or spellcooldown(ascendance_enhancement) > 50 spell(blood_fury) - unless { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) + unless { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) or spellcooldown(ascendance_enhancement) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) { #fireblood,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 if not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) or spellcooldown(ascendance_enhancement) > 50 spell(fireblood) @@ -1613,7 +1613,7 @@ AddFunction enhancement_defaultcdactions AddFunction enhancement_defaultcdpostconditions { - spell(296208) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) or { not hastalent(ascendance_talent_enhancement) or not buffpresent(ascendance_enhancement) } and spell(bag_of_tricks) or equippedruneforge(doom_winds_runeforge) and buffexpires(doom_winds) and { 600 >= 60 or enemies() > 1 } and spell(windfury_totem) or enemies() == 1 and enhancementsinglecdpostconditions() or enemies() > 1 and enhancementaoecdpostconditions() + spell(296208) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) or spellcooldown(ascendance_enhancement) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) or { not hastalent(ascendance_talent_enhancement) or not buffpresent(ascendance_enhancement) } and spell(bag_of_tricks) or equippedruneforge(doom_winds_runeforge) and buffexpires(doom_winds) and { 600 >= 60 or enemies() > 1 } and spell(windfury_totem) or enemies() == 1 and enhancementsinglecdpostconditions() or enemies() > 1 and enhancementaoecdpostconditions() } ### Enhancement icons. @@ -2065,6 +2065,8 @@ AddFunction enhancement_defaultmainactions { #heart_essence spell(296208) + #blood_fury,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 + if not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) or spellcooldown(ascendance_enhancement) > 50 spell(blood_fury) #berserking,if=!talent.ascendance.enabled|buff.ascendance.up if not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) spell(berserking) #windfury_totem,if=runeforge.doom_winds.equipped&buff.doom_winds_debuff.down&(raid_event.adds.in>=60|active_enemies>1) @@ -2089,7 +2091,7 @@ AddFunction enhancement_defaultshortcdactions #auto_attack enhancementgetinmeleerange() - unless spell(296208) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) + unless spell(296208) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) or spellcooldown(ascendance_enhancement) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) { #bag_of_tricks,if=!talent.ascendance.enabled|!buff.ascendance.up if not hastalent(ascendance_talent_enhancement) or not buffpresent(ascendance_enhancement) spell(bag_of_tricks) @@ -2110,7 +2112,7 @@ AddFunction enhancement_defaultshortcdactions AddFunction enhancement_defaultshortcdpostconditions { - spell(296208) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) or equippedruneforge(doom_winds_runeforge) and buffexpires(doom_winds) and { 600 >= 60 or enemies() > 1 } and spell(windfury_totem) or enemies() == 1 and enhancementsingleshortcdpostconditions() or enemies() > 1 and enhancementaoeshortcdpostconditions() + spell(296208) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) or spellcooldown(ascendance_enhancement) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) or equippedruneforge(doom_winds_runeforge) and buffexpires(doom_winds) and { 600 >= 60 or enemies() > 1 } and spell(windfury_totem) or enemies() == 1 and enhancementsingleshortcdpostconditions() or enemies() > 1 and enhancementaoeshortcdpostconditions() } AddFunction enhancement_defaultcdactions @@ -2126,10 +2128,8 @@ AddFunction enhancement_defaultcdactions { #use_items enhancementuseitemactions() - #blood_fury,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 - if not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) or spellcooldown(ascendance_enhancement) > 50 spell(blood_fury) - unless { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) + unless { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) or spellcooldown(ascendance_enhancement) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) { #fireblood,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 if not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) or spellcooldown(ascendance_enhancement) > 50 spell(fireblood) @@ -2163,7 +2163,7 @@ AddFunction enhancement_defaultcdactions AddFunction enhancement_defaultcdpostconditions { - spell(296208) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) or { not hastalent(ascendance_talent_enhancement) or not buffpresent(ascendance_enhancement) } and spell(bag_of_tricks) or equippedruneforge(doom_winds_runeforge) and buffexpires(doom_winds) and { 600 >= 60 or enemies() > 1 } and spell(windfury_totem) or enemies() == 1 and enhancementsinglecdpostconditions() or enemies() > 1 and enhancementaoecdpostconditions() + spell(296208) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) or spellcooldown(ascendance_enhancement) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent_enhancement) or buffpresent(ascendance_enhancement) } and spell(berserking) or { not hastalent(ascendance_talent_enhancement) or not buffpresent(ascendance_enhancement) } and spell(bag_of_tricks) or equippedruneforge(doom_winds_runeforge) and buffexpires(doom_winds) and { 600 >= 60 or enemies() > 1 } and spell(windfury_totem) or enemies() == 1 and enhancementsinglecdpostconditions() or enemies() > 1 and enhancementaoecdpostconditions() } ### Enhancement icons. @@ -2345,6 +2345,8 @@ AddFunction restoration_defaultmainactions { #flame_shock,if=!ticking if not target.debuffpresent(flame_shock) spell(flame_shock) + #blood_fury,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 + if not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) or spellcooldown(ascendance_restoration) > 50 spell(blood_fury) #berserking,if=!talent.ascendance.enabled|buff.ascendance.up if not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) spell(berserking) #lava_burst,if=dot.flame_shock.remains>cast_time&cooldown_react @@ -2365,7 +2367,7 @@ AddFunction restoration_defaultmainpostconditions AddFunction restoration_defaultshortcdactions { - unless not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) } and spell(berserking) + unless not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) or spellcooldown(ascendance_restoration) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) } and spell(berserking) { #bag_of_tricks,if=!talent.ascendance.enabled|!buff.ascendance.up if not hastalent(ascendance_talent_restoration) or not buffpresent(ascendance_restoration) spell(bag_of_tricks) @@ -2384,7 +2386,7 @@ AddFunction restoration_defaultshortcdactions AddFunction restoration_defaultshortcdpostconditions { - not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) } and spell(berserking) or target.debuffremaining(flame_shock) > casttime(lava_burst) and not spellcooldown(lava_burst) > 0 and spell(lava_burst) or enemies(tagged=1) < 3 and spell(lightning_bolt) or enemies(tagged=1) > 2 and spell(chain_lightning) or speed() > 0 and spell(flame_shock) or speed() > 0 and spell(frost_shock) + not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) or spellcooldown(ascendance_restoration) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) } and spell(berserking) or target.debuffremaining(flame_shock) > casttime(lava_burst) and not spellcooldown(lava_burst) > 0 and spell(lava_burst) or enemies(tagged=1) < 3 and spell(lightning_bolt) or enemies(tagged=1) > 2 and spell(chain_lightning) or speed() > 0 and spell(flame_shock) or speed() > 0 and spell(frost_shock) } AddFunction restoration_defaultcdactions @@ -2402,10 +2404,8 @@ AddFunction restoration_defaultcdactions { #earth_elemental spell(earth_elemental) - #blood_fury,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 - if not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) or spellcooldown(ascendance_restoration) > 50 spell(blood_fury) - unless { not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) } and spell(berserking) + unless { not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) or spellcooldown(ascendance_restoration) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) } and spell(berserking) { #fireblood,if=!talent.ascendance.enabled|buff.ascendance.up|cooldown.ascendance.remains>50 if not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) or spellcooldown(ascendance_restoration) > 50 spell(fireblood) @@ -2423,7 +2423,7 @@ AddFunction restoration_defaultcdactions AddFunction restoration_defaultcdpostconditions { - not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) } and spell(berserking) or { not hastalent(ascendance_talent_restoration) or not buffpresent(ascendance_restoration) } and spell(bag_of_tricks) or iscovenant("venthyr") and spell(chain_harvest) or iscovenant("kyrian") and spell(vesper_totem) or target.debuffremaining(flame_shock) > casttime(lava_burst) and not spellcooldown(lava_burst) > 0 and spell(lava_burst) or iscovenant("necrolord") and spell(primordial_wave) or enemies(tagged=1) < 3 and spell(lightning_bolt) or enemies(tagged=1) > 2 and spell(chain_lightning) or speed() > 0 and spell(flame_shock) or speed() > 0 and spell(frost_shock) + not target.debuffpresent(flame_shock) and spell(flame_shock) or { not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) or spellcooldown(ascendance_restoration) > 50 } and spell(blood_fury) or { not hastalent(ascendance_talent_restoration) or buffpresent(ascendance_restoration) } and spell(berserking) or { not hastalent(ascendance_talent_restoration) or not buffpresent(ascendance_restoration) } and spell(bag_of_tricks) or iscovenant("venthyr") and spell(chain_harvest) or iscovenant("kyrian") and spell(vesper_totem) or target.debuffremaining(flame_shock) > casttime(lava_burst) and not spellcooldown(lava_burst) > 0 and spell(lava_burst) or iscovenant("necrolord") and spell(primordial_wave) or enemies(tagged=1) < 3 and spell(lightning_bolt) or enemies(tagged=1) > 2 and spell(chain_lightning) or speed() > 0 and spell(flame_shock) or speed() > 0 and spell(frost_shock) } ### Restoration icons. diff --git a/src/scripts/ovale_shaman_spells.ts b/src/scripts/ovale_shaman_spells.ts index 2c1e7d2ea..5ad2f49ed 100644 --- a/src/scripts/ovale_shaman_spells.ts +++ b/src/scripts/ovale_shaman_spells.ts @@ -34,11 +34,9 @@ Define(bag_of_tricks 312411) Define(berserking 59621) # Permanently enchant a melee weapon to sometimes increase your attack power by 59620s1, but at the cost of reduced armor. Cannot be applied to items higher than level ecix SpellInfo(berserking gcd=0 offgcd=1) -Define(blood_fury 20572) -# Increases your attack power by s1 for 15 seconds. - SpellInfo(blood_fury cd=120 duration=15 gcd=0 offgcd=1) - # Attack power increased by w1. - SpellAddBuff(blood_fury blood_fury add=1) +Define(blood_fury 24571) +# Instantly increases your rage by 300/10. + SpellInfo(blood_fury gcd=0 offgcd=1 rage=-30) Define(bloodlust 2825) # Increases haste by (25 of Spell Power) for all party and raid members for 40 seconds.rnrnAllies receiving this effect will become Sated and unable to benefit from Bloodlust or Time Warp again for 600 seconds. SpellInfo(bloodlust cd=300 duration=40 gcd=0 offgcd=1) diff --git a/src/scripts/ovale_warlock.ts b/src/scripts/ovale_warlock.ts index 65db60705..9834d44b0 100644 --- a/src/scripts/ovale_warlock.ts +++ b/src/scripts/ovale_warlock.ts @@ -143,6 +143,8 @@ AddFunction afflictiondarkglare_prepmainactions { #vile_taint,if=cooldown.summon_darkglare.remains<2 if spellcooldown(summon_darkglare) < 2 spell(vile_taint) + #blood_fury + spell(blood_fury) #berserking spell(berserking) #call_action_list,name=covenant,if=!covenant.necrolord&cooldown.summon_darkglare.remains<2 @@ -156,7 +158,7 @@ AddFunction afflictiondarkglare_prepmainpostconditions AddFunction afflictiondarkglare_prepshortcdactions { - unless spellcooldown(summon_darkglare) < 2 and spell(vile_taint) or spell(berserking) + unless spellcooldown(summon_darkglare) < 2 and spell(vile_taint) or spell(blood_fury) or spell(berserking) { #call_action_list,name=covenant,if=!covenant.necrolord&cooldown.summon_darkglare.remains<2 if not iscovenant("necrolord") and spellcooldown(summon_darkglare) < 2 afflictioncovenantshortcdactions() @@ -165,7 +167,7 @@ AddFunction afflictiondarkglare_prepshortcdactions AddFunction afflictiondarkglare_prepshortcdpostconditions { - spellcooldown(summon_darkglare) < 2 and spell(vile_taint) or spell(berserking) or not iscovenant("necrolord") and spellcooldown(summon_darkglare) < 2 and afflictioncovenantshortcdpostconditions() + spellcooldown(summon_darkglare) < 2 and spell(vile_taint) or spell(blood_fury) or spell(berserking) or not iscovenant("necrolord") and spellcooldown(summon_darkglare) < 2 and afflictioncovenantshortcdpostconditions() } AddFunction afflictiondarkglare_prepcdactions @@ -178,10 +180,8 @@ AddFunction afflictiondarkglare_prepcdactions if checkboxon(opt_use_consumables) and target.classification(worldboss) item(potion_of_spectral_intellect_item usable=1) #fireblood spell(fireblood) - #blood_fury - spell(blood_fury) - unless spell(berserking) + unless spell(blood_fury) or spell(berserking) { #call_action_list,name=covenant,if=!covenant.necrolord&cooldown.summon_darkglare.remains<2 if not iscovenant("necrolord") and spellcooldown(summon_darkglare) < 2 afflictioncovenantcdactions() @@ -197,7 +197,7 @@ AddFunction afflictiondarkglare_prepcdactions AddFunction afflictiondarkglare_prepcdpostconditions { - spellcooldown(summon_darkglare) < 2 and spell(vile_taint) or spell(berserking) or not iscovenant("necrolord") and spellcooldown(summon_darkglare) < 2 and afflictioncovenantcdpostconditions() + spellcooldown(summon_darkglare) < 2 and spell(vile_taint) or spell(blood_fury) or spell(berserking) or not iscovenant("necrolord") and spellcooldown(summon_darkglare) < 2 and afflictioncovenantcdpostconditions() } ### actions.covenant @@ -922,7 +922,7 @@ AddFunction demonologytyrant_prepmainactions #call_dreadstalkers spell(call_dreadstalkers) #demonbolt,if=buff.demonic_core.up&soul_shard<4&(talent.demonic_consumption.enabled|buff.nether_portal.down) - if buffpresent(demonic_core) and soulshards() < 4 and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } spell(demonbolt) + if buffpresent(demonic_core_buff) and soulshards() < 4 and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } spell(demonbolt) #shadow_bolt,if=soul_shard<5-4*buff.nether_portal.up if soulshards() < 5 - 4 * buffpresent(nether_portal) spell(shadow_bolt) #variable,name=tyrant_ready,value=1 @@ -947,7 +947,7 @@ AddFunction demonologytyrant_prepshortcdactions AddFunction demonologytyrant_prepshortcdpostconditions { - timesincepreviousspell(doom) > 30 and spell(doom) or spell(call_dreadstalkers) or buffpresent(demonic_core) and soulshards() < 4 and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and spell(demonbolt) or soulshards() < 5 - 4 * buffpresent(nether_portal) and spell(shadow_bolt) or spell(hand_of_guldan) + timesincepreviousspell(doom) > 30 and spell(doom) or spell(call_dreadstalkers) or buffpresent(demonic_core_buff) and soulshards() < 4 and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and spell(demonbolt) or soulshards() < 5 - 4 * buffpresent(nether_portal) and spell(shadow_bolt) or spell(hand_of_guldan) } AddFunction demonologytyrant_prepcdactions @@ -963,7 +963,7 @@ AddFunction demonologytyrant_prepcdactions AddFunction demonologytyrant_prepcdpostconditions { - timesincepreviousspell(doom) > 30 and spell(doom) or not hastalent(demonic_consumption_talent) and spell(demonic_strength) or spell(summon_vilefiend) or spell(call_dreadstalkers) or buffpresent(demonic_core) and soulshards() < 4 and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and spell(demonbolt) or soulshards() < 5 - 4 * buffpresent(nether_portal) and spell(shadow_bolt) or spell(hand_of_guldan) + timesincepreviousspell(doom) > 30 and spell(doom) or not hastalent(demonic_consumption_talent) and spell(demonic_strength) or spell(summon_vilefiend) or spell(call_dreadstalkers) or buffpresent(demonic_core_buff) and soulshards() < 4 and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and spell(demonbolt) or soulshards() < 5 - 4 * buffpresent(nether_portal) and spell(shadow_bolt) or spell(hand_of_guldan) } ### actions.summon_tyrant @@ -973,7 +973,7 @@ AddFunction demonologysummon_tyrantmainactions #hand_of_guldan,if=soul_shard=5,line_cd=20 if soulshards() == 5 and timesincepreviousspell(hand_of_guldan) > 20 spell(hand_of_guldan) #demonbolt,if=buff.demonic_core.up&(talent.demonic_consumption.enabled|buff.nether_portal.down),line_cd=20 - if buffpresent(demonic_core) and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(demonbolt) > 20 spell(demonbolt) + if buffpresent(demonic_core_buff) and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(demonbolt) > 20 spell(demonbolt) #shadow_bolt,if=buff.wild_imps.stack+incoming_imps<4&(talent.demonic_consumption.enabled|buff.nether_portal.down),line_cd=20 if demons(wild_imp) + demons(wild_imp_inner_demons) + impsspawnedduring() < 4 and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(shadow_bolt) > 20 spell(shadow_bolt) #call_dreadstalkers @@ -981,7 +981,7 @@ AddFunction demonologysummon_tyrantmainactions #hand_of_guldan spell(hand_of_guldan) #demonbolt,if=buff.demonic_core.up&buff.nether_portal.up&((buff.vilefiend.remains>5|!talent.summon_vilefiend.enabled)&(buff.grimoire_felguard.remains>5|buff.grimoire_felguard.down)) - if buffpresent(demonic_core) and buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } spell(demonbolt) + if buffpresent(demonic_core_buff) and buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } spell(demonbolt) #shadow_bolt,if=buff.nether_portal.up&((buff.vilefiend.remains>5|!talent.summon_vilefiend.enabled)&(buff.grimoire_felguard.remains>5|buff.grimoire_felguard.down)) if buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } spell(shadow_bolt) #shadow_bolt @@ -994,7 +994,7 @@ AddFunction demonologysummon_tyrantmainpostconditions AddFunction demonologysummon_tyrantshortcdactions { - unless soulshards() == 5 and timesincepreviousspell(hand_of_guldan) > 20 and spell(hand_of_guldan) or buffpresent(demonic_core) and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(demonbolt) > 20 and spell(demonbolt) or demons(wild_imp) + demons(wild_imp_inner_demons) + impsspawnedduring() < 4 and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(shadow_bolt) > 20 and spell(shadow_bolt) or spell(call_dreadstalkers) or spell(hand_of_guldan) or buffpresent(demonic_core) and buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } and spell(demonbolt) or buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } and spell(shadow_bolt) + unless soulshards() == 5 and timesincepreviousspell(hand_of_guldan) > 20 and spell(hand_of_guldan) or buffpresent(demonic_core_buff) and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(demonbolt) > 20 and spell(demonbolt) or demons(wild_imp) + demons(wild_imp_inner_demons) + impsspawnedduring() < 4 and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(shadow_bolt) > 20 and spell(shadow_bolt) or spell(call_dreadstalkers) or spell(hand_of_guldan) or buffpresent(demonic_core_buff) and buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } and spell(demonbolt) or buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } and spell(shadow_bolt) { #variable,name=tyrant_ready,value=!cooldown.summon_demonic_tyrant.ready #summon_demonic_tyrant @@ -1004,7 +1004,7 @@ AddFunction demonologysummon_tyrantshortcdactions AddFunction demonologysummon_tyrantshortcdpostconditions { - soulshards() == 5 and timesincepreviousspell(hand_of_guldan) > 20 and spell(hand_of_guldan) or buffpresent(demonic_core) and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(demonbolt) > 20 and spell(demonbolt) or demons(wild_imp) + demons(wild_imp_inner_demons) + impsspawnedduring() < 4 and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(shadow_bolt) > 20 and spell(shadow_bolt) or spell(call_dreadstalkers) or spell(hand_of_guldan) or buffpresent(demonic_core) and buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } and spell(demonbolt) or buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } and spell(shadow_bolt) or spell(shadow_bolt) + soulshards() == 5 and timesincepreviousspell(hand_of_guldan) > 20 and spell(hand_of_guldan) or buffpresent(demonic_core_buff) and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(demonbolt) > 20 and spell(demonbolt) or demons(wild_imp) + demons(wild_imp_inner_demons) + impsspawnedduring() < 4 and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(shadow_bolt) > 20 and spell(shadow_bolt) or spell(call_dreadstalkers) or spell(hand_of_guldan) or buffpresent(demonic_core_buff) and buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } and spell(demonbolt) or buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } and spell(shadow_bolt) or spell(shadow_bolt) } AddFunction demonologysummon_tyrantcdactions @@ -1013,7 +1013,7 @@ AddFunction demonologysummon_tyrantcdactions AddFunction demonologysummon_tyrantcdpostconditions { - soulshards() == 5 and timesincepreviousspell(hand_of_guldan) > 20 and spell(hand_of_guldan) or buffpresent(demonic_core) and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(demonbolt) > 20 and spell(demonbolt) or demons(wild_imp) + demons(wild_imp_inner_demons) + impsspawnedduring() < 4 and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(shadow_bolt) > 20 and spell(shadow_bolt) or spell(call_dreadstalkers) or spell(hand_of_guldan) or buffpresent(demonic_core) and buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } and spell(demonbolt) or buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } and spell(shadow_bolt) or spell(summon_demonic_tyrant) or spell(shadow_bolt) + soulshards() == 5 and timesincepreviousspell(hand_of_guldan) > 20 and spell(hand_of_guldan) or buffpresent(demonic_core_buff) and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(demonbolt) > 20 and spell(demonbolt) or demons(wild_imp) + demons(wild_imp_inner_demons) + impsspawnedduring() < 4 and { hastalent(demonic_consumption_talent) or buffexpires(nether_portal) } and timesincepreviousspell(shadow_bolt) > 20 and spell(shadow_bolt) or spell(call_dreadstalkers) or spell(hand_of_guldan) or buffpresent(demonic_core_buff) and buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } and spell(demonbolt) or buffpresent(nether_portal) and { demonduration(vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and { buffremaining(grimoire_felguard) > 5 or buffexpires(grimoire_felguard) } and spell(shadow_bolt) or spell(summon_demonic_tyrant) or spell(shadow_bolt) } ### actions.precombat @@ -1060,6 +1060,8 @@ AddFunction demonologyoff_gcdmainactions { #berserking,if=pet.demonic_tyrant.active if demonduration(demonic_tyrant) > 0 spell(berserking) + #blood_fury,if=pet.demonic_tyrant.active + if demonduration(demonic_tyrant) > 0 spell(blood_fury) } AddFunction demonologyoff_gcdmainpostconditions @@ -1072,7 +1074,7 @@ AddFunction demonologyoff_gcdshortcdactions AddFunction demonologyoff_gcdshortcdpostconditions { - demonduration(demonic_tyrant) > 0 and spell(berserking) + demonduration(demonic_tyrant) > 0 and spell(berserking) or demonduration(demonic_tyrant) > 0 and spell(blood_fury) } AddFunction demonologyoff_gcdcdactions @@ -1081,16 +1083,18 @@ AddFunction demonologyoff_gcdcdactions { #potion,if=buff.berserking.up|pet.demonic_tyrant.active&!race.troll if { buffpresent(berserking_buff) or demonduration(demonic_tyrant) > 0 and not race(troll) } and { checkboxon(opt_use_consumables) and target.classification(worldboss) } item(potion_of_spectral_intellect_item usable=1) - #blood_fury,if=pet.demonic_tyrant.active - if demonduration(demonic_tyrant) > 0 spell(blood_fury) - #fireblood,if=pet.demonic_tyrant.active - if demonduration(demonic_tyrant) > 0 spell(fireblood) + + unless demonduration(demonic_tyrant) > 0 and spell(blood_fury) + { + #fireblood,if=pet.demonic_tyrant.active + if demonduration(demonic_tyrant) > 0 spell(fireblood) + } } } AddFunction demonologyoff_gcdcdpostconditions { - demonduration(demonic_tyrant) > 0 and spell(berserking) + demonduration(demonic_tyrant) > 0 and spell(berserking) or demonduration(demonic_tyrant) > 0 and spell(blood_fury) } ### actions.covenant @@ -1167,7 +1171,7 @@ AddFunction demonology_defaultmainactions unless { iscovenant("necrolord") or iscovenant("night_fae") } and not hastalent(nether_portal_talent) and demonologycovenantmainpostconditions() { #demonbolt,if=buff.demonic_core.react&soul_shard<4 - if buffpresent(demonic_core) and soulshards() < 4 spell(demonbolt) + if buffpresent(demonic_core_buff) and soulshards() < 4 spell(demonbolt) #soul_strike spell(soul_strike) #call_action_list,name=covenant @@ -1221,10 +1225,10 @@ AddFunction demonology_defaultshortcdactions #call_action_list,name=covenant,if=(covenant.necrolord|covenant.night_fae)&!talent.nether_portal.enabled if { iscovenant("necrolord") or iscovenant("night_fae") } and not hastalent(nether_portal_talent) demonologycovenantshortcdactions() - unless { iscovenant("necrolord") or iscovenant("night_fae") } and not hastalent(nether_portal_talent) and demonologycovenantshortcdpostconditions() or buffpresent(demonic_core) and soulshards() < 4 and spell(demonbolt) + unless { iscovenant("necrolord") or iscovenant("night_fae") } and not hastalent(nether_portal_talent) and demonologycovenantshortcdpostconditions() or buffpresent(demonic_core_buff) and soulshards() < 4 and spell(demonbolt) { #power_siphon,if=buff.wild_imps.stack>1&buff.demonic_core.stack<3 - if demons(wild_imp) + demons(wild_imp_inner_demons) > 1 and buffstacks(demonic_core) < 3 spell(power_siphon) + if demons(wild_imp) + demons(wild_imp_inner_demons) > 1 and buffstacks(demonic_core_buff) < 3 spell(power_siphon) unless spell(soul_strike) { @@ -1241,7 +1245,7 @@ AddFunction demonology_defaultshortcdactions AddFunction demonology_defaultshortcdpostconditions { - demonologyoff_gcdshortcdpostconditions() or spellcooldown(summon_demonic_tyrant) < 4 and not tyrant_ready() and demonologytyrant_prepshortcdpostconditions() or tyrant_ready() and demonologysummon_tyrantshortcdpostconditions() or spell(call_dreadstalkers) or target.refreshable(doom) and spell(doom) or enemies() > 1 and not hastalent(sacrificed_souls_talent) and demons(wild_imp) + demons(wild_imp_inner_demons) >= 8 and demonduration(demonic_tyrant) <= 0 and spellcooldown(summon_demonic_tyrant) > 5 and spell(implosion) or enemies() > 2 and demons(wild_imp) + demons(wild_imp_inner_demons) >= 8 and demonduration(demonic_tyrant) <= 0 and spell(implosion) or { soulshards() == 5 or buffpresent(nether_portal) } and spell(hand_of_guldan) or soulshards() >= 3 and spellcooldown(summon_demonic_tyrant) > 20 and { spellcooldown(summon_vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and spellcooldown(call_dreadstalkers) > 2 and spell(hand_of_guldan) or { iscovenant("necrolord") or iscovenant("night_fae") } and not hastalent(nether_portal_talent) and demonologycovenantshortcdpostconditions() or buffpresent(demonic_core) and soulshards() < 4 and spell(demonbolt) or spell(soul_strike) or demonologycovenantshortcdpostconditions() or spell(shadow_bolt) + demonologyoff_gcdshortcdpostconditions() or spellcooldown(summon_demonic_tyrant) < 4 and not tyrant_ready() and demonologytyrant_prepshortcdpostconditions() or tyrant_ready() and demonologysummon_tyrantshortcdpostconditions() or spell(call_dreadstalkers) or target.refreshable(doom) and spell(doom) or enemies() > 1 and not hastalent(sacrificed_souls_talent) and demons(wild_imp) + demons(wild_imp_inner_demons) >= 8 and demonduration(demonic_tyrant) <= 0 and spellcooldown(summon_demonic_tyrant) > 5 and spell(implosion) or enemies() > 2 and demons(wild_imp) + demons(wild_imp_inner_demons) >= 8 and demonduration(demonic_tyrant) <= 0 and spell(implosion) or { soulshards() == 5 or buffpresent(nether_portal) } and spell(hand_of_guldan) or soulshards() >= 3 and spellcooldown(summon_demonic_tyrant) > 20 and { spellcooldown(summon_vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and spellcooldown(call_dreadstalkers) > 2 and spell(hand_of_guldan) or { iscovenant("necrolord") or iscovenant("night_fae") } and not hastalent(nether_portal_talent) and demonologycovenantshortcdpostconditions() or buffpresent(demonic_core_buff) and soulshards() < 4 and spell(demonbolt) or spell(soul_strike) or demonologycovenantshortcdpostconditions() or spell(shadow_bolt) } AddFunction demonology_defaultcdactions @@ -1264,14 +1268,14 @@ AddFunction demonology_defaultcdactions #call_action_list,name=covenant,if=(covenant.necrolord|covenant.night_fae)&!talent.nether_portal.enabled if { iscovenant("necrolord") or iscovenant("night_fae") } and not hastalent(nether_portal_talent) demonologycovenantcdactions() - unless { iscovenant("necrolord") or iscovenant("night_fae") } and not hastalent(nether_portal_talent) and demonologycovenantcdpostconditions() or buffpresent(demonic_core) and soulshards() < 4 and spell(demonbolt) + unless { iscovenant("necrolord") or iscovenant("night_fae") } and not hastalent(nether_portal_talent) and demonologycovenantcdpostconditions() or buffpresent(demonic_core_buff) and soulshards() < 4 and spell(demonbolt) { #grimoire_felguard,if=cooldown.summon_demonic_tyrant.remains+cooldown.summon_demonic_tyrant.duration>time_to_die|time_to_die target.timetodie() or target.timetodie() < spellcooldown(summon_demonic_tyrant) + 15 spell(grimoire_felguard) #use_items demonologyuseitemactions() - unless demons(wild_imp) + demons(wild_imp_inner_demons) > 1 and buffstacks(demonic_core) < 3 and spell(power_siphon) or spell(soul_strike) + unless demons(wild_imp) + demons(wild_imp_inner_demons) > 1 and buffstacks(demonic_core_buff) < 3 and spell(power_siphon) or spell(soul_strike) { #call_action_list,name=covenant demonologycovenantcdactions() @@ -1284,7 +1288,7 @@ AddFunction demonology_defaultcdactions AddFunction demonology_defaultcdpostconditions { - demonologyoff_gcdcdpostconditions() or spellcooldown(summon_demonic_tyrant) < 4 and not tyrant_ready() and demonologytyrant_prepcdpostconditions() or tyrant_ready() and demonologysummon_tyrantcdpostconditions() or { spellcooldown(summon_demonic_tyrant) > 40 or target.timetodie() < spellcooldown(summon_demonic_tyrant) + 25 } and spell(summon_vilefiend) or spell(call_dreadstalkers) or target.refreshable(doom) and spell(doom) or spell(demonic_strength) or spell(bilescourge_bombers) or enemies() > 1 and not hastalent(sacrificed_souls_talent) and demons(wild_imp) + demons(wild_imp_inner_demons) >= 8 and demonduration(demonic_tyrant) <= 0 and spellcooldown(summon_demonic_tyrant) > 5 and spell(implosion) or enemies() > 2 and demons(wild_imp) + demons(wild_imp_inner_demons) >= 8 and demonduration(demonic_tyrant) <= 0 and spell(implosion) or { soulshards() == 5 or buffpresent(nether_portal) } and spell(hand_of_guldan) or soulshards() >= 3 and spellcooldown(summon_demonic_tyrant) > 20 and { spellcooldown(summon_vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and spellcooldown(call_dreadstalkers) > 2 and spell(hand_of_guldan) or { iscovenant("necrolord") or iscovenant("night_fae") } and not hastalent(nether_portal_talent) and demonologycovenantcdpostconditions() or buffpresent(demonic_core) and soulshards() < 4 and spell(demonbolt) or demons(wild_imp) + demons(wild_imp_inner_demons) > 1 and buffstacks(demonic_core) < 3 and spell(power_siphon) or spell(soul_strike) or demonologycovenantcdpostconditions() or spell(shadow_bolt) + demonologyoff_gcdcdpostconditions() or spellcooldown(summon_demonic_tyrant) < 4 and not tyrant_ready() and demonologytyrant_prepcdpostconditions() or tyrant_ready() and demonologysummon_tyrantcdpostconditions() or { spellcooldown(summon_demonic_tyrant) > 40 or target.timetodie() < spellcooldown(summon_demonic_tyrant) + 25 } and spell(summon_vilefiend) or spell(call_dreadstalkers) or target.refreshable(doom) and spell(doom) or spell(demonic_strength) or spell(bilescourge_bombers) or enemies() > 1 and not hastalent(sacrificed_souls_talent) and demons(wild_imp) + demons(wild_imp_inner_demons) >= 8 and demonduration(demonic_tyrant) <= 0 and spellcooldown(summon_demonic_tyrant) > 5 and spell(implosion) or enemies() > 2 and demons(wild_imp) + demons(wild_imp_inner_demons) >= 8 and demonduration(demonic_tyrant) <= 0 and spell(implosion) or { soulshards() == 5 or buffpresent(nether_portal) } and spell(hand_of_guldan) or soulshards() >= 3 and spellcooldown(summon_demonic_tyrant) > 20 and { spellcooldown(summon_vilefiend) > 5 or not hastalent(summon_vilefiend_talent) } and spellcooldown(call_dreadstalkers) > 2 and spell(hand_of_guldan) or { iscovenant("necrolord") or iscovenant("night_fae") } and not hastalent(nether_portal_talent) and demonologycovenantcdpostconditions() or buffpresent(demonic_core_buff) and soulshards() < 4 and spell(demonbolt) or demons(wild_imp) + demons(wild_imp_inner_demons) > 1 and buffstacks(demonic_core_buff) < 3 and spell(power_siphon) or spell(soul_strike) or demonologycovenantcdpostconditions() or spell(shadow_bolt) } ### Demonology icons. @@ -1336,7 +1340,7 @@ AddIcon enabled=(checkboxon(opt_warlock_demonology_aoe) and specialization(demon # decimating_bolt # demonbolt # demonic_consumption_talent -# demonic_core +# demonic_core_buff # demonic_strength # demonic_tyrant # doom @@ -1449,7 +1453,7 @@ AddFunction destructionprecombatcdpostconditions AddFunction destructionhavocmainactions { #conflagrate,if=buff.backdraft.down&soul_shard>=1&soul_shard<=4 - if buffexpires(backdraft) and soulshards() >= 1 and soulshards() <= 4 spell(conflagrate) + if buffexpires(backdraft_buff) and soulshards() >= 1 and soulshards() <= 4 spell(conflagrate) #immolate,if=talent.internal_combustion.enabled&remains= 1 and soulshards() <= 4 and spell(conflagrate) + unless buffexpires(backdraft_buff) and soulshards() >= 1 and soulshards() <= 4 and spell(conflagrate) { #soul_fire,if=cast_time= 1 and soulshards() <= 4 and spell(conflagrate) or { hastalent(internal_combustion_talent) and target.debuffremaining(immolate_debuff) < baseduration(immolate_debuff) * 0.5 or not hastalent(internal_combustion_talent) and target.refreshable(immolate_debuff) } and spell(immolate) or casttime(chaos_bolt) < debuffremainingonany(havoc) and spell(chaos_bolt) or spell(shadowburn) or casttime(incinerate) < debuffremainingonany(havoc) and spell(incinerate) + buffexpires(backdraft_buff) and soulshards() >= 1 and soulshards() <= 4 and spell(conflagrate) or { hastalent(internal_combustion_talent) and target.debuffremaining(immolate_debuff) < baseduration(immolate_debuff) * 0.5 or not hastalent(internal_combustion_talent) and target.refreshable(immolate_debuff) } and spell(immolate) or casttime(chaos_bolt) < debuffremainingonany(havoc) and spell(chaos_bolt) or spell(shadowburn) or casttime(incinerate) < debuffremainingonany(havoc) and spell(incinerate) } AddFunction destructionhavoccdactions @@ -1488,7 +1492,7 @@ AddFunction destructionhavoccdactions AddFunction destructionhavoccdpostconditions { - buffexpires(backdraft) and soulshards() >= 1 and soulshards() <= 4 and spell(conflagrate) or casttime(soul_fire) < debuffremainingonany(havoc) and spell(soul_fire) or casttime(decimating_bolt) < debuffremainingonany(havoc) and enabledsoulbind(lead_by_example_soulbind) and spell(decimating_bolt) or casttime(scouring_tithe) < debuffremainingonany(havoc) and spell(scouring_tithe) or { hastalent(internal_combustion_talent) and target.debuffremaining(immolate_debuff) < baseduration(immolate_debuff) * 0.5 or not hastalent(internal_combustion_talent) and target.refreshable(immolate_debuff) } and spell(immolate) or casttime(chaos_bolt) < debuffremainingonany(havoc) and spell(chaos_bolt) or spell(shadowburn) or casttime(incinerate) < debuffremainingonany(havoc) and spell(incinerate) + buffexpires(backdraft_buff) and soulshards() >= 1 and soulshards() <= 4 and spell(conflagrate) or casttime(soul_fire) < debuffremainingonany(havoc) and spell(soul_fire) or casttime(decimating_bolt) < debuffremainingonany(havoc) and enabledsoulbind(lead_by_example_soulbind) and spell(decimating_bolt) or casttime(scouring_tithe) < debuffremainingonany(havoc) and spell(scouring_tithe) or { hastalent(internal_combustion_talent) and target.debuffremaining(immolate_debuff) < baseduration(immolate_debuff) * 0.5 or not hastalent(internal_combustion_talent) and target.refreshable(immolate_debuff) } and spell(immolate) or casttime(chaos_bolt) < debuffremainingonany(havoc) and spell(chaos_bolt) or spell(shadowburn) or casttime(incinerate) < debuffremainingonany(havoc) and spell(incinerate) } ### actions.essences @@ -1503,8 +1507,6 @@ AddFunction destructionessencesmainactions spell(blood_of_the_enemy) #ripple_in_space spell(ripple_in_space) - #concentrated_flame - spell(concentrated_flame) #the_unbound_force,if=buff.reckless_force.remains if buffpresent(reckless_force_buff) spell(the_unbound_force) } @@ -1523,12 +1525,14 @@ AddFunction destructionessencesshortcdactions spell(purifying_blast) #reaping_flames spell(reaping_flames) + #concentrated_flame + spell(concentrated_flame) } } AddFunction destructionessencesshortcdpostconditions { - spell(worldvein_resonance) or spell(memory_of_lucid_dreams) or spell(blood_of_the_enemy) or spell(ripple_in_space) or spell(concentrated_flame) or buffpresent(reckless_force_buff) and spell(the_unbound_force) + spell(worldvein_resonance) or spell(memory_of_lucid_dreams) or spell(blood_of_the_enemy) or spell(ripple_in_space) or buffpresent(reckless_force_buff) and spell(the_unbound_force) } AddFunction destructionessencescdactions @@ -1551,6 +1555,8 @@ AddFunction destructioncdsmainactions { #berserking,if=pet.infernal.active if demonduration(infernal) > 0 spell(berserking) + #blood_fury,if=pet.infernal.active + if demonduration(infernal) > 0 spell(blood_fury) } AddFunction destructioncdsmainpostconditions @@ -1563,7 +1569,7 @@ AddFunction destructioncdsshortcdactions AddFunction destructioncdsshortcdpostconditions { - demonduration(infernal) > 0 and spell(berserking) + demonduration(infernal) > 0 and spell(berserking) or demonduration(infernal) > 0 and spell(blood_fury) } AddFunction destructioncdscdactions @@ -1575,10 +1581,8 @@ AddFunction destructioncdscdactions #potion,if=pet.infernal.active if demonduration(infernal) > 0 and { checkboxon(opt_use_consumables) and target.classification(worldboss) } item(potion_of_spectral_intellect_item usable=1) - unless demonduration(infernal) > 0 and spell(berserking) + unless demonduration(infernal) > 0 and spell(berserking) or demonduration(infernal) > 0 and spell(blood_fury) { - #blood_fury,if=pet.infernal.active - if demonduration(infernal) > 0 spell(blood_fury) #fireblood,if=pet.infernal.active if demonduration(infernal) > 0 spell(fireblood) #use_items,if=pet.infernal.active|target.time_to_die<20 @@ -1588,7 +1592,7 @@ AddFunction destructioncdscdactions AddFunction destructioncdscdpostconditions { - demonduration(infernal) > 0 and spell(berserking) + demonduration(infernal) > 0 and spell(berserking) or demonduration(infernal) > 0 and spell(blood_fury) } ### actions.aoe @@ -1614,9 +1618,9 @@ AddFunction destructionaoemainactions #rain_of_fire spell(rain_of_fire) #incinerate,if=talent.fire_and_brimstone.enabled&buff.backdraft.up&soul_shard<5-0.2*active_enemies - if hastalent(fire_and_brimstone_talent) and buffpresent(backdraft) and soulshards() < 5 - 0.2 * enemies() spell(incinerate) + if hastalent(fire_and_brimstone_talent) and buffpresent(backdraft_buff) and soulshards() < 5 - 0.2 * enemies() spell(incinerate) #conflagrate,if=buff.backdraft.down - if buffexpires(backdraft) spell(conflagrate) + if buffexpires(backdraft_buff) spell(conflagrate) #shadowburn,if=target.health.pct<20 if target.healthpercent() < 20 spell(shadowburn) #incinerate @@ -1659,12 +1663,12 @@ AddFunction destructionaoeshortcdactions #decimating_bolt,if=(soulbind.lead_by_example.enabled|!talent.fire_and_brimstone.enabled) if enabledsoulbind(lead_by_example_soulbind) or not hastalent(fire_and_brimstone_talent) spell(decimating_bolt) - unless hastalent(fire_and_brimstone_talent) and buffpresent(backdraft) and soulshards() < 5 - 0.2 * enemies() and spell(incinerate) + unless hastalent(fire_and_brimstone_talent) and buffpresent(backdraft_buff) and soulshards() < 5 - 0.2 * enemies() and spell(incinerate) { #soul_fire spell(soul_fire) - unless buffexpires(backdraft) and spell(conflagrate) or target.healthpercent() < 20 and spell(shadowburn) + unless buffexpires(backdraft_buff) and spell(conflagrate) or target.healthpercent() < 20 and spell(shadowburn) { #scouring_tithe,if=!(talent.fire_and_brimstone.enabled|talent.inferno.enabled) if not { hastalent(fire_and_brimstone_talent) or hastalent(inferno_talent) } spell(scouring_tithe) @@ -1681,7 +1685,7 @@ AddFunction destructionaoeshortcdactions AddFunction destructionaoeshortcdpostconditions { - demonduration(infernal) > 0 and { not spellcooldown(havoc) <= 0 or enemies() > 3 } and spell(rain_of_fire) or target.debuffremaining(immolate_debuff) > casttime(channel_demonfire) and spell(channel_demonfire) or target.debuffremaining(immolate_debuff) < 5 and { not hastalent(cataclysm_talent) or spellcooldown(cataclysm) > target.debuffremaining(immolate_debuff) } and spell(immolate) or destructioncdsshortcdpostconditions() or destructionessencesshortcdpostconditions() or spell(rain_of_fire) or hastalent(fire_and_brimstone_talent) and buffpresent(backdraft) and soulshards() < 5 - 0.2 * enemies() and spell(incinerate) or buffexpires(backdraft) and spell(conflagrate) or target.healthpercent() < 20 and spell(shadowburn) or spell(incinerate) + demonduration(infernal) > 0 and { not spellcooldown(havoc) <= 0 or enemies() > 3 } and spell(rain_of_fire) or target.debuffremaining(immolate_debuff) > casttime(channel_demonfire) and spell(channel_demonfire) or target.debuffremaining(immolate_debuff) < 5 and { not hastalent(cataclysm_talent) or spellcooldown(cataclysm) > target.debuffremaining(immolate_debuff) } and spell(immolate) or destructioncdsshortcdpostconditions() or destructionessencesshortcdpostconditions() or spell(rain_of_fire) or hastalent(fire_and_brimstone_talent) and buffpresent(backdraft_buff) and soulshards() < 5 - 0.2 * enemies() and spell(incinerate) or buffexpires(backdraft_buff) and spell(conflagrate) or target.healthpercent() < 20 and spell(shadowburn) or spell(incinerate) } AddFunction destructionaoecdactions @@ -1701,7 +1705,7 @@ AddFunction destructionaoecdactions AddFunction destructionaoecdpostconditions { - demonduration(infernal) > 0 and { not spellcooldown(havoc) <= 0 or enemies() > 3 } and spell(rain_of_fire) or spell(soul_rot) or target.debuffremaining(immolate_debuff) > casttime(channel_demonfire) and spell(channel_demonfire) or target.debuffremaining(immolate_debuff) < 5 and { not hastalent(cataclysm_talent) or spellcooldown(cataclysm) > target.debuffremaining(immolate_debuff) } and spell(immolate) or destructioncdscdpostconditions() or destructionessencescdpostconditions() or not never(target_is_target) and enemies() < 4 and enemies() > 1 and spell(havoc) or spell(rain_of_fire) or not player.targetguid() == target.guid() and enemies() > 1 and spell(havoc) or { enabledsoulbind(lead_by_example_soulbind) or not hastalent(fire_and_brimstone_talent) } and spell(decimating_bolt) or hastalent(fire_and_brimstone_talent) and buffpresent(backdraft) and soulshards() < 5 - 0.2 * enemies() and spell(incinerate) or spell(soul_fire) or buffexpires(backdraft) and spell(conflagrate) or target.healthpercent() < 20 and spell(shadowburn) or not { hastalent(fire_and_brimstone_talent) or hastalent(inferno_talent) } and spell(scouring_tithe) or not { hastalent(fire_and_brimstone_talent) or hastalent(inferno_talent) } and spell(impending_catastrophe) or spell(incinerate) + demonduration(infernal) > 0 and { not spellcooldown(havoc) <= 0 or enemies() > 3 } and spell(rain_of_fire) or spell(soul_rot) or target.debuffremaining(immolate_debuff) > casttime(channel_demonfire) and spell(channel_demonfire) or target.debuffremaining(immolate_debuff) < 5 and { not hastalent(cataclysm_talent) or spellcooldown(cataclysm) > target.debuffremaining(immolate_debuff) } and spell(immolate) or destructioncdscdpostconditions() or destructionessencescdpostconditions() or not never(target_is_target) and enemies() < 4 and enemies() > 1 and spell(havoc) or spell(rain_of_fire) or not player.targetguid() == target.guid() and enemies() > 1 and spell(havoc) or { enabledsoulbind(lead_by_example_soulbind) or not hastalent(fire_and_brimstone_talent) } and spell(decimating_bolt) or hastalent(fire_and_brimstone_talent) and buffpresent(backdraft_buff) and soulshards() < 5 - 0.2 * enemies() and spell(incinerate) or spell(soul_fire) or buffexpires(backdraft_buff) and spell(conflagrate) or target.healthpercent() < 20 and spell(shadowburn) or not { hastalent(fire_and_brimstone_talent) or hastalent(inferno_talent) } and spell(scouring_tithe) or not { hastalent(fire_and_brimstone_talent) or hastalent(inferno_talent) } and spell(impending_catastrophe) or spell(incinerate) } ### actions.default @@ -1738,13 +1742,13 @@ AddFunction destruction_defaultmainactions spell(channel_demonfire) #variable,name=pool_soul_shards,value=active_enemies>1&cooldown.havoc.remains<=10|cooldown.summon_infernal.remains<=15&talent.dark_soul_instability.enabled&cooldown.dark_soul_instability.remains<=15|talent.dark_soul_instability.enabled&cooldown.dark_soul_instability.remains<=15&(cooldown.summon_infernal.remains>target.time_to_die|cooldown.summon_infernal.remains+cooldown.summon_infernal.duration>target.time_to_die) #conflagrate,if=buff.backdraft.down&soul_shard>=1.5-0.3*talent.flashover.enabled&!variable.pool_soul_shards - if buffexpires(backdraft) and soulshards() >= 1.5 - 0.3 * talentpoints(flashover_talent) and not pool_soul_shards() spell(conflagrate) + if buffexpires(backdraft_buff) and soulshards() >= 1.5 - 0.3 * talentpoints(flashover_talent) and not pool_soul_shards() spell(conflagrate) #chaos_bolt,if=buff.dark_soul_instability.up if buffpresent(dark_soul_instability) spell(chaos_bolt) #chaos_bolt,if=buff.backdraft.up&!variable.pool_soul_shards&!talent.eradication.enabled - if buffpresent(backdraft) and not pool_soul_shards() and not hastalent(eradication_talent) spell(chaos_bolt) + if buffpresent(backdraft_buff) and not pool_soul_shards() and not hastalent(eradication_talent) spell(chaos_bolt) #chaos_bolt,if=!variable.pool_soul_shards&talent.eradication.enabled&(debuff.eradication.remains=4.5 if not pool_soul_shards() or soulshards() >= 4.5 spell(shadowburn) #chaos_bolt,if=(soul_shard>=4.5-0.2*active_enemies) @@ -1814,7 +1818,7 @@ AddFunction destruction_defaultshortcdactions AddFunction destruction_defaultshortcdpostconditions { - debuffcountonany(havoc) > 0 and enemies() > 1 and enemies() < 5 - talentpoints(inferno_talent) + { hastalent(inferno_talent) and hastalent(internal_combustion_talent) } and destructionhavocshortcdpostconditions() or hastalent(roaring_blaze_talent) and target.debuffremaining(roaring_blaze) < 1.5 and spell(conflagrate) or enemies() > 2 and destructionaoeshortcdpostconditions() or target.refreshable(immolate_debuff) and { not hastalent(cataclysm_talent) or spellcooldown(cataclysm) > target.debuffremaining(immolate_debuff) } and spell(immolate) or hastalent(internal_combustion_talent) and inflighttotarget(chaos_bolt) and target.debuffremaining(immolate_debuff) < baseduration(immolate_debuff) * 0.5 and spell(immolate) or destructioncdsshortcdpostconditions() or destructionessencesshortcdpostconditions() or spell(channel_demonfire) or buffexpires(backdraft) and soulshards() >= 1.5 - 0.3 * talentpoints(flashover_talent) and not pool_soul_shards() and spell(conflagrate) or buffpresent(dark_soul_instability) and spell(chaos_bolt) or buffpresent(backdraft) and not pool_soul_shards() and not hastalent(eradication_talent) and spell(chaos_bolt) or not pool_soul_shards() and hastalent(eradication_talent) and { target.debuffremaining(eradication) < casttime(chaos_bolt) or buffpresent(backdraft) } and spell(chaos_bolt) or { not pool_soul_shards() or soulshards() >= 4.5 } and spell(shadowburn) or soulshards() >= 4.5 - 0.2 * enemies() and spell(chaos_bolt) or charges(conflagrate) > 1 and spell(conflagrate) or spell(incinerate) + debuffcountonany(havoc) > 0 and enemies() > 1 and enemies() < 5 - talentpoints(inferno_talent) + { hastalent(inferno_talent) and hastalent(internal_combustion_talent) } and destructionhavocshortcdpostconditions() or hastalent(roaring_blaze_talent) and target.debuffremaining(roaring_blaze) < 1.5 and spell(conflagrate) or enemies() > 2 and destructionaoeshortcdpostconditions() or target.refreshable(immolate_debuff) and { not hastalent(cataclysm_talent) or spellcooldown(cataclysm) > target.debuffremaining(immolate_debuff) } and spell(immolate) or hastalent(internal_combustion_talent) and inflighttotarget(chaos_bolt) and target.debuffremaining(immolate_debuff) < baseduration(immolate_debuff) * 0.5 and spell(immolate) or destructioncdsshortcdpostconditions() or destructionessencesshortcdpostconditions() or spell(channel_demonfire) or buffexpires(backdraft_buff) and soulshards() >= 1.5 - 0.3 * talentpoints(flashover_talent) and not pool_soul_shards() and spell(conflagrate) or buffpresent(dark_soul_instability) and spell(chaos_bolt) or buffpresent(backdraft_buff) and not pool_soul_shards() and not hastalent(eradication_talent) and spell(chaos_bolt) or not pool_soul_shards() and hastalent(eradication_talent) and { target.debuffremaining(eradication) < casttime(chaos_bolt) or buffpresent(backdraft_buff) } and spell(chaos_bolt) or { not pool_soul_shards() or soulshards() >= 4.5 } and spell(shadowburn) or soulshards() >= 4.5 - 0.2 * enemies() and spell(chaos_bolt) or charges(conflagrate) > 1 and spell(conflagrate) or spell(incinerate) } AddFunction destruction_defaultcdactions @@ -1843,7 +1847,7 @@ AddFunction destruction_defaultcdactions AddFunction destruction_defaultcdpostconditions { - debuffcountonany(havoc) > 0 and enemies() > 1 and enemies() < 5 - talentpoints(inferno_talent) + { hastalent(inferno_talent) and hastalent(internal_combustion_talent) } and destructionhavoccdpostconditions() or hastalent(roaring_blaze_talent) and target.debuffremaining(roaring_blaze) < 1.5 and spell(conflagrate) or { not { demonduration(infernal) > 0 and target.debuffremaining(immolate_debuff) + 1 > demonduration(infernal) } or enemies(tagged=1) > 1 } and spell(cataclysm) or enemies() > 2 and destructionaoecdpostconditions() or target.refreshable(soul_fire) and soulshards() <= 4 and { not hastalent(cataclysm_talent) or spellcooldown(cataclysm) > buffremaining(soul_fire) } and spell(soul_fire) or target.refreshable(immolate_debuff) and { not hastalent(cataclysm_talent) or spellcooldown(cataclysm) > target.debuffremaining(immolate_debuff) } and spell(immolate) or hastalent(internal_combustion_talent) and inflighttotarget(chaos_bolt) and target.debuffremaining(immolate_debuff) < baseduration(immolate_debuff) * 0.5 and spell(immolate) or destructioncdscdpostconditions() or destructionessencescdpostconditions() or spell(channel_demonfire) or spell(scouring_tithe) or spell(decimating_bolt) or not never(target_is_target) and { target.debuffremaining(immolate_debuff) > target.debuffduration(immolate_debuff) * 0.5 or not hastalent(internal_combustion_talent) } and enemies() > 1 and spell(havoc) or spell(impending_catastrophe) or spell(soul_rot) or equippedruneforge(odr_shawl_of_the_ymirjar_runeforge) and enemies() > 1 and spell(havoc) or buffexpires(backdraft) and soulshards() >= 1.5 - 0.3 * talentpoints(flashover_talent) and not pool_soul_shards() and spell(conflagrate) or buffpresent(dark_soul_instability) and spell(chaos_bolt) or buffpresent(backdraft) and not pool_soul_shards() and not hastalent(eradication_talent) and spell(chaos_bolt) or not pool_soul_shards() and hastalent(eradication_talent) and { target.debuffremaining(eradication) < casttime(chaos_bolt) or buffpresent(backdraft) } and spell(chaos_bolt) or { not pool_soul_shards() or soulshards() >= 4.5 } and spell(shadowburn) or soulshards() >= 4.5 - 0.2 * enemies() and spell(chaos_bolt) or charges(conflagrate) > 1 and spell(conflagrate) or spell(incinerate) + debuffcountonany(havoc) > 0 and enemies() > 1 and enemies() < 5 - talentpoints(inferno_talent) + { hastalent(inferno_talent) and hastalent(internal_combustion_talent) } and destructionhavoccdpostconditions() or hastalent(roaring_blaze_talent) and target.debuffremaining(roaring_blaze) < 1.5 and spell(conflagrate) or { not { demonduration(infernal) > 0 and target.debuffremaining(immolate_debuff) + 1 > demonduration(infernal) } or enemies(tagged=1) > 1 } and spell(cataclysm) or enemies() > 2 and destructionaoecdpostconditions() or target.refreshable(soul_fire) and soulshards() <= 4 and { not hastalent(cataclysm_talent) or spellcooldown(cataclysm) > buffremaining(soul_fire) } and spell(soul_fire) or target.refreshable(immolate_debuff) and { not hastalent(cataclysm_talent) or spellcooldown(cataclysm) > target.debuffremaining(immolate_debuff) } and spell(immolate) or hastalent(internal_combustion_talent) and inflighttotarget(chaos_bolt) and target.debuffremaining(immolate_debuff) < baseduration(immolate_debuff) * 0.5 and spell(immolate) or destructioncdscdpostconditions() or destructionessencescdpostconditions() or spell(channel_demonfire) or spell(scouring_tithe) or spell(decimating_bolt) or not never(target_is_target) and { target.debuffremaining(immolate_debuff) > target.debuffduration(immolate_debuff) * 0.5 or not hastalent(internal_combustion_talent) } and enemies() > 1 and spell(havoc) or spell(impending_catastrophe) or spell(soul_rot) or equippedruneforge(odr_shawl_of_the_ymirjar_runeforge) and enemies() > 1 and spell(havoc) or buffexpires(backdraft_buff) and soulshards() >= 1.5 - 0.3 * talentpoints(flashover_talent) and not pool_soul_shards() and spell(conflagrate) or buffpresent(dark_soul_instability) and spell(chaos_bolt) or buffpresent(backdraft_buff) and not pool_soul_shards() and not hastalent(eradication_talent) and spell(chaos_bolt) or not pool_soul_shards() and hastalent(eradication_talent) and { target.debuffremaining(eradication) < casttime(chaos_bolt) or buffpresent(backdraft_buff) } and spell(chaos_bolt) or { not pool_soul_shards() or soulshards() >= 4.5 } and spell(shadowburn) or soulshards() >= 4.5 - 0.2 * enemies() and spell(chaos_bolt) or charges(conflagrate) > 1 and spell(conflagrate) or spell(incinerate) } ### Destruction icons. @@ -1887,7 +1891,7 @@ AddIcon enabled=(checkboxon(opt_warlock_destruction_aoe) and specialization(dest } ### Required symbols -# backdraft +# backdraft_buff # berserking # blood_fury # blood_of_the_enemy diff --git a/src/scripts/ovale_warlock_spells.ts b/src/scripts/ovale_warlock_spells.ts index af8efc7c0..24d832d3a 100644 --- a/src/scripts/ovale_warlock_spells.ts +++ b/src/scripts/ovale_warlock_spells.ts @@ -9,11 +9,11 @@ export function registerWarlockSpells(OvaleScripts: OvaleScriptsClass) { SpellInfo(agony duration=18 max_stacks=6 tick=2) # Suffering w1 Shadow damage every t1 sec. Damage increases over time. SpellAddTargetDebuff(agony agony add=1) -Define(backdraft 117828) +Define(backdraft_buff 117828) # Conflagrate reduces the cast time of your next Incinerate or Chaos Bolt by 117828s1. Maximum ?s267115[s2][s1] charges. - SpellInfo(backdraft duration=10 max_stacks=2 gcd=0 offgcd=1) + SpellInfo(backdraft_buff duration=10 max_stacks=2 gcd=0 offgcd=1) # Incinerate and Chaos Bolt cast times reduced by s1. - SpellAddBuff(backdraft backdraft add=1) + SpellAddBuff(backdraft_buff backdraft_buff add=1) Define(berserking 59621) # Permanently enchant a melee weapon to sometimes increase your attack power by 59620s1, but at the cost of reduced armor. Cannot be applied to items higher than level ecix SpellInfo(berserking gcd=0 offgcd=1) @@ -26,11 +26,9 @@ Define(bilescourge_bombers 267211) # Tear open a portal to the nether above the target location, from which several Bilescourge will pour out of and crash into the ground over 6 seconds, dealing (23 of Spell Power) Shadow damage to all enemies within 267213A1 yards. SpellInfo(bilescourge_bombers soulshards=2 cd=30 duration=6) SpellRequire(bilescourge_bombers unusable set=1 enabled=(not hastalent(bilescourge_bombers_talent))) -Define(blood_fury 20572) -# Increases your attack power by s1 for 15 seconds. - SpellInfo(blood_fury cd=120 duration=15 gcd=0 offgcd=1) - # Attack power increased by w1. - SpellAddBuff(blood_fury blood_fury add=1) +Define(blood_fury 24571) +# Instantly increases your rage by 300/10. + SpellInfo(blood_fury gcd=0 offgcd=1 rage=-30) Define(blood_of_the_enemy 297969) # Infuse your Heart of Azeroth with Blood of the Enemy. SpellInfo(blood_of_the_enemy) @@ -48,11 +46,9 @@ Define(channel_demonfire 196447) Define(chaos_bolt 116858) # Unleashes a devastating blast of chaos, dealing a critical strike for 2*(146 of Spell Power) Chaos damage. Damage is further increased by your critical strike chance. SpellInfo(chaos_bolt soulshards=2) -Define(concentrated_flame 295368) +Define(concentrated_flame 295373) # Blast your target with a ball of concentrated flame, dealing 295365s2*(1+@versadmg) Fire damage to an enemy or healing an ally for 295365s2*(1+@versadmg)?a295377[, then burn the target for an additional 295377m1 of the damage or healing done over 6 seconds][]. rnrnEach cast of Concentrated Flame deals s3 increased damage or healing. This bonus resets after every third cast. - SpellInfo(concentrated_flame duration=6 gcd=0 offgcd=1 tick=2) - # Suffering w1 damage every t1 sec. - SpellAddTargetDebuff(concentrated_flame concentrated_flame add=1) + SpellInfo(concentrated_flame cd=30) Define(conflagrate 17962) # Triggers an explosion on the target, dealing (100 of Spell Power) Fire damage.?s196406[rnrnReduces the cast time of your next Incinerate or Chaos Bolt by 117828s1 for 10 seconds.][]rnrn|cFFFFFFFFGenerates 245330s1 Soul Shard Fragments.|r SpellInfo(conflagrate cd=12.96) @@ -82,11 +78,11 @@ Define(decimating_bolt 325289) Define(demonbolt 264178) # Send the fiery soul of a fallen demon at the enemy, causing (73.4 of Spell Power) Shadowflame damage.?c2[rnrn|cFFFFFFFFGenerates 2 Soul Shards.|r][] SpellInfo(demonbolt) -Define(demonic_core 264173) +Define(demonic_core_buff 264173) # When your Wild Imps expend all of their energy or are imploded, you have a s1 chance to absorb their life essence, granting you a stack of Demonic Core. rnrnWhen your summoned Dreadstalkers fade away, you have a s2 chance to absorb their life essence, granting you a stack of Demonic Core.rnrnDemonic Core reduces the cast time of Demonbolt by 264173s1. Maximum 264173u stacks. - SpellInfo(demonic_core duration=20 max_stacks=4 gcd=0 offgcd=1) + SpellInfo(demonic_core_buff duration=20 max_stacks=4 gcd=0 offgcd=1) # The cast time of Demonbolt is reduced by s1. ?a334581[Demonbolt damage is increased by 334581s1.][] - SpellAddBuff(demonic_core demonic_core add=1) + SpellAddBuff(demonic_core_buff demonic_core_buff add=1) Define(demonic_strength 267171) # Infuse your Felguard with demonic strength and command it to charge your target and unleash a Felstorm that will deal s2 increased damage. SpellInfo(demonic_strength cd=60 duration=20) diff --git a/src/scripts/ovale_warrior.ts b/src/scripts/ovale_warrior.ts index c9bd5b743..ab77a5cbf 100644 --- a/src/scripts/ovale_warrior.ts +++ b/src/scripts/ovale_warrior.ts @@ -98,7 +98,7 @@ AddFunction armssingle_targetshortcdactions unless charges(overpower) == 2 and spell(overpower) { #bladestorm,if=buff.deadly_calm.down&(debuff.colossus_smash.up&rage<30|rage<70) - if buffexpires(deadly_calm) and { target.debuffpresent(colossus_smash_debuff) and rage() < 30 or rage() < 70 } spell(bladestorm) + if buffexpires(deadly_calm) and { target.debuffpresent(colossus_smash_debuff) and rage() < 30 or rage() < 70 } spell(bladestorm_arms) unless { buffstacks(overpower) >= 2 and buffexpires(deadly_calm) or target.debuffremaining(deep_wounds) <= gcd() and spellcooldown(colossus_smash) > gcd() } and spell(mortal_strike) { @@ -120,7 +120,7 @@ AddFunction armssingle_targetcdactions AddFunction armssingle_targetcdpostconditions { - spellcooldown(colossus_smash) < 8 and not 0 > 0 and spell(avatar) or target.debuffremaining(rend) <= baseduration(rend) * 0.3 and spell(rend) or enemies(tagged=1) > 1 and target.debuffremaining(deep_wounds) < gcd() and spell(cleave) or spell(warbreaker) or spell(colossus_smash) or buffremaining(avatar) < 18 and not target.debuffremaining(ravager) and spell(ravager) or charges(overpower) == 2 and spell(overpower) or buffexpires(deadly_calm) and { target.debuffpresent(colossus_smash_debuff) and rage() < 30 or rage() < 70 } and spell(bladestorm) or { buffstacks(overpower) >= 2 and buffexpires(deadly_calm) or target.debuffremaining(deep_wounds) <= gcd() and spellcooldown(colossus_smash) > gcd() } and spell(mortal_strike) or spell(deadly_calm) or rage() < 60 and buffexpires(deadly_calm) and spell(skullsplitter) or spell(overpower) or buffpresent(sudden_death_buff) and spell(condemn) or buffpresent(sudden_death_buff) and spell(execute) or spell(mortal_strike) or hastalent(fervor_of_battle_talent) and spell(whirlwind) or not hastalent(fervor_of_battle_talent) and spell(slam) + spellcooldown(colossus_smash) < 8 and not 0 > 0 and spell(avatar) or target.debuffremaining(rend) <= baseduration(rend) * 0.3 and spell(rend) or enemies(tagged=1) > 1 and target.debuffremaining(deep_wounds) < gcd() and spell(cleave) or spell(warbreaker) or spell(colossus_smash) or buffremaining(avatar) < 18 and not target.debuffremaining(ravager) and spell(ravager) or charges(overpower) == 2 and spell(overpower) or buffexpires(deadly_calm) and { target.debuffpresent(colossus_smash_debuff) and rage() < 30 or rage() < 70 } and spell(bladestorm_arms) or { buffstacks(overpower) >= 2 and buffexpires(deadly_calm) or target.debuffremaining(deep_wounds) <= gcd() and spellcooldown(colossus_smash) > gcd() } and spell(mortal_strike) or spell(deadly_calm) or rage() < 60 and buffexpires(deadly_calm) and spell(skullsplitter) or spell(overpower) or buffpresent(sudden_death_buff) and spell(condemn) or buffpresent(sudden_death_buff) and spell(execute) or spell(mortal_strike) or hastalent(fervor_of_battle_talent) and spell(whirlwind) or not hastalent(fervor_of_battle_talent) and spell(slam) } ### actions.precombat @@ -191,7 +191,7 @@ AddFunction armshacshortcdactions #warbreaker spell(warbreaker) #bladestorm - spell(bladestorm) + spell(bladestorm_arms) #ravager spell(ravager) #colossus_smash @@ -211,7 +211,7 @@ AddFunction armshaccdactions AddFunction armshaccdpostconditions { - rage() < 60 and buffexpires(deadly_calm) and spell(skullsplitter) or spellcooldown(colossus_smash) < 1 and spell(avatar) or target.debuffremaining(deep_wounds) <= gcd() and spell(cleave) or spell(warbreaker) or spell(bladestorm) or spell(ravager) or spell(colossus_smash) or target.debuffremaining(rend) <= baseduration(rend) * 0.3 and buffpresent(sweeping_strikes) and spell(rend) or spell(cleave) or { buffpresent(sweeping_strikes) or target.debuffremaining(deep_wounds) < gcd() and not hastalent(cleave_talent) } and spell(mortal_strike) or hastalent(dreadnaught_talent) and spell(overpower) or spell(condemn) or buffpresent(sweeping_strikes) and spell(execute) or spell(overpower) or spell(whirlwind) + rage() < 60 and buffexpires(deadly_calm) and spell(skullsplitter) or spellcooldown(colossus_smash) < 1 and spell(avatar) or target.debuffremaining(deep_wounds) <= gcd() and spell(cleave) or spell(warbreaker) or spell(bladestorm_arms) or spell(ravager) or spell(colossus_smash) or target.debuffremaining(rend) <= baseduration(rend) * 0.3 and buffpresent(sweeping_strikes) and spell(rend) or spell(cleave) or { buffpresent(sweeping_strikes) or target.debuffremaining(deep_wounds) < gcd() and not hastalent(cleave_talent) } and spell(mortal_strike) or hastalent(dreadnaught_talent) and spell(overpower) or spell(condemn) or buffpresent(sweeping_strikes) and spell(execute) or spell(overpower) or spell(whirlwind) } ### actions.execute @@ -266,7 +266,7 @@ AddFunction armsexecuteshortcdactions unless { target.debuffpresent(colossus_smash_debuff) or buffpresent(sudden_death_buff) or rage() > 65 } and spell(condemn) or charges(overpower) == 2 and spell(overpower) { #bladestorm,if=buff.deadly_calm.down&rage<50 - if buffexpires(deadly_calm) and rage() < 50 spell(bladestorm) + if buffexpires(deadly_calm) and rage() < 50 spell(bladestorm_arms) } } } @@ -283,7 +283,7 @@ AddFunction armsexecutecdactions AddFunction armsexecutecdpostconditions { - spell(deadly_calm) or target.debuffremaining(rend) <= baseduration(rend) * 0.3 and spell(rend) or rage() < 60 and { not hastalent(deadly_calm_talent) or buffexpires(deadly_calm) } and spell(skullsplitter) or spellcooldown(colossus_smash) < 8 and not 0 > 0 and spell(avatar) or buffremaining(avatar) < 18 and not target.debuffremaining(ravager) and spell(ravager) or enemies(tagged=1) > 1 and target.debuffremaining(deep_wounds) < gcd() and spell(cleave) or spell(warbreaker) or spell(colossus_smash) or { target.debuffpresent(colossus_smash_debuff) or buffpresent(sudden_death_buff) or rage() > 65 } and spell(condemn) or charges(overpower) == 2 and spell(overpower) or buffexpires(deadly_calm) and rage() < 50 and spell(bladestorm) or target.debuffremaining(deep_wounds) <= gcd() and spell(mortal_strike) or rage() < 40 and spell(skullsplitter) or spell(overpower) or spell(condemn) or spell(execute) + spell(deadly_calm) or target.debuffremaining(rend) <= baseduration(rend) * 0.3 and spell(rend) or rage() < 60 and { not hastalent(deadly_calm_talent) or buffexpires(deadly_calm) } and spell(skullsplitter) or spellcooldown(colossus_smash) < 8 and not 0 > 0 and spell(avatar) or buffremaining(avatar) < 18 and not target.debuffremaining(ravager) and spell(ravager) or enemies(tagged=1) > 1 and target.debuffremaining(deep_wounds) < gcd() and spell(cleave) or spell(warbreaker) or spell(colossus_smash) or { target.debuffpresent(colossus_smash_debuff) or buffpresent(sudden_death_buff) or rage() > 65 } and spell(condemn) or charges(overpower) == 2 and spell(overpower) or buffexpires(deadly_calm) and rage() < 50 and spell(bladestorm_arms) or target.debuffremaining(deep_wounds) <= gcd() and spell(mortal_strike) or rage() < 40 and spell(skullsplitter) or spell(overpower) or spell(condemn) or spell(execute) } ### actions.default @@ -292,6 +292,8 @@ AddFunction arms_defaultmainactions { #charge if checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) spell(charge) + #blood_fury,if=debuff.colossus_smash.up + if target.debuffpresent(colossus_smash_debuff) spell(blood_fury) #berserking,if=debuff.colossus_smash.remains>6 if target.debuffremaining(colossus_smash_debuff) > 6 spell(berserking) #run_action_list,name=hac,if=raid_event.adds.exists @@ -322,12 +324,12 @@ AddFunction arms_defaultshortcdactions #auto_attack armsgetinmeleerange() - unless target.debuffremaining(colossus_smash_debuff) > 6 and spell(berserking) + unless target.debuffpresent(colossus_smash_debuff) and spell(blood_fury) or target.debuffremaining(colossus_smash_debuff) > 6 and spell(berserking) { #bag_of_tricks,if=debuff.colossus_smash.down&cooldown.mortal_strike.remains if target.debuffexpires(colossus_smash_debuff) and spellcooldown(mortal_strike) > 0 spell(bag_of_tricks) #sweeping_strikes,if=spell_targets.whirlwind>1&(cooldown.bladestorm.remains>15|talent.ravager.enabled) - if enemies(tagged=1) > 1 and { spellcooldown(bladestorm) > 15 or hastalent(ravager_talent) } spell(sweeping_strikes) + if enemies(tagged=1) > 1 and { spellcooldown(bladestorm_arms) > 15 or hastalent(ravager_talent) } spell(sweeping_strikes) #run_action_list,name=hac,if=raid_event.adds.exists if never(raid_event_adds_exists) armshacshortcdactions() @@ -348,7 +350,7 @@ AddFunction arms_defaultshortcdactions AddFunction arms_defaultshortcdpostconditions { - checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) and spell(charge) or target.debuffremaining(colossus_smash_debuff) > 6 and spell(berserking) or never(raid_event_adds_exists) and armshacshortcdpostconditions() or { hastalent(massacre_talent_arms) and target.healthpercent() < 35 or target.healthpercent() < 20 or target.healthpercent() > 80 and iscovenant("venthyr") } and armsexecuteshortcdpostconditions() or armssingle_targetshortcdpostconditions() + checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) and spell(charge) or target.debuffpresent(colossus_smash_debuff) and spell(blood_fury) or target.debuffremaining(colossus_smash_debuff) > 6 and spell(berserking) or never(raid_event_adds_exists) and armshacshortcdpostconditions() or { hastalent(massacre_talent_arms) and target.healthpercent() < 35 or target.healthpercent() < 20 or target.healthpercent() > 80 and iscovenant("venthyr") } and armsexecuteshortcdpostconditions() or armssingle_targetshortcdpostconditions() } AddFunction arms_defaultcdactions @@ -359,10 +361,8 @@ AddFunction arms_defaultcdactions { #potion if checkboxon(opt_use_consumables) and target.classification(worldboss) item(potion_of_spectral_strength_item usable=1) - #blood_fury,if=debuff.colossus_smash.up - if target.debuffpresent(colossus_smash_debuff) spell(blood_fury) - unless target.debuffremaining(colossus_smash_debuff) > 6 and spell(berserking) + unless target.debuffpresent(colossus_smash_debuff) and spell(blood_fury) or target.debuffremaining(colossus_smash_debuff) > 6 and spell(berserking) { #arcane_torrent,if=cooldown.mortal_strike.remains>1.5&rage<50 if spellcooldown(mortal_strike) > 1.5 and rage() < 50 spell(arcane_torrent) @@ -380,7 +380,7 @@ AddFunction arms_defaultcdactions #use_item,name=dreadfire_vessel armsuseitemactions() - unless enemies(tagged=1) > 1 and { spellcooldown(bladestorm) > 15 or hastalent(ravager_talent) } and spell(sweeping_strikes) + unless enemies(tagged=1) > 1 and { spellcooldown(bladestorm_arms) > 15 or hastalent(ravager_talent) } and spell(sweeping_strikes) { #run_action_list,name=hac,if=raid_event.adds.exists if never(raid_event_adds_exists) armshaccdactions() @@ -404,7 +404,7 @@ AddFunction arms_defaultcdactions AddFunction arms_defaultcdpostconditions { - checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) and spell(charge) or target.debuffremaining(colossus_smash_debuff) > 6 and spell(berserking) or target.debuffexpires(colossus_smash_debuff) and spellcooldown(mortal_strike) > 0 and spell(bag_of_tricks) or enemies(tagged=1) > 1 and { spellcooldown(bladestorm) > 15 or hastalent(ravager_talent) } and spell(sweeping_strikes) or never(raid_event_adds_exists) and armshaccdpostconditions() or { hastalent(massacre_talent_arms) and target.healthpercent() < 35 or target.healthpercent() < 20 or target.healthpercent() > 80 and iscovenant("venthyr") } and armsexecutecdpostconditions() or armssingle_targetcdpostconditions() + checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) and spell(charge) or target.debuffpresent(colossus_smash_debuff) and spell(blood_fury) or target.debuffremaining(colossus_smash_debuff) > 6 and spell(berserking) or target.debuffexpires(colossus_smash_debuff) and spellcooldown(mortal_strike) > 0 and spell(bag_of_tricks) or enemies(tagged=1) > 1 and { spellcooldown(bladestorm_arms) > 15 or hastalent(ravager_talent) } and spell(sweeping_strikes) or never(raid_event_adds_exists) and armshaccdpostconditions() or { hastalent(massacre_talent_arms) and target.healthpercent() < 35 or target.healthpercent() < 20 or target.healthpercent() > 80 and iscovenant("venthyr") } and armsexecutecdpostconditions() or armssingle_targetcdpostconditions() } ### Arms icons. @@ -453,7 +453,7 @@ AddIcon enabled=(checkboxon(opt_warrior_arms_aoe) and specialization(arms)) help # avatar # bag_of_tricks # berserking -# bladestorm +# bladestorm_arms # blood_fury # charge # cleave @@ -690,6 +690,8 @@ AddFunction fury_defaultmainactions if spellcooldown(recklessness) < 3 and hastalent(reckless_abandon_talent) spell(rampage) #whirlwind,if=spell_targets.whirlwind>1&!buff.meat_cleaver.up|raid_event.adds.in 1 and not buffpresent(meat_cleaver) or 600 < gcd() and not buffpresent(meat_cleaver) spell(whirlwind_fury) + #blood_fury + spell(blood_fury) #berserking,if=buff.recklessness.up if buffpresent(recklessness) spell(berserking) #run_action_list,name=single_target @@ -722,7 +724,7 @@ AddFunction fury_defaultshortcdactions #recklessness,if=gcd.remains=0&((buff.bloodlust.up|talent.anger_management.enabled|raid_event.adds.in>10)|target.time_to_die>100|(talent.massacre.enabled&target.health.pct<35)|target.health.pct<20|target.time_to_die<15&raid_event.adds.in>10)&(spell_targets.whirlwind=1|buff.meat_cleaver.up) if not gcdremaining() > 0 and { buffpresent(bloodlust) or hastalent(anger_management_talent_fury) or 600 > 10 or target.timetodie() > 100 or hastalent(massacre_talent) and target.healthpercent() < 35 or target.healthpercent() < 20 or target.timetodie() < 15 and 600 > 10 } and { enemies(tagged=1) == 1 or buffpresent(meat_cleaver) } spell(recklessness) - unless { enemies(tagged=1) > 1 and not buffpresent(meat_cleaver) or 600 < gcd() and not buffpresent(meat_cleaver) } and spell(whirlwind_fury) or buffpresent(recklessness) and spell(berserking) + unless { enemies(tagged=1) > 1 and not buffpresent(meat_cleaver) or 600 < gcd() and not buffpresent(meat_cleaver) } and spell(whirlwind_fury) or spell(blood_fury) or buffpresent(recklessness) and spell(berserking) { #bag_of_tricks,if=buff.recklessness.down&debuff.siegebreaker.down&buff.enrage.up if buffexpires(recklessness) and target.debuffexpires(siegebreaker_debuff) and isenraged() spell(bag_of_tricks) @@ -736,7 +738,7 @@ AddFunction fury_defaultshortcdactions AddFunction fury_defaultshortcdpostconditions { - checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) and spell(charge) or target.distance() > 5 and furymovementshortcdpostconditions() or spellcooldown(recklessness) < 3 and hastalent(reckless_abandon_talent) and spell(rampage) or { enemies(tagged=1) > 1 and not buffpresent(meat_cleaver) or 600 < gcd() and not buffpresent(meat_cleaver) } and spell(whirlwind_fury) or buffpresent(recklessness) and spell(berserking) or furysingle_targetshortcdpostconditions() + checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) and spell(charge) or target.distance() > 5 and furymovementshortcdpostconditions() or spellcooldown(recklessness) < 3 and hastalent(reckless_abandon_talent) and spell(rampage) or { enemies(tagged=1) > 1 and not buffpresent(meat_cleaver) or 600 < gcd() and not buffpresent(meat_cleaver) } and spell(whirlwind_fury) or spell(blood_fury) or buffpresent(recklessness) and spell(berserking) or furysingle_targetshortcdpostconditions() } AddFunction fury_defaultcdactions @@ -757,10 +759,8 @@ AddFunction fury_defaultcdactions { #use_item,name=dreadfire_vessel furyuseitemactions() - #blood_fury - spell(blood_fury) - unless buffpresent(recklessness) and spell(berserking) + unless spell(blood_fury) or buffpresent(recklessness) and spell(berserking) { #lights_judgment,if=buff.recklessness.down&debuff.siegebreaker.down if buffexpires(recklessness) and target.debuffexpires(siegebreaker_debuff) spell(lights_judgment) @@ -782,7 +782,7 @@ AddFunction fury_defaultcdactions AddFunction fury_defaultcdpostconditions { - checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) and spell(charge) or target.distance() > 5 and furymovementcdpostconditions() or target.distance() > 25 and 600 > 45 and { checkboxon(opt_melee_range) and target.distance() >= 8 and target.distance() <= 40 } and spell(heroic_leap) or spellcooldown(recklessness) < 3 and hastalent(reckless_abandon_talent) and spell(rampage) or not gcdremaining() > 0 and { buffpresent(bloodlust) or hastalent(anger_management_talent_fury) or 600 > 10 or target.timetodie() > 100 or hastalent(massacre_talent) and target.healthpercent() < 35 or target.healthpercent() < 20 or target.timetodie() < 15 and 600 > 10 } and { enemies(tagged=1) == 1 or buffpresent(meat_cleaver) } and spell(recklessness) or { enemies(tagged=1) > 1 and not buffpresent(meat_cleaver) or 600 < gcd() and not buffpresent(meat_cleaver) } and spell(whirlwind_fury) or buffpresent(recklessness) and spell(berserking) or buffexpires(recklessness) and target.debuffexpires(siegebreaker_debuff) and isenraged() and spell(bag_of_tricks) or furysingle_targetcdpostconditions() + checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) and spell(charge) or target.distance() > 5 and furymovementcdpostconditions() or target.distance() > 25 and 600 > 45 and { checkboxon(opt_melee_range) and target.distance() >= 8 and target.distance() <= 40 } and spell(heroic_leap) or spellcooldown(recklessness) < 3 and hastalent(reckless_abandon_talent) and spell(rampage) or not gcdremaining() > 0 and { buffpresent(bloodlust) or hastalent(anger_management_talent_fury) or 600 > 10 or target.timetodie() > 100 or hastalent(massacre_talent) and target.healthpercent() < 35 or target.healthpercent() < 20 or target.timetodie() < 15 and 600 > 10 } and { enemies(tagged=1) == 1 or buffpresent(meat_cleaver) } and spell(recklessness) or { enemies(tagged=1) > 1 and not buffpresent(meat_cleaver) or 600 < gcd() and not buffpresent(meat_cleaver) } and spell(whirlwind_fury) or spell(blood_fury) or buffpresent(recklessness) and spell(berserking) or buffexpires(recklessness) and target.debuffexpires(siegebreaker_debuff) and isenraged() and spell(bag_of_tricks) or furysingle_targetcdpostconditions() } ### Fury icons. @@ -1057,6 +1057,8 @@ AddFunction protection_defaultmainactions { #charge,if=time=0 if timeincombat() == 0 and { checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) } spell(charge) + #blood_fury + spell(blood_fury) #berserking spell(berserking) #ignore_pain,if=buff.ignore_pain.down @@ -1081,7 +1083,7 @@ AddFunction protection_defaultshortcdactions #auto_attack protectiongetinmeleerange() - unless timeincombat() == 0 and { checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) } and spell(charge) or spell(berserking) + unless timeincombat() == 0 and { checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) } and spell(charge) or spell(blood_fury) or spell(berserking) { #bag_of_tricks spell(bag_of_tricks) @@ -1108,7 +1110,7 @@ AddFunction protection_defaultshortcdactions AddFunction protection_defaultshortcdpostconditions { - timeincombat() == 0 and { checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) } and spell(charge) or spell(berserking) or buffexpires(ignore_pain) and spell(ignore_pain) or enemies(tagged=1) >= 3 and protectionaoeshortcdpostconditions() or protectionstshortcdpostconditions() + timeincombat() == 0 and { checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) } and spell(charge) or spell(blood_fury) or spell(berserking) or buffexpires(ignore_pain) and spell(ignore_pain) or enemies(tagged=1) >= 3 and protectionaoeshortcdpostconditions() or protectionstshortcdpostconditions() } AddFunction protection_defaultcdactions @@ -1119,10 +1121,8 @@ AddFunction protection_defaultcdactions { #use_items,if=cooldown.avatar.remains<=gcd|buff.avatar.up if spellcooldown(avatar) <= gcd() or buffpresent(avatar) protectionuseitemactions() - #blood_fury - spell(blood_fury) - unless spell(berserking) + unless spell(blood_fury) or spell(berserking) { #arcane_torrent spell(arcane_torrent) @@ -1162,7 +1162,7 @@ AddFunction protection_defaultcdactions AddFunction protection_defaultcdpostconditions { - timeincombat() == 0 and { checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) } and spell(charge) or spell(berserking) or spell(bag_of_tricks) or buffexpires(ignore_pain) and spell(ignore_pain) or spell(ancient_aftershock) or spell(spear_of_bastion) or spell(avatar) or enemies(tagged=1) >= 3 and protectionaoecdpostconditions() or protectionstcdpostconditions() + timeincombat() == 0 and { checkboxon(opt_melee_range) and target.inrange(charge) and not target.inrange(pummel) } and spell(charge) or spell(blood_fury) or spell(berserking) or spell(bag_of_tricks) or buffexpires(ignore_pain) and spell(ignore_pain) or spell(ancient_aftershock) or spell(spear_of_bastion) or spell(avatar) or enemies(tagged=1) >= 3 and protectionaoecdpostconditions() or protectionstcdpostconditions() } ### Protection icons. diff --git a/src/scripts/ovale_warrior_spells.ts b/src/scripts/ovale_warrior_spells.ts index 31cbc1698..4145b4295 100644 --- a/src/scripts/ovale_warrior_spells.ts +++ b/src/scripts/ovale_warrior_spells.ts @@ -18,7 +18,7 @@ Define(arcane_torrent 25046) Define(avatar 107574) # 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 SpellInfo(avatar cd=90 duration=20 gcd=0 offgcd=1 rage=-20) - SpellRequire(avatar unusable set=1 enabled=(not {hastalent(avatar_talent) or specialization("protection")})) + SpellRequire(avatar unusable set=1 enabled=(not hastalent(avatar_talent))) # Damage done increased by s1. SpellAddBuff(avatar avatar add=1) Define(bag_of_tricks 312411) @@ -27,17 +27,21 @@ Define(bag_of_tricks 312411) Define(berserking 59621) # Permanently enchant a melee weapon to sometimes increase your attack power by 59620s1, but at the cost of reduced armor. Cannot be applied to items higher than level ecix SpellInfo(berserking gcd=0 offgcd=1) -Define(bladestorm 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. - SpellInfo(bladestorm cd=90 duration=6 tick=1) - SpellRequire(bladestorm replaced_by set=ravager enabled=(hastalent(ravager_talent))) +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 + 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(blood_fury 20572) -# Increases your attack power by s1 for 15 seconds. - SpellInfo(blood_fury cd=120 duration=15 gcd=0 offgcd=1) - # Attack power increased by w1. - SpellAddBuff(blood_fury blood_fury 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. + 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. + SpellAddBuff(bladestorm_arms bladestorm_arms add=1) +Define(blood_fury 24571) +# Instantly increases your rage by 300/10. + SpellInfo(blood_fury gcd=0 offgcd=1 rage=-30) Define(bloodbath 335096) # Assault the target in a bloodthirsty craze, dealing s1 Physical damage and restoring 117313s1 of your health.rnrn|cFFFFFFFFGenerates s2/10 Rage.|r SpellInfo(bloodbath cd=3 rage=-8) @@ -273,6 +277,8 @@ Define(anger_management_talent_fury 22405) # Every ?c1[s1]?c2[s3][s2] Rage you spend reduces the remaining cooldown on ?c1&s262161[Warbreaker and Bladestorm]?c1[Colossus Smash and Bladestorm]?c2[Recklessness][Avatar and Shield Wall] by 1 sec. 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 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) diff --git a/src/simulationcraft/emiter.ts b/src/simulationcraft/emiter.ts index 9258a378d..65f65d295 100644 --- a/src/simulationcraft/emiter.ts +++ b/src/simulationcraft/emiter.ts @@ -149,15 +149,15 @@ export class Emiter { specialization: SpecializationName | "ALL_SPECIALIZATIONS", _type?: "spell" | "item" ): [string, string | undefined] { - if (className && annotation.dictionary[`${name}_${className}`]) { - return [`${name}_${className}`, _type]; - } if ( specialization && annotation.dictionary[`${name}_${specialization}`] ) { return [`${name}_${specialization}`, _type]; } + if (className && annotation.dictionary[`${name}_${lower(className)}`]) { + return [`${name}_${lower(className)}`, _type]; + } const [disname, distype] = this.GetPerClassSpecialization( this.EMIT_DISAMBIGUATION, diff --git a/src/utils/importsimc/customspell.ts b/src/utils/importsimc/customspell.ts index 75dcee062..c5123517b 100644 --- a/src/utils/importsimc/customspell.ts +++ b/src/utils/importsimc/customspell.ts @@ -153,8 +153,7 @@ function getConditions(replacedBy: SpellData) { talent, }); } - } - if (replacedBy.specializationName.length > 0) { + } else if (replacedBy.specializationName.length > 0) { for (const specializationName of replacedBy.specializationName) { conditions.push({ condition: "specialization", diff --git a/src/utils/importsimc/importspells.ts b/src/utils/importsimc/importspells.ts index d3d7a1ef2..c2c483824 100644 --- a/src/utils/importsimc/importspells.ts +++ b/src/utils/importsimc/importspells.ts @@ -140,6 +140,45 @@ const specIdToName: { [k in keyof typeof specIds]?: SpecializationName } = { WARRIOR_PROTECTION: "protection", }; +const specIdToClassId: { [k in keyof typeof specIds]?: ClassId } = { + DEATH_KNIGHT_BLOOD: "DEATHKNIGHT", + DEATH_KNIGHT_FROST: "DEATHKNIGHT", + DEATH_KNIGHT_UNHOLY: "DEATHKNIGHT", + DEMON_HUNTER_HAVOC: "DEMONHUNTER", + DEMON_HUNTER_VENGEANCE: "DEMONHUNTER", + DRUID_BALANCE: "DRUID", + DRUID_FERAL: "DRUID", + DRUID_GUARDIAN: "DRUID", + DRUID_RESTORATION: "DRUID", + HUNTER_BEAST_MASTERY: "HUNTER", + HUNTER_MARKSMANSHIP: "HUNTER", + HUNTER_SURVIVAL: "HUNTER", + MAGE_ARCANE: "MAGE", + MAGE_FIRE: "MAGE", + MAGE_FROST: "MAGE", + MONK_BREWMASTER: "MONK", + MONK_MISTWEAVER: "MONK", + MONK_WINDWALKER: "MONK", + PALADIN_HOLY: "PALADIN", + PALADIN_PROTECTION: "PALADIN", + PALADIN_RETRIBUTION: "PALADIN", + PRIEST_DISCIPLINE: "PRIEST", + PRIEST_HOLY: "PRIEST", + PRIEST_SHADOW: "PRIEST", + ROGUE_ASSASSINATION: "ROGUE", + ROGUE_OUTLAW: "ROGUE", + ROGUE_SUBTLETY: "ROGUE", + SHAMAN_ELEMENTAL: "SHAMAN", + SHAMAN_ENHANCEMENT: "SHAMAN", + SHAMAN_RESTORATION: "SHAMAN", + WARLOCK_AFFLICTION: "WARLOCK", + WARLOCK_DEMONOLOGY: "WARLOCK", + WARLOCK_DESTRUCTION: "WARLOCK", + WARRIOR_ARMS: "WARRIOR", + WARRIOR_FURY: "WARRIOR", + WARRIOR_PROTECTION: "WARRIOR", +}; + const specIdToSpecName = new Map(); for (const key in specIdToName) { const k = key as keyof typeof specIds; @@ -147,6 +186,13 @@ for (const key in specIdToName) { if (name) specIdToSpecName.set(specIds[k], name); } +const specIdToClassName = new Map(); +for (const key in specIdToClassId) { + const k = key as keyof typeof specIds; + const name = specIdToClassId[k]; + if (name) specIdToClassName.set(specIds[k], name); +} + export interface SpellPowerData { id: number; spell_id: number; @@ -1260,7 +1306,8 @@ function readFile(directory: string, fileName: string, output: AllData) { i++; } const number = $data.substring(start, i); - columns.push(parseFloat(number)); + if (number.indexOf(".") >= 0) columns.push(parseFloat(number)); + else columns.push(parseInt(number)); } else if (c === "{") { const [innerData, newIndex] = getColumns($data, i + 1); columns.push(<(number | string)[]>innerData); @@ -1589,8 +1636,9 @@ export function getSpellData(directory: string) { if (spell.rank_str === "Racial") spell.identifierScore += 3; if (spell.rank_str === "Artifact") spell.identifierScore -= 20; if (spell.rank_str === "Passive") spell.identifierScore--; - if (spell.spellAttributes.indexOf(SpellAttribute.Passive) >= 0) + if (spell.spellAttributes.indexOf(SpellAttribute.Passive) >= 0) { spell.identifierScore--; + } if (spell.spellAttributes.indexOf(SpellAttribute.Hidden) >= 0) spell.identifierScore--; } @@ -1813,14 +1861,25 @@ export function getSpellData(directory: string) { }; (talent.identifier = getIdentifier(talent.name) + "_talent"), (talent.talentId = 3 * talent.row + talent.col + 1); + let className = + classBitToNumber[talent.m_class] !== undefined + ? classBitToNumber[talent.m_class] + : undefined; + if (!talent.m_class && talent.spec) { + className = specIdToClassName.get(talent.spec); + } if (identifiers[talent.identifier]) { + const other = talentsById.get(identifiers[talent.identifier]); if (talent.spec) { const specName = specIdToSpecName.get(talent.spec); talent.identifier += "_" + specName; + } else if (other?.spec) { + const specName = specIdToSpecName.get(other.spec); + other.identifier += "_" + specName; + identifiers[other.identifier] = other.id; } else { - if (classBitToNumber[talent.m_class]) { - talent.identifier += - "_" + classBitToNumber[talent.m_class].toLowerCase(); + if (className) { + talent.identifier += "_" + className.toLowerCase(); } else { talent.identifier += "_unknown"; } @@ -1832,10 +1891,15 @@ export function getSpellData(directory: string) { const spell = spellDataById.get(talent.spell_id); if (spell) { if (!spell.talent) spell.talent = []; + if (!spell.className) spell.className = className as ClassId; spell.talent.push(talent); if (!spell.spellAttributes.includes(SpellAttribute.Passive)) spell.identifierScore += 10; + if (talent.spec) { + const specName = specIdToSpecName.get(talent.spec); + if (specName) spell.specializationName.push(specName); + } const replacedSpell = spellDataById.get(talent.replace_id); if (replacedSpell) { if (!replacedSpell.replaced_by) @@ -1897,10 +1961,25 @@ export function getSpellData(directory: string) { if (identifiers[spell.identifier]) { const other = spellDataById.get(identifiers[spell.identifier]); if (other) { - if (other.identifierScore === spell.identifierScore) { - if (other.className === spell.className) { - const otherNames = getSpellSpecializations(other); - const spellNames = getSpellSpecializations(spell); + if ( + other.identifierScore === spell.identifierScore || + (other.identifierScore >= 10 && spell.identifierScore >= 10) + ) { + const otherNames = getSpellSpecializations(other); + const spellNames = getSpellSpecializations(spell); + if (other.tooltip && other.gcd === 0 && !spell.tooltip) { + other.identifier = getRandomIdentifier(other, spell); + identifiers[other.identifier] = other.id; + } else if ( + !other.tooltip && + spell.tooltip && + spell.gcd === 0 + ) { + spell.identifier = getRandomIdentifier(spell, other); + } else if ( + otherNames.some((x) => !spellNames.includes(x)) || + spellNames.some((x) => !otherNames.includes(x)) + ) { if ( otherNames.length === 0 && spellNames.length === 0