Your basic rotation is working—now let's make it smart. This page covers advanced SYNQ features that turn a simple priority list into an intelligent, context-aware rotation.
/synq burstUpdate your spellbook with proper traits. These tell SYNQ how each spell behaves:
local Unlocker, synq, example = ...
local bm = example.hunter.bm
local Spell = synq.Spell
synq.Populate({
killCommand = Spell(34026, { damage = "physical", targeted = true }),
barbedShot = Spell(217200, { damage = "physical", ranged = true, targeted = true }),
cobraShot = Spell(193455, { damage = "physical", ranged = true, targeted = true }),
bestialWrath = Spell(19574, { damage = "physical" }),
aspectOfTheWild = Spell(193530, { damage = "physical" }),
bloodshed = Spell(321530, { damage = "physical", targeted = true }),
serpentSting = Spell(271788, { damage = "physical", ranged = true, targeted = true, bleed = true }),
disengage = Spell(781, { ignoreFacing = true }),
harpoon = Spell(190925, { damage = "physical", targeted = true }),
exhilaration = Spell(109304, { heal = true }),
feignDeath = Spell(5384),
}, bm, getfenv(1))
Spell traits like damage = "physical" and ranged = true help SYNQ make intelligent casting decisions—avoiding immunities, checking range, and handling targeting automatically.
Hunters need to maintain optimal range. Here's how to handle gap closing with movement awareness:
harpoon:Callback("gapclose", function(spell)
if disengage.cd > 25 then return end
if target.distance > 25 and target.distance < 30 and player.movingToward(target, { angle = 45, duration = 0.2 }) then
if spell:Cast(target) then
synq.alert("Harpoon (Gapclose)", spell.id)
end
end
end)
disengage:Callback("gapclose", function(spell)
if harpoon.recentlyUsed(2) then return end
if target.distance < 8 and player.movingToward(target, { angle = 45, duration = 0.15 }) then
if spell:Cast() then
synq.alert("Disengage (Gapclose)", spell.id)
end
end
end)
These callbacks check movement direction and distance, only using gap closers when you're actually moving toward the target. The recentlyUsed() check prevents spamming abilities.
Group your major cooldowns together for maximum burst damage. When /synq burst is active, these callbacks coordinate your cooldowns:
bestialWrath:Callback("burst", function(spell)
if target.enemy and spell:Cast() then
synq.alert("Bestial Wrath (Burst)", spell.id)
end
end)
aspectOfTheWild:Callback("burst", function(spell)
if bestialWrath.active and spell:Cast() then
synq.alert("Aspect of the Wild (Burst)", spell.id)
end
end)
bloodshed:Callback("burst", function(spell)
if bestialWrath.active and spell:Cast(target) then
synq.alert("Bloodshed (Burst)", spell.id)
end
end)
Notice how aspectOfTheWild and bloodshed check bestialWrath.active—this ensures they only cast after Bestial Wrath is active, creating a coordinated burst sequence.
Manage your Focus pool efficiently to ensure you always have enough for high-priority abilities:
cobraShot:Callback(function(spell)
if killCommand.cd > 2 or player.focus > 90 then
spell:Cast(target)
end
end)
barbedShot:Callback("maintain", function(spell)
if player.buffRemains(spell.id) < 3 or (pet.exists and pet.buffStacks(272790) < 3) then
spell:Cast(target)
end
end)
serpentSting:Callback("maintain", function(spell)
if target.debuffRemains(spell.id, player) < 4 then
spell:Cast(target)
end
end)
The cobraShot callback only casts when Kill Command is on cooldown for more than 2 seconds, or when Focus is above 90—preventing you from wasting Focus on filler when important abilities are ready.
Here's your full actor with all advanced features integrated:
local Unlocker, synq, example = ...
local bm = example.hunter.bm
bm:Init(function()
if target.enemy then
StartAttack()
if synq.burst then
bestialWrath("burst")
aspectOfTheWild("burst")
bloodshed("burst")
end
harpoon("gapclose")
disengage("gapclose")
killCommand()
barbedShot("maintain")
serpentSting("maintain")
bloodshed()
barbedShot()
cobraShot()
end
end)
Labeled callbacks let you create multiple casting conditions for the same spell. When you call barbedShot("maintain"), SYNQ uses the callback labeled "maintain" instead of the default callback.
Benefits:
The synq.alert() function provides on-screen notifications when important abilities fire. This helps you:
With advanced features working, consider expanding your rotation with:
Your routine is now intelligent, context-aware, and ready for real gameplay. Experiment with different approaches, test in various situations, and refine based on what works best for your playstyle.
Next: Learn about SYNQ Objects and the core concepts that power SYNQ.