What goes wrong most often, what it actually means, and what to change to fix it. Most of these come down to a permission, the load order, or a table that comes from somewhere other than the creator.
Installation and Access#
"You don't have permission" on /chesscreator
Your identifier does not have the ACE command.chesscreator. Grant it to a group you are in, then restart the server:
add_ace group.admin command.chesscreator allow
add_principal identifier.license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx group.adminIf you renamed the permission in Config.Creator.permission, grant the new name. If you rewrote HasPermission in server/custom/framework/, that function decides, not the ACE.
The calibration commands do nothing
/chessdebug, /chessknights, /chesschairs and /chesspeds are only registered while Config.Debug = true — set it and restart the resource. They also need the creator permission and a table within 10 m, and only one can be open at a time: close the current one with Backspace first.
The resource does not start and mentions /onesync
Chess requires OneSync. Turn it on in txAdmin's settings, or add set onesync on to server.cfg, and restart the server.
Tables are free and players show their FiveM names on ESX or QBCore
The framework was not running when Chess started, so it fell back to standalone. Move ensure qs-chess below your framework in server.cfg and restart the server. The same applies to qs-textui: started after Chess, its prompt is not used.
The language did not change
Look in the F8 console for [qs-chess] Locale "xx" not found, falling back to "en". The code in Config.Locale has to match a file in locales/ — pt, not pt-BR. Restart the resource after changing it.
Tables#
A table does not appear
Tables render within 45 m (Config.StreamDistance). Closer than that and still missing, the models are not loading: qs-chess streams them itself, so it must be started, and Config.Models must name models that exist. The creator says Failed to load the model. in that case.
There is no [E] prompt at a table
The prompt only shows at a free table, within 2.2 m of its centre (Config.InteractDistance), to a player who is not already seated. If somebody is playing there, wait for the match to end. A map table also has to be detected first — walk right up to it and give it a few seconds.
A table I deleted comes back
It was not a creator table. Tables from Config.Tables are registered again every time a player loads in, and tables from a map every time a player walks near the prop. Remove the config line, or the prop from the map — or set Config.AutoDetect = false if no map table should be playable.
Only some of the tables in my map are playable
Detection registers the closest chess table to each player, every few seconds. In a room full of tables the far ones are picked up as somebody walks past them. To have every one ready from the first second after a restart, open each in the creator and save it — it is then loaded from the database at start.
Moving a map table in the creator left a copy behind
Repositioning saves the table at its new spot, but the prop is still in the map at the old one, so it is detected again there. Move map tables in the map, not in the creator.
Players sit on thin air at a map table
The map has the table but not its chairs. Chess only spawns chairs for tables it spawns itself; a map table needs two chess_chair props in the map — see Map Tables.
My tables did not load after updating
Updating from a version with cx, cy, cz columns runs a one-time migration that rewrites the table with ALTER TABLE. Look for [qs-chess] Migrated N table(s) in the server console. If an SQL error is there instead, the database user lacks the ALTER privilege — grant it and restart.
Playing#
Pieces float, sink or sit off their squares
Config.Board does not match the table. With the shipped models, put back the default values; with your own, calibrate with /chessdebug as described in Usage. Knights that face sideways or sit off-centre are /chessknights.
Players sit inside or above the chair, or stand
Calibrate with /chesschairs and then /chesspeds. If the F8 console shows [qs-chess] AVISO: el anim dict "..." no existe, the sitting animation in Config.Seat.anim does not exist — put back timetable@ron@ig_3_couch / base.
A piece jumps back to its square
The server refused the move: it is not your turn, or the move is not legal — most often because it would leave your king in check. Only squares lit green or blue are accepted. If the server does not answer within three seconds, the piece is put back too.
The game ended on its own
One of these happened: the turn clock ran out, a player ended up more than 3 m from their chair or died (both count as resigning), the opponent disconnected, or an admin deleted the table. The notification says which.
A player is missing from the opponent list
The list holds players within 15 m of the table, not of you (Config.NearbyPlayerRadius). A player already in a match, or with an invitation waiting, is refused as busy when challenged.
The server hitches when somebody plays the Hard AI
The AI runs on the server, and Hard examines up to 60,000 positions per move. With many AI games at once, lower nodeCap — and if needed depth — in Config.AI.levels.hard. The AI gets weaker as you do.
Money and Bets#
No money is taken
Either the table's price is 0 — config and map tables always are, until edited in the creator — or the script is running as standalone because the framework started after it.
There is no bet slider
Betting is off (Config.Betting.enabled = false), or you are playing the AI — bets are player vs player only.
"You don't have enough money to play" with money in my pocket
Check where it is charged from. The entry fee uses the table's own payment method — cash or bank, shown in the creator's list — and the stake uses Config.Betting.paymentMethod. Both players need to cover both the fee and the stake.
What the Messages Mean#
Every message comes from the notify section of the locale files, so it reads in each server's own language. In English:
Message | Means |
|---|---|
You don't have enough money to play. | The entry fee or the stake cannot be covered. |
That player is busy right now. | They are in a match, or already have an invitation to answer. |
You already have a pending challenge. | Wait for the answer, or for it to expire after 30 seconds. |
That table is no longer available. | Somebody started a game there first, the table was removed, or the other player could not pay. |
Your challenge was declined. | The other player said no, or could not cover the stake. |
Your challenge expired. | No answer within 30 seconds. |
No players nearby to challenge. | Nobody else is within 15 m of the table. |
It's not your turn. | A move was sent during the opponent's turn. |
Failed to load the model. | The table model in |
The game has ended. | It ended without a result — most often because an admin deleted the table mid-match. Stakes are refunded. |
Still stuck? Open a ticket and include the server console from the moment
qs-chessstarts, the F8 console from the moment it went wrong, your framework, and yourserver.cfgload order.



