-- 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 $ 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 $ 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 $ 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*$} 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 $ 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]] )