Last active
December 9, 2016 22:50
-
-
Save brandonjank/c3b346263486717a38028110d9a7fecc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- Beast Mastery Hunter DPS Rotation | |
-- Legion 7.1 - 12/4/2016 | |
local function resting() | |
-- PET MANAGEMENT | |
if pet.exists then | |
if pet.dead and player.castable('Revive Pet') then | |
return player.cast('Revive Pet') | |
elseif pet.alive and pet.health.percent < 90 and player.castable('Mend Pet') then | |
return player.cast('Mend Pet') | |
end | |
else | |
if player.castable(883) then | |
return player.cast(883) -- Call Pet 1 | |
end | |
end | |
end | |
local function opener() | |
-- OPENER | |
-- Just before the encounter starts, use your Potion of Prolonged Power. | |
if player.useable(5512) and player.health.percent < 35 then | |
return player.use(5512) -- Healthstone (5512) | |
-- Cast A Murder of Crows. | |
elseif target.castable('A Murder of Crows') then | |
return target.cast('A Murder of Crows') | |
-- Activate Bestial Wrath and Aspect of the Wild. | |
elseif player.castable('Bestial Wrath') then | |
return player.cast('Bestial Wrath') | |
elseif player.castable('Aspect of the Wild') and player.buff('Bestial Wrath') then | |
return player.cast('Aspect of the Wild') | |
-- Cast Kill Command on 1 target, or Multi-Shot on multiple targets. | |
elseif target.castable('Kill Command') and pet.distance('target') <= 25 and target.enemies(10) == 1 then | |
return target.cast('Kill Command') | |
elseif target.castable('Multi-Shot') and target.enemies(10) > 1 then | |
return target.cast('Multi-Shot') | |
-- Cast Dire Beast. | |
elseif target.castable('Dire Beast') then | |
return target.cast('Dire Beast') | |
else | |
-- Proceed with your normal rotation. | |
return true | |
end | |
end | |
local function combat() | |
-- PAUSES | |
if modifier.lcontrol or player.buff('Feign Death') or player.buff('Camouflage') or target.istheplayer then | |
return false | |
end | |
-- INTERUPTS / DISPELLS | |
if toggle.interrupt and target.interruptsAt(70) and target.castable('Counter Shot') then | |
return target.cast('Counter Shot') | |
end | |
if toggle.dispell and target.dispellable('Tranquilizing Shot') and target.castable('Tranquilizing Shot') then | |
return target.cast('Tranquilizing Shot') | |
end | |
-- TRAPS | |
if !player.buff('Trap Launcher') and !player.lastcast('Trap Launcher') then | |
return player.cast('Trap Launcher') | |
end | |
if modifier.lalt and player.buff('Trap Launcher') then | |
if player.spell('Explosive Trap').cooldown == 0 then | |
return target.castground('Explosive Trap') | |
else if player.spell('Ice Trap').cooldown == 0 then | |
return target.castground('Ice Trap') | |
end | |
end | |
if modifier.lshift and player.buff('Trap Launcher') and player.spell('Freezing Trap').cooldown == 0 then | |
return target.castground('Freezing Trap') | |
end | |
-- MISDIRECTION | |
if !toggle.pvp and !target.isPlayer and !player.buff('Misdirection') and target.threat > 30 then | |
if focus.exists and focus.friend and focus.alive and focus.distance < 100 then | |
return focus.cast('Misdirection') | |
elseif modifier.raid and tank.exists and tank.alive and tank.distance < 100 then | |
return tank.cast('Misdirection') | |
elseif !player.talent(7,3) and pet.exists and pet.alive and pet.distance < 100 then | |
return pet.cast('Misdirection') | |
end | |
end | |
-- DEFENSIVE | |
if player.castable('Exhilaration') and player.health.percent < 40 then | |
return player.cast('Exhilaration') | |
end | |
if player.useable(5512) and player.health.percent < 35 then | |
return player.use(5512) -- Healthstone (5512) | |
else if player.useable(76097) and player.health.percent < 15 and target.boss then | |
return player.use(76097) -- Master Healing Potion (76097) | |
else if player.useable(118916) and player.health.percent < 40 and player.minimapzone("Brawl'gar Arena") then | |
return player.use(118916) -- Brawler's Healing Tonic (118916) | |
end | |
if player.castable("Master's Call") and !player.talent(7,3) and (player.state.disorient or player.state.stun or player.state.root or player.state.snare) then | |
return player.cast("Master's Call") | |
end | |
if player.castable('Deterrence') and !player.talent(7,3) and player.health.percent < 20 then | |
return player.cast('Deterrence') | |
end | |
-- PRE-OFFENSE PAUSES | |
if target.debuff('Wyvern Sting').any or target.debuff('Scatter Shot').any or target.debuff('Freezing Trap').any or target.immune.all or target.status.disorient or target.status.incapacitate or target.status.sleep then | |
return false | |
end | |
--- OFFENSE | |
if target.enemy and target.alive then | |
-- COOLDOWNS | |
if toggle.cooldowns then | |
-- Bestial Wrath + Aspect of the Wild | |
if player.castable('Bestial Wrath') then | |
return player.cast('Bestial Wrath') | |
elseif player.castable('Aspect of the Wild') and player.buff('Bestial Wrath') then | |
return player.cast('Aspect of the Wild') | |
-- A Murder of Crows should be used on cooldown, although it can and should be delayed a bit to overlap with Bestial Wrath. | |
elseif target.castable('A Murder of Crows') and player.spell('Bestial Wrath').cooldown > 30 then | |
return target.cast('A Murder of Crows') | |
-- Barrage should simply be used on cooldown, though you may want to save it in anticipation of heavy multi-target situations in the fight. | |
elseif target.channelable('Barrage') then | |
return target.channel('Barrage') | |
-- Volley should simply be enabled before you start the fight and largely forgotten about. When dealing with multiple targets, you should try and be auto-attacking the one closest to the middle to get the most benefit out of Volley's AoE damage. Volley should be activated at all times, even on single target. | |
elseif !player.buff('Volley') and !player.lastcast('Volley') then | |
return player.cast('Volley') | |
-- Stampede should be used as many times as possible during the fight. Keep in mind that in Legion, Stampede can hit multiple targets close to its original target. As well as using it as many times as possible during the fight, and stacking it with as many powerful buffs as possible, you should also anticipate heavy, stacked multi-target moments in the fight and use it there. | |
elseif player.castable('Stampede') then | |
return player.cast('Stampede') | |
end | |
end | |
-- AOE ROTATION (>1) | |
if target.enemies(10) > 1 then | |
-- Cast Kill Command if there are exactly 2 targets. | |
if target.castable('Kill Command') and target.enemies(10) == 2 then | |
return target.cast('Kill Command') | |
-- Cast Multi-Shot to keep up the Beast Cleave buff on your pet. | |
elseif target.castable('Multi-Shot') and pet.buff('Beast Cleave').remaining < 2.0 then | |
return target.cast('Multi-Shot') | |
-- Cast Dire Beast | |
elseif target.castable('Dire Beast') then | |
return target.cast('Dire Beast') | |
-- Cast Dire Frenzy | |
elseif target.castable('Dire Frenzy') then | |
return target.cast('Dire Frenzy') | |
-- Cast Kill Command. If you have the Surge of the Stormgod trait, you should stop casting Kill Command on 4 targets, and simply spam Multi-Shot instead of it unless you have Aspect of the Wild or Bloodlust active which will allow you to keep up 100% Beast Cleave uptime, and cast Kill Command on cooldown at the same time. | |
elseif target.castable('Kill Command') and !player.artifact.trait('Surge of the Stormgod') or (target.enemies(10) < 4 or player.buff('Aspect of the Wild') or player.haslust) then | |
return target.cast('Kill Command') | |
-- Cast Cobra Shot when you have over 90 Focus, and Beast Cleave has more than ~1.5 seconds remaining | |
elseif target.castable('Cobra Shot') and player.focus > 90 and pet.buff('Beast Cleave').remaining > 1.5 then | |
return target.cast('Cobra Shot') | |
-- ELSE cast Multi-Shot. | |
elseif target.castable('Multi-Shot') and player.focus > 90 then | |
return target.cast('Multi-Shot') | |
end | |
else | |
-- SINGLE TARGET ROTATION | |
-- Cast Titan's Thunder on cooldown and when you have a Dire Beast active on the target. Try to cast it right after casting Dire Beast for maximum benefit. | |
if target.castable("Titan's Thunder") and player.buff('Dire Beast') then | |
return target.cast("Titan's Thunder") | |
-- Use Dire Beast | |
elseif target.castable('Dire Beast') then | |
return target.cast('Dire Beast') | |
-- Use Dire Frenzy | |
elseif target.castable('Dire Frenzy') then | |
return target.cast('Dire Frenzy') | |
-- Cast Kill Command. | |
elseif target.castable('Kill Command') and pet.distance('target') <= 25 then | |
return target.cast('Kill Command') | |
-- Cast Cobra Shot when you have over 90 Focus. | |
elseif target.castable('Cobra Shot') and player.focus > 90 then | |
return target.cast('Cobra Shot') | |
end | |
end | |
end | |
end | |
return { | |
combat = combat, | |
resting = resting, | |
opener = opener | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment