You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2295 lines
102 KiB
2295 lines
102 KiB
|
3 years ago
|
-- MonkWindwalker.lua
|
||
|
|
-- October 2022
|
||
|
|
|
||
|
|
if UnitClassBase( "player" ) ~= "MONK" then return end
|
||
|
|
|
||
|
|
local addon, ns = ...
|
||
|
|
local Hekili = _G[ addon ]
|
||
|
|
local class, state = Hekili.Class, Hekili.State
|
||
|
|
|
||
|
|
local GetNamePlates = C_NamePlate.GetNamePlates
|
||
|
|
local LRC = LibStub( "LibRangeCheck-2.0" )
|
||
|
|
|
||
|
|
local pow, strformat = math.pow, string.format
|
||
|
|
|
||
|
|
local spec = Hekili:NewSpecialization( 269 )
|
||
|
|
|
||
|
|
spec:RegisterResource( Enum.PowerType.Energy, {
|
||
|
|
crackling_jade_lightning = {
|
||
|
|
aura = "crackling_jade_lightning",
|
||
|
|
debuff = true,
|
||
|
|
|
||
|
|
last = function ()
|
||
|
|
local app = state.debuff.crackling_jade_lightning.applied
|
||
|
|
local t = state.query_time
|
||
|
|
|
||
|
|
return app + floor( ( t - app ) / state.haste ) * state.haste
|
||
|
|
end,
|
||
|
|
|
||
|
|
stop = function( x )
|
||
|
|
return x < class.abilities.crackling_jade_lightning.spendPerSec
|
||
|
|
end,
|
||
|
|
|
||
|
|
interval = function () return state.haste end,
|
||
|
|
value = function () return class.abilities.crackling_jade_lightning.spendPerSec end,
|
||
|
|
}
|
||
|
|
} )
|
||
|
|
spec:RegisterResource( Enum.PowerType.Chi )
|
||
|
|
spec:RegisterResource( Enum.PowerType.Mana )
|
||
|
|
|
||
|
|
|
||
|
|
-- Talents
|
||
|
|
spec:RegisterTalents( {
|
||
|
|
-- Monk
|
||
|
|
bounce_back = { 80717, 389577, 2 }, -- When a hit deals more than 20% of your maximum health, reduce all damage you take by 10% for 4 sec. This effect cannot occur more than once every 30 seconds.
|
||
|
|
calming_presence = { 80693, 388664, 1 }, -- Reduces all damage taken by 3%.
|
||
|
|
celerity = { 80685, 115173, 1 }, -- Reduces the cooldown of Roll by 5 sec and increases its maximum number of charges by 1.
|
||
|
|
chi_burst = { 80709, 123986, 1 }, -- Hurls a torrent of Chi energy up to 40 yds forward, dealing 805 Nature damage to all enemies, and 1,642 healing to the Monk and all allies in its path. Healing reduced beyond 6 targets. Chi Burst generates 1 Chi per enemy target damaged, up to a maximum of 2.
|
||
|
|
chi_torpedo = { 80685, 115008, 1 }, -- Torpedoes you forward a long distance and increases your movement speed by 30% for 10 sec, stacking up to 2 times.
|
||
|
|
chi_wave = { 80709, 115098, 1 }, -- A wave of Chi energy flows through friends and foes, dealing 303 Nature damage or 730 healing. Bounces up to 7 times to targets within 25 yards.
|
||
|
|
close_to_heart = { 80707, 389574, 2 }, -- You and your allies within 10 yards have 2% increased healing taken from all sources.
|
||
|
|
dampen_harm = { 80704, 122278, 1 }, -- Reduces all damage you take by 20% to 50% for 10 sec, with larger attacks being reduced by more.
|
||
|
|
diffuse_magic = { 80697, 122783, 1 }, -- Reduces magic damage you take by 60% for 6 sec, and transfers all currently active harmful magical effects on you back to their original caster if possible.
|
||
|
|
disable = { 80679, 116095, 1 }, -- Reduces the target's movement speed by 50% for 15 sec, duration refreshed by your melee attacks. Targets already snared will be rooted for 8 sec instead.
|
||
|
|
elusive_mists = { 80603, 388681, 2 }, -- Reduces all damage taken while channelling Soothing Mists by 0%.
|
||
|
|
escape_from_reality = { 80715, 394110, 2 }, -- After you use Transcendence: Transfer, you can use Transcendence: Transfer again within 10 sec, ignoring its cooldown. During this time, if you cast Vivify on yourself, its healing is increased by 1% and 50% of its cost is refunded.
|
||
|
|
expeditious_fortification = { 80681, 388813, 1 }, -- Fortifying Brew cooldown reduced by 2 min.
|
||
|
|
eye_of_the_tiger = { 80700, 196607, 1 }, -- Tiger Palm also applies Eye of the Tiger, dealing 601 Nature damage to the enemy and 537 healing to the Monk over 8 sec. Limit 1 target.
|
||
|
|
fast_feet = { 80705, 388809, 2 }, -- Rising Sun Kick deals 70% increased damage. Spinning Crane Kick deals 10% additional damage.
|
||
|
|
fatal_touch = { 80703, 394123, 2 }, -- Touch of Death cooldown reduced by 120 sec.
|
||
|
|
ferocity_of_xuen = { 80706, 388674, 2 }, -- Increases all damage dealt by 2%.
|
||
|
|
fortifying_brew = { 80680, 115203, 1 }, -- Turns your skin to stone for 15 sec, increasing your current and maximum health by 15%, reducing all damage you take by 20%.
|
||
|
|
generous_pour = { 80683, 389575, 2 }, -- You and your allies within 10 yards have 10% increased avoidance.
|
||
|
|
grace_of_the_crane = { 80710, 388811, 2 }, -- Increases all healing taken by 2%.
|
||
|
|
hasty_provocation = { 80696, 328670, 1 }, -- Provoked targets move towards you at 50% increased speed.
|
||
|
|
improved_paralysis = { 80687, 344359, 1 }, -- Reduces the cooldown of Paralysis by 15 sec.
|
||
|
|
improved_roll = { 80712, 328669, 1 }, -- Grants an additional charge of Roll and Chi Torpedo.
|
||
|
|
improved_touch_of_death = { 80684, 322113, 1 }, -- Touch of Death can now be used on targets with less than 15% health remaining, dealing 35% of your maximum health in damage.
|
||
|
|
improved_vivify = { 80692, 231602, 2 }, -- Vivify healing is increased by 40%.
|
||
|
|
ironshell_brew = { 80681, 388814, 1 }, -- Increases Armor while Fortifying Brew is active by 25%. Increases Dodge while Fortifying Brew is active by 25%.
|
||
|
|
paralysis = { 80688, 115078, 1 }, -- Incapacitates the target for 60 sec. Limit 1. Damage will cancel the effect.
|
||
|
|
profound_rebuttal = { 80708, 392910, 1 }, -- Expel Harm's critical healing is increased by 50%.
|
||
|
|
resonant_fists = { 80702, 389578, 2 }, -- Your attacks have a chance to resonate, dealing 525 Nature damage to enemies within 8 yds.
|
||
|
|
ring_of_peace = { 80698, 116844, 1 }, -- Form a Ring of Peace at the target location for 5 sec. Enemies that enter will be ejected from the Ring.
|
||
|
|
save_them_all = { 80714, 389579, 2 }, -- When your healing spells heal an ally whose health is below 35% maximum health, you gain an additional 10% healing for the next 4 sec.
|
||
|
|
spear_hand_strike = { 80686, 116705, 1 }, -- Jabs the target in the throat, interrupting spellcasting and preventing any spell from that school of magic from being cast for 4 sec.
|
||
|
|
strength_of_spirit = { 80682, 387276, 1 }, -- Expel Harm's healing is increased by up to 100%, based on your missing health.
|
||
|
|
summon_black_ox_statue = { 80716, 115315, 1 }, -- Summons a Black Ox Statue at the target location for 15 min, pulsing threat to all enemies within 20 yards. You may cast Provoke on the statue to taunt all enemies near the statue.
|
||
|
|
summon_jade_serpent_statue = { 80713, 115313, 1 }, -- Summons a Jade Serpent Statue at the target location. When you channel Soothing Mist, the statue will also begin to channel Soothing Mist on your target, healing for 3,951 over 6.9 sec.
|
||
|
|
summon_white_tiger_statue = { 80701, 388686, 1 }, -- Summons a White Tiger Statue at the target location for 30 sec, pulsing 486 damage to all enemies every 2 sec for 30 sec.
|
||
|
|
tiger_tail_sweep = { 80604, 264348, 2 }, -- Increases the range of Leg Sweep by 2 yds and reduces its cooldown by 10 sec.
|
||
|
|
transcendence = { 80694, 101643, 1 }, -- Split your body and spirit, leaving your spirit behind for 15 min. Use Transcendence: Transfer to swap locations with your spirit.
|
||
|
|
vigorous_expulsion = { 80711, 392900, 1 }, -- Expel Harm's healing increased by 5% and critical strike chance increased by 15%.
|
||
|
|
vivacious_vivification = { 80695, 388812, 1 }, -- Every 10 sec, your next Vivify becomes instant.
|
||
|
|
windwalking = { 80699, 157411, 2 }, -- You and your allies within 10 yards have 10% increased movement speed.
|
||
|
|
|
||
|
|
-- Windwalker
|
||
|
|
ascension = { 80612, 115396, 1 }, -- Increases your maximum Chi by 1, maximum Energy by 20, and your Energy regeneration by 10%.
|
||
|
|
attenuation = { 80668, 386941, 1 }, -- Bonedust Brew's Shadow damage or healing is increased by 20%, and when Bonedust Brew deals Shadow damage or healing, its cooldown is reduced by 0.5 sec.
|
||
|
|
bonedust_brew = { 80669, 386276, 1 }, -- Hurl a brew created from the bones of your enemies at the ground, coating all targets struck for 10 sec. Your abilities have a 50% chance to affect the target a second time at 40% effectiveness as Shadow damage or healing. Spinning Crane Kick refunds 1 Chi when striking enemies with your Bonedust Brew active.
|
||
|
|
crane_vortex = { 80667, 388848, 2 }, -- Spinning Crane Kick damage increased by 10%.
|
||
|
|
dance_of_chiji = { 80626, 325201, 1 }, -- Spending Chi has a chance to make your next Spinning Crane Kick free and deal an additional 200% damage.
|
||
|
|
detox = { 80606, 218164, 1 }, -- Removes all Poison and Disease effects from the target.
|
||
|
|
drinking_horn_cover = { 80619, 391370, 1 }, -- The duration of Serenity is extended by 0.3 sec every time you cast a Chi spender.
|
||
|
|
dust_in_the_wind = { 80670, 394093, 1 }, -- Bonedust Brew's radius increased by 50%.
|
||
|
|
empowered_tiger_lightning = { 80659, 323999, 1 }, -- Xuen strikes your enemies with Empowered Tiger Lightning every 4 sec, dealing 10% of the damage you and your summons have dealt to those targets in the last 4 sec.
|
||
|
|
faeline_harmony = { 80671, 391412, 1 }, -- Your abilities reset Faeline Stomp 100% more often. Enemies and allies hit by Faeline Stomp are affected by Fae Exposure, increasing your damage and healing against them by 12% for 10 sec.
|
||
|
|
faeline_stomp = { 80672, 388193, 1 }, -- Strike the ground fiercely to expose a faeline for 30 sec, dealing 700 Nature damage to up to 5 enemies, and restores 1,471 health to up to 5 allies within 30 yds caught in the faeline. Up to 5 enemies caught in the faeline suffer an additional 1,138 damage. Your abilities have a 6% chance of resetting the cooldown of Faeline Stomp while fighting on a faeline.
|
||
|
|
fatal_flying_guillotine = { 80666, 394923, 1 }, -- Touch of Death strikes up to 4 additional nearby targets. This Touch of Death is always an Improved Touch of Death.
|
||
|
|
fists_of_fury = { 80613, 113656, 1 }, -- Pummels all targets in front of you, dealing 10,573 Physical damage over 3.5 sec to your primary target and 6,238 damage over 3.5 sec to all other enemies. Deals reduced damage beyond 5 targets. Can be channeled while moving.
|
||
|
|
flashing_fists = { 80615, 388854, 2 }, -- Fists of Fury damage increased by 10%.
|
||
|
|
flying_serpent_kick = { 80621, 101545, 1 }, -- Soar forward through the air at high speed for 1.5 sec. If used again while active, you will land, dealing 154 damage to all enemies within 8 yards and reducing movement speed by 70% for 4 sec.
|
||
|
|
forbidden_technique = { 80608, 393098, 1 }, -- Touch of Death deals 20% increased damage and can be used a second time within 5 sec before its cooldown is triggered.
|
||
|
|
fury_of_xuen = { 80656, 396166, 1 }, -- Your Combo Strikes grant a stacking 1.0% chance for your next Fists of Fury to grant 5% Haste and invoke Xuen, The White Tiger for 8 sec.
|
||
|
|
glory_of_the_dawn = { 80677, 392958, 1 }, -- Rising Sun Kick has a 25% chance to trigger a second time, dealing 630 Physical damage and restoring 1 Chi.
|
||
|
|
hardened_soles = { 80611, 391383, 2 }, -- Blackout Kick critical strike chance increased by 5% and critical damage increased by 10%.
|
||
|
|
hit_combo = { 80676, 196740, 1 }, -- Each successive attack that triggers Combo Strikes in a row grants 1% increased damage, stacking up to 6 times.
|
||
|
|
inner_peace = { 80627, 397768, 1 }, -- Increases maximum Energy by 30. Tiger Palm damage increased by 10%.
|
||
|
|
invoke_xuen = { 80657, 123904, 1 }, -- Summons an effigy of Xuen, the White Tiger for 20 sec. Xuen attacks your primary target, and strikes 3 enemies within 10 yards every 0.9 sec with Tiger Lightning for 434 Nature damage. Every 4 sec, Xuen strikes your enemies with Empowered Tiger Lightning dealing 10% of the damage you have dealt to those targets in the last 4 sec.
|
||
|
|
invoke_xuen_the_white_tiger = { 80657, 123904, 1 }, -- Summons an effigy of Xuen, the White Tiger for 20 sec. Xuen attacks your primary target, and strikes 3 enemies within 10 yards every 0.9 sec with Tiger Lightning for 434 Nature damage. Every 4 sec, Xuen strikes your enemies with Empowered Tiger Lightning dealing 10% of the damage you have dealt to those targets in the last 4 sec.
|
||
|
|
invokers_delight = { 80661, 388661, 1 }, -- You gain 33% haste for 20 sec after summoning your Celestial.
|
||
|
|
jade_ignition = { 80607, 392979, 1 }, -- Whenever you deal damage to a target with Fists of Fury, you gain a stack of Chi Energy up to a maximum of 30 stacks. Using Spinning Crane Kick will cause the energy to detonate in a Chi Explosion, dealing 1,138 Nature damage to all enemies within 8 yards. The damage is increased by 5% for each stack of Chi Energy.
|
||
|
|
last_emperors_capacitor = { 80664, 392989, 1 }, -- Chi spenders increase the damage of your next Crackling Jade Lightning by 100% and reduce its cost by 5%, stacking up to 20 times.
|
||
|
|
mark_of_the_crane = { 80623, 220357, 1 }, -- Spinning Crane Kick's damage is increased by 18% for each unique target you've struck in the last 20 sec with Tiger Palm, Blackout Kick, or Rising Sun Kick. Stacks up to 5 times.
|
||
|
|
meridian_strikes = { 80620, 391330, 1 }, -- When you Combo Strike, the cooldown of Touch of Death is reduced by 0.35 sec. Touch of Death deals an additional 15% damage.
|
||
|
|
open_palm_strikes = { 80678, 392970, 1 }, -- Fists of Fury damage increased by 15%. When Fists of Fury deals damage, it has a 5% chance to refund 1 Chi.
|
||
|
|
power_strikes = { 80614, 121817, 1 }, -- Every 15 sec, your next Tiger Palm will generate 1 additional Chi and deal 100% additional damage.
|
||
|
|
rising_star = { 80673, 388849, 2 }, -- Rising Sun Kick damage increased by 10% and critical strike damage increased by 10%.
|
||
|
|
rising_sun_kick = { 80690, 107428, 1 }, -- Kick upwards, dealing 5,814 Physical damage, and reducing the effectiveness of healing on the target for 10 sec.
|
||
|
|
rushing_jade_wind = { 80625, 116847, 1 }, -- Summons a whirling tornado around you, causing 2,300 Physical damage over 5.2 sec to all enemies within 8 yards. Deals reduced damage beyond 5 targets.
|
||
|
|
serenity = { 80618, 152173, 1 }, -- Enter an elevated state of mental and physical serenity for 12 sec. While in this state, you deal 15% increased damage and healing, and all Chi consumers are free and cool down 100% more quickly.
|
||
|
|
shadowboxing_treads = { 80624, 392982, 1 }, -- Blackout Kick damage increased by 10% and strikes an additional 2 targets.
|
||
|
|
skyreach = { 80663, 392991, 1 }, -- Tiger Palm now has a 10 yard range and dashes you to the target when used. Tiger Palm also applies an effect which increases your critical strike chance by 50% for 6 sec on the target. This effect cannot be applied more than once every 60 sec per target.
|
||
|
|
skytouch = { 80663, 405044, 1 }, -- Tiger Palm now has a 10 yard range. Tiger Palm also applies an effect which increases your critical strike chance by 50% for 6 sec on the target. This effect cannot be applied more than once every 60 sec per target.
|
||
|
|
soothing_mist = { 80691, 115175, 1 }, -- Heals the target for 7,903 over 6.9 sec. While channeling, Enveloping Mist and Vivify may be cast instantly on the target.
|
||
|
|
spiritual_focus = { 80617, 280197, 1 }, -- Every 2 Chi you spend reduces the cooldown of Serenity by 0.3 sec.
|
||
|
|
storm_earth_and_fire = { 80618, 137639, 1 }, -- Split into 3 elemental spirits for 15 sec, each spirit dealing 42% of normal damage and healing. You directly control the Storm spirit, while Earth and Fire spirits mimic your attacks on nearby enemies. While active, casting Storm, Earth, and Fire again will cause the spirits to fixate on your target.
|
||
|
|
strike_of_the_windlord = { 80675, 392983, 1 }, -- Strike with both fists at all enemies in front of you, dealing 12,309 damage and reducing movement speed by 50% for 6 sec.
|
||
|
|
teachings_of_the_monastery = { 80616, 116645, 1 }, -- Tiger Palm causes your next Blackout Kick to strike an additional time, stacking up to 3. Blackout Kick has a 12% chance to reset the remaining cooldown on Rising Sun Kick.
|
||
|
|
thunderfist = { 80674, 392985, 1 }, -- Strike of the Windlord grants you a stack of Thunderfist for each enemy struck. Thunderfist discharges upon melee strikes, dealing 6,810 Nature damage.
|
||
|
|
tigers_lust = { 80689, 116841, 1 }, -- Increases a friendly target's movement speed by 70% for 6 sec and removes all roots and snares.
|
||
|
|
touch_of_karma = { 80610, 122470, 1 }, -- Absorbs all damage taken for 10 sec, up to 50% of your maximum health, and redirects 70% of that amount to the enemy target as Nature damage over 6 sec.
|
||
|
|
touch_of_the_tiger = { 80622, 388856, 2 }, -- Tiger Palm damage increased by 25%.
|
||
|
|
transfer_the_power = { 80660, 195300, 1 }, -- Blackout Kick and Rising Sun Kick increase damage dealt by your next Fists of Fury by 3%, stacking up to 10 times.
|
||
|
|
way_of_the_fae = { 80605, 392994, 1 }, -- Increases the initial damage of Faeline Stomp by 10.0% per target hit by that damage, up to a maximum of 50.0% additional damage.
|
||
|
|
whirling_dragon_punch = { 80658, 152175, 1 }, -- Performs a devastating whirling upward strike, dealing 3,921 damage to all nearby enemies. Only usable while both Fists of Fury and Rising Sun Kick are on cooldown.
|
||
|
|
widening_whirl = { 80609, 388846, 1 }, -- Spinning Crane Kick radius increased by 15%.
|
||
|
|
xuens_battlegear = { 80662, 392993, 1 }, -- Rising Sun Kick critical strikes reduce the cooldown of Fists of Fury by 4.0 sec. When Fists of Fury ends, the critical strike chance of Rising Sun Kick is increased by 40% for 5 sec.
|
||
|
|
xuens_bond = { 80665, 392986, 1 }, -- Abilities that activate Combo Strikes reduce the cooldown of Invoke Xuen, the White Tiger by 0.1 sec, and Xuen's damage is increased by 10.0%.
|
||
|
|
} )
|
||
|
|
|
||
|
|
|
||
|
|
-- PvP Talents
|
||
|
|
spec:RegisterPvpTalents( {
|
||
|
|
alpha_tiger = 3734, -- (287503) Attacking new challengers with Tiger Palm fills you with the spirit of Xuen, granting you 20% haste for 8 sec. This effect cannot occur more than once every 30 sec per target.
|
||
|
|
disabling_reach = 3050, -- (201769) Disable now has a 10 yard range.
|
||
|
|
grapple_weapon = 3052, -- (233759) You fire off a rope spear, grappling the target's weapons and shield, returning them to you for 6 sec.
|
||
|
|
mighty_ox_kick = 5540, -- (202370) You perform a Mighty Ox Kick, hurling your enemy a distance behind you.
|
||
|
|
perpetual_paralysis = 5448, -- (357495) Paralysis range reduced by 10 yards, but spreads to 2 new enemies when removed.
|
||
|
|
pressure_points = 3744, -- (345829) Killing a player with Touch of Death reduces the remaining cooldown of Touch of Karma by 60 sec.
|
||
|
|
reverse_harm = 852 , -- (342928) Increases the healing done by Expel Harm by 60%, and your Expel Harm now generates 1 additional Chi.
|
||
|
|
ride_the_wind = 77 , -- (201372) Flying Serpent Kick clears all snares from you when used and forms a path of wind in its wake, causing all allies who stand in it to have 30% increased movement speed and to be immune to movement slowing effects.
|
||
|
|
tigereye_brew = 675 , -- (247483) Consumes up to 10 stacks of Tigereye Brew to empower your Physical abilities with wind for 2 sec per stack consumed. Damage of your strikes are reduced, but bypass armor. For each 3 Chi you consume, you gain a stack of Tigereye Brew.
|
||
|
|
turbo_fists = 3745, -- (287681) Fists of Fury now deals full damage to all targets hit, reduces all targets movement speed by 90%, and you Parry all attacks while channelling Fists of Fury.
|
||
|
|
wind_waker = 3737, -- (357633) Your movement enhancing abilities increases Windwalking on allies by 10%, stacking 2 additional times. Movement impairing effects are removed at 3 stacks.
|
||
|
|
} )
|
||
|
|
|
||
|
|
|
||
|
|
-- Auras
|
||
|
|
spec:RegisterAuras( {
|
||
|
|
bok_proc = {
|
||
|
|
id = 116768,
|
||
|
|
type = "Magic",
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
-- Talent: The Monk's abilities have a $h% chance to affect the target a second time at $s1% effectiveness as Shadow damage or healing.
|
||
|
|
-- https://wowhead.com/beta/spell=325216
|
||
|
|
bonedust_brew = {
|
||
|
|
id = 325216,
|
||
|
|
duration = 10,
|
||
|
|
max_stack = 1,
|
||
|
|
copy = 386276
|
||
|
|
},
|
||
|
|
bounce_back = {
|
||
|
|
id = 390239,
|
||
|
|
duration = 4,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- Increases the damage done by your next Chi Explosion by $s1%. Chi Explosion is triggered whenever you use Spinning Crane Kick.
|
||
|
|
-- https://wowhead.com/beta/spell=393057
|
||
|
|
chi_energy = {
|
||
|
|
id = 393057,
|
||
|
|
duration = 45,
|
||
|
|
max_stack = 30,
|
||
|
|
copy = 337571
|
||
|
|
},
|
||
|
|
-- Talent: Movement speed increased by $w1%.
|
||
|
|
-- https://wowhead.com/beta/spell=119085
|
||
|
|
chi_torpedo = {
|
||
|
|
id = 119085,
|
||
|
|
duration = 10,
|
||
|
|
max_stack = 2
|
||
|
|
},
|
||
|
|
-- TODO: This is a stub until BrM is implemented.
|
||
|
|
counterstrike = {
|
||
|
|
duration = 3600,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
-- Taking $w1 damage every $t1 sec.
|
||
|
|
-- https://wowhead.com/beta/spell=117952
|
||
|
|
crackling_jade_lightning = {
|
||
|
|
id = 117952,
|
||
|
|
duration = 4,
|
||
|
|
tick_time = 1,
|
||
|
|
type = "Magic",
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- Talent: Damage taken reduced by $m2% to $m3% for $d, with larger attacks being reduced by more.
|
||
|
|
-- https://wowhead.com/beta/spell=122278
|
||
|
|
dampen_harm = {
|
||
|
|
id = 122278,
|
||
|
|
duration = 10,
|
||
|
|
type = "Magic",
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- Talent: Your next Spinning Crane Kick is free and deals an additional $325201s1% damage.
|
||
|
|
-- https://wowhead.com/beta/spell=325202
|
||
|
|
dance_of_chiji = {
|
||
|
|
id = 325202,
|
||
|
|
duration = 15,
|
||
|
|
max_stack = 1,
|
||
|
|
copy = { 286587, "dance_of_chiji_azerite" }
|
||
|
|
},
|
||
|
|
-- Talent: Spell damage taken reduced by $m1%.
|
||
|
|
-- https://wowhead.com/beta/spell=122783
|
||
|
|
diffuse_magic = {
|
||
|
|
id = 122783,
|
||
|
|
duration = 6,
|
||
|
|
type = "Magic",
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- Talent: Movement slowed by $w1%. When struck again by Disable, you will be rooted for $116706d.
|
||
|
|
-- https://wowhead.com/beta/spell=116095
|
||
|
|
disable = {
|
||
|
|
id = 116095,
|
||
|
|
duration = 15,
|
||
|
|
mechanic = "snare",
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
disable_root = {
|
||
|
|
id = 116706,
|
||
|
|
duration = 8,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
escape_from_reality = {
|
||
|
|
id = 343249,
|
||
|
|
duration = 10,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
exit_strategy = {
|
||
|
|
id = 289324,
|
||
|
|
duration = 2,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- Talent: $?$w1>0[Healing $w1 every $t1 sec.][Suffering $w2 Nature damage every $t2 sec.]
|
||
|
|
-- https://wowhead.com/beta/spell=196608
|
||
|
|
eye_of_the_tiger = {
|
||
|
|
id = 196608,
|
||
|
|
duration = 8,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- Talent: Fighting on a faeline has a $s2% chance of resetting the cooldown of Faeline Stomp.
|
||
|
|
-- https://wowhead.com/beta/spell=388193
|
||
|
|
faeline_stomp = {
|
||
|
|
id = 388193,
|
||
|
|
duration = 30,
|
||
|
|
max_stack = 1,
|
||
|
|
copy = 327104
|
||
|
|
},
|
||
|
|
-- Damage version.
|
||
|
|
fae_exposure = {
|
||
|
|
id = 395414,
|
||
|
|
duration = 10,
|
||
|
|
max_stack = 1,
|
||
|
|
copy = { 356773, "fae_exposure_damage" }
|
||
|
|
},
|
||
|
|
fae_exposure_heal = {
|
||
|
|
id = 395413,
|
||
|
|
duration = 10,
|
||
|
|
max_stack = 1,
|
||
|
|
copy = 356774
|
||
|
|
},
|
||
|
|
-- Talent: $w3 damage every $t3 sec. $?s125671[Parrying all attacks.][]
|
||
|
|
-- https://wowhead.com/beta/spell=113656
|
||
|
|
fists_of_fury = {
|
||
|
|
id = 113656,
|
||
|
|
duration = function () return 4 * haste end,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
-- Talent: Stunned.
|
||
|
|
-- https://wowhead.com/beta/spell=120086
|
||
|
|
fists_of_fury_stun = {
|
||
|
|
id = 120086,
|
||
|
|
duration = 4,
|
||
|
|
mechanic = "stun",
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
flying_serpent_kick = {
|
||
|
|
name = "Flying Serpent Kick",
|
||
|
|
duration = 2,
|
||
|
|
generate = function ()
|
||
|
|
local cast = rawget( class.abilities.flying_serpent_kick, "lastCast" ) or 0
|
||
|
|
local expires = cast + 2
|
||
|
|
|
||
|
|
local fsk = buff.flying_serpent_kick
|
||
|
|
fsk.name = "Flying Serpent Kick"
|
||
|
|
|
||
|
|
if expires > query_time then
|
||
|
|
fsk.count = 1
|
||
|
|
fsk.expires = expires
|
||
|
|
fsk.applied = cast
|
||
|
|
fsk.caster = "player"
|
||
|
|
return
|
||
|
|
end
|
||
|
|
fsk.count = 0
|
||
|
|
fsk.expires = 0
|
||
|
|
fsk.applied = 0
|
||
|
|
fsk.caster = "nobody"
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
-- Talent: Movement speed reduced by $m2%.
|
||
|
|
-- https://wowhead.com/beta/spell=123586
|
||
|
|
flying_serpent_kick_snare = {
|
||
|
|
id = 123586,
|
||
|
|
duration = 4,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
fury_of_xuen = {
|
||
|
|
id = 396167,
|
||
|
|
duration = 20,
|
||
|
|
max_stack = 67,
|
||
|
|
copy = { 396168, 396167, 287062 }
|
||
|
|
},
|
||
|
|
fury_of_xuen_haste = {
|
||
|
|
id = 287063,
|
||
|
|
duration = 8,
|
||
|
|
max_stack = 1,
|
||
|
|
copy = 396168
|
||
|
|
},
|
||
|
|
hit_combo = {
|
||
|
|
id = 196741,
|
||
|
|
duration = 10,
|
||
|
|
max_stack = 6,
|
||
|
|
},
|
||
|
|
invoke_xuen = {
|
||
|
|
id = 123904,
|
||
|
|
duration = 20, -- 11/1 nerf from 24 to 20.
|
||
|
|
max_stack = 1,
|
||
|
|
hidden = true,
|
||
|
|
copy = "invoke_xuen_the_white_tiger"
|
||
|
|
},
|
||
|
|
-- Talent: Haste increased by $w1%.
|
||
|
|
-- https://wowhead.com/beta/spell=388663
|
||
|
|
invokers_delight = {
|
||
|
|
id = 388663,
|
||
|
|
duration = 20,
|
||
|
|
max_stack = 1,
|
||
|
|
copy = 338321
|
||
|
|
},
|
||
|
|
-- Stunned.
|
||
|
|
-- https://wowhead.com/beta/spell=119381
|
||
|
|
leg_sweep = {
|
||
|
|
id = 119381,
|
||
|
|
duration = 3,
|
||
|
|
mechanic = "stun",
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
mark_of_the_crane = {
|
||
|
|
id = 228287,
|
||
|
|
duration = 15,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
mortal_wounds = {
|
||
|
|
id = 115804,
|
||
|
|
duration = 10,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
mystic_touch = {
|
||
|
|
id = 113746,
|
||
|
|
duration = 3600,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
-- Talent: Incapacitated.
|
||
|
|
-- https://wowhead.com/beta/spell=115078
|
||
|
|
paralysis = {
|
||
|
|
id = 115078,
|
||
|
|
duration = 60,
|
||
|
|
mechanic = "incapacitate",
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
power_strikes = {
|
||
|
|
id = 129914,
|
||
|
|
duration = 1,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
pressure_point = {
|
||
|
|
id = 393053,
|
||
|
|
duration = 5,
|
||
|
|
max_stack = 1,
|
||
|
|
copy = 337482,
|
||
|
|
generate = function( t, auraType )
|
||
|
|
local lastCast, castTime = action.fists_of_fury.lastCast, action.fists_of_fury.cast
|
||
|
|
|
||
|
|
if query_time - lastCast < castTime + 5 then
|
||
|
|
t.count = 1
|
||
|
|
t.expires = lastCast + castTime + 5
|
||
|
|
t.applied = lastCast + castTime
|
||
|
|
t.caster = "player"
|
||
|
|
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
t.count = 0
|
||
|
|
t.expires = 0
|
||
|
|
t.applied = 0
|
||
|
|
t.caster = "nobody"
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
-- Taunted. Movement speed increased by $s3%.
|
||
|
|
-- https://wowhead.com/beta/spell=116189
|
||
|
|
provoke = {
|
||
|
|
id = 116189,
|
||
|
|
duration = 3,
|
||
|
|
mechanic = "taunt",
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
recently_touched = { -- Fake aura for Forbidden Technique.
|
||
|
|
duration = 5,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
-- Talent: Nearby enemies will be knocked out of the Ring of Peace.
|
||
|
|
-- https://wowhead.com/beta/spell=116844
|
||
|
|
ring_of_peace = {
|
||
|
|
id = 116844,
|
||
|
|
duration = 5,
|
||
|
|
type = "Magic",
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
rising_sun_kick = {
|
||
|
|
id = 107428,
|
||
|
|
duration = 10,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
-- Talent: Dealing physical damage to nearby enemies every $116847t1 sec.
|
||
|
|
-- https://wowhead.com/beta/spell=116847
|
||
|
|
rushing_jade_wind = {
|
||
|
|
id = 116847,
|
||
|
|
duration = function () return 6 * haste end,
|
||
|
|
tick_time = 0.75,
|
||
|
|
dot = "buff",
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
save_them_all = {
|
||
|
|
id = 390105,
|
||
|
|
duration = 4,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- Talent: Damage and healing increased by $w2%. All Chi consumers are free and cool down $w4% more quickly.
|
||
|
|
-- https://wowhead.com/beta/spell=152173
|
||
|
|
serenity = {
|
||
|
|
id = 152173,
|
||
|
|
duration = 12,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
skyreach = {
|
||
|
|
id = 393047,
|
||
|
|
duration = 6,
|
||
|
|
max_stack = 1,
|
||
|
|
copy = { 344021, "keefers_skyreach" }
|
||
|
|
},
|
||
|
|
skyreach_exhaustion = {
|
||
|
|
id = 393050,
|
||
|
|
duration = 60,
|
||
|
|
max_stack = 1,
|
||
|
|
copy = { 337341, "recently_rushing_tiger_palm" }
|
||
|
|
},
|
||
|
|
-- Talent: Healing for $w1 every $t1 sec.
|
||
|
|
-- https://wowhead.com/beta/spell=115175
|
||
|
|
soothing_mist = {
|
||
|
|
id = 115175,
|
||
|
|
duration = 8,
|
||
|
|
type = "Magic",
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- $?$w2!=0[Movement speed reduced by $w2%. ][]Drenched in brew, vulnerable to Breath of Fire.
|
||
|
|
-- https://wowhead.com/beta/spell=196733
|
||
|
|
special_delivery = {
|
||
|
|
id = 196733,
|
||
|
|
duration = 15,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- Attacking nearby enemies for Physical damage every $101546t1 sec.
|
||
|
|
-- https://wowhead.com/beta/spell=101546
|
||
|
|
spinning_crane_kick = {
|
||
|
|
id = 101546,
|
||
|
|
duration = function () return 1.5 * haste end,
|
||
|
|
tick_time = function () return 0.5 * haste end,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- Talent: Elemental spirits summoned, mirroring all of the Monk's attacks. The Monk and spirits each do ${100+$m1}% of normal damage and healing.
|
||
|
|
-- https://wowhead.com/beta/spell=137639
|
||
|
|
storm_earth_and_fire = {
|
||
|
|
id = 137639,
|
||
|
|
duration = 15,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- Talent: Movement speed reduced by $s2%.
|
||
|
|
-- https://wowhead.com/beta/spell=392983
|
||
|
|
strike_of_the_windlord = {
|
||
|
|
id = 392983,
|
||
|
|
duration = 6,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- Movement slowed by $s1%.
|
||
|
|
-- https://wowhead.com/beta/spell=280184
|
||
|
|
sweep_the_leg = {
|
||
|
|
id = 280184,
|
||
|
|
duration = 6,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
teachings_of_the_monastery = {
|
||
|
|
id = 202090,
|
||
|
|
duration = 20,
|
||
|
|
max_stack = 3,
|
||
|
|
},
|
||
|
|
-- Damage of next Crackling Jade Lightning increased by $s1%. Energy cost of next Crackling Jade Lightning reduced by $s2%.
|
||
|
|
-- https://wowhead.com/beta/spell=393039
|
||
|
|
the_emperors_capacitor = {
|
||
|
|
id = 393039,
|
||
|
|
duration = 3600,
|
||
|
|
max_stack = 20,
|
||
|
|
copy = 337291
|
||
|
|
},
|
||
|
|
thunderfist = {
|
||
|
|
id = 393565,
|
||
|
|
duration = 30,
|
||
|
|
max_stack = 30
|
||
|
|
},
|
||
|
|
-- Talent: Moving $s1% faster.
|
||
|
|
-- https://wowhead.com/beta/spell=116841
|
||
|
|
tigers_lust = {
|
||
|
|
id = 116841,
|
||
|
|
duration = 6,
|
||
|
|
type = "Magic",
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
touch_of_death = {
|
||
|
|
id = 115080,
|
||
|
|
duration = 8,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
touch_of_karma = {
|
||
|
|
id = 125174,
|
||
|
|
duration = 10,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- Talent: Damage dealt to the Monk is redirected to you as Nature damage over $124280d.
|
||
|
|
-- https://wowhead.com/beta/spell=122470
|
||
|
|
touch_of_karma_debuff = {
|
||
|
|
id = 122470,
|
||
|
|
duration = 10,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- Talent: You left your spirit behind, allowing you to use Transcendence: Transfer to swap with its location.
|
||
|
|
-- https://wowhead.com/beta/spell=101643
|
||
|
|
transcendence = {
|
||
|
|
id = 101643,
|
||
|
|
duration = 900,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
transcendence_transfer = {
|
||
|
|
id = 119996,
|
||
|
|
},
|
||
|
|
transfer_the_power = {
|
||
|
|
id = 195321,
|
||
|
|
duration = 30,
|
||
|
|
max_stack = 10
|
||
|
|
},
|
||
|
|
-- Talent: Your next Vivify is instant.
|
||
|
|
-- https://wowhead.com/beta/spell=392883
|
||
|
|
vivacious_vivification = {
|
||
|
|
id = 392883,
|
||
|
|
duration = 3600,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
-- Talent:
|
||
|
|
-- https://wowhead.com/beta/spell=196742
|
||
|
|
whirling_dragon_punch = {
|
||
|
|
id = 196742,
|
||
|
|
duration = function () return action.rising_sun_kick.cooldown end,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
windwalking = {
|
||
|
|
id = 166646,
|
||
|
|
duration = 3600,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
-- Flying.
|
||
|
|
-- https://wowhead.com/beta/spell=125883
|
||
|
|
zen_flight = {
|
||
|
|
id = 125883,
|
||
|
|
duration = 3600,
|
||
|
|
type = "Magic",
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
zen_pilgrimage = {
|
||
|
|
id = 126892,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- PvP Talents
|
||
|
|
alpha_tiger = {
|
||
|
|
id = 287504,
|
||
|
|
duration = 8,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
fortifying_brew = {
|
||
|
|
id = 201318,
|
||
|
|
duration = 15,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
grapple_weapon = {
|
||
|
|
id = 233759,
|
||
|
|
duration = 6,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
heavyhanded_strikes = {
|
||
|
|
id = 201787,
|
||
|
|
duration = 2,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
ride_the_wind = {
|
||
|
|
id = 201447,
|
||
|
|
duration = 3600,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
tigereye_brew = {
|
||
|
|
id = 247483,
|
||
|
|
duration = 20,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
tigereye_brew_stack = {
|
||
|
|
id = 248646,
|
||
|
|
duration = 120,
|
||
|
|
max_stack = 20,
|
||
|
|
},
|
||
|
|
wind_waker = {
|
||
|
|
id = 290500,
|
||
|
|
duration = 4,
|
||
|
|
max_stack = 1,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Conduit
|
||
|
|
coordinated_offensive = {
|
||
|
|
id = 336602,
|
||
|
|
duration = 15,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Azerite Powers
|
||
|
|
recently_challenged = {
|
||
|
|
id = 290512,
|
||
|
|
duration = 30,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
sunrise_technique = {
|
||
|
|
id = 273298,
|
||
|
|
duration = 15,
|
||
|
|
max_stack = 1
|
||
|
|
},
|
||
|
|
} )
|
||
|
|
|
||
|
|
|
||
|
|
spec:RegisterGear( "tier29", 200360, 200362, 200363, 200364, 200365 )
|
||
|
|
spec:RegisterAuras( {
|
||
|
|
kicks_of_flowing_momentum = {
|
||
|
|
id = 394944,
|
||
|
|
duration = 30,
|
||
|
|
max_stack = 2,
|
||
|
|
},
|
||
|
|
fists_of_flowing_momentum = {
|
||
|
|
id = 394949,
|
||
|
|
duration = 30,
|
||
|
|
max_stack = 3,
|
||
|
|
}
|
||
|
|
} )
|
||
|
|
|
||
|
|
spec:RegisterGear( "tier19", 138325, 138328, 138331, 138334, 138337, 138367 )
|
||
|
|
spec:RegisterGear( "tier20", 147154, 147156, 147152, 147151, 147153, 147155 )
|
||
|
|
spec:RegisterGear( "tier21", 152145, 152147, 152143, 152142, 152144, 152146 )
|
||
|
|
spec:RegisterGear( "class", 139731, 139732, 139733, 139734, 139735, 139736, 139737, 139738 )
|
||
|
|
|
||
|
|
spec:RegisterGear( "cenedril_reflector_of_hatred", 137019 )
|
||
|
|
spec:RegisterGear( "cinidaria_the_symbiote", 133976 )
|
||
|
|
spec:RegisterGear( "drinking_horn_cover", 137097 )
|
||
|
|
spec:RegisterGear( "firestone_walkers", 137027 )
|
||
|
|
spec:RegisterGear( "fundamental_observation", 137063 )
|
||
|
|
spec:RegisterGear( "gai_plins_soothing_sash", 137079 )
|
||
|
|
spec:RegisterGear( "hidden_masters_forbidden_touch", 137057 )
|
||
|
|
spec:RegisterGear( "jewel_of_the_lost_abbey", 137044 )
|
||
|
|
spec:RegisterGear( "katsuos_eclipse", 137029 )
|
||
|
|
spec:RegisterGear( "march_of_the_legion", 137220 )
|
||
|
|
spec:RegisterGear( "prydaz_xavarics_magnum_opus", 132444 )
|
||
|
|
spec:RegisterGear( "salsalabims_lost_tunic", 137016 )
|
||
|
|
spec:RegisterGear( "sephuzs_secret", 132452 )
|
||
|
|
spec:RegisterGear( "the_emperors_capacitor", 144239 )
|
||
|
|
|
||
|
|
spec:RegisterGear( "soul_of_the_grandmaster", 151643 )
|
||
|
|
spec:RegisterGear( "stormstouts_last_gasp", 151788 )
|
||
|
|
spec:RegisterGear( "the_wind_blows", 151811 )
|
||
|
|
|
||
|
|
|
||
|
|
spec:RegisterStateTable( "combos", {
|
||
|
|
blackout_kick = true,
|
||
|
|
bonedust_brew = true,
|
||
|
|
chi_burst = true,
|
||
|
|
chi_wave = true,
|
||
|
|
crackling_jade_lightning = true,
|
||
|
|
expel_harm = true,
|
||
|
|
faeline_stomp = true,
|
||
|
|
fists_of_fury = true,
|
||
|
|
flying_serpent_kick = true,
|
||
|
|
rising_sun_kick = true,
|
||
|
|
rushing_jade_wind = true,
|
||
|
|
spinning_crane_kick = true,
|
||
|
|
strike_of_the_windlord = true,
|
||
|
|
tiger_palm = true,
|
||
|
|
touch_of_death = true,
|
||
|
|
weapons_of_order = true,
|
||
|
|
whirling_dragon_punch = true
|
||
|
|
} )
|
||
|
|
|
||
|
|
local prev_combo, actual_combo, virtual_combo
|
||
|
|
|
||
|
|
spec:RegisterStateExpr( "last_combo", function () return virtual_combo or actual_combo end )
|
||
|
|
|
||
|
|
spec:RegisterStateExpr( "combo_break", function ()
|
||
|
|
return this_action == virtual_combo and combos[ virtual_combo ]
|
||
|
|
end )
|
||
|
|
|
||
|
|
spec:RegisterStateExpr( "combo_strike", function ()
|
||
|
|
return not combos[ this_action ] or this_action ~= virtual_combo
|
||
|
|
end )
|
||
|
|
|
||
|
|
|
||
|
|
local application_events = {
|
||
|
|
SPELL_AURA_APPLIED = true,
|
||
|
|
SPELL_AURA_APPLIED_DOSE = true,
|
||
|
|
SPELL_AURA_REFRESH = true,
|
||
|
|
}
|
||
|
|
|
||
|
|
local removal_events = {
|
||
|
|
SPELL_AURA_REMOVED = true,
|
||
|
|
SPELL_AURA_BROKEN = true,
|
||
|
|
SPELL_AURA_BROKEN_SPELL = true,
|
||
|
|
}
|
||
|
|
|
||
|
|
local death_events = {
|
||
|
|
UNIT_DIED = true,
|
||
|
|
UNIT_DESTROYED = true,
|
||
|
|
UNIT_DISSIPATES = true,
|
||
|
|
PARTY_KILL = true,
|
||
|
|
SPELL_INSTAKILL = true,
|
||
|
|
}
|
||
|
|
|
||
|
|
local bonedust_brew_applied = {}
|
||
|
|
local bonedust_brew_expires = {}
|
||
|
|
|
||
|
|
-- If a Tiger Palm missed, pretend we never cast it.
|
||
|
|
-- Use RegisterEvent since we're looking outside the state table.
|
||
|
|
spec:RegisterCombatLogEvent( function( _, subtype, _, sourceGUID, sourceName, _, _, destGUID, destName, destFlags, _, spellID, spellName )
|
||
|
|
if sourceGUID == state.GUID then
|
||
|
|
local ability = class.abilities[ spellID ] and class.abilities[ spellID ].key
|
||
|
|
if not ability then return end
|
||
|
|
|
||
|
|
if ability == "tiger_palm" and subtype == "SPELL_MISSED" and not state.talent.hit_combo.enabled then
|
||
|
|
if ns.castsAll[1] == "tiger_palm" then ns.castsAll[1] = "none" end
|
||
|
|
if ns.castsAll[2] == "tiger_palm" then ns.castsAll[2] = "none" end
|
||
|
|
if ns.castsOn[1] == "tiger_palm" then ns.castsOn[1] = "none" end
|
||
|
|
actual_combo = "none"
|
||
|
|
|
||
|
|
Hekili:ForceUpdate( "WW_MISSED" )
|
||
|
|
|
||
|
|
elseif subtype == "SPELL_CAST_SUCCESS" and state.combos[ ability ] then
|
||
|
|
prev_combo = actual_combo
|
||
|
|
actual_combo = ability
|
||
|
|
|
||
|
|
elseif subtype == "SPELL_DAMAGE" and spellID == 148187 then
|
||
|
|
-- track the last tick.
|
||
|
|
state.buff.rushing_jade_wind.last_tick = GetTime()
|
||
|
|
|
||
|
|
-- Track Bonedust Brew applications.
|
||
|
|
elseif spellID == 325216 then
|
||
|
|
if application_events[ subtype ] then
|
||
|
|
bonedust_brew_applied[ destGUID ] = GetTime()
|
||
|
|
bonedust_brew_expires[ destGUID ] = nil
|
||
|
|
elseif removal_events[ subtype ] then
|
||
|
|
bonedust_brew_expires[ destGUID ] = nil
|
||
|
|
bonedust_brew_expires[ destGUID ] = nil
|
||
|
|
end
|
||
|
|
end
|
||
|
|
elseif death_events[ subtype ] then
|
||
|
|
bonedust_brew_applied[ destGUID ] = nil
|
||
|
|
bonedust_brew_expires[ destGUID ] = nil
|
||
|
|
end
|
||
|
|
end )
|
||
|
|
|
||
|
|
|
||
|
|
local chiSpent = 0
|
||
|
|
|
||
|
|
spec:RegisterHook( "spend", function( amt, resource )
|
||
|
|
if resource == "chi" and amt > 0 then
|
||
|
|
if talent.spiritual_focus.enabled then
|
||
|
|
chiSpent = chiSpent + amt
|
||
|
|
cooldown.storm_earth_and_fire.expires = max( 0, cooldown.storm_earth_and_fire.expires - floor( chiSpent / 2 ) )
|
||
|
|
chiSpent = chiSpent % 2
|
||
|
|
end
|
||
|
|
|
||
|
|
if talent.drinking_horn_cover.enabled then
|
||
|
|
if buff.storm_earth_and_fire.up then buff.storm_earth_and_fire.expires = buff.storm_earth_and_fire.expires + 0.4
|
||
|
|
elseif buff.serenity.up then buff.serenity.expires = buff.serenity.expires + 0.3 end
|
||
|
|
end
|
||
|
|
|
||
|
|
if talent.last_emperors_capacitor.enabled or legendary.last_emperors_capacitor.enabled then
|
||
|
|
addStack( "the_emperors_capacitor" )
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end )
|
||
|
|
|
||
|
|
|
||
|
|
local noop = function () end
|
||
|
|
|
||
|
|
-- local reverse_harm_target
|
||
|
|
|
||
|
|
|
||
|
|
-- New Bonedust Brew Stuff
|
||
|
|
local checker = LRC:GetHarmMaxChecker( 8 )
|
||
|
|
|
||
|
|
local valid_brews = {}
|
||
|
|
|
||
|
|
local function ValidateBonedustBrews()
|
||
|
|
local now = state.now
|
||
|
|
checker = checker or LRC:GetHarmMaxChecker( 8 )
|
||
|
|
table.wipe( valid_brews )
|
||
|
|
|
||
|
|
for _, plate in ipairs( GetNamePlates() ) do
|
||
|
|
local unit = plate.namePlateUnitToken
|
||
|
|
|
||
|
|
if unit and UnitCanAttack( "player", unit ) and ( UnitIsPVP( "player" ) or not UnitIsPlayer( unit ) ) and checker( unit ) then
|
||
|
|
local guid = UnitGUID( unit )
|
||
|
|
|
||
|
|
valid_brews[ guid ] = 0
|
||
|
|
|
||
|
|
if bonedust_brew_applied[ guid ] then
|
||
|
|
if not bonedust_brew_expires[ guid ] then
|
||
|
|
-- We haven't scraped the aura for the duration yet.
|
||
|
|
local found, _, _, _, _, expires = AuraUtil.FindAuraByName( class.auras.bonedust_brew_debuff.name, unit, "HARMFUL|PLAYER" )
|
||
|
|
|
||
|
|
if found then
|
||
|
|
bonedust_brew_expires[ guid ] = expires
|
||
|
|
valid_brews[ guid ] = expires
|
||
|
|
end
|
||
|
|
else
|
||
|
|
if bonedust_brew_expires[ guid ] > now then
|
||
|
|
valid_brews[ guid ] = bonedust_brew_expires[ guid ]
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local GatherBonedustInfo = setfenv( function()
|
||
|
|
local targets, bonedusts, aggregate, longest = 0, 0, 0, 0
|
||
|
|
|
||
|
|
for _, expires in pairs( valid_brews ) do
|
||
|
|
targets = targets + 1
|
||
|
|
local remains = max( 0, expires - query_time )
|
||
|
|
|
||
|
|
if remains > 0 then
|
||
|
|
bonedusts = bonedusts + 1
|
||
|
|
aggregate = aggregate + remains
|
||
|
|
longest = max( longest, remains )
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
return targets, bonedusts, aggregate, longest
|
||
|
|
end, state )
|
||
|
|
|
||
|
|
local bdbActions = {}
|
||
|
|
|
||
|
|
local SetAction = setfenv( function( name, damage, execution_time, net_chi, net_energy, mastery, p, capped )
|
||
|
|
local a = bdbActions[ name ] or {}
|
||
|
|
|
||
|
|
capped = capped or false
|
||
|
|
|
||
|
|
a.damage = damage
|
||
|
|
a.execution_time = execution_time
|
||
|
|
a.net_chi = net_chi
|
||
|
|
a.net_energy = ( capped and net_energy ) or ( net_energy + energy.regen * execution_time )
|
||
|
|
a.idps = damage / execution_time
|
||
|
|
a.cps = net_chi / execution_time
|
||
|
|
a.eps = a.net_energy / execution_time
|
||
|
|
a.rdps = a.idps + 0.5 * mastery * a.cps + 0.02 * mastery * ( 1 + p ) * a.eps
|
||
|
|
|
||
|
|
bdbActions[ name ] = a
|
||
|
|
|
||
|
|
return a
|
||
|
|
end, state )
|
||
|
|
|
||
|
|
|
||
|
|
local lastBonedustZoneTime = 0
|
||
|
|
local lastBonedustZoneValue = 0
|
||
|
|
|
||
|
|
-- Returns cap_energy, tp_fill, bok, break_mastery.
|
||
|
|
-- TODO: Update for Dragonflight.
|
||
|
|
local GetBonedustZoneInfo = setfenv( function()
|
||
|
|
if query_time == lastBonedustZoneTime then
|
||
|
|
return lastBonedustZoneValue
|
||
|
|
end
|
||
|
|
|
||
|
|
local targets, bonedusts, aggregate = GatherBonedustInfo()
|
||
|
|
lastBonedustZoneTime = query_time
|
||
|
|
|
||
|
|
if targets < 2 or bonedusts < 1 then
|
||
|
|
-- Orange
|
||
|
|
lastBonedustZoneValue = 0
|
||
|
|
return 0
|
||
|
|
end
|
||
|
|
|
||
|
|
if aggregate > 0 then
|
||
|
|
local length = 60
|
||
|
|
local blp = 0.2
|
||
|
|
local bb_rate = 1.5 + blp
|
||
|
|
|
||
|
|
-- Bone Marrow Hops
|
||
|
|
if conduit.bone_marrow_hops.rank > 0 then
|
||
|
|
length = length - 2.5 - ( 2.5 * bb_rate )
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Brewmaster Keg Smash
|
||
|
|
if spec.brewmaster then
|
||
|
|
length = length - ( 60 / length * 8 ) -- 2 Keg Smashes for a hard Cast
|
||
|
|
length = length - bb_rate * 4 -- 1 Keg Smash per bountiful minimum (safe)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Math below is credit to Tostad0ra, ported to Lua/WoW by Jeremals (https://wago.io/2rN0fBudK).
|
||
|
|
-- https://colab.research.google.com/drive/1IlNnwzigBG_xa0VdXhiofvuy-mgJAhGa?usp=sharing
|
||
|
|
|
||
|
|
local mastery = 1 + stat.mastery_value
|
||
|
|
local haste = 1 + stat.haste
|
||
|
|
|
||
|
|
-- Locally defined variables that may change.
|
||
|
|
|
||
|
|
local eps = 0.2 -- Delay when chaining SCKs
|
||
|
|
local tiger_palm_AP = 0.41804714952
|
||
|
|
local sck_AP = 0.8481600000000001
|
||
|
|
|
||
|
|
local coordinated_offensive_bonus = 1
|
||
|
|
|
||
|
|
if conduit.coordinated_offensive.rank > 0 then
|
||
|
|
coordinated_offensive_bonus = 1 + 0.085 + ( 0.009 * ( conduit.coordinated_offensive.rank - 1 ) )
|
||
|
|
end
|
||
|
|
|
||
|
|
local calculated_strikes_bonus = 0.16
|
||
|
|
if conduit.calculated_strikes.rank > 0 then
|
||
|
|
calculated_strikes_bonus = 0.16 + 0.1 + ( 0.01 * ( conduit.calculated_strikes.rank - 1 ) )
|
||
|
|
end
|
||
|
|
|
||
|
|
local bone_marrow_hops_bonus = 0
|
||
|
|
if conduit.bone_marrow_hops.rank > 0 then
|
||
|
|
bone_marrow_hops_bonus = 0.4 + ( 0.04 * ( conduit.bone_marrow_hops.rank - 1 ) )
|
||
|
|
end
|
||
|
|
|
||
|
|
-- sqrt scaling
|
||
|
|
local N_effective_targets_above = 5 * pow( ( targets / 5 ), 0.5 )
|
||
|
|
local N_effective_targets_below = targets
|
||
|
|
local N_effective_targets = min( N_effective_targets_below, N_effective_targets_above )
|
||
|
|
|
||
|
|
|
||
|
|
local mark_stacks = spinning_crane_kick.count
|
||
|
|
local mark_bonus_per_target = 0.18 + calculated_strikes_bonus
|
||
|
|
local mark_bonus = mark_bonus_per_target * mark_stacks
|
||
|
|
local mark_multiplier = 1 + mark_bonus
|
||
|
|
|
||
|
|
local p = tiger_palm_AP / ( ( N_effective_targets * sck_AP * mark_multiplier ) - ( 1.1 / 1.676 * 0.81 / 2.5 * 1.5 ) )
|
||
|
|
|
||
|
|
local amp = 1 + stat.versatility_atk_mod
|
||
|
|
|
||
|
|
if buff.invoke_xuen.up then
|
||
|
|
amp = amp * 1.1
|
||
|
|
end
|
||
|
|
|
||
|
|
if buff.storm_earth_and_fire.up then
|
||
|
|
amp = amp * 1.35 * ( 2 * coordinated_offensive_bonus + 1 ) / 3
|
||
|
|
end
|
||
|
|
|
||
|
|
amp = amp * ( 1 + ( 0.5 * 0.4 * ( bonedusts / targets ) * ( 1 + bone_marrow_hops_bonus ) ) )
|
||
|
|
|
||
|
|
local TP_SCK = SetAction( "TP_SCK", amp * mastery * ( 1 + p ), 2, 1, -50, mastery, p )
|
||
|
|
local rSCK_cap = SetAction( "rSCK_cap", amp, 1.5 / haste + eps, -1, 0, mastery, p, true )
|
||
|
|
local rSCK_unc = SetAction( "rSCK_unc", amp, 1.5 / haste + eps, -1, 0, mastery, p )
|
||
|
|
|
||
|
|
if rSCK_unc.rdps > TP_SCK.rdps then
|
||
|
|
local regen = 2 * energy.regen
|
||
|
|
local N_oc_expr = ( 1 - 2 * regen ) / ( 1.5 + haste * eps ) / ( regen / haste )
|
||
|
|
local w_oc_expr = 1 / ( 1 + N_oc_expr )
|
||
|
|
local rdps_nocap = w_oc_expr * TP_SCK.rdps + ( 1 - w_oc_expr ) * rSCK_unc.rdps
|
||
|
|
|
||
|
|
-- Purple
|
||
|
|
if rSCK_cap.rdps > rdps_nocap then
|
||
|
|
lastBonedustZoneValue = 4
|
||
|
|
return 4
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Red
|
||
|
|
lastBonedustZoneValue = 3
|
||
|
|
return 3
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Blue
|
||
|
|
if rSCK_unc.idps < TP_SCK.idps then
|
||
|
|
lastBonedustZoneValue = 1
|
||
|
|
return 1
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Green
|
||
|
|
lastBonedustZoneValue = 2
|
||
|
|
return 2
|
||
|
|
end, state )
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
spec:RegisterHook( "runHandler", function( key, noStart )
|
||
|
|
if combos[ key ] then
|
||
|
|
if last_combo == key then removeBuff( "hit_combo" )
|
||
|
|
else
|
||
|
|
if talent.hit_combo.enabled then addStack( "hit_combo" ) end
|
||
|
|
if azerite.fury_of_xuen.enabled or talent.fury_of_xuen.enabled then addStack( "fury_of_xuen" ) end
|
||
|
|
if ( talent.xuens_bond.enabled or conduit.xuens_bond.enabled ) and cooldown.invoke_xuen.remains > 0 then reduceCooldown( "invoke_xuen", 0.1 ) end
|
||
|
|
if talent.meridian_strikes.enabled and cooldown.touch_of_death.remains > 0 then reduceCooldown( "touch_of_death", 0.35 ) end
|
||
|
|
end
|
||
|
|
virtual_combo = key
|
||
|
|
end
|
||
|
|
|
||
|
|
lastBonedustZoneTime = 0
|
||
|
|
end )
|
||
|
|
|
||
|
|
spec:RegisterStateExpr( "cap_energy", function()
|
||
|
|
return GetBonedustZoneInfo() == 4
|
||
|
|
end )
|
||
|
|
|
||
|
|
spec:RegisterStateExpr( "tp_fill", function()
|
||
|
|
return GetBonedustZoneInfo() < 3
|
||
|
|
end )
|
||
|
|
|
||
|
|
spec:RegisterStateExpr( "no_bok", function()
|
||
|
|
return GetBonedustZoneInfo() > 0
|
||
|
|
end )
|
||
|
|
|
||
|
|
spec:RegisterStateExpr( "break_mastery", function()
|
||
|
|
return GetBonedustZoneInfo() > 1
|
||
|
|
end )
|
||
|
|
|
||
|
|
|
||
|
|
spec:RegisterStateTable( "healing_sphere", setmetatable( {}, {
|
||
|
|
__index = function( t, k)
|
||
|
|
if k == "count" then
|
||
|
|
t[ k ] = GetSpellCount( action.expel_harm.id )
|
||
|
|
return t[ k ]
|
||
|
|
end
|
||
|
|
end
|
||
|
|
} ) )
|
||
|
|
|
||
|
|
spec:RegisterHook( "reset_precast", function ()
|
||
|
|
rawset( healing_sphere, "count", nil )
|
||
|
|
if healing_sphere.count > 0 then
|
||
|
|
applyBuff( "gift_of_the_ox", nil, healing_sphere.count )
|
||
|
|
end
|
||
|
|
|
||
|
|
chiSpent = 0
|
||
|
|
|
||
|
|
if actual_combo == "tiger_palm" and chi.current < 2 and now - action.tiger_palm.lastCast > 0.2 then
|
||
|
|
actual_combo = "none"
|
||
|
|
end
|
||
|
|
|
||
|
|
if buff.rushing_jade_wind.up then setCooldown( "rushing_jade_wind", 0 ) end
|
||
|
|
|
||
|
|
if buff.casting.up and buff.casting.v1 == action.spinning_crane_kick.id then
|
||
|
|
removeBuff( "casting" )
|
||
|
|
-- Spinning Crane Kick buff should be up.
|
||
|
|
end
|
||
|
|
|
||
|
|
spinning_crane_kick.count = nil
|
||
|
|
|
||
|
|
virtual_combo = actual_combo or "no_action"
|
||
|
|
-- reverse_harm_target = nil
|
||
|
|
|
||
|
|
if buff.weapons_of_order_ww.up then
|
||
|
|
state:QueueAuraExpiration( "weapons_of_order_ww", noop, buff.weapons_of_order_ww.expires )
|
||
|
|
end
|
||
|
|
|
||
|
|
-- BDB Logic.
|
||
|
|
if talent.bonedust_brew.enabled or state:IsKnown( "bonedust_brew" ) then
|
||
|
|
ValidateBonedustBrews()
|
||
|
|
lastBonedustZoneTime = 0
|
||
|
|
end
|
||
|
|
|
||
|
|
if talent.forbidden_technique.enabled and cooldown.touch_of_death.remains == 0 and query_time - action.touch_of_death.lastCast < 5 then
|
||
|
|
applyBuff( "recently_touched", query_time - action.touch_of_death.lastCast )
|
||
|
|
end
|
||
|
|
end )
|
||
|
|
|
||
|
|
spec:RegisterHook( "advance", function()
|
||
|
|
lastBonedustZoneTime = 0
|
||
|
|
end )
|
||
|
|
|
||
|
|
|
||
|
|
spec:RegisterHook( "IsUsable", function( spell )
|
||
|
|
if spell == "touch_of_death" then return end -- rely on priority only.
|
||
|
|
|
||
|
|
-- Allow repeats to happen if your chi has decayed to 0.
|
||
|
|
if talent.hit_combo.enabled and buff.hit_combo.up and ( spell ~= "tiger_palm" or chi.current > 0 ) and last_combo == spell then
|
||
|
|
return false, "would break hit_combo"
|
||
|
|
end
|
||
|
|
end )
|
||
|
|
|
||
|
|
|
||
|
|
spec:RegisterStateTable( "spinning_crane_kick", setmetatable( { onReset = function( self ) self.count = nil end },
|
||
|
|
{ __index = function( t, k )
|
||
|
|
if k == "count" then
|
||
|
|
return max( GetSpellCount( action.spinning_crane_kick.id ), active_dot.mark_of_the_crane )
|
||
|
|
|
||
|
|
elseif k == "modifier" then
|
||
|
|
local mod = 1
|
||
|
|
-- Windwalker:
|
||
|
|
if state.spec.windwalker then
|
||
|
|
-- Mark of the Crane (Cyclone Strikes) + Calculated Strikes (Conduit)
|
||
|
|
mod = mod * ( 1 + ( t.count * ( conduit.calculated_strikes.enabled and 0.28 or 0.18 ) ) )
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Crane Vortex (Talent)
|
||
|
|
mod = mod * ( 1 + 0.1 * talent.crane_vortex.rank )
|
||
|
|
|
||
|
|
-- Kicks of Flowing Momentum (Tier 29 Buff)
|
||
|
|
mod = mod * ( buff.kicks_of_flowing_momentum.up and 1.3 or 1 )
|
||
|
|
|
||
|
|
-- Brewmaster: Counterstrike (Buff)
|
||
|
|
mod = mod * ( buff.counterstrike.up and 2 or 1 )
|
||
|
|
|
||
|
|
-- Fast Feet (Talent)
|
||
|
|
mod = mod * ( 1 + 0.05 * talent.fast_feet.rank )
|
||
|
|
return mod
|
||
|
|
|
||
|
|
elseif k == "max" then
|
||
|
|
return spinning_crane_kick.count >= min( active_enemies, 5 )
|
||
|
|
|
||
|
|
end
|
||
|
|
end } ) )
|
||
|
|
|
||
|
|
spec:RegisterStateExpr( "alpha_tiger_ready", function ()
|
||
|
|
if not pvptalent.alpha_tiger.enabled then
|
||
|
|
return false
|
||
|
|
elseif debuff.recently_challenged.down then
|
||
|
|
return true
|
||
|
|
elseif cycle then return
|
||
|
|
active_dot.recently_challenged < active_enemies
|
||
|
|
end
|
||
|
|
return false
|
||
|
|
end )
|
||
|
|
|
||
|
|
spec:RegisterStateExpr( "alpha_tiger_ready_in", function ()
|
||
|
|
if not pvptalent.alpha_tiger.enabled then return 3600 end
|
||
|
|
if active_dot.recently_challenged < active_enemies then return 0 end
|
||
|
|
return debuff.recently_challenged.remains
|
||
|
|
end )
|
||
|
|
|
||
|
|
spec:RegisterStateFunction( "weapons_of_order", function( c )
|
||
|
|
if c and c > 0 then
|
||
|
|
return buff.weapons_of_order_ww.up and ( c - 1 ) or c
|
||
|
|
end
|
||
|
|
return c
|
||
|
|
end )
|
||
|
|
|
||
|
|
|
||
|
|
spec:RegisterPet( "xuen_the_white_tiger", 63508, "invoke_xuen", 24, "xuen" )
|
||
|
|
|
||
|
|
spec:RegisterTotem( "jade_serpent_statue", 620831 )
|
||
|
|
spec:RegisterTotem( "white_tiger_statue", 125826 )
|
||
|
|
spec:RegisterTotem( "black_ox_statue", 627607 )
|
||
|
|
|
||
|
|
|
||
|
|
-- Abilities
|
||
|
|
spec:RegisterAbilities( {
|
||
|
|
-- Kick with a blast of Chi energy, dealing $?s137025[${$s1*$<CAP>/$AP}][$s1] Physical damage.$?s261917[ Reduces the cooldown of Rising Sun Kick and Fists of Fury by ${$m3/1000}.1 sec when used.][]$?s387638[ Strikes up to $387638s1 additional$ltarget;targets.][]$?s387625[ $@spelldesc387624][]$?s387046[ Critical hits grant an additional $387046m2 $Lstack:stacks; of Elusive Brawler.][]
|
||
|
|
blackout_kick = {
|
||
|
|
id = 100784,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 3,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
spend = function ()
|
||
|
|
if buff.serenity.up or buff.bok_proc.up then return 0 end
|
||
|
|
return weapons_of_order( 1 )
|
||
|
|
end,
|
||
|
|
spendType = "chi",
|
||
|
|
|
||
|
|
startsCombat = true,
|
||
|
|
texture = 574575,
|
||
|
|
|
||
|
|
cycle = "mark_of_the_crane",
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
if buff.bok_proc.up and buff.serenity.down then
|
||
|
|
removeBuff( "bok_proc" )
|
||
|
|
if set_bonus.tier21_4pc > 0 then gain( 1, "chi" ) end
|
||
|
|
end
|
||
|
|
|
||
|
|
reduceCooldown( "rising_sun_kick", buff.weapons_of_order.up and 2 or 1 )
|
||
|
|
reduceCooldown( "fists_of_fury", buff.weapons_of_order.up and 2 or 1 )
|
||
|
|
removeBuff( "teachings_of_the_monastery" )
|
||
|
|
|
||
|
|
if talent.eye_of_the_tiger.enabled then applyDebuff( "target", "eye_of_the_tiger" ) end
|
||
|
|
if talent.mark_of_the_crane.enabled then
|
||
|
|
applyDebuff( "target", "mark_of_the_crane" )
|
||
|
|
if talent.shadowboxing_treads.enabled then active_dot.mark_of_the_crane = min( active_dot.mark_of_the_crane + 2, active_enemies ) end
|
||
|
|
end
|
||
|
|
if talent.transfer_the_power.enabled then addStack( "transfer_the_power" ) end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent / Covenant (Necrolord): Hurl a brew created from the bones of your enemies at the ground, coating all targets struck for $d. Your abilities have a $h% chance to affect the target a second time at $s1% effectiveness as Shadow damage or healing. $?s137024[Gust of Mists heals targets with your Bonedust Brew active for an additional $328748s1.]?s137023[Tiger Palm and Keg Smash reduces the cooldown of your brews by an additional $s3 sec when striking enemies with your Bonedust Brew active.]?s137025[Spinning Crane Kick refunds 1 Chi when striking enemies with your Bonedust Brew active.][]
|
||
|
|
bonedust_brew = {
|
||
|
|
id = function() return talent.bonedust_brew.enabled and 386276 or 325216 end,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 60,
|
||
|
|
gcd = "totem",
|
||
|
|
school = "shadow",
|
||
|
|
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyDebuff( "target", "bonedust_brew" )
|
||
|
|
if soulbind.kevins_oozeling.enabled then applyBuff( "kevins_oozeling" ) end
|
||
|
|
end,
|
||
|
|
|
||
|
|
copy = { 386276, 352216 }
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Hurls a torrent of Chi energy up to 40 yds forward, dealing $148135s1 Nature damage to all enemies, and $130654s1 healing to the Monk and all allies in its path. Healing reduced beyond $s1 targets. $?c1[ Casting Chi Burst does not prevent avoiding attacks.][]$?c3[ Chi Burst generates 1 Chi per enemy target damaged, up to a maximum of $s3.][]
|
||
|
|
chi_burst = {
|
||
|
|
id = 123986,
|
||
|
|
cast = function () return 1 * haste end,
|
||
|
|
cooldown = 30,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
spend = function() return max( -2, true_active_enemies ) end,
|
||
|
|
spendType = "chi",
|
||
|
|
|
||
|
|
talent = "chi_burst",
|
||
|
|
startsCombat = false,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Torpedoes you forward a long distance and increases your movement speed by $119085m1% for $119085d, stacking up to 2 times.
|
||
|
|
chi_torpedo = {
|
||
|
|
id = 115008,
|
||
|
|
cast = 0,
|
||
|
|
charges = function () return legendary.roll_out.enabled and 3 or 2 end,
|
||
|
|
cooldown = 20,
|
||
|
|
recharge = 20,
|
||
|
|
gcd = "off",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
talent = "chi_torpedo",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
-- trigger chi_torpedo [119085]
|
||
|
|
applyBuff( "chi_torpedo" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: A wave of Chi energy flows through friends and foes, dealing $132467s1 Nature damage or $132463s1 healing. Bounces up to $s1 times to targets within $132466a2 yards.
|
||
|
|
chi_wave = {
|
||
|
|
id = 115098,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 15,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
talent = "chi_wave",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Channel Jade lightning, causing $o1 Nature damage over $117952d to the target$?a154436[, generating 1 Chi each time it deals damage,][] and sometimes knocking back melee attackers.
|
||
|
|
crackling_jade_lightning = {
|
||
|
|
id = 117952,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 0,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
spend = function () return 20 * ( 1 - ( buff.the_emperors_capacitor.stack * 0.05 ) ) end,
|
||
|
|
spendPerSec = function () return 20 * ( 1 - ( buff.the_emperors_capacitor.stack * 0.05 ) ) end,
|
||
|
|
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyBuff( "crackling_jade_lightning" )
|
||
|
|
removeBuff( "the_emperors_capacitor" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Reduces all damage you take by $m2% to $m3% for $d, with larger attacks being reduced by more.
|
||
|
|
dampen_harm = {
|
||
|
|
id = 122278,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 120,
|
||
|
|
gcd = "off",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
talent = "dampen_harm",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
toggle = "defensives",
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyBuff( "dampen_harm" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Removes all Poison and Disease effects from the target.
|
||
|
|
detox = {
|
||
|
|
id = 218164,
|
||
|
|
cast = 0,
|
||
|
|
charges = 1,
|
||
|
|
cooldown = 8,
|
||
|
|
recharge = 8,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
spend = 20,
|
||
|
|
spendType = "energy",
|
||
|
|
|
||
|
|
talent = "detox",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
toggle = "interrupts",
|
||
|
|
usable = function () return debuff.dispellable_poison.up or debuff.dispellable_disease.up, "requires dispellable_poison/disease" end,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
removeDebuff( "player", "dispellable_poison" )
|
||
|
|
removeDebuff( "player", "dispellable_disease" )
|
||
|
|
end,nm
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Reduces magic damage you take by $m1% for $d, and transfers all currently active harmful magical effects on you back to their original caster if possible.
|
||
|
|
diffuse_magic = {
|
||
|
|
id = 122783,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 90,
|
||
|
|
gcd = "off",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
talent = "diffuse_magic",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
toggle = "interrupts",
|
||
|
|
buff = "dispellable_magic",
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
removeBuff( "dispellable_magic" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Reduces the target's movement speed by $s1% for $d, duration refreshed by your melee attacks.$?s343731[ Targets already snared will be rooted for $116706d instead.][]
|
||
|
|
disable = {
|
||
|
|
id = 116095,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 0,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
spend = 15,
|
||
|
|
spendType = "energy",
|
||
|
|
|
||
|
|
talent = "disable",
|
||
|
|
startsCombat = true,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
if not debuff.disable.up then applyDebuff( "target", "disable" )
|
||
|
|
else applyDebuff( "target", "disable_root" ) end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Expel negative chi from your body, healing for $s1 and dealing $s2% of the amount healed as Nature damage to an enemy within $115129A1 yards.$?s322102[ Draws in the positive chi of all your Healing Spheres to increase the healing of Expel Harm.][]$?s325214[ May be cast during Soothing Mist, and will additionally heal the Soothing Mist target.][]$?s322106[ |cFFFFFFFFGenerates $s3 Chi.]?s342928[ |cFFFFFFFFGenerates ${$s3+$342928s2} Chi.][]
|
||
|
|
expel_harm = {
|
||
|
|
id = 322101,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 15,
|
||
|
|
gcd = "totem",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
spend = 15,
|
||
|
|
spendType = "energy",
|
||
|
|
|
||
|
|
startsCombat = true,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
gain( ( healing_sphere.count * stat.attack_power ) + stat.spell_power * ( 1 + stat.versatility_atk_mod ), "health" )
|
||
|
|
removeBuff( "gift_of_the_ox" )
|
||
|
|
healing_sphere.count = 0
|
||
|
|
|
||
|
|
gain( pvptalent.reverse_harm.enabled and 2 or 1, "chi" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Strike the ground fiercely to expose a faeline for $d, dealing $388207s1 Nature damage to up to 5 enemies, and restores $388207s2 health to up to 5 allies within $388207a1 yds caught in the faeline. $?a137024[Up to 5 allies]?a137025[Up to 5 enemies][Stagger is $s3% more effective for $347480d against enemies] caught in the faeline$?a137023[]?a137024[ are healed with an Essence Font bolt][ suffer an additional $388201s1 damage]. Your abilities have a $s2% chance of resetting the cooldown of Faeline Stomp while fighting on a faeline.
|
||
|
|
faeline_stomp = {
|
||
|
|
id = function() return talent.faeline_stomp.enabled and 388193 or 327104 end,
|
||
|
|
cast = 0,
|
||
|
|
-- charges = 1,
|
||
|
|
cooldown = 30,
|
||
|
|
-- recharge = 30,
|
||
|
|
gcd = "totem",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
spend = 0.04,
|
||
|
|
spendType = "mana",
|
||
|
|
|
||
|
|
startsCombat = true,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyBuff( "faeline_stomp" )
|
||
|
|
|
||
|
|
if spec.brewmaster then
|
||
|
|
applyDebuff( "target", "breath_of_fire" )
|
||
|
|
active_dot.breath_of_fire = active_enemies
|
||
|
|
end
|
||
|
|
|
||
|
|
if spec.mistweaver then
|
||
|
|
if talent.ancient_concordance.enabled then applyBuff( "ancient_concordance" ) end
|
||
|
|
if talent.ancient_teachings.enabled then applyBuff( "ancient_teachings" ) end
|
||
|
|
if talent.awakened_faeline.enabled then applyBuff( "awakened_faeline" ) end
|
||
|
|
end
|
||
|
|
|
||
|
|
if talent.faeline_harmony.enabled or legendary.fae_exposure.enabled then applyDebuff( "target", "fae_exposure" ) end
|
||
|
|
end,
|
||
|
|
|
||
|
|
copy = { 388193, 327104 }
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Pummels all targets in front of you, dealing ${5*$s5} Physical damage over $113656d to your primary target and ${5*$s5*$s6/100} damage over $113656d to all other enemies. Deals reduced damage beyond $s1 targets. Can be channeled while moving.
|
||
|
|
fists_of_fury = {
|
||
|
|
id = 113656,
|
||
|
|
cast = 4,
|
||
|
|
channeled = true,
|
||
|
|
cooldown = function ()
|
||
|
|
local x = 24 * haste
|
||
|
|
if buff.serenity.up then x = max( 0, x - ( buff.serenity.remains / 2 ) ) end
|
||
|
|
return x
|
||
|
|
end,
|
||
|
|
gcd = "totem",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
spend = function ()
|
||
|
|
if buff.serenity.up then return 0 end
|
||
|
|
return weapons_of_order( 3 )
|
||
|
|
end,
|
||
|
|
spendType = "chi",
|
||
|
|
|
||
|
|
cycle = "mark_of_the_crane",
|
||
|
|
aura = "mark_of_the_crane",
|
||
|
|
|
||
|
|
tick_time = function () return haste end,
|
||
|
|
|
||
|
|
start = function ()
|
||
|
|
removeBuff( "fists_of_flowing_momentum" )
|
||
|
|
removeBuff( "transfer_the_power" )
|
||
|
|
|
||
|
|
if buff.fury_of_xuen.stack >= 50 then
|
||
|
|
applyBuff( "fury_of_xuen_haste" )
|
||
|
|
summonPet( "xuen", 8 )
|
||
|
|
removeBuff( "fury_of_xuen" )
|
||
|
|
end
|
||
|
|
|
||
|
|
if talent.whirling_dragon_punch.enabled and cooldown.rising_sun_kick.remains > 0 then
|
||
|
|
applyBuff( "whirling_dragon_punch", min( cooldown.fists_of_fury.remains, cooldown.rising_sun_kick.remains ) )
|
||
|
|
end
|
||
|
|
|
||
|
|
if pvptalent.turbo_fists.enabled then
|
||
|
|
applyDebuff( "target", "heavyhanded_strikes", action.fists_of_fury.cast_time + 2 )
|
||
|
|
end
|
||
|
|
|
||
|
|
if legendary.pressure_release.enabled then
|
||
|
|
-- TODO: How much to generate? Do we need to queue it? Special buff generator?
|
||
|
|
end
|
||
|
|
|
||
|
|
if set_bonus.tier29_2pc > 0 then applyBuff( "kicks_of_flowing_momentum", nil, set_bonus.tier29_4pc > 0 and 3 or 2 ) end
|
||
|
|
end,
|
||
|
|
|
||
|
|
tick = function ()
|
||
|
|
if legendary.jade_ignition.enabled then
|
||
|
|
addStack( "chi_energy", nil, active_enemies )
|
||
|
|
end
|
||
|
|
end,
|
||
|
|
|
||
|
|
finish = function ()
|
||
|
|
if talent.xuens_battlegear.enabled or legendary.xuens_battlegear.enabled then applyBuff( "pressure_point" ) end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Soar forward through the air at high speed for $d. If used again while active, you will land, dealing $123586s1 damage to all enemies within $123586A1 yards and reducing movement speed by $123586s2% for $123586d.
|
||
|
|
flying_serpent_kick = {
|
||
|
|
id = 101545,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 25,
|
||
|
|
gcd = "totem",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
talent = "flying_serpent_kick",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
-- Sync to the GCD even though it's not really on it.
|
||
|
|
readyTime = function()
|
||
|
|
return gcd.remains
|
||
|
|
end,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
if buff.flying_serpent_kick.up then
|
||
|
|
removeBuff( "flying_serpent_kick" )
|
||
|
|
else
|
||
|
|
applyBuff( "flying_serpent_kick" )
|
||
|
|
setCooldown( "global_cooldown", 2 )
|
||
|
|
end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Turns your skin to stone for $120954d$?a388917[, increasing your current and maximum health by $<health>%][]$?s322960[, increasing the effectiveness of Stagger by $322960s1%][]$?a388917[, reducing all damage you take by $<damage>%][]$?a388814[, increasing your armor by $388814s2% and dodge chance by $388814s1%][].
|
||
|
|
fortifying_brew = {
|
||
|
|
id = 115203,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = function() return talent.expeditious_fortification.enabled and 240 or 360 end,
|
||
|
|
gcd = "off",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
talent = "fortifying_brew",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
toggle = "defensives",
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyBuff( "fortifying_brew" )
|
||
|
|
if conduit.fortifying_ingredients.enabled then applyBuff( "fortifying_ingredients" ) end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
|
||
|
|
grapple_weapon = {
|
||
|
|
id = 233759,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 45,
|
||
|
|
gcd = "spell",
|
||
|
|
|
||
|
|
pvptalent = "grapple_weapon",
|
||
|
|
|
||
|
|
startsCombat = true,
|
||
|
|
texture = 132343,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyDebuff( "target", "grapple_weapon" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Summons an effigy of Xuen, the White Tiger for $d. Xuen attacks your primary target, and strikes 3 enemies within $123996A1 yards every $123999t1 sec with Tiger Lightning for $123996s1 Nature damage.$?s323999[ Every $323999s1 sec, Xuen strikes your enemies with Empowered Tiger Lightning dealing $323999s2% of the damage you have dealt to those targets in the last $323999s1 sec.][]
|
||
|
|
invoke_xuen = {
|
||
|
|
id = 123904,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 120,
|
||
|
|
gcd = "totem",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
talent = "invoke_xuen",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
toggle = "cooldowns",
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
summonPet( "xuen_the_white_tiger", 24 )
|
||
|
|
applyBuff( "invoke_xuen" )
|
||
|
|
|
||
|
|
if talent.invokers_delight.enabled or legendary.invokers_delight.enabled then
|
||
|
|
if buff.invokers_delight.down then stat.haste = stat.haste + 0.33 end
|
||
|
|
applyBuff( "invokers_delight" )
|
||
|
|
end
|
||
|
|
end,
|
||
|
|
|
||
|
|
copy = "invoke_xuen_the_white_tiger"
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Knocks down all enemies within $A1 yards, stunning them for $d.
|
||
|
|
leg_sweep = {
|
||
|
|
id = 119381,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = function() return 60 - 10 * talent.tiger_tail_sweep.rank end,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
startsCombat = true,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyDebuff( "target", "leg_sweep" )
|
||
|
|
active_dot.leg_sweep = active_enemies
|
||
|
|
if conduit.dizzying_tumble.enabled then applyDebuff( "target", "dizzying_tumble" ) end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Incapacitates the target for $d. Limit 1. Damage will cancel the effect.
|
||
|
|
paralysis = {
|
||
|
|
id = 115078,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = function() return talent.improved_paralysis.enabled and 30 or 45 end,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
spend = 20,
|
||
|
|
spendType = "energy",
|
||
|
|
|
||
|
|
talent = "paralysis",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyDebuff( "target", "paralysis" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Taunts the target to attack you$?s328670[ and causes them to move toward you at $116189m3% increased speed.][.]$?s115315[ This ability can be targeted on your Statue of the Black Ox, causing the same effect on all enemies within $118635A1 yards of the statue.][]
|
||
|
|
provoke = {
|
||
|
|
id = 115546,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 8,
|
||
|
|
gcd = "off",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyDebuff( "target", "provoke" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Form a Ring of Peace at the target location for $d. Enemies that enter will be ejected from the Ring.
|
||
|
|
ring_of_peace = {
|
||
|
|
id = 116844,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 45,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
talent = "ring_of_peace",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Kick upwards, dealing $?s137025[${$185099s1*$<CAP>/$AP}][$185099s1] Physical damage$?s128595[, and reducing the effectiveness of healing on the target for $115804d][].$?a388847[ Applies Renewing Mist for $388847s1 seconds to an ally within $388847r yds][]
|
||
|
|
rising_sun_kick = {
|
||
|
|
id = 107428,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = function ()
|
||
|
|
local x = 10 * haste
|
||
|
|
if buff.serenity.up then x = max( 0, x - ( buff.serenity.remains / 2 ) ) end
|
||
|
|
return x
|
||
|
|
end,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
spend = function ()
|
||
|
|
if buff.serenity.up then return 0 end
|
||
|
|
return weapons_of_order( 2 )
|
||
|
|
end,
|
||
|
|
spendType = "chi",
|
||
|
|
|
||
|
|
talent = "rising_sun_kick",
|
||
|
|
startsCombat = true,
|
||
|
|
cycle = "mark_of_the_crane",
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyDebuff( "target", "mark_of_the_crane" )
|
||
|
|
applyDebuff( "target", "rising_sun_kick" )
|
||
|
|
|
||
|
|
if buff.kicks_of_flowing_momentum.up then
|
||
|
|
removeStack( "kicks_of_flowing_momentum" )
|
||
|
|
if set_bonus.tier29_4pc > 0 then addStack( "fists_of_flowing_momentum" ) end
|
||
|
|
end
|
||
|
|
|
||
|
|
if talent.transfer_the_power.enabled then addStack( "transfer_the_power" ) end
|
||
|
|
|
||
|
|
if talent.whirling_dragon_punch.enabled and cooldown.fists_of_fury.remains > 0 then
|
||
|
|
applyBuff( "whirling_dragon_punch", min( cooldown.fists_of_fury.remains, cooldown.rising_sun_kick.remains ) )
|
||
|
|
end
|
||
|
|
|
||
|
|
if azerite.sunrise_technique.enabled then applyDebuff( "target", "sunrise_technique" ) end
|
||
|
|
|
||
|
|
if buff.weapons_of_order.up then
|
||
|
|
applyBuff( "weapons_of_order_ww" )
|
||
|
|
state:QueueAuraExpiration( "weapons_of_order_ww", noop, buff.weapons_of_order_ww.expires )
|
||
|
|
end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Roll a short distance.
|
||
|
|
roll = {
|
||
|
|
id = 109132,
|
||
|
|
cast = 0,
|
||
|
|
charges = function ()
|
||
|
|
local n = 1 + ( talent.celerity.enabled and 1 or 0 ) + ( legendary.roll_out.enabled and 1 or 0 )
|
||
|
|
if n > 1 then return n end
|
||
|
|
return nil
|
||
|
|
end,
|
||
|
|
cooldown = function () return talent.celerity.enabled and 15 or 20 end,
|
||
|
|
recharge = function () return talent.celerity.enabled and 15 or 20 end,
|
||
|
|
gcd = "off",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
startsCombat = false,
|
||
|
|
notalent = "chi_torpedo",
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
if azerite.exit_strategy.enabled then applyBuff( "exit_strategy" ) end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Summons a whirling tornado around you, causing ${(1+$d/$t1)*$148187s1} Physical damage over $d to all enemies within $107270A1 yards. Deals reduced damage beyond $s1 targets.
|
||
|
|
rushing_jade_wind = {
|
||
|
|
id = 116847,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = function ()
|
||
|
|
local x = 6 * haste
|
||
|
|
if buff.serenity.up then x = max( 0, x - ( buff.serenity.remains / 2 ) ) end
|
||
|
|
return x
|
||
|
|
end,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
spend = function() return weapons_of_order( 1 ) end,
|
||
|
|
spendType = "chi",
|
||
|
|
|
||
|
|
talent = "rushing_jade_wind",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyBuff( "rushing_jade_wind" )
|
||
|
|
if talent.transfer_the_power.enabled then addStack( "transfer_the_power" ) end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Enter an elevated state of mental and physical serenity for $?s115069[$s1 sec][$d]. While in this state, you deal $s2% increased damage and healing, and all Chi consumers are free and cool down $s4% more quickly.
|
||
|
|
serenity = {
|
||
|
|
id = 152173,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = function () return ( essence.vision_of_perfection.enabled and 0.87 or 1 ) * 90 end,
|
||
|
|
gcd = "off",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
talent = "serenity",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
toggle = "cooldowns",
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyBuff( "serenity" )
|
||
|
|
setCooldown( "fists_of_fury", cooldown.fists_of_fury.remains - ( cooldown.fists_of_fury.remains / 2 ) )
|
||
|
|
setCooldown( "rising_sun_kick", cooldown.rising_sun_kick.remains - ( cooldown.rising_sun_kick.remains / 2 ) )
|
||
|
|
setCooldown( "rushing_jade_wind", cooldown.rushing_jade_wind.remains - ( cooldown.rushing_jade_wind.remains / 2 ) )
|
||
|
|
if conduit.coordinated_offensive.enabled then applyBuff( "coordinated_offensive" ) end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Heals the target for $o1 over $d. While channeling, Enveloping Mist$?s227344[, Surging Mist,][]$?s124081[, Zen Pulse,][] and Vivify may be cast instantly on the target.$?s117907[ Each heal has a chance to cause a Gust of Mists on the target.][]$?s388477[ Soothing Mist heals a second injured ally within $388478A2 yds for $388477s1% of the amount healed.][]
|
||
|
|
soothing_mist = {
|
||
|
|
id = 115175,
|
||
|
|
cast = 8,
|
||
|
|
channeled = true,
|
||
|
|
hasteCD = true,
|
||
|
|
cooldown = 0,
|
||
|
|
gcd = "totem",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
talent = "soothing_mist",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyBuff( "soothing_mist" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Jabs the target in the throat, interrupting spellcasting and preventing any spell from that school of magic from being cast for $d.
|
||
|
|
spear_hand_strike = {
|
||
|
|
id = 116705,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 15,
|
||
|
|
gcd = "off",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
talent = "spear_hand_strike",
|
||
|
|
startsCombat = true,
|
||
|
|
|
||
|
|
toggle = "interrupts",
|
||
|
|
|
||
|
|
debuff = "casting",
|
||
|
|
readyTime = state.timeToInterrupt,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
interrupt()
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Spin while kicking in the air, dealing $?s137025[${4*$107270s1*$<CAP>/$AP}][${4*$107270s1}] Physical damage over $d to all enemies within $107270A1 yds. Deals reduced damage beyond $s1 targets.$?a220357[ Spinning Crane Kick's damage is increased by $220358s1% for each unique target you've struck in the last $220358d with Tiger Palm, Blackout Kick, or Rising Sun Kick. Stacks up to $228287i times.][]
|
||
|
|
spinning_crane_kick = {
|
||
|
|
id = 101546,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 0,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
spend = function () return buff.dance_of_chiji.up and 0 or weapons_of_order( 2 ) end,
|
||
|
|
spendType = "chi",
|
||
|
|
|
||
|
|
startsCombat = true,
|
||
|
|
|
||
|
|
usable = function ()
|
||
|
|
if settings.check_sck_range and target.outside8 then return false, "target is outside of melee range" end
|
||
|
|
return true
|
||
|
|
end,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
removeBuff( "chi_energy" )
|
||
|
|
removeBuff( "dance_of_chiji" )
|
||
|
|
|
||
|
|
if buff.kicks_of_flowing_momentum.up then
|
||
|
|
removeStack( "kicks_of_flowing_momentum" )
|
||
|
|
if set_bonus.tier29_4pc > 0 then addStack( "fists_of_flowing_momentum" ) end
|
||
|
|
end
|
||
|
|
|
||
|
|
applyBuff( "spinning_crane_kick" )
|
||
|
|
|
||
|
|
if debuff.bonedust_brew.up or active_dot.bonedust_brew > 0 and active_enemies > 1 then
|
||
|
|
gain( 1, "chi" )
|
||
|
|
end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Split into 3 elemental spirits for $d, each spirit dealing ${100+$m1}% of normal damage and healing. You directly control the Storm spirit, while Earth and Fire spirits mimic your attacks on nearby enemies. While active, casting Storm, Earth, and Fire again will cause the spirits to fixate on your target.
|
||
|
|
storm_earth_and_fire = {
|
||
|
|
id = 137639,
|
||
|
|
cast = 0,
|
||
|
|
charges = 2,
|
||
|
|
cooldown = function () return ( essence.vision_of_perfection.enabled and 0.85 or 1 ) * 90 end,
|
||
|
|
recharge = function () return ( essence.vision_of_perfection.enabled and 0.85 or 1 ) * 90 end,
|
||
|
|
icd = 1,
|
||
|
|
gcd = "off",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
talent = "storm_earth_and_fire",
|
||
|
|
notalent = "serenity",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
toggle = function ()
|
||
|
|
if settings.sef_one_charge then
|
||
|
|
if cooldown.storm_earth_and_fire.true_time_to_max_charges > gcd.max then return "cooldowns" end
|
||
|
|
return
|
||
|
|
end
|
||
|
|
return "cooldowns"
|
||
|
|
end,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
-- trigger storm_earth_and_fire_fixate [221771]
|
||
|
|
applyBuff( "storm_earth_and_fire" )
|
||
|
|
end,
|
||
|
|
|
||
|
|
bind = "storm_earth_and_fire_fixate"
|
||
|
|
},
|
||
|
|
|
||
|
|
|
||
|
|
storm_earth_and_fire_fixate = {
|
||
|
|
id = 221771,
|
||
|
|
known = 137639,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 0,
|
||
|
|
icd = 1,
|
||
|
|
gcd = "spell",
|
||
|
|
|
||
|
|
startsCombat = true,
|
||
|
|
texture = 236188,
|
||
|
|
|
||
|
|
notalent = "serenity",
|
||
|
|
buff = "storm_earth_and_fire",
|
||
|
|
|
||
|
|
usable = function ()
|
||
|
|
if buff.storm_earth_and_fire.down then return false, "spirits are not active" end
|
||
|
|
return action.storm_earth_and_fire_fixate.lastCast < action.storm_earth_and_fire.lastCast, "spirits are already fixated"
|
||
|
|
end,
|
||
|
|
|
||
|
|
bind = "storm_earth_and_fire",
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Strike with both fists at all enemies in front of you, dealing ${$395519s1+$395521s1} damage and reducing movement speed by $s2% for $d.
|
||
|
|
strike_of_the_windlord = {
|
||
|
|
id = 392983,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 40,
|
||
|
|
gcd = "totem",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
spend = 2,
|
||
|
|
spendType = "chi",
|
||
|
|
|
||
|
|
talent = "strike_of_the_windlord",
|
||
|
|
startsCombat = true,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyDebuff( "target", "strike_of_the_windlord" )
|
||
|
|
if talent.thunderfist.enabled then addStack( "thunderfist", nil, true_active_enemies ) end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Summons a Black Ox Statue at the target location for $d, pulsing threat to all enemies within $163178A1 yards. You may cast Provoke on the statue to taunt all enemies near the statue.
|
||
|
|
summon_black_ox_statue = {
|
||
|
|
id = 115315,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 10,
|
||
|
|
gcd = "totem",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
talent = "summon_black_ox_statue",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
summonTotem( "black_ox_statue" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Summons a Jade Serpent Statue at the target location. When you channel Soothing Mist, the statue will also begin to channel Soothing Mist on your target, healing for $198533o1 over $198533d.
|
||
|
|
summon_jade_serpent_statue = {
|
||
|
|
id = 115313,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 10,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
talent = "summon_jade_serpent_statue",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
summonTotem( "jade_serpent_statue" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Summons a White Tiger Statue at the target location for $d, pulsing $389541s1 damage to all enemies every 2 sec for $d.
|
||
|
|
summon_white_tiger_statue = {
|
||
|
|
id = 388686,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 120,
|
||
|
|
gcd = "totem",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
talent = "summon_white_tiger_statue",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
toggle = "cooldowns",
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
summonTotem( "white_tiger_statue" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Strike with the palm of your hand, dealing $s1 Physical damage.$?a137384[ Tiger Palm has an $137384m1% chance to make your next Blackout Kick cost no Chi.][]$?a137023[ Reduces the remaining cooldown on your Brews by $s3 sec.][]$?a129914[ |cFFFFFFFFGenerates 3 Chi.]?a137025[ |cFFFFFFFFGenerates $s2 Chi.][]
|
||
|
|
tiger_palm = {
|
||
|
|
id = 100780,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 0,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
spend = 50,
|
||
|
|
spendType = "energy",
|
||
|
|
|
||
|
|
startsCombat = true,
|
||
|
|
cycle = function ()
|
||
|
|
if legendary.keefers_skyreach.enabled and debuff.skyreach_exhaustion.up and active_dot.skyreach_exhaustion < cycle_enemies then return "skyreach_exhaustion" end
|
||
|
|
return "mark_of_the_crane"
|
||
|
|
end,
|
||
|
|
|
||
|
|
buff = function () return prev_gcd[1].tiger_palm and buff.hit_combo.up and "hit_combo" or nil end,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
gain( 2, "chi" )
|
||
|
|
applyDebuff( "target", "mark_of_the_crane" )
|
||
|
|
|
||
|
|
if talent.eye_of_the_tiger.enabled then
|
||
|
|
applyDebuff( "target", "eye_of_the_tiger" )
|
||
|
|
applyBuff( "eye_of_the_tiger" )
|
||
|
|
end
|
||
|
|
if ( legendary.keefers_skyreach.enabled or talent.skyreach.enabled or talent.skytouch.enabled ) and debuff.skyreach_exhaustion.down then
|
||
|
|
if talent.skytouch.enabled and target.distance > 10 then setDistance( 5 ) end
|
||
|
|
applyDebuff( "target", "skyreach" )
|
||
|
|
applyDebuff( "target", "skyreach_exhaustion" )
|
||
|
|
end
|
||
|
|
if talent.teachings_of_the_monastery.enabled then addStack( "teachings_of_the_monastery" ) end
|
||
|
|
|
||
|
|
if pvptalent.alpha_tiger.enabled and debuff.recently_challenged.down then
|
||
|
|
if buff.alpha_tiger.down then
|
||
|
|
stat.haste = stat.haste + 0.10
|
||
|
|
applyBuff( "alpha_tiger" )
|
||
|
|
applyDebuff( "target", "recently_challenged" )
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
|
||
|
|
tigereye_brew = {
|
||
|
|
id = 247483,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 1,
|
||
|
|
gcd = "spell",
|
||
|
|
|
||
|
|
startsCombat = false,
|
||
|
|
texture = 613399,
|
||
|
|
|
||
|
|
buff = "tigereye_brew_stack",
|
||
|
|
pvptalent = "tigereye_brew",
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyBuff( "tigereye_brew", 2 * min( 10, buff.tigereye_brew_stack.stack ) )
|
||
|
|
removeStack( "tigereye_brew_stack", min( 10, buff.tigereye_brew_stack.stack ) )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Increases a friendly target's movement speed by $s1% for $d and removes all roots and snares.
|
||
|
|
tigers_lust = {
|
||
|
|
id = 116841,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 30,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
talent = "tigers_lust",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyBuff( "tigers_lust" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- You exploit the enemy target's weakest point, instantly killing $?s322113[creatures if they have less health than you.][them. Only usable on creatures that have less health than you]$?s322113[ Deals damage equal to $s3% of your maximum health against players and stronger creatures under $s2% health.][.]$?s325095[ Reduces delayed Stagger damage by $325095s1% of damage dealt.]?s325215[ Spawns $325215s1 Chi Spheres, granting 1 Chi when you walk through them.]?s344360[ Increases the Monk's Physical damage by $344361s1% for $344361d.][]
|
||
|
|
touch_of_death = {
|
||
|
|
id = 322109,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = function () return 180 - ( 45 * talent.fatal_touch.rank ) end,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
startsCombat = true,
|
||
|
|
|
||
|
|
toggle = "cooldowns",
|
||
|
|
cycle = "touch_of_death",
|
||
|
|
|
||
|
|
-- Non-players can be executed as soon as their current health is below player's max health.
|
||
|
|
-- All targets can be executed under 15%, however only at 35% damage.
|
||
|
|
usable = function ()
|
||
|
|
return ( talent.improved_touch_of_death.enabled and target.health.pct < 15 ) or ( target.class == "npc" and target.health_current < health.max ), "requires low health target"
|
||
|
|
end,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyDebuff( "target", "touch_of_death" )
|
||
|
|
if talent.forbidden_technique.enabled and buff.recently_touched.down then
|
||
|
|
setCooldown( "touch_of_death", 0 )
|
||
|
|
applyBuff( "recently_touched" )
|
||
|
|
end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Absorbs all damage taken for $d, up to $s3% of your maximum health, and redirects $s4% of that amount to the enemy target as Nature damage over $124280d.
|
||
|
|
touch_of_karma = {
|
||
|
|
id = 122470,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 90,
|
||
|
|
gcd = "off",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
talent = "touch_of_karma",
|
||
|
|
startsCombat = true,
|
||
|
|
|
||
|
|
toggle = "defensives",
|
||
|
|
|
||
|
|
usable = function ()
|
||
|
|
return incoming_damage_3s >= health.max * ( settings.tok_damage or 20 ) / 100, "incoming damage not sufficient (" .. ( settings.tok_damage or 20 ) .. "% / 3 sec) to use"
|
||
|
|
end,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyBuff( "touch_of_karma" )
|
||
|
|
applyDebuff( "target", "touch_of_karma_debuff" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Split your body and spirit, leaving your spirit behind for $d. Use Transcendence: Transfer to swap locations with your spirit.
|
||
|
|
transcendence = {
|
||
|
|
id = 101643,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 10,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
talent = "transcendence",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyBuff( "transcendence" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
|
||
|
|
transcendence_transfer = {
|
||
|
|
id = 119996,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = function () return buff.escape_from_reality.up and 0 or 45 end,
|
||
|
|
gcd = "spell",
|
||
|
|
|
||
|
|
startsCombat = false,
|
||
|
|
texture = 237585,
|
||
|
|
|
||
|
|
buff = "transcendence",
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
if buff.escape_from_reality.up then removeBuff( "escape_from_reality" )
|
||
|
|
elseif legendary.escape_from_reality.enabled then
|
||
|
|
applyBuff( "escape_from_reality" )
|
||
|
|
end
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Causes a surge of invigorating mists, healing the target for $s1$?s274586[ and all allies with your Renewing Mist active for $s2][].
|
||
|
|
vivify = {
|
||
|
|
id = 116670,
|
||
|
|
cast = function() return buff.vivacious_vivification.up and 0 or 1.5 end,
|
||
|
|
cooldown = 0,
|
||
|
|
gcd = "spell",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
spend = 0.038,
|
||
|
|
spendType = "mana",
|
||
|
|
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
removeBuff( "vivacious_vivification" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- Talent: Performs a devastating whirling upward strike, dealing ${3*$158221s1} damage to all nearby enemies. Only usable while both Fists of Fury and Rising Sun Kick are on cooldown.
|
||
|
|
whirling_dragon_punch = {
|
||
|
|
id = 152175,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 24,
|
||
|
|
gcd = "totem",
|
||
|
|
school = "physical",
|
||
|
|
|
||
|
|
talent = "whirling_dragon_punch",
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
usable = function ()
|
||
|
|
if settings.check_wdp_range and target.outside8 then return false, "target is outside of melee range" end
|
||
|
|
return cooldown.fists_of_fury.remains > 0 and cooldown.rising_sun_kick.remains > 0, "requires fists_of_fury and rising_sun_kick on cooldown"
|
||
|
|
end,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
|
||
|
|
-- You fly through the air at a quick speed on a meditative cloud.
|
||
|
|
zen_flight = {
|
||
|
|
id = 125883,
|
||
|
|
cast = 0,
|
||
|
|
cooldown = 0,
|
||
|
|
gcd = "totem",
|
||
|
|
school = "nature",
|
||
|
|
|
||
|
|
startsCombat = false,
|
||
|
|
|
||
|
|
handler = function ()
|
||
|
|
applyBuff( "zen_flight" )
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
} )
|
||
|
|
|
||
|
|
spec:RegisterOptions( {
|
||
|
|
enabled = true,
|
||
|
|
|
||
|
|
aoe = 2,
|
||
|
|
cycle = true,
|
||
|
|
|
||
|
|
nameplates = true,
|
||
|
|
nameplateRange = 8,
|
||
|
|
|
||
|
|
damage = true,
|
||
|
|
damageExpiration = 8,
|
||
|
|
|
||
|
|
potion = "potion_of_spectral_agility",
|
||
|
|
|
||
|
|
package = "Windwalker",
|
||
|
|
|
||
|
|
strict = false
|
||
|
|
} )
|
||
|
|
|
||
|
|
spec:RegisterSetting( "allow_fsk", false, {
|
||
|
|
name = strformat( "Use %s", Hekili:GetSpellLinkWithTexture( spec.abilities.flying_serpent_kick.id ) ),
|
||
|
|
desc = strformat( "If unchecked, %s will not be recommended despite generally being used as a filler ability.\n\n"
|
||
|
|
.. "Unchecking this option is the same as disabling the ability via |cFFFFD100Abilities|r > |cFFFFD100|W%s|w|r > |cFFFFD100|W%s|w|r > |cFFFFD100Disable|r.",
|
||
|
|
Hekili:GetSpellLinkWithTexture( spec.abilities.flying_serpent_kick.id ), spec.name, spec.abilities.flying_serpent_kick.name ),
|
||
|
|
type = "toggle",
|
||
|
|
width = "full",
|
||
|
|
get = function () return not Hekili.DB.profile.specs[ 269 ].abilities.flying_serpent_kick.disabled end,
|
||
|
|
set = function ( _, val )
|
||
|
|
Hekili.DB.profile.specs[ 269 ].abilities.flying_serpent_kick.disabled = not val
|
||
|
|
end,
|
||
|
|
} )
|
||
|
|
|
||
|
|
--[[ Deprecated.
|
||
|
|
spec:RegisterSetting( "optimize_reverse_harm", false, {
|
||
|
|
name = "Optimize |T627486:0|t Reverse Harm",
|
||
|
|
desc = "If checked, |T627486:0|t Reverse Harm's caption will show the recommended target's name.",
|
||
|
|
type = "toggle",
|
||
|
|
width = "full",
|
||
|
|
} ) ]]
|
||
|
|
|
||
|
|
spec:RegisterSetting( "sef_one_charge", false, {
|
||
|
|
name = strformat( "%s: Reserve 1 Charge for Cooldowns Toggle", Hekili:GetSpellLinkWithTexture( spec.abilities.storm_earth_and_fire.id ) ),
|
||
|
|
desc = strformat( "If checked, %s can be recommended while Cooldowns are disabled, as long as you will retain 1 remaining charge.\n\n"
|
||
|
|
.. "If |W%s's|w |cFFFFD100Required Toggle|r is changed from |cFF00B4FFDefault|r, this feature is disabled.",
|
||
|
|
Hekili:GetSpellLinkWithTexture( spec.abilities.storm_earth_and_fire.id ), spec.abilities.storm_earth_and_fire.name ),
|
||
|
|
type = "toggle",
|
||
|
|
width = "full",
|
||
|
|
} )
|
||
|
|
|
||
|
|
spec:RegisterSetting( "tok_damage", 1, {
|
||
|
|
name = strformat( "%s: Required Incoming Damage", Hekili:GetSpellLinkWithTexture( spec.abilities.touch_of_karma.id ) ),
|
||
|
|
desc = strformat( "If set above zero, %s will only be recommended if you have taken this percentage of your maximum health in damage in the past 3 seconds.",
|
||
|
|
Hekili:GetSpellLinkWithTexture( spec.abilities.touch_of_karma.id ) ),
|
||
|
|
type = "range",
|
||
|
|
min = 0,
|
||
|
|
max = 99,
|
||
|
|
step = 0.1,
|
||
|
|
width = "full",
|
||
|
|
} )
|
||
|
|
|
||
|
|
spec:RegisterSetting( "check_wdp_range", false, {
|
||
|
|
name = strformat( "%s: Check Range", Hekili:GetSpellLinkWithTexture( spec.abilities.whirling_dragon_punch.id ) ),
|
||
|
|
desc = strformat( "If checked, %s will not be recommended if your target is out of range.", Hekili:GetSpellLinkWithTexture( spec.abilities.whirling_dragon_punch.id ) ),
|
||
|
|
type = "toggle",
|
||
|
|
width = "full"
|
||
|
|
} )
|
||
|
|
|
||
|
|
spec:RegisterSetting( "check_sck_range", false, {
|
||
|
|
name = strformat( "%s: Check Range", Hekili:GetSpellLinkWithTexture( spec.abilities.spinning_crane_kick.id ) ),
|
||
|
|
desc = strformat( "If checked, %s will not be recommended if your target is out of range.", Hekili:GetSpellLinkWithTexture( spec.abilities.spinning_crane_kick.id ) ),
|
||
|
|
type = "toggle",
|
||
|
|
width = "full"
|
||
|
|
} )
|
||
|
|
|
||
|
|
spec:RegisterSetting( "use_diffuse", false, {
|
||
|
|
name = strformat( "%s: Self-Dispel", Hekili:GetSpellLinkWithTexture( spec.abilities.diffuse_magic.id ) ),
|
||
|
|
desc = function()
|
||
|
|
local m = strformat( "If checked, %s may be recommended when when you have a dispellable magic debuff.", Hekili:GetSpellLinkWithTexture( spec.abilities.diffuse_magic.id ) )
|
||
|
|
|
||
|
|
local t = class.abilities.diffuse_magic.toggle
|
||
|
|
if t then
|
||
|
|
local active = Hekili.DB.profile.toggles[ t ].value
|
||
|
|
m = m .. "\n\n" .. ( active and "|cFF00FF00" or "|cFFFF0000" ) .. "Requires " .. t:gsub("^%l", string.upper) .. " Toggle|r"
|
||
|
|
end
|
||
|
|
|
||
|
|
return m
|
||
|
|
end,
|
||
|
|
type = "toggle",
|
||
|
|
width = "full"
|
||
|
|
} )
|
||
|
|
|
||
|
|
|
||
|
|
spec:RegisterPack( "Windwalker", 20230325, [[Hekili:S3ZAZTTrs(BrvQqlTXMMauu2Apsw1T5IVBDDz3urER7BceIeucwGe8ab9JuS4V9Bg8CE098aaK26IQkLJnXGE6PF390ZGBDU9d3EZc)0GB)hUdChoyO7O(odh6o052Bs)6MGBVzJ)8h9VN8xw7VI8N)pHRx8z)OhdsOp6RrX(lOGyB8UK5Kh)qA6MT)1x)67dtFy3D9NhV61BdxTlYpnmE98e)LP0)98xFxu8DVErI)9XRxgfE)dPVEts8YWOGTV(3sc(D)WfK)YV79RXRF0REk7tF3BV5UDHrP)913EhmQtWMnbZj)6vxtqOWflcYhAWwY7sh6Rg4(k3b)1dZom7x9)yCYHzZFWF99bBpmln(WmFccT(WSptwchMrW8GTPhMDt1Q4NPRIdZ2KegNeM(1(hE)H3xbvNmOEy2Vh8PWTb5Wly92DjK)(7c3MsMI4LK)6UKVEywi9FToI83Ulj(Xa6C(a9pVjijynb05JWFEA4NcyMgY)92)k7K8R(RdNFy2)zsyWY04K5e0E3wcp7FJ8YKv)IdZsc(F3fMeSkynbZtFWN(N(j3hKMpfbFHqWsPdKIVrKPJ8NXekss2Oxt)tYpn3NsjsdxvSWscwSBo5VNeU9X811g)K0q)O8HYHYUJYq5)9fFChfiFiEhfnPVZ)rGF6d9V9Mik5HklfVjynr86d3(pYKodw7FxuWIB)B3EdLueVM8te8nY7b)Kv5S1KWn5p4FM)Q3q(L0GKqFIqSFezr3F(dHE3TlHGufG7WSEu2Ey)v(F5WSxL93pmB6KdZgEBkr2bzMtdjefVn(rRyNeIy(DXEBttcFmahWNFyM7Hz)eHBVB5Y(BI)mbs5VZ2(72Cy2fea915rbE5SMT01pbvgkGkmtR4SqMe3ACLUM)S)NcOa5skqGiF1aMmQr2TQ7UfzkrNnyPhzCRFmitkaL3)qCYAV4LEFYpkorG9FZV8oIOvjqyq1nbP9)YUG1Ee5yVp)a5N9Ywt9ZvUomB)(dZoJQuKjTeU(te9rpW3Gv(jBnULOYTYlGi5)GN)6fEljkAzlvkmVlE72SHUKAKZJOc6hUM8lJjYzdGe0QX5ZlFBkCYPw9P6EEPXElcj480dZCYi1uLnVC1YlYMmYRwqk7N60pClHnrSq4DpJbIE5R3Yr52)b)TE72g4rxtfZz9dnbeocG4IAEM47QwSMG9hd(1fLyCR4AUJQxw(reEcrnYBZU)4piI03f)LkDniTOCkLdN5jmQxoQkXi5K(fytiCA5XaG3msoZJJJwe)51kPQvKKP5oOIx7v(EhM9Jebt3b5ZS0dhtmsC1GSj7t(eAaHkrwvrlYMh9VdoZJfLCg0ure9kT3SnkoLHBQYUjahxLkZFMz6Niw1vQzvUGkNIwhL5tU64ti2qLhZ378PNskNUuo(BSGJRYL4FMz6Ngwf5FrImKgXQI4)UlIKqA8UuVhdN)iqWKmCZmXX0aFsWPRVFlLjrX4vXRjXlfK8vIKkbuzrnpmdnlwIBFWNqyiSaYBrcjnWFX2YLMq8MKx7dfZSYq5KYpidZw4VEEafRi43hdjbFuVi3UjC9A60tszEDq(svzmtfOojP71lcswgwNOddqZM)sYWNjzvtKyxiLDa9LZiwljjPQjbbbA9DXRjPescg9UKGpNfnfnxiMfV2viM5zskM0bVD36s(oRol(KNNfssWwAk4EBIdjejkHgkrlmdfIsCnq(YfEgFllDhH9WZaUURXXc605Mi9NRvxznsGNWBJhnDwNbSlAI5JKikuYRfeX(3As6b8Rzhtnfy8IMrXhbjXY)hsSvzHakjwCAv95mfwlOsZyNwaJ7RqrkPCecokAnWaDfDOdz6UmhVZYNhN(GLJtJPpOctgqezW3llLMzeOHIhHnl(ANB8MqeDNXaYIc0Xnem5DSKdqLETuiczAfTKkBWmz3wQ(H3h9xKBVHZfK0tZGQ12i5T(dIPVTzYsNZ7AHtmyeN)CLca5M0qGZLCWrMRdUIYkMv(qvfidM9E(kAvvk4FROEZg61xrnmfCWly2SAvYAJIewfXZzqsYUnPEHlfh6Un9aF3PtaRGPvcn1whnZGUrJxyTbjwIzHtH1v6q(ua1c(Qq6MjmPuacoketm(aJByMuSd3qw4niemrGpMNr0W4VeemZZ8izR3IGSDmQKckn5cHZNzal8EICjzzihvmV2qzqzThnOwpumlIbYjgjDuC8IiI0aNnzjOKhmfiyay4UQGeQzkl9OdNAdmjcpYy0aWSqkuJ6hYe3EJvascoysQJmYCL2ejKIhZg0lpmyv8BOWymlEc0zCKUinWmdHYhmj)f8Lpivf3IKev9Cq((W6sUi8e3S3cGy3Fv8IWLH0TEnt)O)qUTsbJ9GB1sh)gTQaoyjBANoORbXWMh0gmxWv0gNwjHwHeCr8PrwYC9wNI5xxWWUIMHTrroZLUgbfx8QuPgEWzQtHiEvPAKLHHASm4AEKzqeyC7yg6ktpj2AtxgixKzksnVGzkPVbwAvWBMFzQe4cZnqWFmMPvALEx4PkljKSG(5cn4T1RN5(rrE5)dpApKK3jjE5TRu5uu3Abajgvtf0SVZmS(DRiRw2HqyF(P7cGY3HtHaQe790vbcwBx8dPotMjzgVSy7RzkLpucpMG1AlDsp(nWaTkpJZmrRFFduG)6dqbScXSOhtcTc16uoR4SkZPfFhoa6bfBcM(Llj((ARhSypuIAglglS2mDxLA4(2PBjYWrRmiaKnyL5lANJrT4SG23y2zffpijzg01d0J6daqRh9tw5BqgEsYAQK6zfdOzgAscGTBwiz4gK8irzTo5WYNLL27wVpUBX90gkuWVJuMBDegrRAx2AhmlToAsO(6jcq(rEuVkAYSQvZ0D(3N52mHygCBUhrIRRt((Ek4O1PCdnv7MSD72yd23ISve9hZdApk(Z0rUkMk)TBvnT3Ie9XIISd2ujKK0hXQez0U91GsXzqkoCf1MA7ER3D(PPrb3h4NOUWJCrHQAJIXT02vrzFS2ju9XQmfT0P6SgRD)XnUOaVrl9bTGEgLMuUvCBY3qHj52SHtwRMQnkaILw)yLTycyjp5StEzDJF0ar7JTTvtuq14wtRKQw5pR32tD6NnPBDSz)nSTq36S0AYw7pqHzwJuDnlhhf7)KUvbED5WQVqhWGDBfdgZZGTmyKT9vLPFRmyAAKEnGaAABT0n2OhADGnhbZ64nAXt1(iaFpqmXfEzj2wc5PJV6A011lpm7xORSdZiln6zvJEI1SVABl)ttH26bUNpvg9RoquyBb0ePrwxamRQ713h1TJBjJIR41OZe0bT8AAzz8T1w(gdxLWOSlZIQCbgio9aV1tj)uhYuVDu8C(8f5XP2D1fYeYi2YDeL6KG5pqnGuEsYynPl)oqrsXztvFajOhblLdGRaCo4jm5)f2g3tj2yzzBvnJcYyO6ZklSl(2oRCzOvfYCjtzLTPvNrGZ1jnLlgL)odeRJUjhoKJSUqzDSHSnwlXC8M(HqhTJJaLCiJnouDTlk7DvJCWF3I7iHuKMNdRIgLsvnqROWgU2L39EtP0nWOh)eHLzhbLUwYco7lcg)ppaCC1BGfltM2Shis1OscO57GbdqX3CeJ0qWourQ2zLRqqE82JaWw9ORXqa0vT6KKSwcCOctn2Szb875JIBeGticYUXDcBxe35jsZ2fPQFmoHlg0DAcpiNtj(PztQ006SG2)OOodhey)OK6DIMETmu1(gpF3m88DZWZ3ndn8y6ZVFZqr0AZbUv5bjaICOsE6Bef5pjNnALBBr6tGlUGUvY95t1)tgjxx15j(eJeulLrLFipEvvN74n)j1fxGRHxCbFJ2m6Y3502rqhXDSgPJGuLBHzTsGYn5kvOHDmAR568T19KFddCn7A2ODI16tyIU1S(DI18UZHZnMbuWE6lGv7Acm0ZMNrBElpc2YJ9VYk7tfLu3lv0e)7pcF)xpnT0KGyL2wVj7h6OMeZ8tsSn7pTrcciWelWUNU7IVPwu)wgqWnFO(ggGOwnU(Mn6IS1aEZS3vEQKoMFDvuishPodm1shI4PLVE
|