Getting Started

Spellbook & Basic Rotation

Build a working Beast Mastery Hunter rotation with spells and priority logic

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.

1. Create Your Spellbook

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:

  • Each callback defines the casting logic for a spell
  • The "burst" label creates a separate pathway—call bestialWrath("burst") to use this specific callback
  • Simple callbacks attempt to cast whenever invoked, respecting cooldowns and conditions

2. Build Your Rotation Priority

In 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:

  1. Check for a valid enemy target
  2. StartAttack() begins auto-attacking (both you and your pet)
  3. If burst mode is active (/synq burst), cast Bestial Wrath using its burst callback
  4. Execute spells in priority order: Kill Command first, then Barbed Shot, then Cobra Shot

The 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.

3. Why This Structure Works

Separation of concerns:

  • Spellbook (bm-spells.lua) — Defines spells and their casting conditions
  • Actor (bm-actor.lua) — Defines priority order and when to call each spell
  • Labels — Allow multiple callbacks per spell for different situations (burst, maintain, gapclose, etc.)

Benefits of this approach:

  • Easy to extend — Add new spells to the spellbook, then reference them in the actor
  • Easy to adjust — Change priority by reordering function calls in the actor
  • Easy to customize — Modify callbacks or add conditions without touching the actor

4. What to Add Next

With the basics working, consider enhancing your rotation with:

  • Resource management — Add Focus checks to ensure you have enough for high-priority abilities
  • Buff maintenance — Track and refresh important buffs like Barbed Shot stacks
  • Cooldown coordination — Use labeled callbacks to group cooldowns together
  • Pet management — Monitor pet buffs and maintain uptime on key abilities
  • Multi-target logic — Add AoE priorities and target switching conditions
  • Defensive abilities — Integrate survival spells and emergency cooldowns

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.