Dual Wield Fury Warrior Solo (Simple Annotations)
About 2 min
Dual Wield Fury Warrior Outdoor Solo (Simple Annotations)
Step 1: Open the Heitu client → click "Super Macro" → create a new macro → paste the code below.
Step 2: Create a regular macro in-game with /s S Yewai_DualWield(), bind it to a key.
-- ============ Dual Wield Fury Warrior One-Button DPS Macro [Outdoor Solo] [Concise Annotations] ============
-- Priority: Bloodrage > Battle Shout > Pummel interrupt > low-HP potion > DPS skills > Death Wish > Hamstring for Flurry > trinkets
function Yewai_DualWield()
-- Skill/Item ID constant area
local SPELL_BLOODRAGE = 2687 -- Bloodrage
local SPELL_BATTLE_SHOUT = 25289 -- Battle Shout
local SPELL_BLOODTHIRST = 23894 -- Bloodthirst
local SPELL_WHIRLWIND = 1680 -- Whirlwind
local SPELL_EXECUTE = 20662 -- Execute
local SPELL_FLURRY_PROC = 7373 -- Hamstring
local AURA_FLURRY = 12970 -- Flurry buff
local SPELL_DEATH_WISH = 12328 -- Death Wish
local SPELL_YYDJ = 25286 -- Heroic Strike
local SPELL_PUNCH = 6554 -- Pummel
local ITEM_HEAL_POT = 13446 -- Major Healing Potion
local ITEM_SPIDER = 22954 -- Kiss of the Spider
local ITEM_BUGBADGE = 21647 -- Badge of the Swarmguard
-- Unified pre-read of global states
local me = GetMeInfo()
local hpPercent = me and (me.health / me.maxHealth * 100) or 100
local healPotCD = SCT(ITEM_HEAL_POT)
local inCombat = IsCombat()
local rage = Power(1)
local brCD = SCT(SPELL_BLOODRAGE)
local btCD = SCT(SPELL_BLOODTHIRST)
local wwCD = SCT(SPELL_WHIRLWIND)
local dwCD = SCT(SPELL_DEATH_WISH)
local punchCD = SCT(SPELL_PUNCH)
local shoutLeft = AuraRemainingTime(SPELL_BATTLE_SHOUT)
local targetCasting = TSI() > 0 -- Check if target is casting
-- Bloodrage for rage: use when rage below 26
if rage < 26 and brCD <= 0 then
S(SPELL_BLOODRAGE)
rage = Power(1)
brCD = SCT(SPELL_BLOODRAGE)
end
-- Maintain Battle Shout; refresh if rage > 9 and buff is missing
if rage > 9 and shoutLeft <= 0 then
S(SPELL_BATTLE_SHOUT)
rage = Power(1)
shoutLeft = AuraRemainingTime(SPELL_BATTLE_SHOUT)
end
-- Target casting, Pummel off CD, sufficient rage → interrupt with priority
if targetCasting and punchCD <= 0 and rage >9 then
S(SPELL_PUNCH)
rage = Power(1)
punchCD = SCT(SPELL_PUNCH)
end
-- HP below 35% and potion CD ready → auto-use Major Healing Potion
if hpPercent < 36 and healPotCD <= 0 then
M('/use Major Healing Potion')
healPotCD = SCT(ITEM_HEAL_POT)
end
-- DPS rotation priority: Execute → Bloodthirst → Heroic Strike → Whirlwind
-- Execute: in execute phase, Bloodthirst on CD, rage > 29
if CanWarriorExecute() and btCD > 0 and rage > 29 then
S(SPELL_EXECUTE)
rage = Power(1)
btCD = SCT(SPELL_BLOODTHIRST)
end
-- Bloodthirst main DPS
if rage > 29 and btCD <= 0 then
S(SPELL_BLOODTHIRST)
rage = Power(1)
btCD = SCT(SPELL_BLOODTHIRST)
end
-- Heroic Strike weaving logic
local swingTimer = AttackTime1()
local curRage = rage
if swingTimer > 220 or curRage > 41 then
S(SPELL_YYDJ)
if swingTimer > 220 then
Sleep(1, swingTimer - 220, function()
if curRage > 41 then
S(SPELL_YYDJ)
else
StopCasting()
end
end)
end
end
-- Whirlwind filler: Bloodthirst on CD, rage > 66
if wwCD <= 0 and rage > 66 and btCD > 0 then
S(SPELL_WHIRLWIND)
rage = Power(1)
wwCD = SCT(SPELL_WHIRLWIND)
end
-- Death Wish burst
if rage > 9 and dwCD <= 0 then
S(SPELL_DEATH_WISH)
rage = Power(1)
dwCD = SCT(SPELL_DEATH_WISH)
end
-- Pre-read Flurry state; use Hamstring when Flurry buff is absent
local flurryLeft = AuraRemainingTime(AURA_FLURRY)
local flurryActive = flurryLeft > 0
if not flurryActive and rage > 9 and btCD > 0 then
S(SPELL_FLURRY_PROC)
rage = Power(1)
flurryLeft = AuraRemainingTime(AURA_FLURRY)
end
-- Dual trinkets only activate in combat
if inCombat then
local spiderCD = SCT(ITEM_SPIDER)
local bugBadgeCD = SCT(ITEM_BUGBADGE)
if spiderCD <= 0 then
M('/use Kiss of the Spider')
end
if bugBadgeCD <= 0 then
M('/use Badge of the Swarmguard')
end
end
end