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.

2435 lines
96 KiB

-- HunterBeastMastery.lua
-- October 2023
if UnitClassBase( "player" ) ~= "HUNTER" then return end
local addon, ns = ...
local Hekili = _G[ addon ]
local class, state = Hekili.Class, Hekili.State
local FindUnitBuffByID, FindUnitDebuffByID = ns.FindUnitBuffByID, ns.FindUnitDebuffByID
local PTR = ns.PTR
local strformat = string.format
local spec = Hekili:NewSpecialization( 253, true )
spec:RegisterResource( Enum.PowerType.Focus, {
barbed_shot = {
resource = "focus",
aura = "barbed_shot",
last = function ()
local app = state.buff.barbed_shot.applied
local t = state.query_time
return app + floor( ( t - app ) / 2 ) * 2
end,
interval = 2,
value = 5,
},
barbed_shot_2 = {
resource = "focus",
aura = "barbed_shot_2",
last = function ()
local app = state.buff.barbed_shot_2.applied
local t = state.query_time
return app + floor( ( t - app ) / 2 ) * 2
end,
interval = 2,
value = 5,
},
barbed_shot_3 = {
resource = "focus",
aura = "barbed_shot_3",
last = function ()
local app = state.buff.barbed_shot_3.applied
local t = state.query_time
return app + floor( ( t - app ) / 2 ) * 2
end,
interval = 2,
value = 5,
},
barbed_shot_4 = {
resource = "focus",
aura = "barbed_shot_4",
last = function ()
local app = state.buff.barbed_shot_4.applied
local t = state.query_time
return app + floor( ( t - app ) / 2 ) * 2
end,
interval = 2,
value = 5,
},
barbed_shot_5 = {
resource = "focus",
aura = "barbed_shot_5",
last = function ()
local app = state.buff.barbed_shot_5.applied
local t = state.query_time
return app + floor( ( t - app ) / 2 ) * 2
end,
interval = 2,
value = 5,
},
barbed_shot_6 = {
resource = "focus",
aura = "barbed_shot_6",
last = function ()
local app = state.buff.barbed_shot_6.applied
local t = state.query_time
return app + floor( ( t - app ) / 2 ) * 2
end,
interval = 2,
value = 5,
},
barbed_shot_7 = {
resource = "focus",
aura = "barbed_shot_7",
last = function ()
local app = state.buff.barbed_shot_7.applied
local t = state.query_time
return app + floor( ( t - app ) / 2 ) * 2
end,
interval = 2,
value = 5,
},
barbed_shot_8 = {
resource = "focus",
aura = "barbed_shot_8",
last = function ()
local app = state.buff.barbed_shot_8.applied
local t = state.query_time
return app + floor( ( t - app ) / 2 ) * 2
end,
interval = 2,
value = 5,
},
death_chakram = {
resource = "focus",
aura = "death_chakram",
last = function ()
return state.buff.death_chakram.applied + floor( ( state.query_time - state.buff.death_chakram.applied ) / class.auras.death_chakram.tick_time ) * class.auras.death_chakram.tick_time
end,
interval = function () return class.auras.death_chakram.tick_time end,
value = function () return state.conduit.necrotic_barrage.enabled and 5 or 3 end,
}
} )
-- Talents
spec:RegisterTalents( {
-- Hunter
alpha_predator = { 79904, 269737, 1 }, -- Kill Command now has 2 charges, and deals 15% increased damage.
arctic_bola = { 79815, 390231, 2 }, -- Cobra Shot has a chance to fling an Arctic Bola at your target, dealing 0 Frost damage and snaring the target by 20% for 3 sec. The Arctic Bola strikes up to 2 targets.
barrage = { 79914, 120360, 1 }, -- Rapidly fires a spray of shots for 2.8 sec, dealing an average of 2,829 Physical damage to all nearby enemies in front of you. Usable while moving. Deals reduced damage beyond 8 targets.
beast_master = { 79926, 378007, 2 }, -- Pet damage increased by 3%.
binding_shackles = { 79920, 321468, 1 }, -- Targets rooted by Binding Shot, knocked back by High Explosive Trap, incapacitated by Scatter Shot, or stunned by Intimidation deal 10% less damage to you for 8 sec after the effect ends.
binding_shot = { 79937, 109248, 1 }, -- Fires a magical projectile, tethering the enemy and any other enemies within 5 yds for 10 sec, stunning them for 3 sec if they move more than 5 yds from the arrow. Targets stunned by Binding Shot deal 10% less damage to you for 8 sec after the effect ends.
born_to_be_wild = { 79933, 266921, 2 }, -- Reduces the cooldowns of Aspect of the Cheetah, Survival of the Fittest, and Aspect of the Turtle by 7%.
camouflage = { 79934, 199483, 1 }, -- You and your pet blend into the surroundings and gain stealth for 1 min. While camouflaged, you will heal for 2% of maximum health every 1 secs.
concussive_shot = { 79906, 5116 , 1 }, -- Dazes the target, slowing movement speed by 50% for 6 sec. Cobra Shot will increase the duration of Concussive Shot on the target by 3.0 sec.
death_chakram = { 79916, 375891, 1 }, -- Throw a deadly chakram at your current target that will rapidly deal 991 Physical damage 7 times, bouncing to other targets if they are nearby. Enemies struck by Death Chakram take 10% more damage from you and your pet for 10 sec. Each time the chakram deals damage, its damage is increased by 15% and you generate 3 Focus.
entrapment = { 79977, 393344, 1 }, -- When Tar Trap is activated, all enemies in its area are rooted for 4 sec. Damage taken may break this root.
explosive_shot = { 79914, 212431, 1 }, -- Fires an explosive shot at your target. After 3 sec, the shot will explode, dealing 3,403 Fire damage to all enemies within 8 yds. Deals reduced damage beyond 5 targets.
high_explosive_trap = { 79910, 236776, 1 }, -- Hurls a fire trap to the target location that explodes when an enemy approaches, causing 840 Fire damage and knocking all enemies away. Trap will exist for 1 min. Targets knocked back by High Explosive Trap deal 10% less damage to you for 8 sec after being knocked back.
hunters_avoidance = { 79832, 384799, 1 }, -- Damage taken from area of effect attacks reduced by 6%.
hydras_bite = { 79911, 260241, 1 }, -- Serpent Sting fires arrows at 2 additional enemies near your target, and its damage over time is increased by 20%.
improved_kill_command = { 79932, 378010, 2 }, -- Kill Command damage increased by 5%.
improved_kill_shot = { 79930, 343248, 1 }, -- Kill Shot's critical damage is increased by 25%.
improved_tranquilizing_shot = { 79919, 343244, 1 }, -- When Tranquilizing Shot successfully dispels an effect, gain 10 Focus.
improved_traps = { 79923, 343247, 2 }, -- The cooldown of Tar Trap, Steel Trap, High Explosive Trap, and Freezing Trap is reduced by 2.5 sec.
intimidation = { 79910, 19577 , 1 }, -- Commands your pet to intimidate the target, stunning it for 5 sec. Targets stunned by Intimidation deal 10% less damage to you for 8 sec after the effect ends.
keen_eyesight = { 79922, 378004, 2 }, -- Critical strike chance increased by 2%.
killer_instinct = { 79904, 273887, 1 }, -- Kill Command deals 50% increased damage against enemies below 35% health.
lone_survivor = { 79820, 388039, 1 }, -- Reduce the cooldown of Survival of the Fittest by 30 sec, and increase its duration by 2.0 sec.
master_marksman = { 79913, 260309, 2 }, -- Your melee and ranged special attack critical strikes cause the target to bleed for an additional 7% of the damage dealt over 6 sec.
misdirection = { 79924, 34477 , 1 }, -- Misdirects all threat you cause to the targeted party or raid member, beginning with your next attack within 30 sec and lasting for 8 sec.
natural_mending = { 79925, 270581, 2 }, -- Every 30 Focus you spend reduces the remaining cooldown on Exhilaration by 1.0 sec.
natures_endurance = { 79820, 388042, 1 }, -- Survival of the Fittest reduces damage taken by an additional 20%.
pathfinding = { 79918, 378002, 2 }, -- Movement speed increased by 2%.
poison_injection = { 79911, 378014, 1 }, -- Serpent Sting's damage applies Latent Poison to the target, stacking up to 10 times. Barbed Shot consumes all stacks of Latent Poison, dealing 303 Nature damage to the target per stack consumed.
posthaste = { 79921, 109215, 2 }, -- Disengage also frees you from all movement impairing effects and increases your movement speed by 25% for 4 sec.
rejuvenating_wind = { 79909, 385539, 2 }, -- Maximum health increased by 4%, and Exhilaration now also heals you for an additional 10.0% of your maximum health over 8 sec.
roar_of_sacrifice = { 79832, 53480 , 1 }, -- Instructs your pet to protect a friendly target from critical strikes, making attacks against that target unable to be critical strikes, but 10% of all damage taken by that target is also taken by the pet. Lasts 12 sec.
scare_beast = { 79927, 1513 , 1 }, -- Scares a beast, causing it to run in fear for up to 20 sec. Damage caused may interrupt the effect. Only one beast can be feared at a time.
scatter_shot = { 79937, 213691, 1 }, -- A short-range shot that deals 65 damage, removes all harmful damage over time effects, and incapacitates the target for 4 sec. Any damage caused will remove the effect. Turns off your attack when used. Targets incapacitated by Scatter Shot deal 10% less damage to you for 8 sec after the effect ends.
sentinel_owl = { 79819, 388045, 1 }, -- Call forth a Sentinel Owl to the target location within 40 yds, granting you unhindered vision. Your attacks ignore line of sight against any target in this area. While the Sentinel Owl is active, your party gains 5% Leech. Every 150 Focus spent grants you 1 sec of the Sentinel Owl when cast, up to a maximum of 12 sec. The Sentinel Owl can only be summoned when it will last at least 5 sec.
sentinels_perception = { 79818, 388056, 1 }, -- Sentinel Owl now also grants unhindered vision to party members while active.
sentinels_protection = { 79818, 388057, 1 }, -- While the Sentinel Owl is active, your party gains 5% leech.
serpent_sting = { 79905, 271788, 1 }, -- Fire a shot that poisons your target, causing them to take 323 Nature damage instantly and an additional 2,067 Nature damage over 18 sec.
serrated_shots = { 79814, 389882, 2 }, -- Serpent Sting and Bleed damage increased by 10%. This value is increased to 20% against targets below 30% health.
stampede = { 79916, 201430, 1 }, -- Summon a herd of stampeding animals from the wilds around you that deal 2,796 Physical damage to your enemies over 12 sec. Enemies struck by the stampede are snared by 30%, and you have 10% increased critical strike chance against them for 5 sec.
steel_trap = { 79908, 162488, 1 }, -- Hurls a Steel Trap to the target location that snaps shut on the first enemy that approaches, immobilizing them for 20 sec and causing them to bleed for 2,676 damage over 20 sec. Damage other than Steel Trap may break the immobilization effect. Trap will exist for 1 min. Limit 1.
survival_of_the_fittest = { 79821, 264735, 1 }, -- Reduces all damage you and your pet take by 40% for 6 sec.
tar_trap = { 79928, 187698, 1 }, -- Hurls a tar trap to the target location that creates a 8 yd radius pool of tar around itself for 30 sec when the first enemy approaches. All enemies have 50% reduced movement speed while in the area of effect. Trap will exist for 1 min.
trailblazer = { 79931, 199921, 2 }, -- Your movement speed is increased by 15% anytime you have not attacked for 3 sec.
tranquilizing_shot = { 79907, 19801 , 1 }, -- Removes 1 Enrage and 1 Magic effect from an enemy target.
wilderness_medicine = { 79936, 343242, 2 }, -- Mend Pet heals for an additional 25% of your pet's health over its duration, and has a 25% chance to dispel a magic effect each time it heals your pet.
-- BeastMastery
a_murder_of_crows = { 79943, 131894, 1 }, -- Summons a flock of crows to attack your target, dealing 7,755 Physical damage over 15 sec. If the target dies while under attack, A Murder of Crows' cooldown is reset.
animal_companion = { 79947, 267116, 1 }, -- Your Call Pet additionally summons the first pet from your stable. This pet will obey your Kill Command, but cannot use pet family abilities and both of your pets deal 35% reduced damage.
aspect_of_the_beast = { 79944, 191384, 1 }, -- Increases the damage and healing of your pet's abilities by 30%. Increases the effectiveness of your pet's Predator's Thirst, Endurance Training, and Pathfinding passives by 50%.
barbed_shot = { 79968, 217200, 1 }, -- Fire a shot that tears through your enemy, causing them to bleed for 3,329 damage over 8 sec and increases your critical strike chance by 3% for 8 sec, stacking up to 3 times. Sends your pet into a frenzy, increasing attack speed by 30% for 8 sec, stacking up to 3 times. Generates 20 Focus over 8 sec.
barbed_wrath = { 79822, 231548, 1 }, -- Barbed Shot reduces the cooldown of Bestial Wrath by 12.0 sec.
beast_cleave = { 79956, 115939, 2 }, -- After you Multi-Shot, your pet's melee attacks also strike all nearby enemies for 35% of the damage for the next 3.0 sec. Deals reduced damage beyond 8 targets.
bestial_wrath = { 79955, 19574 , 1 }, -- Sends you and your pet into a rage, instantly dealing 1,104 Physical damage to its target, and increasing all damage you both deal by 25% for 15 sec. Removes all crowd control effects from your pet. Bestial Wrath's remaining cooldown is reduced by 12 sec each time you use Barbed Shot and activating Bestial Wrath grants 1 charge of Barbed Shot.
bloodshed = { 79943, 321530, 1 }, -- Command your pet to tear into your target, causing your target to bleed for 2,549 over 18 sec and increase all damage taken from your pet by 15% for 18 sec.
bloody_frenzy = { 79946, 407412, 1 }, -- While Call of the Wild is active, your pets have the effects of Beast Cleave, and each time Call of the Wild summons a pet, all of your pets Stomp.
brutal_companion = { 79816, 386870, 1 }, -- When Barbed Shot causes Frenzy to stack up to 3, your pet will immediately use its special attack and deal 50% bonus damage.
call_of_the_wild = { 79967, 359844, 1 }, -- You sound the call of the wild, summoning $s1 of your active pets for $d. During this time, a random pet from your stable will appear every $t2 sec to assault your target for $361582d. ; Each time Call of the Wild summons a pet, the cooldown of Barbed Shot and Kill Command are reduced by $s3%.
cobra_senses = { 79963, 378244, 1 }, -- Cobra Shot reduces the cooldown of Kill Command by an additional 1.0 sec.
cobra_shot = { 79949, 193455, 1 }, -- A quick shot causing 1,995 Physical damage. Reduces the cooldown of Kill Command by 1 sec.
cobra_sting = { 79941, 378750, 2 }, -- Cobra Shot has a 25% chance to make your next Kill Command consume no Focus.
counter_shot = { 79912, 147362, 1 }, -- Interrupts spellcasting, preventing any spell in that school from being cast for 3 sec.
dire_beast = { 79959, 120679, 1 }, -- Summons a powerful wild beast that attacks the target and roars, increasing your Haste by 5% for 8 sec.
dire_command = { 79953, 378743, 2 }, -- Kill Command has a $s1% chance to also summon a Dire Beast to attack your target for $120679d.
dire_frenzy = { 79823, 385810, 2 }, -- Dire Beast lasts an additional 1 sec and deals 20% increased damage.
dire_pack = { 79940, 378745, 1 }, -- Every 5 Dire Beasts summoned resets the cooldown of Kill Command, and reduces the Focus cost and cooldown of Kill Command by 50% for 8 sec.
hunters_prey = { 79951, 378210, 1 }, -- Kill Command has a 10% chance to reset the cooldown of Kill Shot, and causes your next Kill Shot to be usable on any target, regardless of the target's health.
kill_cleave = { 79954, 378207, 1 }, -- While Beast Cleave is active, Kill Command now also strikes nearby enemies for 80% of damage dealt. Deals reduced damage beyond 8 targets.
kill_command = { 79935, 34026 , 1 }, -- Give the command to kill, causing your pet to savagely deal 2,490 Physical damage to the enemy.
kill_shot = { 79835, 53351 , 1 }, -- You attempt to finish off a wounded target, dealing 4,365 Physical damage. Only usable on enemies with less than 20% health. Kill Shot deals 25% increased critical damage.
killer_cobra = { 79961, 199532, 1 }, -- While Bestial Wrath is active, Cobra Shot resets the cooldown on Kill Command.
killer_command = { 79939, 378740, 2 }, -- Kill Command damage increased by 5%.
kindred_spirits = { 79957, 56315 , 2 }, -- Increases your maximum Focus and your pet's maximum Focus by 20.
master_handler = { 79962, 424558, 1 }, -- Each time Barbed Shot deals damage, the cooldown of Kill Command is reduced by ${$m1/1000}.2 sec.
multishot = { 79917, 2643 , 1 }, -- Fires several missiles, hitting all nearby enemies within 8 yds of your current target for 197 Physical damage. Deals reduced damage beyond 5 targets.
one_with_the_pack = { 79960, 199528, 2 }, -- Wild Call has a 20% increased chance to reset the cooldown of Barbed Shot.
pack_tactics = { 79958, 321014, 1 }, -- Passive Focus generation increased by 100%.
piercing_fangs = { 79961, 392053, 1 }, -- While Bestial Wrath is active, your pet's critical damage dealt is increased by 35%.
savagery = { 79950, 424557, 1 }, -- Kill Command damage is increased by $s1%. Barbed Shot lasts ${$m2/1000}.1 sec longer.
scent_of_blood = { 79965, 193532, 2 }, -- Activating Bestial Wrath grants 1 charge of Barbed Shot.
sharp_barbs = { 79945, 378205, 2 }, -- Barbed Shot damage increased by 1%.
stomp = { 79942, 199530, 2 }, -- When you cast Barbed Shot, your pet stomps the ground, dealing 378 Physical damage to all nearby enemies.
thrill_of_the_hunt = { 79964, 257944, 2 }, -- Barbed Shot increases your critical strike chance by $257946s1% for $257946d, stacking up to $s2 $Ltime:times;.
training_expert = { 79948, 378209, 2 }, -- All pet damage dealt increased by 5%.
wailing_arrow = { 79938, 392060, 1 }, -- Fire an enchanted arrow, dealing 4,352 Shadow damage to your target and an additional 1,764 Shadow damage to all enemies within 8 yds of your target. Non-Player targets struck by a Wailing Arrow have their spellcasting interrupted and are silenced for 3 sec.
war_orders = { 79952, 393933, 2 }, -- Barbed Shot deals 10% increased damage, and applying Barbed Shot has a 25% chance to reset the cooldown of Kill Command.
wild_call = { 79966, 185789, 1 }, -- Your auto shot critical strikes have a 20% chance to reset the cooldown of Barbed Shot.
wild_instincts = { 79946, 378442, 1 }, -- While Call of the Wild is active, each time you Kill Command, your Kill Command target takes $424567s1% increased damage from all of your pets, stacking up to $424567u times.
} )
-- PvP Talents
spec:RegisterPvpTalents( {
chimaeral_sting = 3604, -- (356719) Stings the target, dealing 2,198 Nature damage and initiating a series of venoms. Each lasts 3 sec and applies the next effect after the previous one ends. Scorpid Venom: 90% reduced movement speed. Spider Venom: Silenced. Viper Venom: 20% reduced damage and healing.
diamond_ice = 5534, -- (203340) Victims of Freezing Trap can no longer be damaged or healed. Freezing Trap is now undispellable, but has a 5 sec duration.
dire_beast_basilisk = 825 , -- (205691) Summons a slow moving basilisk near the target for 30 sec that attacks the target for heavy damage.
dire_beast_hawk = 824 , -- (208652) Summons a hawk to circle the target area, attacking all targets within 10 yards over the next 10 sec.
hunting_pack = 3730, -- (203235) Aspect of the Cheetah has 50% reduced cooldown and grants its effects to allies within 15 yds.
interlope = 1214, -- (248518) Misdirection now causes the next 3 hostile spells cast on your target within 10 sec to be redirected to your pet, but its cooldown is increased by 15 sec. Your pet must be within 20 yards of the target for spells to be redirected.
kindred_beasts = 5444, -- (356962) Command Pet's unique ability cooldown reduced by 50%, and gains additional effects.
survival_tactics = 3599, -- (202746) Feign Death reduces damage taken by $m1% for $202748d.
the_beast_within = 693 , -- (356976) Bestial Wrath now provides immunity to Fear and Horror effects for you and your pets for 8 sec. Nearby allied pets are also inspired, increasing their attack speed by 10%.
tranquilizing_darts = 5418, -- (356015) Interrupting or removing effects with Tranquilizing Shot and Counter Shot releases 8 darts at nearby enemies, each reducing the duration of a beneficial Magic effect by 4 sec.
wild_kingdom = 5441, -- (356707) Call in help from one of your dismissed Cunning pets for 10 sec. Your current pet is dismissed to rest and heal 30% of maximum health.
} )
-- Auras
spec:RegisterAuras( {
-- Talent: Under attack by a flock of crows.
-- https://wowhead.com/beta/spell=131894
a_murder_of_crows = {
id = 131894,
duration = 15,
tick_time = 1,
max_stack = 1
},
-- Movement speed reduced by $s1%.
-- https://wowhead.com/beta/spell=263446
acid_spit = {
id = 263446,
duration = 6,
mechanic = "snare",
type = "Ranged",
max_stack = 1
},
-- Dodge chance increased by $s1%.
-- https://wowhead.com/beta/spell=160011
agile_reflexes = {
id = 160011,
duration = 20,
max_stack = 1
},
-- Movement speed reduced by $s1%.
-- https://wowhead.com/beta/spell=50433
ankle_crack = {
id = 50433,
duration = 6,
mechanic = "snare",
max_stack = 1
},
-- Talent: Slowed by $s2%.
-- https://wowhead.com/beta/spell=390232
arctic_bola = {
id = 390232,
duration = 3,
type = "Ranged",
max_stack = 1
},
-- Movement speed increased by $w1%.
-- https://wowhead.com/beta/spell=186257
aspect_of_the_cheetah_sprint = {
id = 186257,
duration = 3,
max_stack = 1,
},
-- Movement speed increased by $w1%.
-- https://wowhead.com/beta/spell=186258
aspect_of_the_cheetah = {
id = 186258,
duration = function () return conduit.cheetahs_vigor.enabled and 12 or 9 end,
max_stack = 1,
},
-- The range of $?s259387[Mongoose Bite][Raptor Strike] is increased to $265189r yds.
-- https://wowhead.com/beta/spell=186289
aspect_of_the_eagle = {
id = 186289,
duration = 15,
max_stack = 1
},
-- Deflecting all attacks. Damage taken reduced by $w4%.
-- https://wowhead.com/beta/spell=186265
aspect_of_the_turtle = {
id = 186265,
duration = 8,
max_stack = 1
},
-- Talent: Suffering $w1 damage every $t1 sec.
-- https://wowhead.com/beta/spell=217200
barbed_shot = {
id = 246152,
duration = function() return 8 + ( talent.savagery.enabled and 2 or 0 ) end,
tick_time = 2,
mechanic = "bleed",
type = "Ranged",
max_stack = 1,
},
barbed_shot_2 = {
id = 246851,
duration = function() return 8 + ( talent.savagery.enabled and 2 or 0 ) end,
tick_time = 2,
mechanic = "bleed",
type = "Ranged",
max_stack = 1,
},
barbed_shot_3 = {
id = 246852,
duration = function() return 8 + ( talent.savagery.enabled and 2 or 0 ) end,
tick_time = 2,
mechanic = "bleed",
type = "Ranged",
max_stack = 1,
},
barbed_shot_4 = {
id = 246853,
duration = function() return 8 + ( talent.savagery.enabled and 2 or 0 ) end,
tick_time = 2,
mechanic = "bleed",
type = "Ranged",
max_stack = 1,
},
barbed_shot_5 = {
id = 246854,
duration = function() return 8 + ( talent.savagery.enabled and 2 or 0 ) end,
tick_time = 2,
mechanic = "bleed",
type = "Ranged",
max_stack = 1,
},
barbed_shot_6 = {
id = 284255,
duration = function() return 8 + ( talent.savagery.enabled and 2 or 0 ) end,
tick_time = 2,
mechanic = "bleed",
type = "Ranged",
max_stack = 1,
},
barbed_shot_7 = {
id = 284257,
duration = function() return 8 + ( talent.savagery.enabled and 2 or 0 ) end,
tick_time = 2,
mechanic = "bleed",
type = "Ranged",
max_stack = 1,
},
barbed_shot_8 = {
id = 284258,
duration = function() return 8 + ( talent.savagery.enabled and 2 or 0 ) end,
tick_time = 2,
mechanic = "bleed",
type = "Ranged",
max_stack = 1,
},
barbed_shot_dot = {
id = 217200,
duration = function() return 8 + ( talent.savagery.enabled and 2 or 0 ) end,
tick_time = 2,
mechanic = "bleed",
type = "Ranged",
max_stack = 1,
},
-- Talent:
-- https://wowhead.com/beta/spell=120360
barrage = {
id = 120360,
duration = 3,
tick_time = 0.2,
max_stack = 1
},
beast_cleave = {
id = 118455,
duration = 4,
max_stack = 1,
generate = function ()
local bc = buff.beast_cleave
local name, _, count, _, duration, expires, caster = FindUnitBuffByID( "pet", 118455 )
if name then
bc.name = name
bc.count = 1
bc.expires = expires
bc.applied = expires - duration
bc.caster = caster
return
end
bc.count = 0
bc.expires = 0
bc.applied = 0
bc.caster = "nobody"
end,
},
-- Talent: Damage dealt increased by $w1%.
-- https://wowhead.com/beta/spell=19574
bestial_wrath = {
id = 19574,
duration = 15,
type = "Ranged",
max_stack = 1
},
binding_shackles = {
id = 321469,
duration = 8,
max_stack = 1,
},
-- Talent: Bleeding for $w1 Physical damage every $t1 sec. Taking $s2% increased damage from the Hunter's pet.
-- https://wowhead.com/beta/spell=321538
bloodshed = {
id = 321538,
duration = 18,
tick_time = 3,
max_stack = 1,
generate = function ( t )
local name, count, duration, expires, caster, _
for i = 1, 40 do
name, _, count, _, duration, expires, caster = UnitDebuff( "target", 321538 )
if not name then break end
if name and UnitIsUnit( caster, "pet" ) then break end
end
if name then
t.name = name
t.count = count
t.expires = expires
t.applied = expires - duration
t.caster = "player"
return
end
t.count = 0
t.expires = 0
t.applied = 0
t.caster = "nobody"
end,
},
-- Damage reduced by $s1%.
-- https://wowhead.com/beta/spell=263869
bristle = {
id = 263869,
duration = 12,
max_stack = 1
},
-- Burrowed into the ground, dealing damage to enemies above.
-- https://wowhead.com/beta/spell=93433
burrow_attack = {
id = 93433,
duration = 8,
tick_time = 1,
type = "Magic",
max_stack = 1
},
-- Movement speed reduced by $s4%.
-- https://wowhead.com/beta/spell=186387
bursting_shot = {
id = 186387,
duration = 6,
type = "Ranged",
max_stack = 1
},
-- Summoning 1 of your active pets every 4 sec. Each pet summoned lasts for 6 sec.
-- https://wowhead.com/beta/spell=359844
call_of_the_wild = {
id = 359844,
duration = 20,
max_stack = 1
},
call_of_the_wild_summon = {
id = 361582,
duration = 6,
max_stack = 1
},
-- Talent: Stealthed.
-- https://wowhead.com/beta/spell=199483
camouflage = {
id = 199483,
duration = 60,
max_stack = 1
},
-- Dodge chance increased by $s1%.
-- https://wowhead.com/beta/spell=263892
catlike_reflexes = {
id = 263892,
duration = 20,
max_stack = 1
},
-- Talent: Your next Kill Command will consume $s1% less Focus.
-- https://wowhead.com/beta/spell=392296
cobra_sting = {
id = 392296,
duration = 15,
max_stack = 1
},
-- Talent: Movement slowed by $s1%.
-- https://wowhead.com/beta/spell=5116
concussive_shot = {
id = 5116,
duration = 6,
mechanic = "snare",
type = "Ranged",
max_stack = 1
},
-- Talent: Taking $w2% increased Physical damage from $@auracaster.
-- https://wowhead.com/beta/spell=325037
death_chakram_vulnerability = {
id = 375893,
duration = 10,
mechanic = "bleed",
type = "Ranged",
max_stack = 1,
copy = { 325037, 361756, "death_chakram_debuff" }
},
death_chakram = {
duration = 3.5,
tick_time = 0.5,
max_stack = 1,
generate = function( t, auraType )
local cast = action.death_chakram.lastCast or 0
if cast + class.auras.death_chakram.duration >= query_time then
t.name = class.abilities.death_chakram.name
t.count = 1
t.applied = cast
t.expires = cast + 3.5
t.caster = "player"
return
end
t.count = 0
t.applied = 0
t.expires = 0
t.caster = "nobody"
end,
},
-- Talent: Haste increased by $s1%.
-- https://wowhead.com/beta/spell=281036
dire_beast = {
id = 281036,
duration = function() return talent.dire_frenzy.enabled and 9 or 8 end,
max_stack = 1
},
dire_beast_basilisk = {
id = 209967,
duration = 30,
max_stack = 1,
},
dire_beast_hawk = {
id = 208684,
duration = 3600,
max_stack = 1,
},
dire_pack = {
id = 378747,
duration = 8,
max_stack = 1
},
-- Dodge chance increased by $s1%.
-- https://wowhead.com/beta/spell=263887
dragons_guile = {
id = 263887,
duration = 20,
max_stack = 1
},
-- Movement slowed by $s1%.
-- https://wowhead.com/beta/spell=50285
dust_cloud = {
id = 50285,
duration = 6,
mechanic = "snare",
type = "Magic",
max_stack = 1
},
-- Vision is enhanced.
-- https://wowhead.com/beta/spell=6197
eagle_eye = {
id = 6197,
duration = 60,
type = "Magic",
max_stack = 1
},
-- Talent: Exploding for $212680s1 Fire damage after $t1 sec.
-- https://wowhead.com/beta/spell=212431
explosive_shot = {
id = 212431,
duration = 3,
tick_time = 3,
type = "Ranged",
max_stack = 1
},
-- Directly controlling pet.
-- https://wowhead.com/beta/spell=321297
eyes_of_the_beast = {
id = 321297,
duration = 60,
type = "Magic",
max_stack = 1
},
-- Feigning death.
-- https://wowhead.com/beta/spell=5384
feign_death = {
id = 5384,
duration = 360,
max_stack = 1
},
-- Covenant: Bleeding for $s1 Shadow damage every $t1 sec.
-- https://wowhead.com/beta/spell=324149
flayed_shot = {
id = 324149,
duration = 18,
tick_time = 2,
mechanic = "bleed",
type = "Ranged",
max_stack = 1
},
-- Maximum health increased by $s1%.
-- https://wowhead.com/beta/spell=388035
fortitude_of_the_bear = {
id = 388035,
duration = 10,
max_stack = 1,
copy = 392956
},
freezing_trap = {
id = 3355,
duration = 60,
type = "Magic",
max_stack = 1,
},
-- Attack speed increased by $s1%.
-- https://wowhead.com/beta/spell=272790
frenzy = {
id = 272790,
duration = function () return azerite.feeding_frenzy.enabled and 9 or 8 end,
max_stack = 3,
generate = function ()
local fr = buff.frenzy
local name, _, count, _, duration, expires, caster = FindUnitBuffByID( "pet", 272790 )
if name then
fr.name = name
fr.count = count
fr.expires = expires
fr.applied = expires - duration
fr.caster = caster
return
end
fr.count = 0
fr.expires = 0
fr.applied = 0
fr.caster = "nobody"
end,
},
-- Movement speed reduced by $s1%.
-- https://wowhead.com/beta/spell=54644
frost_breath = {
id = 54644,
duration = 6,
mechanic = "snare",
type = "Magic",
max_stack = 1
},
-- Causing Froststorm damage to all targets within $95725A1 yards.
-- https://wowhead.com/beta/spell=92380
froststorm_breath = {
id = 92380,
duration = 8,
tick_time = 2,
max_stack = 1
},
-- Movement speed reduced by $s1%.
-- https://wowhead.com/beta/spell=263840
furious_bite = {
id = 263840,
duration = 6,
mechanic = "snare",
max_stack = 1
},
growl = {
id = 2649,
duration = 3,
max_stack = 1,
},
-- Can always be seen and tracked by the Hunter.; Damage taken increased by $428402s4% while above $s3% health.
-- https://wowhead.com/beta/spell=257284
hunters_mark = {
id = 257284,
duration = 3600,
tick_time = 0.5,
type = "Magic",
max_stack = 1,
shared = "target"
},
-- Talent: Your next Kill Shot is usable on any target, regardless of your target's current health.
-- https://wowhead.com/beta/spell=378215
hunters_prey = {
id = 378215,
duration = 15,
max_stack = 1
},
intimidation = {
id = 24394,
duration = 5,
max_stack = 1,
},
-- Talent: Bleeding for $w2 damage every $t2 sec.
-- https://wowhead.com/beta/spell=259277
kill_command = {
id = 259277,
duration = 8,
max_stack = 1
},
-- Injected with Latent Poison. $?s137015[Barbed Shot]?s137016[Aimed Shot]?s137017&!s259387[Raptor Strike][Mongoose Bite] consumes all stacks of Latent Poison, dealing ${$378016s1/$s1} Nature damage per stack consumed.
-- https://wowhead.com/beta/spell=378015
latent_poison = {
id = 378015,
duration = 15,
max_stack = 10
},
-- Movement speed reduced by $s1%.
-- https://wowhead.com/beta/spell=263423
lock_jaw = {
id = 263423,
duration = 6,
mechanic = "snare",
max_stack = 1
},
master_marksman = {
id = 269576,
duration = 6,
mechanic = "bleed",
max_stack = 1
},
masters_call = {
id = 54216,
duration = 4,
type = "Magic",
max_stack = 1,
},
-- Heals $w1% of the pet's health every $t1 sec.$?s343242[ Each time Mend Pet heals your pet, you have a $343242s2% chance to dispel a harmful magic effect from your pet.][]
-- https://wowhead.com/beta/spell=136
mend_pet = {
id = 136,
duration = 10,
type = "Magic",
max_stack = 1,
generate = function( t )
local name, _, count, _, duration, expires, caster = FindUnitBuffByID( "pet", 136 )
if name then
t.name = name
t.count = count
t.expires = expires
t.applied = expires - duration
t.caster = caster
return
end
t.count = 0
t.expires = 0
t.applied = 0
t.caster = "nobody"
end,
},
-- Talent: Threat redirected from Hunter.
-- https://wowhead.com/beta/spell=35079
misdirection = {
id = 35079,
duration = 8,
max_stack = 1,
},
-- Damage reduced by $s1%.
-- https://wowhead.com/beta/spell=263867
obsidian_skin = {
id = 263867,
duration = 12,
max_stack = 1
},
parsels_tongue = {
id = 248085,
duration = 8,
max_stack = 4,
},
-- Suffering $w1 Fire damage every $t1 sec.
-- https://wowhead.com/beta/spell=270332
pheromone_bomb = {
id = 270332,
duration = 6,
tick_time = 1,
type = "Ranged",
max_stack = 1
},
-- Pinned in place.
-- https://wowhead.com/beta/spell=50245
pin = {
id = 50245,
duration = 6,
mechanic = "root",
max_stack = 1
},
-- "When you're the best of friends..."
-- https://wowhead.com/beta/spell=90347
play = {
id = 90347,
duration = 15,
type = "Magic",
max_stack = 1
},
-- Talent: Increased movement speed by $s1%.
-- https://wowhead.com/beta/spell=118922
posthaste = {
id = 118922,
duration = 4,
max_stack = 1
},
predators_thirst = {
id = 264663,
duration = 3600,
max_stack = 1,
},
-- Stealthed. Movement speed slowed by $s2%.
-- https://wowhead.com/beta/spell=24450
prowl = {
id = 24450,
duration = 3600,
max_stack = 1
},
rejuvenating_wind = {
id = 339400,
duration = 8,
max_stack = 1
},
-- Zzzzzz...
-- https://wowhead.com/beta/spell=94019
rest = {
id = 94019,
duration = 12,
type = "Magic",
max_stack = 1
},
-- Talent: Feared.
-- https://wowhead.com/beta/spell=1513
scare_beast = {
id = 1513,
duration = 20,
mechanic = "flee",
type = "Magic",
max_stack = 1
},
-- Talent: Disoriented.
-- https://wowhead.com/beta/spell=213691
scatter_shot = {
id = 213691,
duration = 4,
type = "Ranged",
max_stack = 1
},
-- Talent: Ignoring line of sight to enemies in the targeted area.
-- https://wowhead.com/beta/spell=388045
sentinel_owl = {
id = 388045,
duration = function() return buff.sentinel_owl_ready.stack end,
max_stack = 1
},
sentinel_owl_ready = {
duration = 3600,
max_stack = 12,
generate = function( t, auraType )
local n = GetSpellCount( 388045 )
if n > 4 then
t.name = class.abilities.sentinel_owl.name
t.count = n
t.applied = now
t.expires = now + 3600
t.caster = "player"
return
end
t.count = 0
t.applied = 0
t.expires = 0
t.caster = "nobody"
end
},
-- Talent: Suffering $s2 Nature damage every $t2 sec.
-- https://wowhead.com/beta/spell=271788
serpent_sting = {
id = 271788,
duration = 18,
type = "Ranged",
max_stack = 1
},
-- Dodge chance increased by $s1%.
-- https://wowhead.com/beta/spell=263904
serpents_swiftness = {
id = 263904,
duration = 20,
max_stack = 1
},
-- Suffering $w1 Fire damage every $t1 sec. $?s259387[Mongoose Bite][Raptor Strike] and Butchery apply a stack of Internal Bleeding.
-- https://wowhead.com/beta/spell=270339
shrapnel_bomb = {
id = 270339,
duration = 6,
tick_time = 1,
type = "Ranged",
max_stack = 1
},
-- Damage taken reduced by $s1%.
-- https://wowhead.com/beta/spell=263938
silverback = {
id = 263938,
duration = 15,
max_stack = 1
},
-- Heals $w2 every $t2 sec for $d.
-- https://wowhead.com/beta/spell=90361
spirit_mend = {
id = 90361,
duration = 10,
type = "Magic",
max_stack = 1
},
-- Stealthed. Movement speed slowed by $s2%.
-- https://wowhead.com/beta/spell=90328
spirit_walk = {
id = 90328,
duration = 3600,
max_stack = 1
},
-- Talent: Slowed by $s2%. $s3% increased chance suffer a critical strike from $@auracaster.
-- https://wowhead.com/beta/spell=201594
stampede = {
id = 201594,
duration = 5,
type = "Ranged",
max_stack = 1
},
-- Talent: Bleeding for $w1 damage every $t1 seconds.
-- https://wowhead.com/beta/spell=162487
steel_trap = {
id = 162487,
duration = 20,
tick_time = 2,
mechanic = "bleed",
type = "Ranged",
max_stack = 1
},
-- Reduces damage taken by $202746s1%, up to a maximum of $w1.
survival_tactics = {
id = 202748,
duration = 3.0,
max_stack = 1,
},
-- Movement speed reduced by $s1%.
-- https://wowhead.com/beta/spell=263852
talon_rend = {
id = 263852,
duration = 6,
mechanic = "snare",
max_stack = 1
},
tar_trap = {
id = 135299,
duration = 30,
max_stack = 1,
},
-- Movement speed reduced by $s1%.
-- https://wowhead.com/beta/spell=160065
tendon_rip = {
id = 160065,
duration = 6,
mechanic = "snare",
max_stack = 1
},
-- Damage taken reduced by $s1%.
-- https://wowhead.com/beta/spell=263926
thick_fur = {
id = 263926,
duration = 15,
max_stack = 1
},
-- Damage taken reduced by $s1%.
-- https://wowhead.com/beta/spell=160058
thick_hide = {
id = 160058,
duration = 15,
max_stack = 1
},
-- Talent: Critical strike chance increased by $s1%.
-- https://wowhead.com/beta/spell=257946
thrill_of_the_hunt = {
id = 257946,
duration = 8,
max_stack = function() return talent.thrill_of_the_hunt.rank end,
copy = 312365
},
trailblazer = {
id = 231390,
duration = 3600,
max_stack = 1,
},
-- Suffering $w1 Fire damage every $t1 sec.
-- https://wowhead.com/beta/spell=271049
volatile_bomb = {
id = 271049,
duration = 6,
tick_time = 1,
type = "Magic",
max_stack = 1
},
-- Talent: Silenced.
-- https://wowhead.com/beta/spell=355596
wailing_arrow = {
id = 355596,
duration = 5,
mechanic = "silence",
type = "Magic",
max_stack = 1,
copy = 392061
},
-- Movement slowed by $s1%.
-- https://wowhead.com/beta/spell=35346
warp_time = {
id = 35346,
duration = 6,
type = "Magic",
max_stack = 1
},
-- Movement speed reduced by $s1%.
-- https://wowhead.com/beta/spell=160067
web_spray = {
id = 160067,
duration = 6,
mechanic = "snare",
max_stack = 1
},
-- Talent: The cooldown of $?s217200[Barbed Shot][Dire Beast] is reset.
-- https://wowhead.com/beta/spell=185791
wild_call = {
id = 185791,
duration = 4,
max_stack = 1
},
-- Damage taken from $@auracaster's Pets increased by $s1%.
wild_instincts = {
id = 424567,
duration = 8,
max_stack = 10,
},
-- Suffering $w1 Fire damage every $t1 sec.
-- https://wowhead.com/beta/spell=269747
wildfire_bomb = {
id = 269747,
duration = 6,
tick_time = 1,
type = "Magic",
max_stack = 1
},
-- Movement speed reduced by $s1%.
-- https://wowhead.com/beta/spell=195645
wing_clip = {
id = 195645,
duration = 15,
max_stack = 1
},
-- Dodge chance increased by $s1%.
-- https://wowhead.com/beta/spell=264360
winged_agility = {
id = 264360,
duration = 20,
max_stack = 1
},
-- PvP Talents
high_explosive_trap = {
id = 236777,
duration = 0.1,
max_stack = 1,
},
interlope = {
id = 248518,
duration = 45,
max_stack = 1,
},
roar_of_sacrifice = {
id = 53480,
duration = 12,
max_stack = 1,
},
the_beast_within = {
id = 212704,
duration = 15,
max_stack = 1,
},
-- Azerite Powers
dance_of_death = {
id = 274443,
duration = 8,
max_stack = 1
},
primal_instincts = {
id = 279810,
duration = 20,
max_stack = 1
},
-- Conduits
resilience_of_the_hunter = {
id = 339461,
duration = 8,
max_stack = 1
},
tactical_retreat = {
id = 339654,
duration = 3,
max_stack = 1
},
-- Legendaries
flamewakers_cobra_sting = {
id = 336826,
duration = 15,
max_stack = 1,
},
nessingwarys_trapping_apparatus = {
id = 336744,
duration = 5,
max_stack = 1,
copy = { "nesingwarys_trapping_apparatus", "nesingwarys_apparatus", "nessingwarys_apparatus" }
},
soulforge_embers = {
id = 336746,
duration = 12,
max_stack = 1
}
} )
spec:RegisterStateExpr( "barbed_shot_grace_period", function ()
return ( settings.barbed_shot_grace_period or 0 ) * gcd.max
end )
spec:RegisterHook( "spend", function( amt, resource )
if amt < 0 and resource == "focus" and buff.nessingwarys_trapping_apparatus.up then
amt = amt * 2
end
return amt, resource
end )
local ExpireNesingwarysTrappingApparatus = setfenv( function()
focus.regen = focus.regen * 0.5
forecastResources( "focus" )
end, state )
spec:RegisterGear( "tier31", 207216, 207217, 207218, 207219, 207221, 217183, 217185, 217181, 217182, 217184 )
spec:RegisterGear( "tier29", 200390, 200392, 200387, 200389, 200391 )
spec:RegisterAura( "lethal_command", {
id = 394298,
duration = 15,
max_stack = 1
} )
spec:RegisterHook( "reset_precast", function()
if debuff.tar_trap.up then
debuff.tar_trap.expires = debuff.tar_trap.applied + 30
end
if talent.blood_frenzy.enabled and buff.call_of_the_wild.up then
applyBuff( "beast_cleave", max( buff.beast_cleave.remains, buff.call_of_the_wild.remains ) )
end
if buff.nesingwarys_apparatus.up then
state:QueueAuraExpiration( "nesingwarys_apparatus", ExpireNesingwarysTrappingApparatus, buff.nesingwarys_apparatus.expires )
end
if now - action.resonating_arrow.lastCast < 6 then applyBuff( "resonating_arrow", 10 - ( now - action.resonating_arrow.lastCast ) ) end
end )
local trapUnits = { "target", "focus" }
local trappableClassifications = {
rare = true,
elite = true,
normal = true,
trivial = true,
minus = true
}
for i = 1, 5 do
trapUnits[ #trapUnits + 1 ] = "boss" .. i
end
for i = 1, 40 do
trapUnits[ #trapUnits + 1 ] = "nameplate" .. i
end
spec:RegisterHook( "COMBAT_LOG_EVENT_UNFILTERED", function( _, subtype, _, sourceGUID, sourceName, _, _, destGUID, destName, destFlags, _, spellID, spellName )
if subtype == "SPELL_CAST_SUCCESS" and sourceGUID == GUID and spellID == 187698 and legendary.soulforge_embers.enabled then
-- Capture all boss/elite targets present at this time as valid trapped targets.
table.wipe( tar_trap_targets )
for _, unit in ipairs( trapUnits ) do
if UnitExists( unit ) and UnitCanAttack( "player", unit ) and not trappableClassifications[ UnitClassification( unit ) ] then
tar_trap_targets[ UnitGUID( unit ) ] = true
end
end
end
end, false )
spec:RegisterStateTable( "tar_trap", setmetatable( {}, {
__index = function( t, k )
return state.debuff.tar_trap[ k ]
end
} ) )
-- Abilities
spec:RegisterAbilities( {
-- Talent: Summons a flock of crows to attack your target, dealing ${$131900s1*16} Physical damage over $d. If the target dies while under attack, A Murder of Crows' cooldown is reset.
a_murder_of_crows = {
id = 131894,
cast = 0,
cooldown = 60,
gcd = "spell",
school = "physical",
spend = 30,
spendType = "focus",
talent = "a_murder_of_crows",
startsCombat = true,
handler = function ()
applyDebuff( "target", "a_murder_of_crows" )
end,
},
-- A quick shot that causes $sw2 Arcane damage.$?s260393[ Arcane Shot has a $260393h% chance to reduce the cooldown of Rapid Fire by ${$260393m1/10}.1 sec.][]
arcane_shot = {
id = 185358,
cast = 0,
cooldown = 0,
gcd = "spell",
school = "arcane",
spend = 40,
spendType = "focus",
startsCombat = true,
handler = function ()
end,
},
-- Increases your movement speed by $s1% for $d, and then by $186258s1% for another $186258d.
aspect_of_the_cheetah = {
id = 186257,
cast = 0,
cooldown = function () return 180 * ( pvptalent.hunting_pack.enabled and 0.5 or 1 ) * ( legendary.call_of_the_wild.enabled and 0.75 or 1 ) * ( 1 - 0.075 * talent.born_to_be_wild.rank ) + ( conduit.cheetahs_vigor.mod * 0.001 ) end,
gcd = "off",
school = "physical",
startsCombat = false,
toggle = "cooldowns",
handler = function ()
applyBuff( "aspect_of_the_cheetah" )
applyBuff( "aspect_of_the_cheetah_sprint" )
end,
},
-- Deflects all attacks and reduces all damage you take by $s4% for $d, but you cannot attack.$?s83495[ Additionally, you have a $83495s1% chance to reflect spells back at the attacker.][]
aspect_of_the_turtle = {
id = 186265,
cast = 8,
channeled = true,
cooldown = function () return 180 * ( pvptalent.hunting_pack.enabled and 0.5 or 1 ) * ( legendary.call_of_the_wild.enabled and 0.75 or 1 ) * ( 1 - 0.075 * talent.born_to_be_wild.rank ) + ( conduit.cheetahs_vigor.mod * 0.001 ) end,
gcd = "off",
school = "physical",
startsCombat = false,
toggle = "cooldowns",
start = function ()
applyBuff( "aspect_of_the_turtle" )
end,
},
--[[ Talent: Fire off a Cobra Shot at your current target and $s1 other $Lenemy:enemies; near your current target. For the next $d, your Cobra Shot will fire at $s1 extra $Ltarget:targets; and Cobra Shot Focus cost reduced by $s2.$?s389654[ Each temporary beast summoned reduces the cooldown of Aspect of the Wild by ${$389654m1/1000}.1 sec.][]$?s389660[ While Aspect of the Wild is active, Cobra Shot deals $389660s1% increased damage.][]
aspect_of_the_wild = {
id = 193530,
cast = 0,
cooldown = function () return ( essence.vision_of_perfection.enabled and 0.87 or 1 ) * ( legendary.call_of_the_wild.enabled and 0.75 or 1 ) * 120 end,
gcd = "spell",
school = "physical",
talent = "aspect_of_the_wild",
startsCombat = false,
toggle = "cooldowns",
nobuff = function ()
if settings.aspect_vop_overlap then return end
return "aspect_of_the_wild"
end,
handler = function ()
applyBuff( "aspect_of_the_wild" )
if azerite.primal_instincts.enabled then gainCharges( "barbed_shot", 1 ) end
end,
}, ]]
-- Talent: Fire a shot that tears through your enemy, causing them to bleed for ${$s1*$s2} damage over $d$?s257944[ and increases your critical strike chance by $257946s1% for $257946d, stacking up to $257946u $Ltime:times;][]. Sends your pet into a frenzy, increasing attack speed by $272790s1% for $272790d, stacking up to $272790u times. |cFFFFFFFFGenerates ${$246152s1*$246152d/$246152t1} Focus over $246152d.|r
barbed_shot = {
id = 217200,
cast = 0,
charges = 2,
cooldown = function () return ( conduit.bloodletting.enabled and 11 or 12 ) * haste end,
recharge = function () return ( conduit.bloodletting.enabled and 11 or 12 ) * haste end,
gcd = "spell",
school = "physical",
talent = "barbed_shot",
startsCombat = true,
velocity = 50,
cycle = "barbed_shot_dot",
handler = function ()
if buff.barbed_shot.down then applyBuff( "barbed_shot" )
else
for i = 2, 8 do
if buff[ "barbed_shot_" .. i ].down then applyBuff( "barbed_shot_" .. i ); break end
end
end
applyDebuff( "target", "barbed_shot_dot" )
addStack( "frenzy", 8, 1 )
if talent.barbed_wrath.enabled then reduceCooldown( "bestial_wrath", 12 ) end
if talent.thrill_of_the_hunt.enabled then addStack( "thrill_of_the_hunt", nil, 1 ) end
-- No longer predictable (11/1 nerfs).
-- if talent.war_orders.rank > 1 then setCooldown( "kill_command", 0 ) end
removeDebuff( "target", "latent_poison" )
if set_bonus.tier29_4pc > 0 then applyBuff( "lethal_command" ) end
if legendary.qapla_eredun_war_order.enabled then
setCooldown( "kill_command", 0 )
end
end,
},
-- Talent: Rapidly fires a spray of shots for $120360d, dealing an average of $<damageSec> Physical damage to all nearby enemies in front of you. Usable while moving. Deals reduced damage beyond $120361s1 targets.
barrage = {
id = 120360,
cast = function () return 3 * haste end,
channeled = true,
cooldown = 20,
gcd = "spell",
school = "physical",
spend = 60,
spendType = "focus",
talent = "barrage",
startsCombat = true,
start = function ()
applyBuff( "barrage" )
end,
},
-- Talent: Sends you and your pet into a rage, instantly dealing $<damage> Physical damage to its target, and increasing all damage you both deal by $s1% for $d. Removes all crowd control effects from your pet. $?s231548[ Bestial Wrath's remaining cooldown is reduced by $s3 sec each time you use Barbed Shot][]$?s193532[ and activating Bestial Wrath grants $s2 $Lcharge:charges; of Barbed Shot.][]$?s231548&!s193532[.][]
bestial_wrath = {
id = 19574,
cast = 0,
cooldown = 90,
gcd = "spell",
school = "physical",
talent = "bestial_wrath",
startsCombat = false,
toggle = "cooldowns",
nobuff = function () return settings.avoid_bw_overlap and "bestial_wrath" or nil, "avoid_bw_overlap is checked and bestial_wrath is up" end,
handler = function ()
applyBuff( "bestial_wrath" )
if talent.scent_of_blood.enabled then gainCharges( "barbed_shot", 2 ) end
if set_bonus.tier31_2pc > 0 then
applyBuff( "dire_beast", 15 )
summonPet( "dire_beast", 15 )
end
if pvptalent.the_beast_within.enabled then applyBuff( "the_beast_within" ) end
end,
},
-- Talent: Fires a magical projectile, tethering the enemy and any other enemies within $s2 yards for $d, stunning them for $117526d if they move more than $s2 yards from the arrow.$?s321468[ Targets stunned by Binding Shot deal $321469s1% less damage to you for $321469d after the effect ends.][]
binding_shot = {
id = 109248,
cast = 0,
cooldown = 45,
gcd = "spell",
school = "nature",
talent = "binding_shot",
startsCombat = false,
handler = function ()
applyDebuff( "target", "binding_shot" )
end,
},
-- Talent: Command your pet to tear into your target, causing your target to bleed for $<damage> over $321538d and increase all damage taken from your pet by $321538s2% for $321538d.
bloodshed = {
id = 321530,
cast = 0,
cooldown = 60,
gcd = "spell",
school = "physical",
talent = "bloodshed",
startsCombat = true,
usable = function() return pet.alive, "requires a living pet" end,
handler = function ()
applyDebuff( "target", "bloodshed" )
end,
},
-- Talent: You sound the call of the wild, summoning $s1 of your active pets for $d. During this time, a random pet from your stable will appear every $t2 sec to assault your target for $361582d.$?s378442[ While Call of the Wild is active, Barbed Shot has a $378442h% chance to gain a charge any time Focus is spent.][]$?s378739[ While Call of the Wild is active, Barbed Shot affects all of your summoned pets.][]
call_of_the_wild = {
id = 359844,
cast = 0,
cooldown = 120,
gcd = "spell",
school = "nature",
talent = "call_of_the_wild",
startsCombat = false,
toggle = "cooldowns",
handler = function ()
applyBuff( "call_of_the_wild" )
if talent.bloody_frenzy.enabled then applyBuff( "beast_cleave", 20 ) end
end,
},
-- Talent: You and your pet blend into the surroundings and gain stealth for $d. While camouflaged, you will heal for $s4% of maximum health every $T4 sec.
camouflage = {
id = 199483,
cast = 0,
cooldown = 60,
gcd = "off",
school = "physical",
talent = "camouflage",
startsCombat = false,
handler = function ()
applyBuff( "camouflage" )
end,
},
-- Talent: A quick shot causing ${$s2*$<mult>} Physical damage. Reduces the cooldown of Kill Command by $?s378244[${$s3+($378244s1/-1000)}][$s3] sec.
cobra_shot = {
id = 193455,
cast = 0,
cooldown = 0,
gcd = "spell",
school = "physical",
spend = 35,
spendType = "focus",
talent = "cobra_shot",
startsCombat = true,
handler = function ()
if debuff.concussive_shot.up then debuff.concussive_shot.expires = debuff.concussive_shot.expires + 3 end
if talent.killer_cobra.enabled and buff.bestial_wrath.up then setCooldown( "kill_command", 0 )
else
gainChargeTime( "kill_command", talent.cobra_senses.enabled and 2 or 1 )
end
if set_bonus.tier30_4pc > 0 then reduceCooldown( "bestial_wrath", 1 ) end
end,
},
-- Talent: Dazes the target, slowing movement speed by $s1% for $d. $?s193455[Cobra Shot][Steady Shot] will increase the duration of Concussive Shot on the target by ${$56641m3/10}.1 sec.
concussive_shot = {
id = 5116,
cast = 0,
cooldown = 5,
gcd = "spell",
school = "physical",
talent = "concussive_shot",
startsCombat = true,
handler = function ()
applyDebuff( "target", "concussive_shot" )
end,
},
-- Talent: Interrupts spellcasting, preventing any spell in that school from being cast for $d.
counter_shot = {
id = 147362,
cast = 0,
cooldown = 24,
gcd = "off",
school = "physical",
talent = "counter_shot",
startsCombat = true,
toggle = "interrupts",
debuff = "casting",
readyTime = state.timeToInterrupt,
handler = function ()
if conduit.reversal_of_fortune.enabled then
gain( conduit.reversal_of_fortune.mod, "focus" )
end
interrupt()
end,
},
-- Covenant (Necrolord) / Talent: Throw a deadly chakram at your current target that will rapidly deal $375893s1 Physical damage $x times, bouncing to other targets if they are nearby. Enemies struck by Death Chakram take $375893s2% more damage from you and your pet for $375893d. Each time the chakram deals damage, its damage is increased by $s3% and you generate $s4 Focus.
death_chakram = {
id = function() return talent.death_chakram.enabled and 375891 or 325028 end,
cast = 0,
cooldown = 45,
gcd = "spell",
school = "physical",
startsCombat = true,
handler = function ()
applyBuff( "death_chakram" )
applyDebuff( "target", "death_chakram_vulnerability" )
if soulbind.kevins_oozeling.enabled then applyBuff( "kevins_oozeling" ) end
end,
copy = { 325028, 375891 }
},
-- Talent: Summons a powerful wild beast that attacks the target and roars, increasing your Haste by $281036s1% for $d.
dire_beast = {
id = 120679,
cast = 0,
cooldown = 20,
gcd = "spell",
school = "nature",
talent = "dire_beast",
startsCombat = true,
handler = function ()
applyBuff( "dire_beast" )
summonPet( "dire_beast", 8 )
end,
},
dire_beast_basilisk = {
id = 205691,
cast = 0,
cooldown = 120,
gcd = "spell",
spend = 60,
spendType = "focus",
toggle = "cooldowns",
pvptalent = "dire_beast_basilisk",
startsCombat = true,
texture = 1412204,
handler = function ()
applyDebuff( "target", "dire_beast_basilisk" )
end,
},
dire_beast_hawk = {
id = 208652,
cast = 0,
cooldown = 30,
gcd = "spell",
spend = 30,
spendType = "focus",
pvptalent = "dire_beast_hawk",
startsCombat = true,
texture = 612363,
handler = function ()
applyDebuff( "target", "dire_beast_hawk" )
end,
},
-- Leap backwards$?s109215[, clearing movement impairing effects, and increasing your movement speed by $118922s1% for $118922d][]$?s109298[, and activating a web trap which encases all targets within $115928A1 yards in sticky webs, preventing movement for $136634d][].
disengage = {
id = 781,
cast = 0,
cooldown = 20,
gcd = "off",
school = "physical",
icd = 0.5,
startsCombat = false,
handler = function ()
if talent.posthaste.enabled then applyBuff( "posthaste" ) end
if conduit.tactical_retreat.enabled then applyDebuff( "target", "tactical_retreat" ) end
end,
},
-- Changes your viewpoint to the targeted location for $d. Only usable outdoors.
eagle_eye = {
id = 6197,
cast = 60,
channeled = true,
cooldown = 0,
gcd = "spell",
school = "arcane",
startsCombat = false,
start = function ()
applyBuff( "eagle_eye" )
end,
},
exhilaration = {
id = 109304,
cast = 0,
cooldown = 120,
gcd = "spell",
startsCombat = false,
texture = 461117,
toggle = "defensives",
handler = function ()
if talent.rejuvenating_wind.enabled or conduit.rejuvenating_wind.enabled then applyBuff( "rejuvenating_wind" ) end
end,
},
-- Talent: Fires an explosive shot at your target. After $t1 sec, the shot will explode, dealing $212680s1 Fire damage to all enemies within $212680A1 yards. Deals reduced damage beyond $s2 targets.
explosive_shot = {
id = 212431,
cast = 0,
cooldown = 30,
gcd = "spell",
school = "fire",
spend = 20,
spendType = "focus",
talent = "explosive_shot",
startsCombat = true,
handler = function ()
applyDebuff( "target", "explosive_shot" )
end,
},
-- Take direct control of your pet and see through its eyes for $d.
eyes_of_the_beast = {
id = 321297,
cast = 2,
cooldown = 0,
gcd = "spell",
school = "nature",
startsCombat = false,
handler = function ()
applyBuff( "eyes_of_the_beast" )
end,
},
-- Feign death, tricking enemies into ignoring you. Lasts up to $d.
feign_death = {
id = 5384,
cast = 0,
cooldown = function () return legendary.craven_stategem.enabled and 15 or 30 end,
gcd = "off",
school = "physical",
startsCombat = false,
handler = function ()
applyBuff( "feign_death" )
if pvptalent.survival_tactics.enabled then
applyBuff( "survival_tactics" )
end
if legendary.craven_strategem.enabled then
removeDebuff( "player", "dispellable_curse" )
removeDebuff( "player", "dispellable_disease" )
removeDebuff( "player", "dispellable_magic" )
removeDebuff( "player", "dispellable_poison" )
end
end,
},
-- Exposes all hidden and invisible enemies within the targeted area for $m1 sec.
flare = {
id = 1543,
cast = 0,
cooldown = 20,
gcd = "spell",
school = "arcane",
startsCombat = false,
handler = function ()
if legendary.soulforge_embers.enabled and debuff.tar_trap.up then
applyDebuff( "target", "soulforge_embers" )
active_dot.soulforge_embers = max( 1, min( 5, active_dot.tar_trap ) )
end
end,
},
-- Increase the maximum health of you and your pet by 20% for 10 sec, and instantly heals you for that amount.
fortitude_of_the_bear = {
id = 272679,
cast = 0,
cooldown = function() return pvptalent.kindred_beasts.enabled and 60 or 120 end,
gcd = "off",
startsCombat = false,
texture = off,
handler = function ()
local hp = health.max * 0.2
health.max = health.max + hp
gain( hp, "health" )
applyBuff( "fortitude_of_the_bear" )
end,
copy = { 388035, 392956 }, -- Pet's version?
auras = {
fortitude_of_the_bear = {
id = 388035,
duration = 10,
max_stack = 1,
copy = 392956
}
}
},
-- Hurls a frost trap to the target location that incapacitates the first enemy that approaches for $3355d. Damage will break the effect. Limit 1. Trap will exist for $3355d.
freezing_trap = {
id = 187650,
cast = 0,
cooldown = function() return 30 - 2.5 * talent.improved_traps.rank end,
gcd = "spell",
school = "physical",
spend = function ()
if legendary.nessingwarys_trapping_apparatus.enabled then
return -45, "focus"
end
end,
startsCombat = false,
handler = function ()
end,
},
-- Talent: Hurls a fire trap to the target location that explodes when an enemy approaches, causing $236777s2 Fire damage and knocking all enemies away. Trap will exist for $236775d.$?s321468[ Targets knocked back by High Explosive Trap deal $321469s1% less damage to you for $321469d after being knocked back.][]
high_explosive_trap = {
id = 236776,
cast = 0,
cooldown = function() return 40 - 2.5 * talent.improved_traps.rank end,
gcd = "spell",
school = "fire",
spend = function ()
if legendary.nessingwarys_trapping_apparatus.enabled then
return -45, "focus"
end
end,
talent = "high_explosive_trap",
startsCombat = false,
handler = function ()
end,
},
-- Apply Hunter's Mark to the target, causing the target to always be seen and tracked by the Hunter.; Hunter's Mark increases all damage dealt to targets above $s3% health by $428402s1%. Only one Hunter's Mark damage increase can be applied to a target at a time.; Hunter's Mark can only be applied to one target at a time. When applying Hunter's Mark in combat, the ability goes on cooldown for ${$s5/1000} sec.
hunters_mark = {
id = 257284,
cast = 0,
cooldown = function () return time > 0 and 20 or 0 end,
gcd = "totem",
school = "nature",
startsCombat = false,
handler = function ()
applyDebuff( "target", "hunters_mark" )
end,
},
interlope = {
id = 248518,
cast = 0,
cooldown = 45,
gcd = "spell",
pvptalent = "interlope",
startsCombat = false,
texture = 132180,
handler = function ()
end,
},
-- Talent: Commands your pet to intimidate the target, stunning it for $24394d.$?s321468[ Targets stunned by Intimidation deal $321469s1% less damage to you for $321469d after the effect ends.][]
intimidation = {
id = 19577,
cast = 0,
cooldown = 60,
gcd = "spell",
school = "nature",
talent = "intimidation",
startsCombat = true,
handler = function ()
applyDebuff( "target", "intimidation" )
end,
},
-- Talent: Give the command to kill, causing your pet to savagely deal $<damage> Physical damage to the enemy.
kill_command = {
id = 34026,
cast = 0,
charges = function() return talent.alpha_predator.enabled and 2 or nil end,
cooldown = function () return 7.5 * ( buff.dire_pack.up and 0.5 or 1 ) * haste end,
recharge = function() return talent.alpha_predator.enabled and ( 7.5 * ( buff.dire_pack.up and 0.5 or 1 ) * haste ) or nil end,
icd = 0.5,
gcd = "spell",
school = "physical",
spend = function () return ( buff.cobra_sting.up or buff.flamewakers_cobra_sting.up ) and 0 or ( 30 * ( buff.dire_pack.up and 0.5 or 1 ) ) end,
spendType = "focus",
talent = "kill_command",
startsCombat = true,
disabled = function()
if settings.check_pet_range and settings.petbased and Hekili:PetBasedTargetDetectionIsReady( true ) and not Hekili:TargetIsNearPet( "target" ) then return true, "not in-range of pet" end
end,
handler = function ()
removeBuff( "cobra_sting" )
removeBuff( "flamewakers_cobra_sting" )
removeBuff( "lethal_command" )
if set_bonus.tier30_4pc > 0 then reduceCooldown( "bestial_wrath", 1 ) end
if talent.wild_instincts.enabled and buff.call_of_the_wild.up then
applyDebuff( "target", "wild_instincts", nil, buff.wild_instincts.stack + 1 )
end
end,
},
-- Talent: You attempt to finish off a wounded target, dealing $s1 Physical damage. Only usable on enemies with less than $s2% health.$?s343248[ Kill Shot deals $343248s1% increased critical damage.][]
kill_shot = {
id = function() return state.spec.survival and 320976 or 53351 end,
cast = 0,
charges = function() return talent.deadeye.enabled and 2 or nil end,
cooldown = function() return talent.deadeye.enabled and 7 or 10 end,
recharge = function() return talent.deadeye.enabled and 7 or nil end,
gcd = "spell",
school = "physical",
spend = function () return ( buff.hunters_prey.up or buff.flayers_mark.up ) and 0 or 10 end,
spendType = "focus",
talent = "kill_shot",
startsCombat = true,
usable = function () return buff.hunters_prey.up or buff.flayers_mark.up or target.health_pct < 20, "requires flayers_mark/hunters_prey or target health below 20 percent" end,
handler = function ()
if buff.flayers_mark.up and legendary.pouch_of_razor_fragments.enabled then
applyDebuff( "target", "pouch_of_razor_fragments" )
removeBuff( "flayers_mark" )
else
removeBuff( "hunters_prey" )
end
end,
copy = { 53351, 320976 }
},
-- Your pet removes all root and movement impairing effects from itself and a friendly target, and grants immunity to all such effects for 4 sec.
masters_call = {
id = 272682,
cast = 0,
cooldown = function() return pvptalent.kindred_beasts.enabled and 22.5 or 45 end,
gcd = "spell",
startsCombat = false,
texture = off,
handler = function ()
applyBuff( "masters_call" )
end,
copy = 53271, -- Pet's version.
auras = {
masters_call = {
id = 62305,
duration = 4,
max_stack = 1
}
}
},
-- Talent: Misdirects all threat you cause to the targeted party or raid member, beginning with your next attack within $d and lasting for $35079d.
misdirection = {
id = 34477,
cast = 0,
cooldown = 30,
gcd = "off",
school = "physical",
talent = "misdirection",
nopvptalent = "interlope",
startsCombat = false,
handler = function ()
applyBuff( "misdirection" )
end,
},
-- Talent: Fires several missiles, hitting all nearby enemies within $A2 yards of your current target for $s2 Physical damage$?s115939[ and triggering Beast Cleave][]. Deals reduced damage beyond $s1 targets.$?s19434[ |cFFFFFFFFGenerates $213363s1 Focus per target hit.|r][]
multishot = {
id = 2643,
cast = 0,
cooldown = 0,
gcd = "spell",
school = "physical",
spend = 40,
spendType = "focus",
talent = "multishot",
startsCombat = true,
handler = function ()
applyBuff( "beast_cleave" )
if set_bonus.tier30_4pc > 0 then reduceCooldown( "bestial_wrath", 1 ) end
end,
},
-- Talent: Interrupts spellcasting, preventing any spell in that school from being cast for $d.
muzzle = {
id = 187707,
cast = 0,
cooldown = 15,
gcd = "off",
school = "physical",
startsCombat = true,
toggle = "interrupts",
debuff = "casting",
readyTime = state.timeToInterrupt,
handler = function ()
if conduit.reversal_of_fortune.enabled then gain( conduit.reversal_of_fortune.mod, "focus" ) end
interrupt()
end,
},
primal_rage = {
id = 272678,
cast = 0,
cooldown = 360,
gcd = "spell",
toggle = "cooldowns",
startsCombat = true,
texture = 136224,
usable = function () return pet.alive and pet.ferocity, "requires a living ferocity pet" end,
handler = function ()
applyBuff( "primal_rage" )
stat.haste = stat.haste + 0.4
applyDebuff( "player", "exhaustion" )
end,
},
roar_of_sacrifice = {
id = 53480,
cast = 0,
cooldown = 60,
gcd = "spell",
talent = "roar_of_sacrifice",
startsCombat = false,
texture = 464604,
handler = function ()
applyBuff( "roar_of_sacrifice" )
end,
},
--[[ Talent: Scares a beast, causing it to run in fear for up to $d. Damage caused may interrupt the effect. Only one beast can be feared at a time.
scare_beast = {
id = 1513,
cast = 1.5,
cooldown = 0,
gcd = "spell",
school = "nature",
spend = 25,
spendType = "focus",
talent = "scare_beast",
startsCombat = false,
usable = function() return target.is_beast, "requires a beast target" end,
handler = function ()
applyDebuff( "tagret", "scare_beast" )
end,
}, ]]
-- Talent: A short-range shot that deals $s1 damage, removes all harmful damage over time effects, and incapacitates the target for $d. Any damage caused will remove the effect. Turns off your attack when used.$?s321468[ Targets incapacitated by Scatter Shot deal $321469s1% less damage to you for $321469d after the effect ends.][]
scatter_shot = {
id = 213691,
cast = 0,
cooldown = 30,
gcd = "spell",
school = "physical",
talent = "scatter_shot",
startsCombat = false,
handler = function ()
-- trigger scatter_shot [37506]
applyDebuff( "target", "scatter_shot" )
end,
},
sentinel_owl = {
id = 388045,
cast = 0,
cooldown = 0,
gcd = 0,
talent = "sentinel_owl",
startsCombat = true,
usable = function() return buff.sentinel_owl_ready.stack > 4, "requires 5+ stacks of sentinel_owl_ready" end,
handler = function ()
removeBuff( "sentinel_owl_ready" )
applyDebuff( "target", "sentinel_owl" )
end,
},
-- Talent: Fire a shot that poisons your target, causing them to take $s1 Nature damage instantly and an additional $o2 Nature damage over $d.$?s260241[ Serpent Sting fires arrows at $260241s1 additional $Lenemy:enemies; near your target.][]$?s378014[ Serpent Sting's damage applies Latent Poison to the target, stacking up to $378015u times. $@spelldesc393949 consumes all stacks of Latent Poison, dealing $378016s1 Nature damage to the target per stack consumed.][]
serpent_sting = {
id = 271788,
cast = 0,
cooldown = 0,
gcd = "spell",
school = "nature",
spend = function () return 10 * ( legendary.eagletalons_true_focus.enabled and buff.trueshot.up and 0.75 or 1 ) end,
spendType = "focus",
talent = "serpent_sting",
startsCombat = false,
velocity = 60,
impact = function ()
applyDebuff( "target", "serpent_sting" )
if talent.hydras_bite.enabled then active_dot.serpent_sting = min( true_active_enemies, active_dot.serpent_sting + 2 ) end
if talent.poison_injection.enabled then applyDebuff( "target", "latent_poison", nil, debuff.latent_poison.stack + 1 ) end
end,
},
spirit_mend = {
id = 90361,
cast = 0,
cooldown = 30,
gcd = "spell",
startsCombat = false,
texture = 237586,
handler = function ()
applyBuff( "spirit_mend" )
end,
},
-- Talent: Summon a herd of stampeding animals from the wilds around you that deal ${$201594s1*6} Physical damage to your enemies over $d. Enemies struck by the stampede are snared by $201594s2%, and you have $201594s3% increased critical strike chance against them for $201594d.
stampede = {
id = 201430,
cast = 0,
cooldown = 120,
gcd = "spell",
school = "physical",
talent = "stampede",
startsCombat = false,
toggle = "cooldowns",
handler = function ()
applyDebuff( "target", "stampede" )
end,
},
-- Talent: Hurls a Steel Trap to the target location that snaps shut on the first enemy that approaches, immobilizing them for $162480d and causing them to bleed for $162487o1 damage over $162487d. Damage other than Steel Trap may break the immobilization effect. Trap will exist for $162496d. Limit 1.
steel_trap = {
id = 162488,
cast = 0,
cooldown = function() return 30 - 2.5 * talent.improved_traps.rank end,
gcd = "spell",
school = "physical",
spend = function ()
if legendary.nessingwarys_trapping_apparatus.enabled then
return -45, "focus"
end
end,
talent = "steel_trap",
startsCombat = false,
handler = function ()
end,
},
survival_of_the_fittest = {
id = 264735,
cast = 0,
cooldown = function () return ( talent.lone_survivor.enabled and 150 or 180 ) * ( pvptalent.hunting_pack.enabled and 0.5 or 1 ) * ( legendary.call_of_the_wild.enabled and 0.75 or 1 ) * ( 1 - 0.075 * talent.born_to_be_wild.rank ) + ( conduit.cheetahs_vigor.mod * 0.001 ) end,
gcd = "off",
startsCombat = false,
handler = function()
applyBuff( "survival_of_the_fittest" )
end,
},
summon_pet = {
id = 883,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = 0,
spendType = "focus",
startsCombat = false,
texture = 'Interface\\ICONS\\Ability_Hunter_BeastCall',
essential = true,
nomounted = true,
usable = function () return not pet.exists, "requires no active pet" end,
handler = function ()
summonPet( "made_up_pet", 3600, "ferocity" )
end,
},
-- Talent: Hurls a tar trap to the target location that creates a $187699s1 yd radius pool of tar around itself for $13810d when the first enemy approaches. All enemies have $135299s1% reduced movement speed while in the area of effect. Trap will exist for $13809d.
tar_trap = {
id = 187698,
cast = 0,
cooldown = function() return 30 - 2.5 * talent.improved_traps.rank end,
gcd = "spell",
school = "physical",
spend = function ()
if legendary.nessingwarys_trapping_apparatus.enabled then
return -45, "focus"
end
end,
talent = "tar_trap",
startsCombat = false,
-- Let's not recommend Tar Trap if Flare is on CD.
timeToReady = function () return max( 0, cooldown.flare.remains - gcd.max ) end,
handler = function ()
applyDebuff( "target", "tar_trap" )
end,
},
-- Talent: Removes $s1 Enrage and $s2 Magic effect from an enemy target.$?s343244[ Successfully dispelling an effect generates $343244s1 Focus.][]
tranquilizing_shot = {
id = 19801,
cast = 0,
cooldown = 10,
gcd = "totem",
school = "nature",
talent = "tranquilizing_shot",
startsCombat = true,
toggle = "interrupts",
usable = function () return buff.dispellable_enrage.up or buff.dispellable_magic.up, "requires enrage or magic effect" end,
handler = function ()
removeBuff( "dispellable_enrage" )
removeBuff( "dispellable_magic" )
if state.spec.survival or talent.improved_tranquilizing_shot.enabled then gain( 10, "focus" ) end
end,
},
-- Sylvanas Legendary / Talent: Fire an enchanted arrow, dealing $354831s1 Shadow damage to your target and an additional $354831s2 Shadow damage to all enemies within $354831A2 yds of your target. Targets struck by a Wailing Arrow are silenced for $355596d.
wailing_arrow = {
id = function() return talent.wailing_arrow.enabled and 392060 or 355589 end,
cast = 2,
cooldown = 60,
gcd = "spell",
spend = 15,
spendType = "focus",
toggle = "cooldowns",
startsCombat = true,
usable = function ()
if moving and settings.prevent_hardcasts then return false, "prevent_hardcasts is checked and player is moving" end
return true
end,
handler = function ()
interrupt()
applyDebuff( "target", "wailing_arrow" )
if talent.readiness.enabled then
setCooldown( "rapid_fire", 0 )
gainCharges( "aimed_shot", 2 )
end
end,
copy = { 392060, 355589 }
},
-- Maims the target, reducing movement speed by $s1% for $d.
wing_clip = {
id = 195645,
cast = 0,
cooldown = 0,
gcd = "spell",
school = "physical",
spend = 20,
spendType = "focus",
startsCombat = true,
handler = function ()
applyDebuff( "target", "wing_clip" )
end,
},
-- Utility
mend_pet = {
id = 136,
cast = 0,
cooldown = 10,
gcd = "spell",
startsCombat = false,
usable = function ()
if not pet.alive then return false, "requires a living pet" end
return true
end,
},
} )
spec:RegisterRanges( "arcane_shot", "kill_command", "wing_clip" )
spec:RegisterOptions( {
enabled = true,
aoe = 3,
cycle = false,
nameplates = false,
nameplateRange = 40,
rangeFilter = false,
damage = true,
damageExpiration = 3,
potion = "spectral_agility",
package = "Beast Mastery",
} )
spec:RegisterSetting( "barbed_shot_grace_period", 0.5, {
name = "|T2058007:0|t Barbed Shot Grace Period",
desc = "If set above zero, the addon (using the default priority or |cFFFFD100barbed_shot_grace_period|r expression) will recommend |T2058007:0|t Barbed Shot up to 1 global cooldown earlier.",
icon = 2058007,
iconCoords = { 0.1, 0.9, 0.1, 0.9 },
type = "range",
min = 0,
max = 1,
step = 0.01,
width = "full"
} )
spec:RegisterSetting( "avoid_bw_overlap", false, {
name = "Avoid |T132127:0|t Bestial Wrath Overlap",
desc = "If checked, the addon will not recommend |T132127:0|t Bestial Wrath if the buff is already applied.",
type = "toggle",
width = "full"
} )
spec:RegisterSetting( "mark_any", false, {
name = strformat( "%s Any Target", Hekili:GetSpellLinkWithTexture( spec.abilities.hunters_mark.id ) ),
desc = strformat( "If checked, %s may be recommended for any target rather than only bosses.", Hekili:GetSpellLinkWithTexture( spec.abilities.hunters_mark.id ) ),
type = "toggle",
width = "full"
} )
spec:RegisterSetting( "check_pet_range", false, {
name = "Check Pet Range for |T132176:0|t Kill Command",
desc = function ()
return "If checked, |T132176:0|t Kill Command will be recommended if your pet is not in range of your target.\n\n" ..
"Requires |c" .. ( state.settings.petbased and "FF00FF00" or "FFFF0000" ) .. "Pet-Based Target Detection|r"
end,
type = "toggle",
width = "full"
} )
spec:RegisterPack( "Beast Mastery", 20240110, [[Hekili:T3t7YnUns(SmvQtJDSTgj6pY4Cw(hZCBQBM72SPwNu5FIcwcYIRPi1sszpoLl9SFDdascacqcsjnJtox1KyBcGgD3Or)jbX4HJ)1X3mJKrh)ZEd8oBWWHd6p8SZp90lgFt2tROJVzfz69K7GFjISe()FGssZ2m5Vd)FAYtyZpfgtMHGjnEDYuOlF3MjlYYwL(JV7D3fKTy9T9NgV8DPblxhsYcIJMMqMNH)903n(MBxheM9POX3Aen8(HX3qwNTioz8n3eS8JJVzrWSzuE3PPthFd09tpzO3jEVFZKEBMGJ(Kbdpz4GFeqYGO4KntGzAZK1RqW3FZN3858HmCaBid9GU(pPlJFGUzYntPra5fpFZKpeghpBZKPlOtVpfEue8isYTu4z3SiotbudUW409FUzY)96iGr92uKLLCp0knlli6oPrdiloA1oQ0(GFaA)NwNKTGcWhynE5tqQA)oh63VqYMUG3RYghCXjENbn(BPan()eegUzYhJxUKebetaqyFmKsqY)ry9QOdINLrcbEIeSo7epeH)nggSzY8KyGGVPy59J4YRu3pfwBGUd8yY0aca4PXXHZIFeM21PGK1MjKz)R1G4eGlZrg4hj40JlbabVzYVhecT8aqQt(annJbIFpHKTO)4BcdsZszIW05K1HzWV(ZmrAAe52q6SXFGlNKeScrTX383(cD6A2urFaKFHPiyjvmrKPz40halbKhibHieG5aEmBOtJzRq(PWI)4mqqfNN8gZsir)Bquo4pGfxExKWbO3NQHvakbalGm(Mdkeks7Vew69jraE98ZiNp5oAw)Gu)BJtbS6qM8koLpq9NbIGlyyuQ)sMO1Ont4s0IXTGscZw4VAkiqF9MjVN3imD3LeVELYuGCb)SySV(y)GUF30za68Lnt(ECxfm5LeR80I02zA0w8kqzanRCapqakfAf)TW1WpEZMjjKGz(WIaiArMnlTp9l4Azokc)d6twsq09i6nS)csQ)6uQ)TRNpxG6LnMlr1pHUKeeLYiGthux)iZEYbWCuP0A)PGyPF8CFqwX)rqMS)S1jmbEw3gEoBsNhC3Im)IXFyo9itmE1rmEosmE1tmMaZoGyW5q7Px5muzsrCyu)IVbPduEL3OElktHEJOUnab9o380Ind05f2rmX8Q)y5LMHLJMVnTNjEK35AAI(VOWEOLbrGINaqiiitO5b25XS7iumfJAjPgvk2hvPgWvLXmAbqEzWFi4gzK7Pa8wLeedQAa5J04cfU4eLck3Z14cQUZcwfsZ1hG4b8FHXr3X)ne7Emo6TWpMrdja0aRLWaxqcz4o0L81baR(hOHQhdq0gW64hfZs6sgnWaqkN0cz0pYK5wE4BiOZNtrLwcP50soKahcJzWwqp9zky85(Nmno7rF2ocuZ05AAMk0LJcQ8)WhTHWTKKdIzP4yVOlJnhLra8dwv5luHtJOldOc5dUe0BkS3El6OL)uMr4(cOiR)xEWNc6BHzEAgA9ZnenLzd79oJIxxGITf)WTiTh)4aEmIL3SkHcEqElP08EoisxVCjm6vuDZTkgNVnoldAXFoi4rN9iAHol(lbrnyI2jZyAA1l9TrZ2IQkF3mkOAbmaCpiijjob1WopbqQ1jarLfVmgE6JfApLazZdXMrJsTQxz2ezzh0bbkwWvEPn0YgSpKr2gsVMWZrnHNhwOMUoplAELPcx(V6mn7gUyMIGD2GDc0AGauCv7PpfnnxTEoGrF4)ueAcifIZAwaAEj3a1pQQ9NR4ygzjZGL4zhZTjHZf0i4LDsg(7fG3w7SqwrwcIa3SIkIdHKkSWonoknyg21)oB7c3q7pLVHzZKFTChZJuWWksSliaLeZJjtdZtdIMsf2fxf)ivevr6Qq0i2T0ShP0ib7B2Y7kT4XciJ9yziQyGtWK9h6NZ47Sl45pRVbyAyg9uMrDtROs6CjVX3mS)5sAPZO0qFiePvYwykn19ieSfQuMGSyfBjIoucG8w5ggegjme0xHQFwe7IaYkN7zuK)2hcyfaV)Q4GuWXL0mY07zsoxMVlN1R5j0O)4PCxbLFuPdEJKcyc8dfc(w4YzXEQB5XU6)il0vzxdh6XgtX4zEsknlc8cTZNJxwHArKa29jx0PCV5xdndlDlqh)kvbvGm9AMeafetFcwk8fopIRg5MGDFj5vwDJSAZ8z7zwGrzk(PjZl4mUJurGduCbfZa2t(cEtX(YMO5sXI8LCw8f55n5mfxZKPtn)X01WusyfkUK82x1TsjmYKV8LGsqQ3hads1z2siYBKNVSch7ZBK(Lvq4iOhVgY6Z7vCwnJSCfDgvRpxQWpqwE6cC2v60WbY9Agf4w(GG09jKL69u1bzjvVQDtXdzI)Y1jGbqKVnfTZP3BDHSDP(1kIq5jNQAu0xQecc2zFC0k2m47Vs5(7cijAQhJbPVA8lq8VGRfjsY1w0Jnu32QlkYEzqtwiOZLx6veU1w1VqrOlibCbg1MO3n9aDle(OjRW1)um5MYSOekOtjDboa5ewMNfYzbuU3Fc3qTqg2dE1OHdaGuE2Ff(OiToMGv4aH5LDuzQs2sTO4ZBqtaxwNVuuKg4oWuk5GvikuL6)Vwp7ULadNnzdRSiBq)KNUr6suAE801PftkJ2StNtJVnHuMz8gmj1WktJ5stIYvCDKn367wDKj720Dl5o2U6KGP3ZYXJNDJuhGP9c4HmBSCUzc9okprLNYtA4v5Ta8ujTXjtjriBpjHVAMjLyjdo72SZ(c9dv0kjRJ5amwm6d(4s8WkDvj4z3GMb(DUwW69ZX)U10ubVVA8N)AYArotlI3cIfddEkHYcTmiHRyPmkuIuSP8aR4XLYgbZ9bLqSWbvMdr9Ti7gUD9wjCKjBKdxp7AB5wir)aTk7I)8AsJwWCZb)zJa1jdMIH1rzbHIiK36v)hzL5826ebeUDBzL2NgMYs5Cd(cxiy4IyVPO5ZNFbzGPtnmot(VX0tfpFoU5LLJvjhCRptxfUsxk0xPPQPhWEId1Rw0B6(uygblTzuFMRExEmCAk0BCGIkvPrGv4D1s8xBfVpHxDTMaWjmvFxzfm9S2cG(Nvx57QWY9QWYRfZCOlDh5VEKrMVTPa7U95yRfEuWcJ97QkC5AN3JAcEgx1ktCTzws((j7eR3G66WvMbSo34W2Lc9mJzKM)okyuXa3cIJ1m3b1hnkdvLPAPuaMXZg54nIaxxutCRLw378DeTQzo93sXsZjNK5caKwjR9I8shKYTzYsBpAEvukyrrLrFxWNYRjmZeDHz3Cq1qLC5VmsSHYyf93m5NGjmL)CeaCPiH9BrM41s(EaF2FQyoiHyPVr78Y18gZnrIcrEWcYkiE10kiPHsEBJ8ymkIXIIia2TcwfJsbQbw6r0rRshgiJGO50e4Ff0p79esDjKxpCSilz0OziTMLt6GddNqUlkgC8yk)Lbq43ecL4ew1pkE9csjlLPVvKGew9uwJbcaHUdH1kTwX7TOw8gsCNM7lEAUV45K7lnObWbFl8STHX0B(t3CFPQTuhSavJo36DFX4an5(Ibn01s8TY9ftaO7Ea0A3xQ6XyTyMdDP7iVr3xSpf7c3xQr4XMrHDI7lgHNRUVu9nXRrJPU5(snoZz19LMRV)27(sdXETnAOAyo2rUVyrlXw4(s7OvEsWsn(c(6s(43Qcl(vOcHUvcvJfphlyaqazbrGFdkPhYHcokacjC1cI)Qe6mswCsZvaZEcEDcXkegCT(DN5qD0o3L6OPurJ6k(4p4A92SxfIwtLx6ADzg0QA31LccwBvnBB1a7wPTotAZN9YP1SiU1TNI99iyQBxCP2m93EGCnW2kOOzDIxwxzglK4SwSnBoxVNl22fUuoPkvc0XIV0PkCnuP46svGsdNAOKEovmQMrWQfIAVvTVQfHs3I4oBQevIA1Amr31xVWAl3fgZqRk3f(oyBWuVRvzV5Ylu6hG5kuvt9ab1FsMqsGnE3JB5Q1E93s09cnZI(ZxN8u9wXFHGUKOPWWtGHJtKPkJ8IaLVSeJNd6Tzmzt5b5fbYEQ0BG)Qy2pf75EaKLX)epcMNo0d74JKKi8GPn(MFft0tWYvXjzIeO9wXzU7TygH(3RdyVOSPXOktY6S4Le2XSdSmd(4JNtX)x2RmmEke)yCemxSMFBUB)QrVaWetC1BTeCd08bd)YHoau9qjmaydDzpc82bwWLX6bkVdThFDcWTdKoZc6c(6mWBeSE1lOvPzNW1QPC3aG7kJOBaVDG1K8GHo0E81ja3oq6mlOl4RZaVaS)GoyRE(OkGN9JoLoY((Dmu38zdAWloyvTth(P1U1kNtzzRLuZkeSnGUvggQht7Osa7yAtN3kdyVddXPjV5d7LbQ0HH44KxS9ipmY62cj1N9k4BeWgsxCD2yAlE3vW3iGLYjTjgHuBUINwb3W2dUx8yxJlkVkR6m4DaW)zr)Dxx62ZGVra31LohX7Uc(gb8lE9eVSXUgxuEvw1zWxa4Zn72Ts2DFRQF3gp9Q6iSf4wwngnGw9eV(26DLxqEOlBTWt(HMrl90oPHC2YkLorVFHU3FIHEf53Dk0)QMJTUf98Ef4nc2UQMWrSURGFVb4V149w5U2Uv2yVc89eyFfNFfNFzIZDvJHJyDxb)EdWVI3DdVvKTCQKaoIXThWTbKTk2N2JXTc8nc49I3DDmS1xDeOrW(kJyla73eCoEfLVxmLF2xST3Q3bgoYispummPtUWZpxd(C4Zp)M2cWQOaduxlV3vxdZ)XP9uEBrQTZh5nqbPvO)AiMRnIxNm886g0jNFLXH1Z4tp6SZVwHqagynV959oOMzU2gBhAD9inwwvWD9iZWRtlMsZLH2VsHdzzgoQoiOXJp8qBehkRAMa8gyUHRmbOskJnxVX6MpzKo3(0Obv2eryNdId7DWBSjgVn7yTctJyHv(tTtd0oYjuwhUY78TaVBWPH)KQy7DVQy7Vok2E3FzvS9UxvST)uSv4txLcXig1w5qUnGoScMux40LDzpc8gbRbjtNIp1rSURGFVb4V149wf2(Uv2yVc89eyFfNFfNFzIZDvJHJyDxb)EdWVI3DdVvKTC6Cz4ig3Ea3gqALjyUpTfJBf4BeW7fV7862Bi2Roc0iyFLrSfG9BcoBp34wJ9S2m(4zkWUQ4J7PqYZ9uizqlU9CJBOZQPqAOLuivLyCifsvhu7YvJtPqAOPuivDMRTX2HwAPqYe46AkKmUyAozbDmfsgGqDPqs3OBNtHKbdHvYnU(MpzKUDPqYAMGB)owRWSZPqYWEjNtHKR4Ddon8NufB2Zn(Rk22bO1xxfBV7VSk2QKB8xvST7uS13Yrky6m0LWxmNMG)s9g5VtHEfx83rq3OurAlpS46cfRaXquWRpU1O87YxoYv5PkuQtatiyBcILn1EWY(Y)zcO5n4I0k7BGwq(hfpTve1gB5(a1pHFAq2833ph3dSdW5H1bAuq0euXN3waM)rytdE6FB2QaUlDrcOncwM1OM)DB419pTD)Zwr2obS2t2ob22r26I1QG001pLcOT0bx2LRCz)PT9X4fbOoCVWmCLUz90GQH7Cpx3M)IrVHfd7Dh)SaWUIF6Fgz2rs(nOVCNiN6v)EHoG7B(8NyQJrODb)Qmc)(qJ364O(w8oSnEEqyXvdxA)Ipqohn6DL314B(SP2TDlJV5ZF3MjVEPj)v)st28QuEyshJ3ZtJQMzGJzxvtJkIpu9JwuzKuvcXtDa5nifZAZFRFkdJT5pnpLyIPa9lNZkTPmW8qLLhq(Zm2Xrg6yVAWKr1Gjkr07i)uMf9NwYUnsMEvKmRjTwMbC53sGJLVKUhnS)5hhmhe1f2MK)og0l3atXyr1NGIS)g)BJlSJJckMFIRHqS9dM8yXUwWUuqidllWPrtJxhbQwyFKElEkGFa0Ja3Hdd(dC61BDbBqP(ljj3JO7bP0m8tCm(rKn5EFs0tWkg)dzBqQp(HV8WE8eS4ploRV8WhnONONlOKWSf(RMMD97h07G7sIxVQamifHFpCHw9F)GRfFUN)EVbhQRkp)EIHrXBMCh4LubdjgVruGF5Je8wMR4Mv53XiT3m5Fsc4SWOmS4zWyc(dc3CugOQmTufp)UAj)6Xjv9sSHD)IUIDD3X)Cnd4rkxFo)3Q)wSHPRnxUeWQ)bQy(Xa2vYtyy8JIzjDjJgyaiLtAHm6h)CJYnwjR5DJ0njuTx3p9LxNvf)l)KPNl2NaCmFgdRpz2misZVGMT7DWbwuHiRQUss0oDGLMHjSUbEuXdQK9KIKKpupt01yCWGketOONvuS6a7ekQNqrhGbSD45NTTOuz1A9QEhO)ScqP3qq0vENxf4brxFHPjfGT(JYzIdX(J6e6PNWuzrpgrY)tF0zqHi4S0M7uHKEJ9e(jOMoyA2OHOAmHkkAeDzafqi0uOiyljFJ7P1TtBEE4dSM56Aputxtt11dzk8)UCfymfb)c3TSpfnFDktx1JlqxY(a)BqmOCdwqxW1sLSoc)YbFm)2TcFYu(MFURJlzUXgJknYL1a30)LpH3lxPOId8MfjfSHfnlv4HN(Si64WZpMRI8u5rWrmYuMnh2CXiGpWUGca3zrJmtahQwlIba1pBImk0Qtwbbh8Lamjn4xv5mmEcK7KBWfKwGLKGOhIVh4HFbmrercz7Y5llmpA9deCoCvHfQsL9xODO3yjdT9oqe8K6N85NFUy7QX7UGRoDqLn4dVO0xboQx(LmVJiNfCZWUVHNwzYl(UKV)N8kuU6xz8VbiqXhn89(CFP(uZ)cGV3N3tzAtYN6uw4YL3vihRCJtW1zzjFF9Qljaxnc8v7i8E755NTNlURoT3bw3WWmUA36hRdhQrjY3ulkouRKA8EvVQsUcq3EgZqV2mOJh1mlfrhu6bLgWYV(C0xpYVXC0FUmhsRnL7fhhW5MrozEPwtvUNBQqxLHQO0G6Dzt7ed1ZBxVQxxnxpS)zGqV1Tpww3RxN9ZpBxgvOgX7iamhwylppvG6A6VuFnR4MLrN)jFbYyIxiDrY0R6vhY15UZzAf1aJx7gDPqfu1lRKkbMbZ2vNRlUvC)VO1GsyTw1SK7WO8v)ItZRYLXY2seYx3k7iyjUvvyroZU7vos6Uzbce4WRkUrwKvrZ9jS59hZOmCeVmvbrNvXbPqGKm1SxFzVd2wL4oTfy)QRVJ7FpS9SY))lZYaVILydgNQcNXuTdUczbi9HXABOMv1J62xXmB7RO9wBJRyK6(muTKyggKndzfDOQP9ssPQ59I2SygxcSvTSw0ynMLDvYVELi1yzv1qxHPWgSw7vXMzh2T(vaRAqSX0cPbB7LRI7C77Y8QeaLBL11DWMEy)(37zao7oxluz8w21v66botCZP5WdmRAfn3gptmeJLj02DVtCeGo5vXPd08Q472m5xtwlsyErb)e3)44fA(mAAqck4jxguIuXrr8U4EphhbtXQun(Yte3r6zsU8LNwKjzRjxbc(6b8giNvKh1gpCNNug)7wttbE8HM4oBlZbzkpqDM7W7EdSNDv(b40lRgjyQ5cf1fzRLkGzmKFv33wrd26XXXRgLsZcMlydUS6X7Qpf8wFuJ(xCmMzYaeJgzJHXyn)wkw9hoLvTEkAVAaIuJgKYPFwIorwLOwpIQgHLPbFkVOpm2DblSm7R1wQgPB7FMsI(BM8tWekoTxia4L9sSwik3VmvikgeaINkMdsiM4wCntUOwOFajke5bliRaBxvRNKHAAzJ8ymkIX38cbWUvWQyukqnhYZDT2RtHbYiiAonb(xb9tIEsFjuuWRjFkcCYzgsRz5KEyC2jK7IIb5SP8uzl2dGqjoH9kwuu)WuYsz6BfjiH9sBSgeFaj)uWeQ0AfV3AfBtEdbwkQGm6YJXFjE(Cu)h4naIt512GNheJ1yZ1d9IPptlvRCL7N5f3)Eqz8qsz5iVyOVkN4flFmOmu7UgpVlvht7oxjoDCxm9PGQ6exxBTdPupSlMGwhpRlgxenwM2UDsxmaGAoOl6fJTRNZfJNmXdR9LIrcHB1HCPtF)NmUb1ge76jCXWMhNpGloI0DvVNNSEVD3H97RZz9ZOWLf9EnDs)SCq)6Y58BBppDoP3Z0X8RUt532IuQ692HNXpJlIgL17MEV2Da)2vNVpJAZv17vZ78xR071PZ2xThTVD1j7BxFW(mG0JVjDfD64F278tz3VZJ))(d]] )