Skip to main content

Troubleshooting

First step for almost everything: Config.debug = true, restart, reproduce, watch the server console for [awoken_spawn] lines.

Selector doesn’t open

Look for [awoken_spawn] open src=X isNew=Y -> N cards.
  • Line missing → nothing triggered the open.
    • Confirm Config.open.autoOpenOnFrameworkLoad = true.
    • Confirm your framework fires one of the events listed in Installation.
    • If you’re using a standalone multichar, verify it either fires the framework’s normal player-loaded event, or is listed in Config.open.multichar, or calls awoken_spawn:server:requestOpen.
  • Line present, no UI on the client → check F8 console for JS errors. After a Vite rebuild, the asset hash filenames in html/index.html need to match what’s actually in html/build/.

/spawnselect says “Unknown command”

Only registered when Config.debug = true. Flip and restart.

Character visible during selection

Config.open.hideCharacter = true (default) hides the ped. If something downstream is fighting it, wrap that resource’s visibility writes to skip while the selector is open.

PVP doesn’t work after spawning

Quick test in F8 after a spawn:
If PVP works after that, something downstream is re-disabling it. Find that resource. Confirm Config.spawn.setPvpDefault = true.

Pins misaligned

Set Config.debug = true and use the calibration wizard in the top-right badge (single-click to pick pin coords, or run the two-point wizard for a full worldBounds block). See the Map page.

Last location doesn’t persist

  • Confirm Config.database.enabled = true.
  • Confirm oxmysql is ensured before awoken_spawn.
  • Check the DB — the table (default awoken_spawn_lastchoice) is auto-created on first run.

The Last Location card isn’t showing at all

This is deliberate when there is nowhere real to send the player. The card used to appear regardless and silently spawn them at Config.spawn.fallbackCoords, which looked like “last location is broken” rather than “there is no last location”. The card is offered when any of these resolve, in order:
  1. a position handed over by the multicharacter script
  2. a usable coords value in awoken_spawn_lastchoice
  3. the framework’s own saved position (players.position on QB/QBX, the users row on ESX) — controlled by Config.database.frameworkFallback
The server log names which one was used, or says nothing was usable. A row with a NULL coords column is normal and not corruption: it is what a housing handoff writes, because the housing script owns the placement.

I picked my property but spawned somewhere else

The housing script did not react to the handoff. Look for this in the client console:
That means the event or export we call for that housing resource is wrong for your version. The player is dropped at normal coords instead of being left stranded, so it degrades rather than breaks. Send that line over and the branch in client/spawn.lua can be corrected.

New character gets stuck on a black screen

Fixed in the current build, but the symptom to recognise is a black screen after character creation with the selector’s text visible, plus this in the server console:
The framework-load hook and the multicharacter handoff were both trying to open the selector, and the first one to arrive blocked the second. When a multicharacter script is detected, the framework hook now stands down and logs:
If you see the “already pending” line without the “not hooking” line, the multicharacter resource is not being detected — check its folder name against the list in multicharPresent().

Housing property card missing

  • Confirm the housing resource is in Config.housing.detect.
  • Confirm the player actually owns something in that resource’s DB.
  • Order matters — the first available adapter that returns properties wins the handoff.

Discord not posting

  • Config.discord.webhook is empty ('') by default — off. Set the URL to enable.
  • Posts are non-blocking, so a bad webhook won’t break spawns — it’ll silently no-op.

”Resource must be named awoken_spawn”

The folder is named something else. Rename it back.

”oxmysql tried to call a function reference in X but X isn’t started”

Not us — the error message names the actual broken resource. Fix or remove that one.