This can be broken up into macros, but I opted not to. I use
addon so I can have unlimited space. I created this as a script in SDM because writing tons of macros just isn't fun. Especially when you have multiple toons.
Code:
Mutilate = {}
function Mutilate.Init()
if UnitName("target") == nil or UnitIsFriend("player","target") ~= nil or UnitHealth("target") == 0 then
return -- ignore the dead and friendly
end
local energy = UnitPower("player")
local cp = GetComboPoints("player")
local currentTime = GetTime()
local ud = UnitDebuff
local ub = UnitBuff
local SuggestRupture = false --change this if you want to use a Rupture based rotation
local SuggestVanish = true --change this if you don't want to automatically cast Vanish
local snd = 0
local hfb = 0
local rupture = 0
local dp = 0
local vanish = 0
local overkill = 0
local bleeds = 0
--
-- Ensure that there is a bleed (ie. Rupture, Deep Wounds, Rend) on the target.
--
if
(
ud("target","Rupture")
or ud("target","Garrote")
or ud("target","Deep Wounds")
or ud("target","Rend")
or ud("target","Trauma")
or ud("target","Mangle (Cat)")
or ud("target","Mangle (Bear)")
or ud("target","Pounce")
or ud("target","Rake")
or ud("target","Piercing Shots")
)
then
bleeds = 1
end
--
-- Slice and Dice
--
local name, _, _, _, _, _, expirationTime, _, _ = UnitBuff("player", "Slice and Dice")
if name ~= nil then
snd = expirationTime - currentTime
end
--
-- Hunger for Blood
--
local name, _, _, _, _, _, expirationTime, _, _ = UnitBuff("player", "Hunger for Blood")
if name ~= nil then
hfb = expirationTime - currentTime
end
--
-- Ruture
--
local name, _, _, _, _, _, expirationTime, isMine, _ = UnitDebuff("target", "Rupture")
currentTime = GetTime()
if name ~= nil and isMine == "player" then
rupture = expirationTime - currentTime
end
--
-- Deadly Poison IX
--
local name, _, _, count, _, _, expirationTime, isMine, _ = UnitDebuff("target", "Deadly Poison IX")
if name ~= nil and count >= 4 and isMine == "player" then
dp = 1
end
--
-- Vanish
--
local start, duration, _ = GetSpellCooldown("Vanish");
if duration ~= nil then
vanish = duration + start - currentTime
end
if UnitAura("player", "Stealth") ~= nil then
if (energy >= 50) then
RunMacroText("/cast Garrote");
end
elseif (hfb <= 5.0) then
if (bleeds == 1) then
if (energy >= 15) then
RunMacroText("/cast Hunger for Blood");
end
else
if (cp == 0) then
if (energy >= 55) then
RunMacroText("/cast Mutilate");
end
else
if (energy >= 25) then
RunMacroText("/cast Rupture");
end
end
end
elseif (cp >= 1) and not ub("player","Slice and Dice") then
if (energy >= 25) then
RunMacroText("/cast Slice and Dice");
end
elseif (cp >= 1) and (snd <= 5.0) then
if (energy >= 35) then
RunMacroText("/cast Envenom");
end
elseif (vanish < 1) and not ub("player","Overkill") and SuggestVanish == true then
RunMacroText("/cast Vanish");
elseif (cp < 4) then
if (energy >= 55) then
RunMacroText("/cast Mutilate");
end
elseif (rupture <= 2.5) and (SuggestRupture == true) then
if (rupture <= 0.5) then
if (energy >= 25) then
RunMacroText("/cast Rupture");
end
end
elseif (dp == 1) then
if (energy >= 35)
then
RunMacroText("/cast Envenom");
end
else
if (energy >= 80) then
RunMacroText("/cast Mutilate");
end
end
end
^ one button, full rotation spam.
This script is based off of the rotation found on EJ. You won't find a tighter Mutilate rotation than this.