Skip to content

Unit and spell state ​

Thin wrappers over the client's own unit and spell API, with the sharp edges filed off. Every one tolerates being called before the player is in the world.

37 entry points, 37 documented.

Nyx.RefreshClass ​

lua
Nyx.RefreshClass()

Caches the player class token ("ROGUE") once the world exists. Returns it.

State.lua

Nyx.Spec ​

lua
Nyx.Spec()

Talent tabs are ordered by the client's spec order (Rogue: 1 Assassination, 2 Combat, 3 Subtlety). The tab with the most points spent is the spec; the name comes from the client so it is already localized.

State.lua

Nyx.Exists ​

lua
Nyx.Exists(unit)

True when the unit token resolves to something. UnitExists returns 1 or nil, not a boolean.

State.lua

Nyx.TargetValid ​

lua
Nyx.TargetValid(unit)

True when the unit exists and the player may attack it. Does not check whether it is alive.

State.lua

Nyx.Attackable ​

lua
Nyx.Attackable(unit)

True when the unit is attackable AND alive. This is the one a rotation wants.

State.lua

Nyx.Health ​

lua
Nyx.Health(unit)

Current and maximum health of a unit, as two values.

State.lua

Nyx.HealthPercent ​

lua
Nyx.HealthPercent(unit)

Health as 0-100. Returns 0 rather than nil when the unit is unknown, so callers can compare safely.

State.lua

Nyx.InCombat ​

lua
Nyx.InCombat()

True while the player is in combat.

State.lua

Nyx.IsBusy ​

lua
Nyx.IsBusy()

True while the player is casting or channelling. The engine skips a tick rather than clipping a cast.

State.lua

Nyx.Power ​

lua
Nyx.Power(unit)

Current power of the unit's active type: energy for a rogue, rage for a warrior.

State.lua

Nyx.PowerMax ​

lua
Nyx.PowerMax(unit)

Maximum power of the active type.

State.lua

Nyx.PowerPercent ​

lua
Nyx.PowerPercent(unit)

Power as 0-100.

State.lua

Nyx.ComboPoints ​

lua
Nyx.ComboPoints(unit)

Combo points the player has on the unit (default target). 0 when there are none.

State.lua

Nyx.Position ​

lua
Nyx.Position(unit)

Position is deliberately absent: 3.3.5a has no UnitPosition, so world-space drawing needs the object manager (Nyx.Engine.*), not the Lua API. Nyx.Position stays defined so callers can branch on nil instead of erroring.

State.lua

Nyx.Distance ​

lua
Nyx.Distance(first, second)

Straight-line distance between two unit tokens, or nil. Needs UnitPosition, which 3.3.5a lacks - use Nyx.Objects.Distance instead.

State.lua

Nyx.Casting ​

lua
Nyx.Casting(unit)

Returns spell name, seconds remaining, and whether the cast is immune to interrupts. UnitChannelInfo has one return fewer than UnitCastingInfo (no castID), so the two are unpacked separately.

State.lua

Nyx.TargetCasting ​

lua
Nyx.TargetCasting(unit)

True when the unit is casting or channelling anything, interruptible or not. Prefer Nyx.Interruptible.

State.lua

Nyx.Interruptible ​

lua
Nyx.Interruptible(unit)

True only for a cast this client is allowed to interrupt. A rotation that fires Kick at an immune cast just wastes the cooldown.

State.lua

Nyx.Aura ​

lua
Nyx.Aura(unit, name, filter)

Seconds remaining (0 for an aura with no duration) and stack count, or nil when the aura is absent. filter follows the client's convention: "HELPFUL", "HARMFUL", and "|PLAYER" to restrict to our own casts.

State.lua

Nyx.HasAura ​

lua
Nyx.HasAura(unit, filter, name)

Legacy argument order (unit, filter, name). New code should use Nyx.Buff / Nyx.Debuff, which also return the time remaining.

State.lua

Nyx.Buff ​

lua
Nyx.Buff(name, unit)

