Dual Wield Fury Warrior Solo (Detailed Annotations)
About 3 min
Dual Wield Fury Warrior Outdoor Solo (Detailed 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 Full Version] ============
-- Execution priority (top to bottom):
-- Bloodrage rage gen > Battle Shout buff refresh > Pummel interrupt > low-HP auto potion > DPS rotation (Execute > Bloodthirst > Heroic Strike > Whirlwind) > Death Wish burst > Hamstring for Flurry buff > auto dual trinkets
-- Use case: outdoor solo mob grinding; no auto-targeting/auto-attack/cancel-Bloodthirst-debuff logic; manually control targets
function Yewai_DualWield()
-- ====================== Skill/Item ID Constant Definition Area ======================
-- Buff and rage-generation skills
local SPELL_BLOODRAGE = 2687 -- Bloodrage: quickly generate rage, solves rage starvation
local SPELL_BATTLE_SHOUT = 25289 -- Battle Shout: party-wide attack power buff
-- Core DPS skills
local SPELL_BLOODTHIRST = 23894 -- Bloodthirst: core Fury Warrior filler DPS skill
local SPELL_WHIRLWIND = 1680 -- Whirlwind: multi-target / rage overflow filler skill
local SPELL_EXECUTE = 20662 -- Execute: high-damage finisher on low-HP targets
local SPELL_YYDJ = 25286 -- Heroic Strike: syncs with auto-attack to consume excess rage and boost single-attack damage
-- Utility skills
local SPELL_FLURRY_PROC = 7373 -- Hamstring: used when Flurry buff is absent to trigger Flurry
local AURA_FLURRY = 12970 -- Flurry buff: core melee haste buff for Fury Warriors
local SPELL_DEATH_WISH = 12328 -- Death Wish: burst damage boost, increases overall output
local SPELL_PUNCH = 6554 -- Pummel: melee interrupt, stops target spell casts
-- Consumable and trinket item IDs
local ITEM_HEAL_POT = 13446 -- Major Healing Potion: auto-heal survival at low HP
local ITEM_SPIDER = 22954 -- Kiss of the Spider: DPS active trinket
local ITEM_BUGBADGE = 21647 -- Badge of the Swarmguard: DPS active trinket
-- ====================== One-time pre-read of all combat states ======================
local me = GetMeInfo() -- Fetch all character info (HP, mana/rage, etc.)
local hpPercent = me and (me.health / me.maxHealth * 100) or 100 -- Calculate current HP percentage; default to 100% full if null
local healPotCD = SCT(ITEM_HEAL_POT) -- Get Major Healing Potion cooldown
local inCombat = IsCombat() -- Check if self is in combat
local rage = Power(1) -- Power(1) reads rage; stored in rage variable for reuse
local brCD = SCT(SPELL_BLOODRAGE) -- Bloodrage cooldown
local btCD = SCT(SPELL_BLOODTHIRST) -- Bloodthirst cooldown
local wwCD = SCT(SPELL_WHIRLWIND) -- Whirlwind cooldown
local dwCD = SCT(SPELL_DEATH_WISH) -- Death Wish cooldown
local punchCD = SCT(SPELL_PUNCH) -- Pummel interrupt cooldown
local shoutLeft = AuraRemainingTime(SPELL_BATTLE_SHOUT) -- Battle Shout buff remaining duration
local targetCasting = TSI() > 0 -- TSI() checks if target is casting; > 0 = currently casting
-- ====================== Priority 1: Bloodrage for rage generation ======================
-- Rage below 26 and skill cooldown ready → cast to quickly replenish rage and avoid being unable to cast skills
if rage < 26 and brCD <= 0 then
S(SPELL_BLOODRAGE)
rage = Power(1) -- Re-read current rage after cast and update variable
brCD = SCT(SPELL_BLOODRAGE) -- Refresh Bloodrage cooldown
end
-- ====================== Priority 2: Maintain Battle Shout buff ======================
-- Rage above 9 and Shout buff expired → refresh to maintain AP bonus throughout
if rage > 9 and shoutLeft <= 0 then
S(SPELL_BATTLE_SHOUT)
rage = Power(1) -- Update rage after shouting
shoutLeft = AuraRemainingTime(SPELL_BATTLE_SHOUT) -- Update buff remaining time
end
-- ====================== Priority 3: Pummel interrupt target casting ======================
-- Conditions: target is casting + Pummel off cooldown + rage > 9 (covers skill cost); interrupt with priority to prevent heavy spell damage
if targetCasting and punchCD <= 0 and rage >9 then
S(SPELL_PUNCH)
rage = Power(1)
punchCD = SCT(SPELL_PUNCH)
end
-- ====================== Priority 4: Auto-use healing potion at low HP for survival ======================
-- Own HP percentage below 36% and potion cooldown ready → auto-use Major Healing Potion
if hpPercent < 36 and healPotCD <= 0 then
M('/use Major Healing Potion') -- M() sends a native game macro command to use the item
healPotCD = SCT(ITEM_HEAL_POT) -- Refresh potion cooldown
end
-- ====================== Priority 5: Core DPS rotation ======================
-- 5.1 Execute (highest DPS priority)
-- Conditions: target in execute phase + Bloodthirst on CD + rage > 29; prioritize high Execute damage
if CanWarriorExecute() and btCD > 0 and rage > 29 then
S(SPELL_EXECUTE)
rage = Power(1)
btCD = SCT(SPELL_BLOODTHIRST)
end
-- 5.2 Bloodthirst (core Fury Warrior DPS)
-- Conditions: rage > 29 + Bloodthirst cooldown ready; cast Bloodthirst with priority when Execute is unavailable
if rage > 29 and btCD <= 0 then
S(SPELL_BLOODTHIRST)
rage = Power(1)
btCD = SCT(SPELL_BLOODTHIRST)
end
-- 5.3 Heroic Strike weaving: sync auto-attack rage-dump mechanism
-- AttackTime1() gets main-hand weapon swing timer; fire Heroic Strike when swing is imminent or rage overflows past 41
local swingTimer = AttackTime1()
local curRage = rage
if swingTimer > 220 or curRage > 41 then
S(SPELL_YYDJ)
-- Delayed fallback: if swing interval is long, delay and fire an extra Heroic Strike; cancel if rage is insufficient
if swingTimer > 220 then
Sleep(1, swingTimer - 220, function()
if curRage > 41 then
S(SPELL_YYDJ)
else
StopCasting()
end
end)
end
end
-- 5.4 Whirlwind filler (rage overflow backup)
-- Conditions: Whirlwind off CD + rage > 66 + Bloodthirst on CD; fill damage when rage is excessive
if wwCD <= 0 and rage > 66 and btCD > 0 then
S(SPELL_WHIRLWIND)
rage = Power(1)
wwCD = SCT(SPELL_WHIRLWIND)
end
-- ====================== Priority 6: Death Wish burst damage boost ======================
-- Rage > 9 and cooldown ready → auto-activate to boost overall damage output
if rage > 9 and dwCD <= 0 then
S(SPELL_DEATH_WISH)
rage = Power(1)
dwCD = SCT(SPELL_DEATH_WISH)
end
-- ====================== Priority 7: Hamstring to refresh Flurry buff ======================
-- Pre-read Flurry buff remaining time; determine if Flurry haste buff is missing
local flurryLeft = AuraRemainingTime(AURA_FLURRY)
local flurryActive = flurryLeft > 0
-- No Flurry buff, sufficient rage, Bloodthirst on CD → cast Hamstring to trigger Flurry haste buff
if not flurryActive and rage > 9 and btCD > 0 then
S(SPELL_FLURRY_PROC)
rage = Power(1)
flurryLeft = AuraRemainingTime(AURA_FLURRY)
end
-- ====================== Priority 8: Auto dual trinkets in combat ======================
-- Only takes effect in combat; activate trinkets on cooldown for full DPS coverage
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