Time to build a working Beast Mastery Hunter rotation. This page shows you how to define spells, create callbacks, and wire everything into a priority-based rotation that actually works in-game.
In hunter/bm-spells.lua, define your spell objects using SYNQ's spell system:
local Unlocker, synq, example = ...
local bm = example.hunter.bm
local Spell = synq.Spell
synq.Populate({
killCommand = Spell(34026),
barbedShot = Spell(217200),
bestialWrath = Spell(19574),
cobraShot = Spell(193455),
}, bm, getfenv(1))
Finding spell IDs: Use an addon like idTip to see spell IDs when hovering over abilities, or check WoW API documentation. Make sure you're using IDs that match your client version.
Now attach callbacks to define when each spell should cast:
killCommand:Callback(function(spell) spell:Cast(target) end)
barbedShot:Callback(function(spell) spell:Cast(target) end)
bestialWrath:Callback("burst", function(spell)
if target.enemy then
spell:Cast(target)
end
end)
cobraShot:Callback(function(spell) spell:Cast(target) end)
Understanding callbacks:
"burst" label creates a separate pathway—call bestialWrath("burst") to use this specific callbackIn hunter/bm-actor.lua, replace your actor initialization with actual rotation logic:
local Unlocker, synq, example = ...
local bm = example.hunter.bm
print("BM Hunter routine loaded successfully!")
bm:Init(function()
if target.enemy then
StartAttack()
if synq.burst then
bestialWrath("burst")
end
killCommand()
barbedShot()
cobraShot()
end
end)
How this works:
StartAttack() begins auto-attacking (both you and your pet)/synq burst), cast Bestial Wrath using its burst callbackThe rotation executes top to bottom. If killCommand() is ready, it casts. If not, SYNQ moves to the next spell in line. This creates a natural priority system.
Separation of concerns:
bm-spells.lua) — Defines spells and their casting conditionsbm-actor.lua) — Defines priority order and when to call each spellBenefits of this approach:
With the basics working, consider enhancing your rotation with:
Congratulations! You now have a working rotation skeleton. From here, you can expand it with more sophisticated logic, conditions, and optimizations based on your needs.
Next: Enhance your rotation with Advanced Routine Features.