Created
December 18, 2016 03:50
-
-
Save brandonjank/32fd4a144d84bc213cf3715777e472e9 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/11/2016 | |
--- COMBAT ROTATION | |
local function combat() | |
-- PAUSES | |
if -player.buff(SB.FeignDeath) or target.is(player) or player.channeling or IsMounted() or IsAoEPending() or UnitControllingVehicle("player") then | |
return false | |
end | |
-- PET MANAGEMENT | |
if pet.exists and pet.distance(player) < 45 then | |
-- Revive Pet | |
if pet.dead and castable(SB.RevivePet) then | |
return cast(SB.RevivePet) | |
end | |
-- Mend Pet | |
if pet.alive and pet.health.percent < 80 and not pet.buff(SB.MendPet).exists and castable(SB.RevivePet) then | |
return cast(982) | |
end | |
end | |
-- INTERUPTS | |
if target.interrupt(70) and castable(SB.CounterShot, 'target') then | |
cast(SB.CounterShot, 'target') -- Off-GCD | |
end | |
-- MISDIRECTION | |
if not target.isplayer and not -player.buff(SB.Misdirection) and player.threat(target) > 30 and castable(SB.Misdirection) then | |
if focus.exists and focus.friend and focus.alive and focus.distance(player) < 100 then | |
cast(SB.Misdirection, focus) -- Off-GCD | |
elseif pet.exists and pet.alive and pet.distance(player) < 100 then | |
cast(SB.Misdirection, pet) -- Off-GCD | |
end | |
end | |
-- DEFENSIVE | |
-- Exhilaration | |
if castable(SB.Exhilaration) and GetSpellCooldown(SB.Exhilaration) == 0 and (player.health.percent < 50 or (pet.alive and pet.health.percent < 10)) then | |
cast(SB.Exhilaration) -- Off-GCD | |
end | |
-- Aspect of the Turtle | |
if castable(SB.AspectOfTheTurtle) and player.health.percent < 10 then | |
cast(SB.AspectOfTheTurtle) -- Off-GCD | |
end | |
-- if useable(5512) and player.health.percent < 35 then | |
-- return use(5512) -- Healthstone (5512) | |
-- else if useable(76097) and player.health.percent < 15 and target.isboss then | |
-- return use(76097) -- Master Healing Potion (76097) | |
-- else if useable(118916) and player.health.percent < 40 and player.minimapzone("Brawl'gar Arena") then | |
-- return use(118916) -- Brawler's Healing Tonic (118916) | |
-- end | |
-- PRE-OFFENSE PAUSES | |
if target.debuff(SB.WyvernSting).any or -player.buff(SB.AspectOfTheTurtle) then | |
return false | |
end | |
--- OFFENSE | |
if target.enemy and target.alive then | |
-- Turn On Auto Shot (blame blizz) | |
if not IsAutoRepeatSpell(SB.AutoShot) then | |
cast(SB.AutoShot, target) | |
end | |
-- Make pet attack my target (blame blizz) | |
if not pettarget.is(target) then | |
PetAttack(target) | |
end | |
-- COOLDOWNS | |
if not target.isTrivial and not target.classification('trivial, minus') and target.distance(player) <= 40 then -- toggle.cooldowns | |
-- Bestial Wrath TODO: not moving, facing target | |
if pet.alive and castable(SB.BestialWrath) and (not player.talent(7, 1) or castable(SB.Stampede) or player.spell(SB.Stampede).cooldown > 30) then | |
cast(SB.BestialWrath) -- Off-GCD | |
end | |
-- Aspect of the Wild | |
if castable(SB.AspectOfTheWild) and -player.buff(SB.BestialWrath) then | |
cast(SB.AspectOfTheWild) -- Off-GCD | |
end | |
-- Berserking | |
if castable(SB.Berserking) and -player.buff(SB.BestialWrath) then | |
cast(SB.Berserking) -- Off-GCD | |
end | |
-- A Murder of Crows should be used on cooldown, although it can and should be delayed a bit to overlap with Bestial Wrath. | |
if castable(SB.AMurderOfCrows, target) and player.spell(SB.BestialWrath).cooldown > 30 then | |
return cast(SB.AMurderOfCrows, target) | |
end | |
-- Barrage should simply be used on cooldown, though you may want to save it in anticipation of heavy multi-target situations in the fight. | |
if castable(SB.Barrage, target) then | |
return cast(SB.Barrage) | |
end | |
-- Stampede | |
if castable(SB.Stampede) and -player.buff(SB.BestialWrath) then | |
cast(SB.Stampede) -- Off-GCD | |
end | |
end | |
-- AOE ROTATION (>1) | |
if target.enemies(10) > 1 then | |
-- Cast Kill Command if there are exactly 2 targets. | |
if pet.alive and castable(SB.KillCommand, target) and target.enemies(10) == 2 then | |
return cast(SB.KillCommand, target) | |
end | |
-- Cast Multi-Shot to keep up the Beast Cleave buff on your pet. | |
if castable(SB.MultiShot, target) and pet.buff(118455).remains < 2.0 then | |
return cast(SB.MultiShot, target) | |
end | |
-- Cast Dire Beast | |
if castable(SB.DireBeast, target) then | |
return cast(SB.DireBeast, target) | |
end | |
-- Cast Dire Frenzy | |
if castable(SB.DireFrenzy, target) then | |
return cast(SB.DireFrenzy, target) | |
end | |
-- 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. | |
if pet.alive and castable(SB.KillCommand, target) then -- and not player.artifacttrait('Surge of the Stormgod') or (target.enemies(10) < 4 or player.buff('Aspect of the Wild').exists or player.haslust) then | |
return cast(SB.KillCommand, target) | |
end | |
-- Cast Cobra Shot when you have over 90 Focus, and Beast Cleave has more than ~1.5 seconds remaining | |
if castable(SB.CobraShot, target) and player.power.focus.actual > 90 and pet.buff(118455).remains > 1.5 then | |
return cast(SB.CobraShot, target) | |
end | |
-- ELSE cast Multi-Shot. | |
if castable(SB.MultiShot, target) and player.power.focus.actual > 90 then | |
return cast(SB.MultiShot, target) | |
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 castable("Titan's Thunder", target) and player.buff(120694).exists then | |
return cast("Titan's Thunder", target) | |
end | |
-- Use Dire Beast | |
if castable(SB.DireBeast, target) then | |
return cast(SB.DireBeast, target) | |
end | |
-- Use Dire Frenzy | |
if player.talent(2, 2) and castable(SB.DireFrenzy, target) then | |
return cast(SB.DireFrenzy, target) | |
end | |
-- Cast Kill Command. | |
if pet.alive and castable(SB.KillCommand, target) and pet.distance(target) <= 25 then | |
return cast(SB.KillCommand, target) | |
end | |
-- Cast Cobra Shot when you have over 90 Focus. | |
if castable(SB.CobraShot, target) and player.power.focus.actual > 90 then | |
return cast(SB.CobraShot, target) | |
end | |
end | |
end | |
end | |
--- RESTING ROTATION | |
local function resting() | |
-- PAUSES | |
if -player.buff(SB.FeignDeath) or target.is(player) or player.channeling or IsMounted() then | |
return false | |
end | |
-- PET MANAGEMENT | |
if pet.exists then | |
-- Revive Pet | |
if pet.exists and pet.dead and castable(SB.RevivePet) and pet.distance(player) < 30 then | |
return cast(SB.RevivePet) | |
end | |
-- Mend Pet | |
if pet.exists and pet.alive and pet.health.percent < 90 and castable(SB.MendPet) then | |
return cast(SB.MendPet) | |
end | |
end | |
-- Volley | |
if not -player.buff(SB.Volley) and not lastcast(SB.Volley) and castable(SB.Volley) then | |
cast(SB.Volley) -- Off-GCD | |
end | |
end | |
--- OPENER ROTATION | |
-- local function opener() | |
-- -- OPENER | |
-- -- Just before the encounter starts, use your Potion of Prolonged Power. | |
-- if useable(5512) and player.health.percent < 35 then | |
-- return use(5512) -- Healthstone (5512) | |
-- -- Cast A Murder of Crows. | |
-- elseif castable('A Murder of Crows', 'target') then | |
-- return cast('A Murder of Crows', 'target') | |
-- -- Activate Bestial Wrath and Aspect of the Wild. | |
-- elseif castable('Bestial Wrath') then | |
-- return cast('Bestial Wrath') | |
-- elseif castable('Aspect of the Wild') and player.buff('Bestial Wrath').exists then | |
-- return cast('Aspect of the Wild') | |
-- -- Cast Kill Command on 1 target, or Multi-Shot on multiple targets. | |
-- elseif castable('Kill Command', 'target') and pet.distance(target) <= 25 and target.enemies(10) == 1 then | |
-- return cast('Kill Command', 'target') | |
-- elseif castable('Multi-Shot', 'target') and target.enemies(10) > 1 then | |
-- return cast('Multi-Shot', 'target') | |
-- -- Cast Dire Beast. | |
-- elseif castable('Dire Beast', 'target') then | |
-- return cast('Dire Beast', 'target') | |
-- else | |
-- -- Proceed with your normal rotation. | |
-- return true | |
-- 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