Getting Started

Advanced Routine Features

Add smart features to make your BM Hunter routine shine

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.

Features We'll Add

  • Automatic immunity detection — SYNQ spell objects avoid casting into immunities automatically
  • Intelligent gap closing — Smart movement and positioning logic
  • Burst coordination — Group cooldowns together with /synq burst
  • Visual feedback — See when important abilities fire
  • Resource management — Optimize Focus usage for maximum efficiency
  • Buff maintenance — Track and refresh important buffs and debuffs
  • Labeled callbacks — Multiple casting conditions per spell

Enhanced Spell Configuration

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

Intelligent Gap Closing

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.

Coordinated Burst Windows

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.

Focus Management

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.

Complete Enhanced Actor

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)

Understanding Labeled Callbacks

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:

  • Organization — Each spell's logic is self-contained within its own object
  • Performance — Callbacks only execute when the spell is ready and conditions are met
  • Flexibility — Reorder priority by changing function call order in your actor
  • Modularity — Same spell can have different callbacks for different situations (burst, maintain, gapclose, etc.)

Visual Feedback

The synq.alert() function provides on-screen notifications when important abilities fire. This helps you:

  • Track burst windows — See when major cooldowns activate
  • Debug your routine — Verify what's actually being cast
  • Learn your rotation — Understand the priority system in action

What's Next

With advanced features working, consider expanding your rotation with:

  • Multi-target logic — Handle AoE situations with target switching and cleave priorities
  • Defensive abilities — Integrate survival spells and emergency cooldowns
  • Pet management — Optimize pet abilities, positioning, and buff maintenance
  • Interrupt tracking — Smart kick and crowd control usage
  • DR tracking — Avoid diminishing returns on CC abilities

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.