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.
2631 lines
110 KiB
2631 lines
110 KiB
-- HunterBeastMastery.lua
|
|
-- August 2025
|
|
-- Patch 11.2
|
|
|
|
if UnitClassBase( "player" ) ~= "HUNTER" then return end
|
|
|
|
local addon, ns = ...
|
|
local Hekili = _G[ addon ]
|
|
local class, state = Hekili.Class, Hekili.State
|
|
local PTR = ns.PTR
|
|
local spec = Hekili:NewSpecialization( 253, true )
|
|
|
|
---- Local function declarations for increased performance
|
|
-- Strings
|
|
local strformat = string.format
|
|
-- Tables
|
|
local insert, remove, sort, wipe = table.insert, table.remove, table.sort, table.wipe
|
|
-- Math
|
|
local abs, ceil, floor, max, sqrt = math.abs, math.ceil, math.floor, math.max, math.sqrt
|
|
|
|
-- Common WoW APIs, comment out unneeded per-spec
|
|
-- local GetSpellCastCount = C_Spell.GetSpellCastCount
|
|
-- local GetSpellInfo = C_Spell.GetSpellInfo
|
|
-- local GetSpellInfo = ns.GetUnpackedSpellInfo
|
|
-- local GetPlayerAuraBySpellID = C_UnitAuras.GetPlayerAuraBySpellID
|
|
local FindUnitBuffByID, FindUnitDebuffByID = ns.FindUnitBuffByID, ns.FindUnitDebuffByID
|
|
-- local IsSpellOverlayed = C_SpellActivationOverlay.IsSpellOverlayed
|
|
-- local IsSpellKnownOrOverridesKnown = C_SpellBook.IsSpellInSpellBook
|
|
-- local IsActiveSpell = ns.IsActiveSpell
|
|
|
|
-- Specialization-specific local functions (if any)
|
|
|
|
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
|
|
binding_shackles = { 102388, 321468, 1 }, -- Targets stunned by Binding Shot, knocked back by High Explosive Trap, knocked up by Implosive Trap, incapacitated by Scatter Shot, or stunned by Intimidation deal $s1% less damage to you for $s2 sec after the effect ends
|
|
binding_shot = { 102386, 109248, 1 }, -- Fires a magical projectile, tethering the enemy and any other enemies within $s1 yds for $s2 sec, stunning them for $s3 sec if they move more than $s4 yds from the arrow. Targets stunned by Binding Shot deal $s5% less damage to you for $s6 sec after the effect ends
|
|
blackrock_munitions = { 102392, 462036, 1 }, -- The damage of Explosive Shot is increased by $s2%$s$s3 Pet damage bonus of Harmonize increased by $s4%
|
|
born_to_be_wild = { 102416, 266921, 1 }, -- The cooldown of Aspect of the Cheetah, and Aspect of the Turtle are reduced by $s1 sec
|
|
bursting_shot = { 102421, 186387, 1 }, -- Fires an explosion of bolts at all enemies in front of you, knocking them back, snaring them by $s2% for $s3 sec, and dealing $s$s4 Physical damage
|
|
camouflage = { 102414, 199483, 1 }, -- You and your pet blend into the surroundings and gain stealth for $s1 min. While camouflaged, you will heal for $s2% of maximum health every $s3 sec
|
|
concussive_shot = { 102407, 5116, 1 }, -- Dazes the target, slowing movement speed by $s1% for $s2 sec. Cobra Shot will increase the duration of Concussive Shot on the target by $s3 sec
|
|
counter_shot = { 102292, 147362, 1 }, -- Interrupts spellcasting, preventing any spell in that school from being cast for $s1 sec
|
|
deathblow = { 102410, 343248, 1 }, -- Kill Command has a $s1% chance to grant Deathblow. Deathblow The cooldown of Black Arrow is reset. Your next Black Arrow can be used on any target, regardless of their current health
|
|
devilsaur_tranquilizer = { 102415, 459991, 1 }, -- If Tranquilizing Shot removes only an Enrage effect, its cooldown is reduced by $s1 sec
|
|
disruptive_rounds = { 102395, 343244, 1 }, -- When Tranquilizing Shot successfully dispels an effect or Counter Shot interrupts a cast, gain $s1 Focus
|
|
emergency_salve = { 102389, 459517, 1 }, -- Feign Death and Aspect of the Turtle removes poison and disease effects from you
|
|
entrapment = { 102403, 393344, 1 }, -- When Tar Trap is activated, all enemies in its area are rooted for $s1 sec. Damage taken may break this root
|
|
explosive_shot = { 102420, 212431, 1 }, -- Fires an explosive shot at your target. After $s2 sec, the shot will explode, dealing $s$s3 Fire damage to all enemies within $s4 yds. Deals reduced damage beyond $s5 targets
|
|
ghillie_suit = { 102385, 459466, 1 }, -- You take $s1% reduced damage while Camouflage is active. This effect persists for $s2 sec after you leave Camouflage
|
|
harmonize = { 102420, 1245926, 1 }, -- All pet damage dealt increased by $s1%
|
|
high_explosive_trap = { 102739, 236776, 1 }, -- Hurls a fire trap to the target location that explodes when an enemy approaches, causing $s$s2 Fire damage and knocking all enemies away. Limit $s3. Trap will exist for $s4 min. Targets knocked back by High Explosive Trap deal $s5% less damage to you for $s6 sec after being knocked back
|
|
hunters_avoidance = { 102423, 384799, 1 }, -- Damage taken from area of effect attacks reduced by $s1%
|
|
implosive_trap = { 102739, 462031, 1 }, -- Hurls a fire trap to the target location that explodes when an enemy approaches, causing $s$s2 Fire damage and knocking all enemies up. Limit $s3. Trap will exist for $s4 min. Targets knocked up by Implosive Trap deal $s5% less damage to you for $s6 sec after being knocked up
|
|
improved_traps = { 102418, 343247, 1 }, -- The cooldown of Tar Trap, High Explosive Trap, Implosive Trap, and Freezing Trap is reduced by $s1 sec
|
|
intimidation = { 102397, 19577, 1 }, -- Commands your pet to intimidate the target, stunning it for $s1 sec. Targets stunned by Intimidation deal $s2% less damage to you for $s3 sec after the effect ends
|
|
keen_eyesight = { 102409, 378004, 2 }, -- Critical strike chance increased by $s1%
|
|
kill_shot = { 102378, 53351, 1 }, -- You attempt to finish off a wounded target, dealing $s$s2 Physical damage. Only usable on enemies with less than $s3% health
|
|
kindling_flare = { 102425, 459506, 1 }, -- Flare's radius is increased by $s1%
|
|
kodo_tranquilizer = { 102415, 459983, 1 }, -- Tranquilizing Shot removes up to $s1 additional Magic effect from up to $s2 nearby targets
|
|
lone_survivor = { 102391, 388039, 1 }, -- The cooldown of Survival of the Fittest is reduced by $s1 sec, and its duration is increased by $s2 sec. The cooldown of Counter Shot is reduced by $s3 sec
|
|
misdirection = { 102419, 34477, 1 }, -- Misdirects all threat you cause to the targeted party or raid member, beginning with your next attack within $s1 sec and lasting for $s2 sec
|
|
moment_of_opportunity = { 102426, 459488, 1 }, -- When a trap triggers, you gain $s1% movement speed for $s2 sec
|
|
natural_mending = { 102401, 270581, 1 }, -- Every $s1 Focus you spend reduces the remaining cooldown on Exhilaration by $s2 sec
|
|
no_hard_feelings = { 102412, 459546, 1 }, -- When Misdirection targets your pet, it reduces the damage they take by $s1% for $s2 sec. The cooldown of Misdirection is reduced by $s3 sec
|
|
padded_armor = { 102406, 459450, 1 }, -- Survival of the Fittest gains an additional charge
|
|
pathfinding = { 102404, 378002, 1 }, -- Movement speed increased by $s1%
|
|
posthaste = { 102411, 109215, 1 }, -- Disengage also frees you from all movement impairing effects and increases your movement speed by $s1% for $s2 sec
|
|
quick_load = { 102413, 378771, 1 }, -- When you fall below $s1% health, Bursting Shot and Scatter Shot have their cooldown immediately reset. This can only occur once every $s2 sec
|
|
rejuvenating_wind = { 102381, 385539, 1 }, -- Maximum health increased by $s1%, and Exhilaration now also heals you for an additional $s2% of your maximum health over $s3 sec
|
|
roar_of_sacrifice = { 102405, 53480, 1 }, -- Instructs your pet to protect a friendly target from critical strikes, making attacks against that target unable to be critical strikes, but $s1% of all damage taken by that target is also taken by the pet. Lasts $s2 sec
|
|
scare_beast = { 102382, 1513, 1 }, -- Scares a beast, causing it to run in fear for up to $s1 sec. Damage caused may interrupt the effect. Only one beast can be feared at a time
|
|
scatter_shot = { 102421, 213691, 1 }, -- A short-range shot that deals $s2 damage, removes all harmful damage over time effects, and incapacitates the target for $s3 sec$s$s4 Any damage caused will remove the effect. Turns off your attack when used. Targets incapacitated by Scatter Shot deal $s5% less damage to you for $s6 sec after the effect ends
|
|
scouts_instincts = { 102424, 459455, 1 }, -- You cannot be slowed below $s1% of your normal movement speed while Aspect of the Cheetah is active
|
|
scrappy = { 102408, 459533, 1 }, -- Casting Kill Command reduces the cooldown of Intimidation and Binding Shot by $s1 sec
|
|
serrated_tips = { 102384, 459502, 1 }, -- You gain $s1% more critical strike from critical strike sources
|
|
specialized_arsenal = { 102390, 459542, 1 }, -- Kill Command deals $s1% increased damage
|
|
survival_of_the_fittest = { 102422, 264735, 1 }, -- Reduces all damage you and your pet take by $s1% for $s2 sec
|
|
tar_trap = { 102393, 187698, 1 }, -- Hurls a tar trap to the target location that creates a $s1 yd radius pool of tar around itself for $s2 sec when the first enemy approaches. All enemies have $s3% reduced movement speed while in the area of effect. Limit $s4. Trap will exist for $s5 min
|
|
tarcoated_bindings = { 102417, 459460, 1 }, -- Binding Shot's stun duration is increased by $s1 sec
|
|
territorial_instincts = { 102394, 459507, 1 }, -- The cooldown of Intimidation is reduced by $s1 sec
|
|
trailblazer = { 102400, 199921, 1 }, -- Your movement speed is increased by $s1% anytime you have not attacked for $s2 sec
|
|
tranquilizing_shot = { 102380, 19801, 1 }, -- Removes $s1 Enrage and $s2 Magic effect from an enemy target. Successfully dispelling an effect generates $s3 Focus
|
|
trigger_finger = { 102396, 459534, 2 }, -- You and your pet have $s1% increased attack speed. This effect is increased by $s2% if you do not have an active pet
|
|
unnatural_causes = { 102387, 459527, 1 }, -- Your damage over time effects deal $s1% increased damage. This effect is increased by $s2% on targets below $s3% health
|
|
wilderness_medicine = { 102383, 343242, 1 }, -- Natural Mending now reduces the cooldown of Exhilaration by an additional $s1 sec Mend Pet heals for an additional $s2% of your pet's health over its duration, and has a $s3% chance to dispel a magic effect each time it heals your pet
|
|
|
|
-- Beast Mastery
|
|
alpha_predator = { 102368, 269737, 1 }, -- Kill Command now has $s1 charges, and deals $s2% increased damage
|
|
animal_companion = { 102361, 267116, 1 }, -- Your Call Pet additionally summons the pet from the bonus slot in your stable. This pet will obey your Kill Command, but cannot use pet family abilities
|
|
aspect_of_the_beast = { 102351, 191384, 1 }, -- Increases the damage and healing of your pet's abilities by $s1%. Increases the effectiveness of your pet's Predator's Thirst, Endurance Training, and Pathfinding s by $s2%
|
|
barbed_scales = { 102353, 469880, 1 }, -- Casting Cobra Shot reduces the cooldown of Barbed Shot by $s1 sec
|
|
barbed_shot = { 102377, 217200, 1 }, -- Fire a shot that tears through your enemy, causing them to bleed for $s1 damage over $s2 sec and increases your critical strike chance by $s3% for $s4 sec, stacking up to $s5 times. Sends your pet into a frenzy, increasing attack speed by $s6% for $s7 sec, stacking up to $s8 times. Generates $s9 Focus over $s10 sec
|
|
barbed_wrath = { 102373, 231548, 1 }, -- Barbed Shot reduces the cooldown of Bestial Wrath by $s1 sec
|
|
beast_cleave = { 102341, 115939, 1 }, -- After you Multi-Shot, your pet's melee attacks also strike all nearby enemies for $s1% of the damage and Kill Command strikes all nearby enemies for $s2% of the damage for the next $s3 sec. Deals reduced damage beyond $s4 targets
|
|
bestial_wrath = { 102340, 19574, 1 }, -- Sends you and your pet into a rage, instantly dealing $s$s2 Physical damage to its target, and increasing all damage you both deal by $s3% for $s4 sec. Removes all crowd control effects from your pet. Bestial Wrath's remaining cooldown is reduced by $s5 sec each time you use Barbed Shot
|
|
bloodshed = { 102362, 321530, 1 }, -- Command your pets to tear into your target, causing your target to bleed for $s1 million over $s2 sec. Damage from Bloodshed has an increased chance to summon Dire Beasts
|
|
bloody_frenzy = { 102339, 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 = { 102350, 386870, 1 }, -- When Barbed Shot causes Frenzy to stack up to $s1, your pet will immediately use its special attack and deal $s2% bonus damage
|
|
call_of_the_wild = { 102336, 359844, 1 }, -- You sound the call of the wild, summoning $s1 of your active pets for $s2 sec. During this time, a random pet from your stable will appear every $s3 sec to assault your target for $s4 sec. Each time Call of the Wild summons a pet, the cooldown of Barbed Shot and Kill Command are reduced by $s5%
|
|
cobra_senses = { 102344, 378244, 1 }, -- Cobra Shot Focus cost reduced by $s1. Cobra Shot damage increased by $s2%
|
|
cobra_shot = { 102354, 193455, 1 }, -- A quick shot causing $s$s2 Physical damage. Reduces the cooldown of Kill Command by $s3 sec
|
|
dire_beast = { 102376, 120679, 1 }, -- Damage from your bleed effects has a $s1% chance of attracting a powerful wild beast that attacks your target for $s2 sec
|
|
dire_cleave = { 102337, 1217524, 1 }, -- When summoned, Dire Beasts gain Beast Cleave at $s1% effectiveness for $s2 sec
|
|
dire_command = { 102365, 378743, 1 }, -- Kill Command has a $s1% chance to also summon a Dire Beast to attack your target for $s2 sec
|
|
dire_frenzy = { 102367, 385810, 2 }, -- Dire Beast lasts an additional $s1 sec and deals $s2% increased damage
|
|
go_for_the_throat = { 102357, 459550, 1 }, -- Kill Command deals increased critical strike damage equal to $s1% of your critical strike chance
|
|
hunters_prey = { 102360, 378210, 1 }, -- Black Arrow deals $s1% increased damage for each of your active pets. Stacks up to $s2 times
|
|
huntmasters_call = { 107286, 459730, 1 }, -- Summoning a Dire Beast $s2 times sounds the Horn of Valor, summoning either Hati or Fenryr to battle. Hati Increases the damage of all your pets by $s3%. Fenryr Pounces your primary target, inflicting a heavy bleed that deals $s$s4 million damage over $s5 sec and grants you $s6% Haste
|
|
kill_cleave = { 102355, 378207, 1 }, -- While Beast Cleave is active, Kill Command now also strikes nearby enemies for $s1% of damage dealt. Deals reduced damage beyond $s2 targets
|
|
kill_command = { 102346, 34026, 1 }, -- Give the command to kill, causing your pet to savagely deal $s$s2 Physical damage to the enemy
|
|
killer_cobra = { 102375, 199532, 1 }, -- While Bestial Wrath is active, Cobra Shot resets the cooldown on Kill Command
|
|
killer_instinct = { 102364, 273887, 2 }, -- Kill Command deals $s1% increased damage
|
|
laceration = { 102369, 459552, 1 }, -- When your pet attacks critically strike, they cause their target to bleed for $s1% of the damage dealt over $s2 sec
|
|
master_handler = { 102359, 424558, 1 }, -- Each time Barbed Shot deals damage, the cooldown of Kill Command is reduced by $s1 sec
|
|
multishot = { 102363, 2643, 1 }, -- Fires several missiles, hitting all nearby enemies within $s2 yds of your current target for $s$s3 Physical damage and triggering Beast Cleave. Deals reduced damage beyond $s4 targets
|
|
pack_tactics = { 102374, 321014, 1 }, -- Focus generation increased by $s1%
|
|
piercing_fangs = { 102371, 392053, 1 }, -- While Bestial Wrath is active, your pet's critical damage dealt is increased by $s1%
|
|
poisoned_barbs = { 102358, 1217535, 1 }, -- Direct damage from Barbed Shot has a $s4% chance to explode on impact, applying Serpent Sting and dealing $s$s5 Nature damage to nearby enemies. Damage reduced beyond $s6 targets. Serpent Sting Fire a shot that poisons your target, causing them to take $s$s9 Nature damage instantly and an additional $s$s10 Nature damage over $s11 sec
|
|
savagery = { 102356, 424557, 1 }, -- Kill Command damage is increased by $s1%. Barbed Shot lasts $s2 sec longer
|
|
scent_of_blood = { 102342, 193532, 2 }, -- Activating Bestial Wrath grants $s1 charge of Barbed Shot
|
|
serpentine_rhythm = { 102372, 468701, 1 }, -- Casting Cobra Shot increases its damage by $s1%. Stacks up to $s2 times. Upon reaching $s3 stacks, the bonus is removed and you gain $s4% increased pet damage for $s5 sec
|
|
snakeskin_quiver = { 102344, 468695, 1 }, -- Your auto shot has a $s1% chance to also fire a Cobra Shot at your target
|
|
solitary_companion = { 102361, 474746, 1 }, -- Your pet damage is increased by $s1% and your pet is $s2% larger
|
|
stomp = { 102347, 199530, 1 }, -- When you cast Barbed Shot, your pet stomps the ground, dealing $s$s3 Physical damage to its primary target and $s$s4 Physical damage to all other nearby enemies
|
|
thrill_of_the_hunt = { 102345, 257944, 1 }, -- Barbed Shot increases your critical strike chance by $s1% for $s2 sec, stacking up to $s3 times
|
|
thundering_hooves = { 102370, 459693, 1 }, -- Casting Explosive Shot causes all active pets to Stomp at $s1% effectiveness
|
|
training_expert = { 102338, 378209, 1 }, -- All pet damage dealt increased by $s1%
|
|
war_orders = { 102343, 393933, 1 }, -- Barbed Shot deals $s1% increased damage, and applying Barbed Shot has a $s2% chance to reset the cooldown of Kill Command
|
|
wild_call = { 102348, 185789, 1 }, -- Your auto shot critical strikes have a $s1% chance to reset the cooldown of Barbed Shot
|
|
wild_instincts = { 102339, 378442, 1 }, -- While Call of the Wild is active, each time you Kill Command, your Kill Command target takes $s1% increased damage from all of your pets, stacking up to $s2 times
|
|
wildspeaker = { 107285, 1232739, 1 }, -- Dire Beasts will now obey your Kill Command, dealing its damage at $s1% effectiveness. Bestial Wrath now sends your Dire Beasts into a rage, increasing their damage dealt by $s2% for $s3 sec. Dire Beasts summoned during a Bestial Wrath will benefit at a reduced duration
|
|
|
|
-- Dark Ranger
|
|
banshees_mark = { 94957, 467902, 1 }, -- Black Arrow's initial damage has a $s2% chance to summon a flock of crows to attack your target, dealing $s$s3 Shadow damage over $s4 sec
|
|
black_arrow = { 94987, 466932, 1 }, -- Your Kill Shot is replaced with Black Arrow. Black Arrow You attempt to finish off a wounded target, dealing $s$s5 Shadow damage and $s$s6 Shadow damage over $s7 sec. Only usable on enemies above $s8% health or below $s9% health
|
|
bleak_arrows = { 94961, 467749, 1 }, -- Your auto shot now deals Shadow damage, allowing it to bypass armor. Your auto shot has a $s1% chance to grant Deathblow. Deathblow The cooldown of Black Arrow is reset. Your next Black Arrow can be used on any target, regardless of their current health
|
|
bleak_powder = { 94974, 467911, 1 }, -- Black Arrow now explodes in a cloud of shadow and sulfur on impact, dealing $s$s2 Shadow damage to all enemies within an $s3 yd cone behind the target. Damage reduced beyond $s4 targets
|
|
dark_chains = { 94960, 430712, 1 }, -- While in combat, Disengage will chain the closest target to the ground, causing them to move $s1% slower until they move $s2 yards away
|
|
ebon_bowstring = { 94986, 467897, 1 }, -- Casting Black Arrow has a $s1% chance to grant Deathblow. Deathblow The cooldown of Black Arrow is reset. Your next Black Arrow can be used on any target, regardless of their current health
|
|
phantom_pain = { 94986, 467941, 1 }, -- When Kill Command deals damage, $s1% of the damage dealt is replicated to up to $s2 other units affected by Black Arrow's periodic damage
|
|
shadow_dagger = { 94960, 467741, 1 }, -- While in combat, Disengage releases a fan of shadow daggers, dealing $s$s2 Shadow damage per second and reducing affected target's movement speed by $s3% for $s4 sec
|
|
shadow_hounds = { 94983, 430707, 1 }, -- Each time Black Arrow deals damage, you have a small chance to manifest a Dark Hound that charges to your target and attacks nearby enemies for $s1 sec
|
|
smoke_screen = { 94959, 430709, 1 }, -- Exhilaration grants you $s1 sec of Survival of the Fittest. Survival of the Fittest activates Exhilaration at $s2% effectiveness
|
|
soul_drinker = { 94983, 469638, 1 }, -- Black Arrow damage increased by $s1%. Bleak Powder damage increased by $s2%
|
|
the_bell_tolls = { 94968, 467644, 1 }, -- Firing a Black Arrow increases all damage dealt by you and your pets by $s1% for $s2 sec. Multiple instances of this effect may overlap
|
|
umbral_reach = { 94982, 1235397, 1 }, -- Black Arrow periodic damage increased by $s1% and Bleak Powder now applies Black Arrow's periodic effect to all enemies it damages. If Bleak Powder damages $s2 or more enemies, gain Beast Cleave if talented
|
|
withering_fire = { 94993, 466990, 1 }, -- While Call of the Wild is active, you surrender to darkness, granting you Withering Fire and Deathblow every $s1 sec. Withering Fire Casting Black Arrow fires a barrage of $s4 additional Black Arrows at nearby targets at $s5% effectiveness, prioritizing enemies that aren't affected by Black Arrow's damage over time effect
|
|
|
|
-- Pack Leader
|
|
better_together = { 94962, 472357, 1 }, -- Damage dealt by your pets is increased by $s1%. Frenzy's attack speed bonus is increased by $s2%
|
|
dire_summons = { 94992, 472352, 1 }, -- Kill Command reduces the cooldown of Howl of the Pack Leader by $s1 sec. Cobra Shot reduces the cooldown of Howl of the Pack Leader by $s2 sec
|
|
envenomed_fangs = { 94972, 472524, 1 }, -- Initial damage from your Bear will consume Serpent Sting from up to $s1 nearby targets, dealing $s2% of its remaining damage instantly
|
|
fury_of_the_wyvern = { 94984, 472550, 1 }, -- Your pet's attacks increase your Wyvern's damage bonus by $s1%, up to $s2%. Casting Kill Command extends the duration of your Wyvern by $s3 sec, up to $s4 additional sec
|
|
hogstrider = { 94988, 472639, 1 }, -- Each time your Boar deals damage, the damage of your next Cobra Shot is increased by $s1% and Cobra Shot strikes $s2 additional target. Stacks up to $s3 times
|
|
horsehair_tether = { 94979, 472729, 1 }, -- When an enemy is stunned by Binding Shot, it is dragged to Binding Shot's center
|
|
howl_of_the_pack_leader = { 94991, 471876, 1 }, -- While in combat, every $s2 sec your next Kill Command summons the aid of a Beast. Wyvern A Wyvern descends from the skies, letting out a battle cry that increases the damage of you and your pets by $s5% for $s6 sec. Boar A Boar charges through your target $s9 times, dealing $s$s10 physical damage to the primary target and $s11 damage to up to $s12 nearby enemies. Bear A Bear leaps into the fray, rending the flesh of your enemies, dealing $s15 damage over $s16 sec to up to $s17 nearby enemies
|
|
lead_from_the_front = { 94966, 472741, 1 }, -- Casting Bestial Wrath grants Howl of the Pack Leader and increases the damage dealt by your Beasts by $s1% and your pets by $s2% for $s3 sec
|
|
no_mercy = { 94969, 472660, 1 }, -- Damage from your Kill Shot sends your pets into a rage, causing all active pets within $s1 yds and your Bear to pounce to the target and Smack, Claw, or Bite it. Your pets will not leap if their target is already in melee range
|
|
pack_mentality = { 94985, 472358, 1 }, -- Howl of the Pack Leader increases the damage of your Kill Command by $s1%. Summoning a Beast reduces the cooldown of Barbed Shot by $s2 sec
|
|
shell_cover = { 94967, 472707, 1 }, -- When dropping below $s1% health, summon the aid of a Turtle, reducing the damage you take by $s2% for $s3 sec. Damage reduction increased as health is reduced, increasing to up to $s4% damage reduction at $s5% health. This effect can only occur once every $s6 min
|
|
slicked_shoes = { 94979, 472719, 1 }, -- When Disengage removes a movement impairing effect, its cooldown is reduced by $s1 sec
|
|
ursine_fury = { 94972, 472476, 1 }, -- Your Bear's periodic damage has a $s1% chance to reduce the cooldown of Kill Command by $s2 sec
|
|
} )
|
|
|
|
-- PvP Talents
|
|
spec:RegisterPvpTalents( {
|
|
chimaeral_sting = 3604, -- (356719) Stings the target, dealing $s$s2 Nature damage and initiating a series of venoms. Each lasts $s3 sec and applies the next effect after the previous one ends. Scorpid Venom: $s6% reduced movement speed. Spider Venom: Silenced. Viper Venom: $s11% reduced damage and healing
|
|
diamond_ice = 5534, -- (203340)
|
|
dire_beast_basilisk = 825, -- (1218223) Call of the Wild additionally summons a slow moving basilisk near your target for $s1 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 $s1 yards over the next $s2 sec
|
|
explosive_powder = 5689, -- (1218150)
|
|
hunting_pack = 3730, -- (203235)
|
|
interlope = 1214, -- (248518) Misdirection now causes the next $s1 hostile spells cast on your target within $s2 sec to be redirected to your pet, but its cooldown is increased by $s3 sec. Your pet must be within $s4 yards of the target for spells to be redirected
|
|
kindred_beasts = 5444, -- (356962)
|
|
survival_tactics = 3599, -- (202746)
|
|
the_beast_within = 693, -- (356976)
|
|
wild_kingdom = 5441, -- (356707) Call in help from one of your dismissed Cunning pets for $s1 sec. Your current pet is dismissed to rest and heal $s2% 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
|
|
},
|
|
-- 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 12 + ( 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 spec.auras.barbed_shot.duration end,
|
|
tick_time = 2,
|
|
mechanic = "bleed",
|
|
type = "Ranged",
|
|
max_stack = 1
|
|
},
|
|
barbed_shot_3 = {
|
|
id = 246852,
|
|
duration = function () return spec.auras.barbed_shot.duration end,
|
|
tick_time = 2,
|
|
mechanic = "bleed",
|
|
type = "Ranged",
|
|
max_stack = 1
|
|
},
|
|
barbed_shot_4 = {
|
|
id = 246853,
|
|
duration = function () return spec.auras.barbed_shot.duration end,
|
|
tick_time = 2,
|
|
mechanic = "bleed",
|
|
type = "Ranged",
|
|
max_stack = 1
|
|
},
|
|
barbed_shot_5 = {
|
|
id = 246854,
|
|
duration = function () return spec.auras.barbed_shot.duration end,
|
|
tick_time = 2,
|
|
mechanic = "bleed",
|
|
type = "Ranged",
|
|
max_stack = 1
|
|
},
|
|
barbed_shot_6 = {
|
|
id = 284255,
|
|
duration = function () return spec.auras.barbed_shot.duration end,
|
|
tick_time = 2,
|
|
mechanic = "bleed",
|
|
type = "Ranged",
|
|
max_stack = 1
|
|
},
|
|
barbed_shot_7 = {
|
|
id = 284257,
|
|
duration = function () return spec.auras.barbed_shot.duration end,
|
|
tick_time = 2,
|
|
mechanic = "bleed",
|
|
type = "Ranged",
|
|
max_stack = 1
|
|
},
|
|
barbed_shot_8 = {
|
|
id = 284258,
|
|
duration = function () return spec.auras.barbed_shot.duration end,
|
|
tick_time = 2,
|
|
mechanic = "bleed",
|
|
type = "Ranged",
|
|
max_stack = 1
|
|
},
|
|
barbed_shot_dot = {
|
|
id = 217200,
|
|
duration = function () return spec.auras.barbed_shot.duration end,
|
|
tick_time = 2,
|
|
mechanic = "bleed",
|
|
type = "Ranged",
|
|
max_stack = 1
|
|
},
|
|
beast_cleave = {
|
|
id = 268877,
|
|
duration = 6,
|
|
max_stack = 1
|
|
},
|
|
-- 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
|
|
},
|
|
binding_shot = {
|
|
id = 117405,
|
|
duration = 10,
|
|
max_stack = 1
|
|
},
|
|
-- Stunned.
|
|
binding_shot_stun = {
|
|
id = 117526,
|
|
duration = function() return 3.0 + ( 1 * talent.tarcoated_bindings.rank ) end,
|
|
max_stack = 1,
|
|
},
|
|
black_arrow = {
|
|
id = 468572,
|
|
duration = 14,
|
|
tick_time = 2,
|
|
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 = 12,
|
|
tick_time = 1,
|
|
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
|
|
},
|
|
-- Disoriented.
|
|
bursting_shot = {
|
|
id = 224729,
|
|
duration = 4.0,
|
|
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: Movement slowed by $s1%.
|
|
-- https://wowhead.com/beta/spell=5116
|
|
concussive_shot = {
|
|
id = 5116,
|
|
duration = 6,
|
|
mechanic = "snare",
|
|
type = "Ranged",
|
|
max_stack = 1
|
|
},
|
|
deathblow = {
|
|
id = 378770,
|
|
duration = 12,
|
|
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 8 + 2 * talent.dire_frenzy.rank end,
|
|
max_stack = 1
|
|
},
|
|
dire_beast_basilisk = {
|
|
id = 209967,
|
|
duration = 30,
|
|
max_stack = 1
|
|
},
|
|
dire_beast_hawk = {
|
|
id = 208684,
|
|
duration = 3600,
|
|
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
|
|
},
|
|
-- 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 spec.auras.barbed_shot.duration 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
|
|
},
|
|
-- https://www.wowhead.com/spell=472640
|
|
-- Hogstrider Your next Cobra Shot strikes X additional targets and its damage is increased by 100%.
|
|
hogstrider = {
|
|
id = 472640,
|
|
duration = 20,
|
|
max_stack = 4
|
|
},
|
|
howl_of_the_pack_leader_cooldown = {
|
|
id = 471877,
|
|
duration = 30,
|
|
max_stack = 1
|
|
},
|
|
howl_of_the_pack_leader_bear = {
|
|
id = 472325,
|
|
duration = 30,
|
|
max_stack = 1
|
|
},
|
|
howl_of_the_pack_leader_boar = {
|
|
id = 472324,
|
|
duration = 30,
|
|
max_stack = 1
|
|
},
|
|
howl_of_the_pack_leader_wyvern = {
|
|
id = 471878,
|
|
duration = 30,
|
|
max_stack = 1
|
|
},
|
|
-- Huntmaster's Call Dire Beast will summon Hati or Fenryr at $s1 stacks
|
|
-- https://www.wowhead.com/spell=459731
|
|
huntmasters_call = {
|
|
id = 459731,
|
|
duration = 3600,
|
|
max_stack = 5
|
|
},
|
|
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
|
|
},
|
|
-- https://www.wowhead.com/spell=472743
|
|
-- Lead From the Front The damage of your Pack Leader Beasts is increased by 25%.
|
|
lead_from_the_front = {
|
|
id = 472743,
|
|
duration = 12,
|
|
max_stack = 1
|
|
},
|
|
-- Movement speed reduced by $s1%.
|
|
-- https://wowhead.com/beta/spell=263423
|
|
lock_jaw = {
|
|
id = 263423,
|
|
duration = 6,
|
|
mechanic = "snare",
|
|
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 taken reduced by $w1%
|
|
no_hard_feelings = {
|
|
id = 459547,
|
|
duration = 5.0,
|
|
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
|
|
},
|
|
-- 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
|
|
},
|
|
-- Recently benefitted from Quick Load.
|
|
quick_load = {
|
|
id = 385646,
|
|
duration = 25.0,
|
|
max_stack = 1,
|
|
copy = "quick_load_icd"
|
|
},
|
|
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
|
|
},
|
|
serpentine_rhythm = {
|
|
id = 468703,
|
|
duration = 30,
|
|
max_stack = 3
|
|
},
|
|
serpentine_blessing = {
|
|
id = 468704,
|
|
duration = 8,
|
|
max_stack = 1
|
|
},
|
|
-- Dodge chance increased by $s1%.
|
|
-- https://wowhead.com/beta/spell=263904
|
|
serpents_swiftness = {
|
|
id = 263904,
|
|
duration = 20,
|
|
max_stack = 1
|
|
},
|
|
-- Damage taken reduced by $s1%.
|
|
-- https://wowhead.com/beta/spell=263938
|
|
silverback = {
|
|
id = 263938,
|
|
duration = 15,
|
|
max_stack = 1
|
|
},
|
|
solitary_companion = {
|
|
id = 474751,
|
|
duration = 3600,
|
|
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
|
|
},
|
|
-- Summon Fenryr Haste increased by $s1%. $s2 seconds remaining
|
|
-- https://www.wowhead.com/spell=459735
|
|
summon_fenryr = {
|
|
id = 459735,
|
|
duration = 16,
|
|
max_stack = 1,
|
|
},
|
|
-- All damage taken reduced by $s1%.
|
|
survival_of_the_fittest = {
|
|
id = 264735,
|
|
duration = function() return 6.0 + 2 * talent.lone_survivor.rank end,
|
|
max_stack = 1
|
|
},
|
|
-- Reduces damage taken by $202746s1%, up to a maximum of $w1.
|
|
survival_tactics = {
|
|
id = 202748,
|
|
duration = 2.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
|
|
},
|
|
-- The Bell Tolls All damage dealt by you and your pets is increased by $s1%. $s2 seconds remaining
|
|
-- https://www.wowhead.com/spell=1232992
|
|
the_bell_tolls = {
|
|
id = 1232992,
|
|
duration = 12,
|
|
max_stack = 10
|
|
},
|
|
-- 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 = function () return spec.auras.barbed_shot.duration end,
|
|
max_stack = 3,
|
|
copy = 312365
|
|
},
|
|
trailblazer = {
|
|
id = 231390,
|
|
duration = 3600,
|
|
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
|
|
-- 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
|
|
},
|
|
-- Withering Fire Casting Black Arrow fires a barrage of $s1 additional Black Arrows at nearby targets. $s2 second remaining
|
|
withering_fire = {
|
|
id = 466991,
|
|
duration = function() return spec.auras.call_of_the_wild.duration end,
|
|
max_stack = 1
|
|
},
|
|
-- Wyvern's Cry You and your pet's damage is increased by $s1%. $s2 seconds remaining
|
|
-- https://www.wowhead.com/spell=471881
|
|
wyverns_cry = {
|
|
id = 471881,
|
|
duration = 15,
|
|
max_stack = 20
|
|
},
|
|
-- 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
|
|
}
|
|
} )
|
|
|
|
-- Pets
|
|
spec:RegisterPets({
|
|
-- Howl of the Pack Leader
|
|
wyvern = {
|
|
id = 234170,
|
|
spell = "kill_command",
|
|
duration = 15
|
|
},
|
|
-- boar isn't a real pet
|
|
bear = {
|
|
id = 234018,
|
|
spell = "kill_command",
|
|
duration = 15
|
|
}
|
|
} )
|
|
|
|
spec:RegisterGear({
|
|
-- The War Within
|
|
tww3 = {
|
|
items = { 237644, 237645, 237646, 237647, 237649 },
|
|
auras = {
|
|
-- Pack Leader
|
|
-- Mastery
|
|
grizzled_fur = {
|
|
id = 1236564,
|
|
duration = 8,
|
|
max_stack = 1
|
|
},
|
|
-- Haste
|
|
hasted_hooves = {
|
|
id = 1236565,
|
|
duration = 8,
|
|
max_stack = 1
|
|
},
|
|
-- Crit
|
|
sharpened_fangs = {
|
|
id = 1236566,
|
|
duration = 8,
|
|
max_stack = 1
|
|
},
|
|
-- Dark Ranger
|
|
blighted_quiver = {
|
|
id = 1236975,
|
|
duration = 3600,
|
|
max_stack = 15
|
|
},
|
|
}
|
|
},
|
|
tww2 = {
|
|
items = { 229271, 229269, 229274, 229272, 229270 },
|
|
auras = {
|
|
-- Possible TODO: pet attacks reduce bestial wrath cd?
|
|
potent_mutagen = {
|
|
id = 1218003,
|
|
duration = 8,
|
|
max_stack = 1
|
|
}
|
|
}
|
|
},
|
|
tww1 = {
|
|
items = { 212018, 212019, 212020, 212021, 212023 }
|
|
},
|
|
-- Dragonflight
|
|
tier31 = {
|
|
items = { 207216, 207217, 207218, 207219, 207221, 217183, 217185, 217181, 217182, 217184 },
|
|
},
|
|
tier29 = {
|
|
items = { 200390, 200392, 200387, 200389, 200391 },
|
|
auras = {
|
|
lethal_command = {
|
|
id = 394298,
|
|
duration = 15,
|
|
max_stack = 1
|
|
}
|
|
}
|
|
},
|
|
|
|
} )
|
|
|
|
-- Legacy
|
|
--- Shadowlands
|
|
local ExpireNesingwarysTrappingApparatus = setfenv( function()
|
|
focus.regen = focus.regen * 0.5
|
|
forecastResources( "focus" )
|
|
end, state )
|
|
|
|
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 CallOfTheWildCDR = setfenv( function()
|
|
gainChargeTime( "kill_command", spec.abilities.kill_command.recharge/4)
|
|
gainChargeTime( "barbed_shot", spec.abilities.barbed_shot.recharge/4)
|
|
if talent.withering_fire.enabled then applyBuff( "deathblow" ) end
|
|
end, state )
|
|
|
|
local pack_leader_buff_cycle = {
|
|
"wyvern",
|
|
"boar",
|
|
"bear",
|
|
}
|
|
|
|
-- This variable represents the true index in the above table of the next buff that will be applied to you, whether by the natural cycle or by bestial wrath
|
|
-- The index should always initially start at "1" (Wyvern), and is also reset to 1 upon:
|
|
-- Aura Interrupt: Leave World (19), Enter World (22), Change Specialization (38), Raid Encounter Start or M+ Start (40), Raid Encounter End or M+ Start (41), Disconnect (42), Enter Instance (43), Leave Arena or Battleground (45), Change Talent (46), Encounter End (56)
|
|
local PackLeaderBuffNextIndex = 1
|
|
|
|
spec:RegisterStateExpr( "pack_leader_buff_next_index", function()
|
|
return PackLeaderBuffNextIndex
|
|
end )
|
|
|
|
local lastBoarSummoned = 0
|
|
|
|
spec:RegisterStateExpr( "last_boar_summoned", function()
|
|
return lastBoarSummoned
|
|
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 sourceGUID == GUID then
|
|
if subtype == "SPELL_AURA_APPLIED" or subtype == "SPELL_AURA_REFRESH" then
|
|
-- Detect REAL cycle events and update the index accordingly
|
|
for index, animal in ipairs( pack_leader_buff_cycle ) do
|
|
local buffName = "howl_of_the_pack_leader_" .. animal
|
|
local aura = spec.auras[ buffName ]
|
|
if aura and spellID == aura.id then
|
|
PackLeaderBuffNextIndex = ( index % #pack_leader_buff_cycle ) + 1
|
|
break
|
|
end
|
|
end
|
|
elseif subtype == "SPELL_AURA_REMOVED" and spellID == 472324 then
|
|
local now = GetTime()
|
|
-- use lastcast to make sure it wasn't a natural buff disappearing
|
|
if now - action.kill_command.lastCast <= 1 then lastBoarSummoned = now end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
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
|
|
} ) )
|
|
|
|
-- To support TWW Season 3 tier set
|
|
local tww3_tier_pack_leader_buffs = {
|
|
bear = "grizzled_fur",
|
|
boar = "hasted_hooves",
|
|
wyvern = "sharpened_fangs",
|
|
}
|
|
|
|
-- To support SimC Expressions
|
|
spec:RegisterStateTable( "howl_summon", setmetatable( {
|
|
|
|
refresh_cycle = setfenv( function()
|
|
-- reset_precast function
|
|
pack_leader_buff_next_index = nil
|
|
end, state ),
|
|
|
|
raid_boss_reset = setfenv( function()
|
|
pack_leader_buff_next_index = 1
|
|
end, state ),
|
|
|
|
trigger_summon = setfenv( function( isBestialWrath )
|
|
|
|
local summonCount = 0
|
|
if isBestialWrath then
|
|
-- Scenario 1: Bestial Wrath prepares the next summon without summoning anything that is currently ready or modifying the CD buff
|
|
applyBuff( "howl_of_the_pack_leader_" .. pack_leader_buff_cycle[ pack_leader_buff_next_index ] )
|
|
pack_leader_buff_next_index = ( pack_leader_buff_next_index % #pack_leader_buff_cycle) + 1 -- Advance to the next buff index virtually, will be reset / synced in reset_precast
|
|
applyBuff( "lead_from_the_front" )
|
|
else
|
|
-- Scenario 2: Kill Command summons + other effects
|
|
for _, animal in ipairs( pack_leader_buff_cycle ) do
|
|
local buffName = "howl_of_the_pack_leader_" .. animal
|
|
if buff[ buffName ].up then
|
|
removeBuff( buffName )
|
|
summonCount = summonCount + 1
|
|
if set_bonus.tww3 >= 2 then
|
|
applyBuff( tww3_tier_pack_leader_buffs[ animal ] )
|
|
end
|
|
end
|
|
end
|
|
if talent.pack_mentality.enabled then reduceCooldown( "barbed_shot", 10 * summonCount ) end
|
|
|
|
if buff.howl_of_the_pack_leader_cooldown.down then applyBuff( "howl_of_the_pack_leader_cooldown" )
|
|
elseif talent.dire_summons.enabled then buff.howl_of_the_pack_leader_cooldown.expires = buff.howl_of_the_pack_leader_cooldown.expires - 1
|
|
end
|
|
end
|
|
end, state ),
|
|
|
|
}, {
|
|
__index = function( t, k )
|
|
|
|
if k == "ready" then
|
|
return buff.howl_of_the_pack_leader_bear.up or buff.howl_of_the_pack_leader_boar.up or buff.howl_of_the_pack_leader_wyvern.up or false
|
|
elseif k == "ready_bear" then
|
|
return buff.howl_of_the_pack_leader_bear.up
|
|
elseif k == "ready_boar" then
|
|
return buff.howl_of_the_pack_leader_boar.up
|
|
elseif k == "ready_wyvern" then
|
|
return buff.howl_of_the_pack_leader_wyvern.up
|
|
elseif k == "next" then
|
|
return pack_leader_buff_cycle[ pack_leader_buff_next_index ]
|
|
elseif k == "next_bear" then
|
|
return pack_leader_buff_next_index == 3
|
|
elseif k == "next_boar" then
|
|
return pack_leader_buff_next_index == 2
|
|
elseif k == "next_wyvern" then
|
|
return pack_leader_buff_next_index == 1
|
|
end
|
|
end
|
|
} ) )
|
|
|
|
-- To support SimC Expressions
|
|
spec:RegisterStateTable( "boar_charge", setmetatable( {
|
|
|
|
boar_duration = 6,
|
|
boar_interval = 3,
|
|
|
|
refresh_tracker = setfenv( function()
|
|
-- reset_precast function
|
|
last_boar_summoned = nil
|
|
end, state ),
|
|
|
|
}, {
|
|
__index = function( t, k )
|
|
local elapsed = query_time - last_boar_summoned
|
|
|
|
if k == "remains" then
|
|
return max( 0, boar_charge.boar_duration - elapsed )
|
|
elseif k == "next_charge" then
|
|
if elapsed < 0 or elapsed > boar_charge.boar_duration then
|
|
return 3600
|
|
else
|
|
return ( boar_charge.boar_interval * ( floor( elapsed / boar_charge.boar_interval ) + 1 ) ) - elapsed
|
|
end
|
|
elseif k == "charges_remaining" then
|
|
if elapsed < 0 or elapsed >= boar_charge.boar_duration then
|
|
return 0
|
|
else
|
|
return max( 0, 2 - ( floor( elapsed / boar_charge.boar_interval ) ) )
|
|
end
|
|
end
|
|
end
|
|
} ) )
|
|
|
|
spec:RegisterHook( "reset_precast", function()
|
|
|
|
if talent.howl_of_the_pack_leader.enabled then
|
|
howl_summon.refresh_cycle()
|
|
boar_charge.refresh_tracker()
|
|
end
|
|
|
|
|
|
if debuff.tar_trap.up then
|
|
debuff.tar_trap.expires = debuff.tar_trap.applied + 30
|
|
end
|
|
|
|
if legendary.nessingwarys_trapping_apparatus.enabled then
|
|
if buff.nesingwarys_apparatus.up then
|
|
state:QueueAuraExpiration( "nesingwarys_apparatus", ExpireNesingwarysTrappingApparatus, buff.nesingwarys_apparatus.expires )
|
|
end
|
|
end
|
|
|
|
if buff.call_of_the_wild.up then
|
|
local tick, expires = buff.call_of_the_wild.applied, buff.call_of_the_wild.expires
|
|
for i = 1, 5 do
|
|
tick = tick + 4
|
|
if tick > query_time and tick < expires then
|
|
state:QueueAuraEvent( "call_of_the_wild_cdr", CallOfTheWildCDR, tick, "AURA_TICK" )
|
|
end
|
|
end
|
|
end
|
|
if covenant.kyrian and now - action.resonating_arrow.lastCast < 6 then applyBuff( "resonating_arrow", 10 - ( now - action.resonating_arrow.lastCast ) ) end
|
|
if barbed_shot_grace_period > 0 and cooldown.barbed_shot.remains > 0 then reduceCooldown( "barbed_shot", barbed_shot_grace_period ) end
|
|
|
|
end )
|
|
|
|
spec:RegisterHook( "runHandler_startCombat", function()
|
|
if talent.howl_of_the_pack_leader.enabled then
|
|
if buff.howl_of_the_pack_leader_cooldown.down then applyBuff( "howl_of_the_pack_leader_cooldown" ) end
|
|
if raid and boss then howl_summon.raid_boss_reset() end
|
|
end
|
|
end )
|
|
|
|
-- Abilities
|
|
spec:RegisterAbilities( {
|
|
-- Increases your movement speed by $s1% for $d, and then by $186258s1% for another $186258d$?a445701[, and then by $445701s1% for another $445701s2 sec][].$?a459455[; You cannot be slowed below $s2% of your normal movement speed.][]
|
|
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 ) - ( 30 * 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 ) - ( 30 * 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 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 = 18,
|
|
recharge = 18,
|
|
hasteCD = true,
|
|
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", nil, 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
|
|
|
|
--- Legacy / PvP Stuff
|
|
if set_bonus.tier29_4pc > 0 then applyBuff( "lethal_command" ) end
|
|
if legendary.qapla_eredun_war_order.enabled then
|
|
setCooldown( "kill_command", 0 )
|
|
end
|
|
if legendary.latent_poison_injectors.enabled then
|
|
removeDebuff( "target", "latent_poison" )
|
|
end
|
|
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 ()
|
|
-- Base Functionality / Talents
|
|
applyBuff( "bestial_wrath" )
|
|
if talent.scent_of_blood.enabled then gainCharges( "barbed_shot", talent.scent_of_blood.rank ) end
|
|
|
|
-- Hero Talents
|
|
if talent.lead_from_the_front.enabled then howl_summon.trigger_summon( true ) end
|
|
|
|
if set_bonus.tww2 >= 2 then
|
|
spec.abilities.barbed_shot.handler()
|
|
if set_bonus.tww2 >= 4 then
|
|
applyBuff( "potent_mutagen" )
|
|
end
|
|
end
|
|
|
|
-- Legacy / PvP Stuff
|
|
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,
|
|
},
|
|
|
|
-- Command your pet to tear into your target, causing your target to bleed for $<damage> over $321538d and take $321538s2% increased damage from your pet by 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,
|
|
},
|
|
|
|
-- Fires an explosion of bolts at all enemies in front of you, knocking them back, snaring them by $s4% for $d, and dealing $s1 Physical damage.$?s378771[; When you fall below $378771s1% heath, Bursting Shot's cooldown is immediately reset. This can only occur once every $385646d.][]
|
|
bursting_shot = {
|
|
id = 186387,
|
|
cast = 0.0,
|
|
cooldown = 30.0,
|
|
gcd = "spell",
|
|
|
|
spend = 10,
|
|
spendType = 'focus',
|
|
|
|
talent = "bursting_shot",
|
|
startsCombat = true,
|
|
},
|
|
|
|
-- 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 = function() if set_bonus.tww3_dark_ranger >=2 then return 60 else return 120 end end,
|
|
gcd = "spell",
|
|
school = "nature",
|
|
|
|
talent = "call_of_the_wild",
|
|
startsCombat = false,
|
|
|
|
toggle = "cooldowns",
|
|
|
|
handler = function ()
|
|
applyBuff( "call_of_the_wild" )
|
|
gainCharges( "kill_command", 1 )
|
|
gainCharges( "barbed_shot", 1 )
|
|
-- Queue the pet summons for CDR calculation
|
|
for i = 4, 20, 4 do
|
|
state:QueueAuraEvent( "call_of_the_wild_cdr", CallOfTheWildCDR, query_time + i, "AURA_TICK" )
|
|
end
|
|
if talent.bloody_frenzy.enabled then applyBuff( "beast_cleave", 20 ) end
|
|
if talent.withering_fire.enabled then
|
|
applyBuff( "withering_fire" )
|
|
applyBuff( "deathblow" )
|
|
if set_bonus.tww2 >= 4 then
|
|
removeBuff( "blighted_quiver" )
|
|
end
|
|
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 = function () return talent.cobra_senses.enabled and 30 or 35 end,
|
|
spendType = "focus",
|
|
|
|
talent = "cobra_shot",
|
|
startsCombat = true,
|
|
|
|
handler = function ()
|
|
|
|
if talent.serpentine_rhythm.enabled then
|
|
if buff.serpentine_rhythm.stacks == 3 then
|
|
removeBuff( "serpentine_rhythm" )
|
|
applyBuff( "serpentine_blessing" )
|
|
else addStack( "serpentine_rhythm" )
|
|
end
|
|
end
|
|
|
|
-- CDR
|
|
if talent.dire_summons.enabled and buff.howl_of_the_pack_leader_cooldown.up then buff.howl_of_the_pack_leader_cooldown.expires = buff.howl_of_the_pack_leader_cooldown.expires - 1 end
|
|
if talent.barbed_scales.enabled then
|
|
reduceCooldown( "barbed_shot", 2 )
|
|
end
|
|
reduceCooldown( "kill_command", 1 )
|
|
if talent.killer_cobra.enabled and buff.bestial_wrath.up then gainCharges( "kill_command", 1 ) end
|
|
|
|
-- Legacy / PvP Stuff
|
|
if debuff.concussive_shot.up then debuff.concussive_shot.expires = debuff.concussive_shot.expires + 3 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 = function() return 24 - 2 * talent.lone_survivor.rank end,
|
|
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,
|
|
},
|
|
|
|
-- Summons a powerful wild beast that attacks the target and roars, increasing your Haste by $281036s1% for $d.; Generates $281036s2 Focus.
|
|
dire_beast = {
|
|
id = 120679,
|
|
cast = 0,
|
|
cooldown = 20,
|
|
gcd = "spell",
|
|
school = "nature",
|
|
|
|
spend = -20,
|
|
spendType = "focus",
|
|
|
|
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,
|
|
},
|
|
|
|
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", debuff.explosive_shot.remains + spec.auras.explosive_shot.duration )
|
|
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 talent.emergency_salve.enabled then
|
|
removeDebuff( "player", "dispellable_disease" )
|
|
removeDebuff( "player", "dispellable_poison" )
|
|
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 - 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 - 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,
|
|
},
|
|
|
|
howl_of_the_pack_leader = {
|
|
cast = 0,
|
|
cooldown = 30,
|
|
gcd = "off",
|
|
hidden = true,
|
|
},
|
|
|
|
-- 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,
|
|
},
|
|
|
|
-- Hurls a fire trap to the target location that explodes when an enemy approaches, causing $236777s2 Fire damage and knocking all enemies up. Limit $s2. Trap will exist for $236775d.$?s321468[; Targets knocked up by Implosive Trap deal $321469s1% less damage to you for $321469d after being knocked up.][]
|
|
implosive_trap = {
|
|
id = 462031,
|
|
cast = 0.0,
|
|
cooldown = function() return 60.0 - 5 * talent.improved_traps.rank end,
|
|
gcd = "spell",
|
|
|
|
talent = "implosive_trap",
|
|
startsCombat = false,
|
|
|
|
handler = function()
|
|
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 = function() return 60 - 10 * talent.territorial_instincts.rank end,
|
|
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() if talent.alpha_predator.enabled then return 2 end end,
|
|
cooldown = 7.5,
|
|
recharge = function() if talent.alpha_predator.enabled then return 7.5 * haste end end,
|
|
hasteCD = true,
|
|
icd = 0.5,
|
|
gcd = "spell",
|
|
school = "physical",
|
|
|
|
spend = 30,
|
|
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 ()
|
|
|
|
if talent.howl_of_the_pack_leader.enabled then howl_summon.trigger_summon( false ) end
|
|
|
|
if talent.wild_instincts.enabled and buff.call_of_the_wild.up then
|
|
applyDebuff( "target", "wild_instincts", nil, min( spec.auras.wild_instincts.max_stack, debuff.wild_instincts.stack + 1 ) )
|
|
end
|
|
|
|
--- Legacy / PvP Stuff
|
|
if legendary.flamewakers_cobra_sting.enabled then removeBuff( "flamewakers_cobra_sting" ) end
|
|
if set_bonus.tier29_4pc > 0 then removeBuff( "lethal_command" ) end
|
|
if set_bonus.tier30_4pc > 0 then reduceCooldown( "bestial_wrath", 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 talent.black_arrow.enabled and 466930 or 53351 end,
|
|
cast = 0,
|
|
cooldown = 10,
|
|
gcd = "spell",
|
|
school = function() return talent.black_arrow.enabled and "shadow" or "physical" end,
|
|
|
|
spend = function () return ( buff.flayers_mark.up ) and 0 or 10 end,
|
|
spendType = "focus",
|
|
|
|
talent = "kill_shot",
|
|
startsCombat = true,
|
|
|
|
cycle = function() if talent.banshees_mark.enabled then return "a_murder_of_crows" end end,
|
|
|
|
usable = function () return buff.deathblow.up or target.health_pct < 20 or talent.black_arrow.enabled and target.health_pct > 80, "Requires deathblow, target health below 20 percent (or above 80% with Black Arrow)" end,
|
|
|
|
handler = function ()
|
|
removeBuff( "deathblow" )
|
|
if talent.black_arrow.enabled then
|
|
applyDebuff( "target", "black_arrow" )
|
|
if talent.umbral_reach.active and active_enemies > 1 then
|
|
active_dot.black_arrow = min( active_dot.black_arrow, true_active_enemies )
|
|
if talent.beast_cleave.enabled then applyBuff( "beast_cleave" ) end
|
|
end
|
|
end
|
|
|
|
--- Legacy / PvP Stuff
|
|
if covenant.venthyr then
|
|
if buff.flayers_mark.up and legendary.pouch_of_razor_fragments.enabled then
|
|
applyDebuff( "target", "pouch_of_razor_fragments" )
|
|
removeBuff( "flayers_mark" )
|
|
end
|
|
end
|
|
|
|
end,
|
|
bind = "black_arrow",
|
|
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 = function() return 30 - ( 5 * talent.no_hard_feelings.rank ) end,
|
|
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" )
|
|
|
|
-- Legacy / PvP Stuff
|
|
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 = function() return 15 - 2 * talent.lone_survivor.rank end,
|
|
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,
|
|
},
|
|
|
|
spirit_mend = {
|
|
id = 90361,
|
|
cast = 0,
|
|
cooldown = 30,
|
|
gcd = "spell",
|
|
|
|
startsCombat = false,
|
|
texture = 237586,
|
|
|
|
handler = function ()
|
|
applyBuff( "spirit_mend" )
|
|
end,
|
|
},
|
|
|
|
-- A steady shot that causes $s1 Physical damage.; Usable while moving.$?s321018[; Generates $s2 Focus.][]
|
|
steady_shot = {
|
|
id = 56641,
|
|
cast = 1.7,
|
|
spend = -10,
|
|
spendType = "focus",
|
|
cooldown = 0.0,
|
|
gcd = "spell",
|
|
|
|
notalent = "barbed_shot",
|
|
|
|
startsCombat = true,
|
|
},
|
|
|
|
-- Reduces all damage you and your pet take by $s1% for $d.
|
|
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,
|
|
charges = function() return talent.padded_armor.enabled and ( ( 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 ) ) or nil end,
|
|
recharge = function() return talent.padded_armor.enabled and 2 or nil 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,
|
|
},
|
|
|
|
-- 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. Limit $s2. Trap will exist for $13809d.
|
|
tar_trap = {
|
|
id = 187698,
|
|
cast = 0,
|
|
cooldown = function() return 30 - 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 ()
|
|
if talent.devilsaur_tranquilizer.enabled and buff.dispellable_enrage.up and buff.dispellable_magic.up then reduceCooldown( "tranquilizing_shot", 5 ) end
|
|
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 = 355589,
|
|
cast = function()
|
|
if buff.lock_and_load.up then return 0 end
|
|
return ( buff.trueshot.up and 1 or 2 ) * haste
|
|
end,
|
|
cooldown = 60,
|
|
gcd = "spell",
|
|
|
|
spend = function()
|
|
if buff.lock_and_load.up then return 0 end
|
|
return 15 * ( buff.trueshot.up and 0.5 or 1 )
|
|
end, -- TODO: Does game match spell data?
|
|
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 ()
|
|
removeStack( "lock_and_load" )
|
|
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 = "tempered_potion",
|
|
package = "Beast Mastery",
|
|
} )
|
|
|
|
spec:RegisterSetting( "barbed_shot_grace_period", 0, {
|
|
name = strformat( "%s Grace Period", Hekili:GetSpellLinkWithTexture( spec.abilities.barbed_shot.id ) ),
|
|
desc = strformat( "If set above zero, %s's cooldown will be reduced by this number of global cooldowns. This feature helps to ensure that you maintain %s stacks by recommending %s with time remaining on %s.",
|
|
Hekili:GetSpellLinkWithTexture( spec.abilities.barbed_shot.id ), Hekili:GetSpellLinkWithTexture( spec.auras.frenzy.id ), Hekili:GetSpellLinkWithTexture( spec.abilities.barbed_shot.id ), Hekili:GetSpellLinkWithTexture( spec.auras.frenzy.id ) ),
|
|
icon = 2058007,
|
|
iconCoords = { 0.1, 0.9, 0.1, 0.9 },
|
|
type = "range",
|
|
min = 0,
|
|
max = 2,
|
|
step = 0.01,
|
|
width = 1.5
|
|
} )
|
|
|
|
spec:RegisterSetting( "pet_healing", 0, {
|
|
name = strformat( "%s Below Health %%", Hekili:GetSpellLinkWithTexture( spec.abilities.mend_pet.id ) ),
|
|
desc = strformat( "If set above zero, %s may be recommended when your pet falls below this health percentage. Setting to |cFFFFd1000|r disables this feature.",
|
|
Hekili:GetSpellLinkWithTexture( spec.abilities.mend_pet.id ) ),
|
|
icon = 132179,
|
|
iconCoords = { 0.1, 0.9, 0.1, 0.9 },
|
|
type = "range",
|
|
min = 0,
|
|
max = 100,
|
|
step = 1,
|
|
width = 1.5
|
|
} )
|
|
|
|
spec:RegisterSetting( "avoid_bw_overlap", false, {
|
|
name = strformat( "Avoid %s Overlap", Hekili:GetSpellLinkWithTexture( spec.abilities.bestial_wrath.id ) ),
|
|
desc = strformat( "If checked, %s will not be recommended if the buff is already active.", Hekili:GetSpellLinkWithTexture( spec.abilities.bestial_wrath.id ) ),
|
|
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 = strformat( "Check Pet Range for %s", Hekili:GetSpellLinkWithTexture( spec.abilities.kill_command.id ) ),
|
|
desc = function ()
|
|
return strformat( "If checked, %s will only be recommended if your pet is in range of your target.\n\n" ..
|
|
"Requires |c" .. ( state.settings.petbased and "FF00FF00" or "FFFF0000" ) .. "Pet-Based Target Detection|r",
|
|
Hekili:GetSpellLinkWithTexture( spec.abilities.kill_command.id ) )
|
|
end,
|
|
type = "toggle",
|
|
width = "full"
|
|
} )
|
|
|
|
spec:RegisterSetting( "barbed_shot_opener", true, {
|
|
name = strformat( "Use %s Opener", Hekili:GetSpellLinkWithTexture( spec.abilities.barbed_shot.id ) ),
|
|
desc = strformat( "If checked, %s will be recommended as the first ability in combat. This differs from SimulationCraft behavior which uses %s first but aligns with written guides. The %s opener ensures your pets immediately move to the target at the start of the fight.",
|
|
Hekili:GetSpellLinkWithTexture( spec.abilities.barbed_shot.id ),
|
|
Hekili:GetSpellLinkWithTexture( spec.abilities.bestial_wrath.id ),
|
|
Hekili:GetSpellLinkWithTexture( spec.abilities.barbed_shot.id ) ),
|
|
type = "toggle",
|
|
width = "full"
|
|
} )
|
|
|
|
spec:RegisterPack( "Beast Mastery", 20250804, [[Hekili:T3XAVTTrYFlgfNIvJTSiLvItoBd0RhoCjiTO4uo0puurrtrzryjsvsQ46dg83(nZYxl5o7YL0sXofcTirH7UZRD25fjho1y6NNozUDS70F2CO54Hxm88bMJgn288PtIFyJ70jBSDUZ(w4h(2RH)8F4AhfNm7NG)0n8bC4hwfyphbtuW2qhyklJJ3e9(Zo7wV4LBVzGtW6ZI8wVDLDSxGVtO9Iy8F7C2nRcU5S4LU3BhEpmvp)Z(bhCk)sOxqOx8dFYlko6S5UlS3Uk(SLB9bmADdIFR1POFacNPtUzR3Q4p4p9gkw5CJXtNyVnEzq40jt8w)Jab6nFUB60DJG1F6PjZ(8s3Kz)QDi8hmAjz2eatbWFpk5Ji8oD4fNo883Nm7xcDx5T2Z3o8HKzggdmtM9d)YNs(i(FQHKzoKgDQX7aiHutYS)7gKOtM5CHZnJx4WnheB)W85jZw7ff55FlmNL2(3cZDryW6KzBcD)IxW2OCiTnfsLay47Ro0jjZSr4DJD4njZIwga7KbBC9DdX)gL95l28uZlGf)5F9x5j)AyW8uJ3siqmYeiWKo)uddGsQrgr5Jn8uZ3OymCDa8goyC2fh(UtnnFpb7EoU7OyOHgWq)h3OnUoal)VzQsVkcvJdVdeeUXXO4nB6V9uZ3Ml5)r7vRazZIKzXSTvVvWfJTx56hJ7gUo3f93b0fbJ9JbmWcKaixZVynuvIbK3QRPmDYkuLhplfh65FNl73)m7mQRV9nRCNp9FmDsWg4SMBmOvZoUmDYxSd9WrXFTAl8xPe4ahG4TcwybKU19aLpidijZ6Lm74u9hRBDMpWqyQjZ6Nm7XhZ51bWz1G5rlDvbJI5uSyy8JkaHsQ5ivyQFoYUz7IfdUXnk2ZEL19H2XlhSDtkQCccwnp4E)Adh6U22ZpY62TUrWMWLjZgdWJjYSsnOHW0k6bFhRqx75pmngmFqlW9wqlYPGedRtN4a2XCHzoDYtxoKT7A5Ukcqwb)kaUmKxxSuaUcIltzrhjhkvgTxudzBPcZiFxvP2hTQ3oxVJuPJEFhLeFXffwN3AHLbpiNBVg85whOJLb0s1Sm7gdIngS0oYcSbzHKx(bOCSoOuHxyOmqyzyffhgaUBcZ2lYbT5GcvMcDTSd8h1DuqtGzG)Ao0BuI(5BdzbvKm7m0pnB3kapNd)yH3TlJBbeEn4GBOaNkievkfUwkdaXfymUzaCkZ(0LsbtpPJaK)5JzuqngVqMKTfjSjykSjOKe1ykDNlU(kYDbzOaNUCC8KvNQqfKZ7s5IBLeWRBcWI7J9Z)F5YM8JAY5Au2kFcxsd46ILkuYrv4ekBo8mkg7ES3AiShyNBOeBgPg84C7FK6JKnzzPrLjrHkfoKsNnkXBKaYMxPuvMvmyhYC8oIPbFhRcIlCzyu4jAyQpQOC4MQVEfB7hfkGVM1tNG)kaC8boGXquvgzeV7S8Wpa)zVPM)SCqKHxZAuOPisjC81GcIgELmLjgn2zo(eT5QHLkfhj10XhjeOC8rCswPuOvo(Oaq3Dz0DhFIrFOKe1ykDNliD8jhf7chFkuNKz8y364JeW664ZyF54tr8asD8rBZHNrF6o(AiG(NIXRgWXoYXNe7g7chFTJPbxpGtL5HrXfvxj3ZZDEqUIyDX49lLxrG8jvKPyTjvpb5sNtIMKFZWg53rdlrz9CyPsXSeDf8S8AdWTbPtMY48ubvSWjLYh(CLPYBTKsZkGeldEBN7SSdddUpfDzxVyhPs64y9Ibi4FR1cVqxw(4v2cDcwV22FUQGmWAG6opBZMBRAlS8qxNL2HqelPhzHndSmdRT)ZmjbBWiRfHPaZEvQf5cjepnmqC2a(EWzfaDCG4iuhei03kOiMZfvvZUGFEob3eAtOXIk4Pfoxqh3jToLnQMhhA7)hB9w59)q5mXSLRVVbo7T01Ev8sRnybxbbiCjl8saSkrXAx)5wWiQvNpUOcTrWEqiOL4)q25CMaCGxKvHNEqdj18K18aGiySAK1AwDEtn92RyD4URvCasJwxmm7qrj1XVyk14khot)hwybCtlJBwOVoZvgQRY1Mh)DH2bP4PO(vfhGQxJ2mbIRV7Ap3mJP1p7NEFvaTs7V4wz9elEel7bTybMv2CL2De5FDb53wAhwPrBO9uqI0)7Ks)8vquBw4R4oqQ83y4ULb(AThuSdaxg8iaweVXw0Kw021RHvJwsimO1QYWkgwxUvDDJvsAuHILlXdmO5bI7q0DkZ)W2qWNuCW6aCtqmPdtnwIwbVRoC36GOm61AlTCa5l5kzlPxt05vnrNTPmuTlE9)Il0sVZ3HEBspf8pDbBbR98b4ZUnNLrtNbk4hbWLHy8tMHXEvgRt0GKzFaGkcpWBo7UuVj7g4)(0O1sM5UyHRtC6H)0AbvCTtsMTkdxxZUL0HS7HAb4Lno7PqafjibabC44HrHbx2nLwDc8J8MJt9NyhxsVjU)R8dmjZ(C5jM7DTVJXSlTbojadTuGYJ88Daq7H)EtW94m8WlVzLhqi34gFVRRFM4B(6BZxjy)ZFE2L5H4a(YJLNgtzbj629B7iLf5GcJMvWy9qWYruLqLRO48BtEi0BXVZklXNyvkeoufgHHiheGBf3V0nvCI7jlcwTcdV)2TWodk0wAJp)c4EtikHxZDnEpufr)XriwPp3c55YL5NOUJHQPIO23qj(OtXilHT07giNZo(C2YstGkHsIDus5RUPIqNeH8OOfj8uNALwh5UpOpaUwC9)FpOFgGLvvoNRwdjF4LZ6J1jl73ujnL6P8wDUVvNmYBmQZyig)5P7YGc7xaJj5ZUa2U)5Mvbryim58Y70mrnfXCTiWzBur(hSel5tY87jcpSqCksICjbIOTYjGAKF9KeX0tiEetQP2i9(ZRtTd6P852qrbqmgXFqoemSChM9yZhDFMi33utH0AX2WhuNO8leY1g8TbocGLJisd7ippK87kPy0MmtitLy(lcIDe39eBta7VzN44Q6OCsEzW9f0d(ayAbwSb7uwK3pa2kWjyHpwGS1a)a4QkbVQXSoRQji85UlxobUGTUjWhnAD)9JSoFJJmNSkpE2KlnkpI5hG00XW564yqUgtJ12JJ0ilThPJH6o3Q4XxUFnfv3Rwap6hvrjJu7X9k)MOKDKadNpgLZmzyPthQOoAWE8llTzz(t7MU(onMUDt5LRWMkTS1qj9tbeB3lTclCAjsyKluewA3pu(8g7ARdlLKhEkrCEHMrCkVkLAhWz2b2BHWbW0Nhefdhyz5EpQ7rKou)isHl8fiwpCMPpg)Jma3(3Bh6JzaoDc7zM2B9MGWymHsiVXxLxM8xLml09p26XsVpka1iT3ghS2ogVq6JoF0GKp(jwHog)E8r22hqgB4COmOA1JEvAMRVssXLGHp24p73iqfFaCeam5u2JaVrWsu8icPb1C0IQ7k43Ba(5MUnvR4jmSwuB30n2RaFpb2d08bA(Ljn3vlgAs1Df87naFGU7gDxr3cIZwTYx6e0IIBpGBdiLkeONtBP4wb(gb8Ej6oUBqhLMa3yAbUdbcCqqSla7ZcnhSXn9SiKqn(Upl7SvVJjEE55Uy2Y4U)Lp(Oc6P)JpEuBbOijWa118NDRBH5VnQhwZ3EvQ3RYv8AZHvO8kcbfC01Ke3PgJvTOthFj5Y6rE1xF(4RRWimEdeLkEaB7DSc0RCW2rBxFvn5Mi4U(kA41PTvoCrm(LIIjjO51QatvPD)(9LXHOQlnxyoKEGlPauj7XW1rsplYt05URUAOWzkSeoFXTFVJpsMc9t5aSuyssfsLpkrdmokjepdFP54NaX3qGeFJAS7Sdg7(ROXUZ(RTXUZoySBpBSRi2V3SpcCxgqneOevPDxoL9iWBeSeQNALhRMuDxb)EdWp309tk9(DRUXEf47jWEGMpqZVmP5UAXqtQURGFVb4d0D3O7k6wuL6MycArXThWTbKsfc0ZPTuCRaFJaEVeDNPIAOBkVg6hceOrWEqq8ea7ZcnlVg6stavzvGmPsStKE0VSsM6xwjcR4nudDIvuTSsgskRKihPrzLexu7kDJ(LvYGQSsIOx5GTJ2QvwjkW11YkrUTsx2GNszLiaJQYkv3hCNlReHFrHAOx)Sipr3UYkjTyXT)aSuy25YkrCQQDLvsxIVHaj(g1yxd1q)GXUDfT911y3z)12yNqn0pySBhBSBa2U4jEy2tF)gEvREu2nBi8ruOO9lHZPSzR6vR5YgNXFl7fl47hoymihK86caAlIVQn5Eb(QtZN9eO5IDI6pJnyJqcPWbm0l8gSuHzPgnl5dsnLI2HYtszPww95swjoJ5gUsErYa6tk7t1uAhR)GCkTPoRcb1RXs0c5n3wxi4snwIMixW8pvfyiMZEf8ncyc3wQs6UT0DxbFJaUJv6sbD2Lh(0VzPUg3uoORQn41aWFRy)URBD7zW3iG76wNM0DxbFJa(fVDIx2uxJBkh0v1g8YcqoVRq9QNu8XkcHpl7Jxjnk(YjuraCU(Oa5u5WpBuvzje1Y0dmQsBV0YL8LBgJsYle3uWgf3MWGfERCt7ACfFp3I2UHBZ6wSJM55KK319WwBxYSpeNUiw6EyhZf3xIxAdx2f2MEOSF7HBroR2ohBZMUS2x27bcaBQg)2)fBgBFi2DD0VFc2v28CwYpBwh1nhRjZ8X2Tm(E6754fVQeUZtvcIr1SCK(3zDVTm085uqaQr)EwNVR8sMCy(Ep8ZQwbhLbY48PYKgSl5VD9nUPAURGSWt(4hyA34fUiT3IIT6d2NnnyWPtWVWBt)zZXJW2fktIpDY39DjZ(k)njm5JisNuGHFeXaEWA9ASDbo5bFh4C2YSpyCZ9ICccrPGl2vd)HF5trPa4FcNrH5v(5he1Nsz6Obf5))6RoRSbOclew3H(54x7(5i9(sE9bpbB7IxLj85ko(jSo34vhvn04CHvzjefkWz1fKpaxfBBU4eLfXT5Ajusju16wHd8klmpoPljIRICIxrmXEkOKRuqjvQNTMYtEr03SSDB0mnf0mvCNDyMA2FDauA6MRVkDI3IRu0AqlwpSk(EEp)1f7X98JM3E6revTL2Fjx7SNFf8TmECvhl046XslZ30673l9Uti0U6VAypY2u)1MdRWz16E2P7NoZJAEsf(7BCMyxChzhX(eEVJZi)S(79LM4PmXwcEVAtBuFDWA6A1dZxBwu1Efi(AdnqCkZEuZ4CxYTL8QgiUfmBAKe5hLafdGc88)sWDW0(tqBZ3EfZwxkvWCfA55Vyl2cMqQHfgmrluSKaYBNx9oM6lYz)sruDO074SuAQ2AfF8XcRyKFssVC0qaOvVzCgVP0Crkpw2XqvZfsjoj0gXDc0yKaYl6)N7FKlW5v7MNpdeqrZ5CVJ73vh1PDAZ9oEhzWhjEUHkMwh3QjNrrZpUGif600p(yZfD4s4ygnfW5GSsR47kdeJI9TpPqQ4MFM7)trnkWqOi6bFChLL1396RwkroADyrlik(MatnA1UqhNlgHg0NC6lRj8rtIfDapMuVE73df6FpN3JczTgeBvvVOyzIl2iKsb2i1fIm6SYtP0BgsR8puel8Q9iGACBN9Cxi7KOA1gSfuskaY2pybEj(zLcovv7tkv)E0N)ezVUCMcycHwZ51LcMMAINQ4qX9YcTnELdDTji1Dl(ufr2oyPWrDvGV61JdRui9tVbz15AVCAFSpxqScEJA4iWJpk0yw7rqGxqXMI2eE(m6RHr9NKr7gmz3wd2zA1v7pQxpsPLCnSJtBf9z8iKYdmcgf1iWcsFo1bPOIjP1DLh4u3GULZe1jvstQ55m)66vqbfTwLphXzLprAIpCzkvFW(TiZQJLgl7r1Hr)oMTL1TBDJIUCC)wkeyl(KGnyjA8wKjp0bvPt1YDvKBZHrWt95CA(yN4e4p3dj5R0xm1kUeNkKZU696wKan1UCl3Kj3J1GP4)eDxHTmA5IZf(PRw4BjoSwS6Q43q8tWFK918gCWI3GN8AsXC3kRyT69y7t1nl4QDA5trSMVga63kDiQcR6x5jIfu5LaqsF0rKBA(vaqCnT7PSx)3aaQUOJi2vnw7OSQp))uqRJp()KBN83AgX7mq7F4)jGIIN9)kC3t4r)N4Eju)1CswZZH7wtO1Z9FNADoKNxLbXU(q)tCmQDpZ)As5K2r1WwOjVTWD37eLXtWwO(VsuKAyQSfsSGk2cL8(qjYnnBluCnTZIJ(2cPEBOeXUQXAhLv1wif06OTqYTt13C42BlKakkSfASJSfsAMVQTqf3C4wzlStVcuKNxLbXUAlK4yu7SfQjLZ(qFm9))d]] )
|