Seconds remaining and stacks of a helpful aura from anyone, or nil when absent.

State.lua

Nyx.MyBuff ​

lua
Nyx.MyBuff(name, unit)

As Nyx.Buff, but only auras the player cast.

State.lua

Nyx.Debuff ​

lua
Nyx.Debuff(name, unit)

Seconds remaining and stacks of a harmful aura from anyone, or nil. Use Nyx.MyDebuff for upkeep.

State.lua

Nyx.MyDebuff ​

lua
Nyx.MyDebuff(name, unit)

The one that matters for DoT upkeep: somebody else's Rupture on the target must not stop us refreshing our own.

State.lua

Nyx.RefreshSpellbook ​

lua
Nyx.RefreshSpellbook()

Rescans the spellbook. Called automatically; only needed after learning a spell mid-tick.

State.lua

Nyx.InvalidateSpellbook ​

lua
Nyx.InvalidateSpellbook()

Marks the spellbook cache stale so the next Nyx.Known rescans.

State.lua

Nyx.Known ​

lua
Nyx.Known(spell)

True when the spell is in the player's spellbook. GetSpellInfo cannot answer this - it resolves any name the client knows, learned or not.

State.lua

Nyx.CooldownReady ​

lua
Nyx.CooldownReady(spell)

True when the spell is off cooldown. The global cooldown counts, so this covers the GCD too.

State.lua

Nyx.CooldownRemaining ​

lua
Nyx.CooldownRemaining(spell)

Seconds until the spell is ready, 0 when it already is.

State.lua

Nyx.InMeleeRange ​

lua
Nyx.InMeleeRange(unit)

Whether the unit is inside melee reach: true, false, or nil when the object manager cannot say.

Both hitboxes count, not a flat distance. A fixed five yards is wrong in both directions -- it refuses a large mob the player can plainly hit, and it accepts a small one that is out of reach -- which is exactly why the manager carries combatReach per unit.

State.lua

Nyx.InRange ​

lua
Nyx.InRange(spell, unit)

IsSpellInRange returns 1/0 for spells the client has range data for and nil for most melee abilities. Falling through to nil made every melee entry fail its range check and the rotation never fired.

The nil case now goes to the object manager, which measures the real distance against both hitboxes. CheckInteractDistance remains underneath it for when the manager cannot answer, and it is only a stand-in: 9.9 yd, so generous enough for a 5 yd ability that the cast is attempted and refused once per tick for the whole time the player is closing.

State.lua

Nyx.LineOfSight ​

lua
Nyx.LineOfSight(unit)

True when nothing blocks the line to the unit.

The client offers no line-of-sight call at all, so this goes through the object manager and the engine's ray native. Both ends have to be placeable in world space; when either is not, the answer is true. Unknown must not read as refused here -- the manager can lag a moment behind the client, and failing closed in that window stops the bot casting anything and presents as a broken rotation rather than an unavailable check.

State.lua

Nyx.Usable ​

lua
Nyx.Usable(spell)

True when the client says the spell is usable right now (resources, form, stance).

State.lua

Nyx.CanCast ​

lua
Nyx.CanCast(spell, onSelf, unit)

Known AND usable AND off cooldown AND in range. What the engine checks before casting. onSelf skips the range test.

State.lua

Nyx.CanCastSelf ​

lua
Nyx.CanCastSelf(spell)

Nyx.CanCast with the range check skipped, for self-buffs.

State.lua

Nyx.Cast ​

lua
Nyx.Cast(spell, onSelf)

CastSpellByName's second argument is read as a self-cast flag by some 3.3.5a builds and as a unit token by others. Passing "player" self-casts under both readings, and passing nothing casts at the current target under both, so the bot never uses any other form.

State.lua

Nyx.Facing ​

lua
Nyx.Facing(unit)

Facing angle of a unit in radians, or nil - 3.3.5a has no UnitFacing, so this is nil in practice. Use Nyx.Objects for facing.

State.lua

API reference generated from source.