Before You Begin#
Before installing Chess, make sure your server meets the minimum requirements. Two resources and OneSync are mandatory; everything else is optional and detected on its own.
Requirement | Status | Notes |
|---|---|---|
| Required | Database access. The table installs itself. |
| Required | Callbacks, the game mode menu and the default notifications. |
OneSync | Required | The resource will not start without it. txAdmin turns it on by default. |
Framework | Optional |
|
| Optional | Quasar notifications, and its HUD is hidden while a match is on. |
| Optional | Draws the |
Everything framework- or third-party-specific sits behind a small, unencrypted bridge file, and the resource picks the right one by looking at what is already running:
Layer | What is looked for |
|---|---|
Framework |
|
Notifications |
|
Table prompt |
|
Every optional integration degrades silently. If a resource is missing, that part falls back to the built-in version — nothing errors. Integrations has the details and how to plug in your own.
github.comReleases · overextended/oxmysqlMySQL resource for FXServer.github.comReleases · overextended/ox_libA FiveM resource and script library for Lua and JS.Downloading Chess#
After purchasing Chess, the resource is automatically linked to your CFX Portal account.
Sign in to the CFX Portal using the same account used during checkout, open Granted Assets, and download Chess.
After extracting the download, you should have the following folder:
qs-chess/
├── config/ -- config.lua, what you may edit
├── client/custom/ -- notifications, HUD and the table prompt (editable)
├── server/custom/ -- money, permission and names per framework (editable)
├── locales/ -- 41 languages (editable)
├── database/ -- sql.sql, optional
├── stream/ -- the table, the chair and the 32 pieces
└── web/ -- the in-game interfaceKeep the folder named
qs-chess. Updates are delivered under that name, and every path and command in this manual refers to it. Onlyconfig/,client/custom/,server/custom/andlocales/are open for editing; the rest is protected by the Cfx escrow.
Installing the Resource#
Move the qs-chess folder into your server's resources directory. It can live anywhere inside it, including a category folder:
resources/
└── [qs]/
└── qs-chess/Once copied, open your server.cfg and make sure every dependency — and everything it should detect — starts before Chess:
# OneSync must be on. txAdmin does this for you; on a plain server.cfg:
set onesync on
ensure oxmysql
ensure ox_lib
# Framework
ensure es_extended
# ensure qb-core
# ensure qbx_core
# Optional
ensure qs-interface
ensure qs-textui
ensure qs-chessThe loading order matters. The framework is detected the moment Chess starts, and qs-textui the moment a player loads it, so a framework that starts later is not found and the script runs as standalone — free tables, no money taken.
The Database#
There is no SQL file to import. Every time it starts, Chess makes sure its one table, qs_chess_tables, exists and creates it if it does not. database/sql.sql holds the same statement for anyone who prefers to create it by hand.
Column | Holds |
|---|---|
| The table's id, worked out from its position — for example |
| Position and heading, stored as JSON. |
| The name shown in the creator. |
| The entry fee per player. |
|
|
Only tables placed with the creator — or edited in it — get a row. Tables written in
Config.Tablesand tables that come from a map are registered again each time a player loads in, so they need none. Matches are never written to the database: they live in the server's memory while they are played.
Granting Creator Access#
The creator is where tables are placed, priced and deleted, so /chesscreator — and the calibration commands — need the ACE permission command.chesscreator. The server checks it again before it saves, moves or deletes a table, so nobody without it can change a table, whatever their client sends. Any of these routes grants it:
The usual route. Give the permission to your admin group, and put your staff in that group:
add_ace group.admin command.chesscreator allow
add_principal identifier.license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx group.adminIf your server.cfg already has add_ace group.admin command allow — as most txAdmin recipes do — your admins have it already.
For a single map builder who should not be an admin:
add_ace identifier.license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx command.chesscreator allowThe name of the permission is a setting. Change it to fit your own ACE scheme, then grant the new name:
-- config/config.lua
Config.Creator = {
permission = 'quasar.chess.admin',
}add_ace group.admin quasar.chess.admin allowRestart the server after changing ACEs. To check a group by your framework instead — ESX admin, QBCore god — edit HasPermission in server/custom/framework/, as shown in Integrations.
Configuring the Resource#
Everything lives in one file, config/config.lua. It is read when the resource starts, so restart qs-chess after changing it.
Setting | Controls |
|---|---|
| The language of the notifications and the interface. One of 41 codes. |
| Detected on its own. Set |
| How close the |
| The table and chair models: |
| Whether tables from maps become playable on their own, and a list of fixed tables written by hand. |
| Where the board sits on the table, how the knights face, where the chairs stand and how players sit — plus the sitting animation and the fade. |
| The top-down camera's height, field of view, transition and zoom limits; the colours and opacity of the move grid. |
| Seconds per turn and how long a piece takes to slide. |
| Whether players can bet, the largest stake, the slider step, and cash or bank. |
| The peds that play the AI, its thinking delay, and the strength of each difficulty. |
| The interact key ( |
| The ACE permission for the creator, and the switch that turns on the calibration commands. |
The values worth reviewing first:
Config.Locale = 'en' -- en · es · fr · de · pt · and 36 more
Config.Game = {
turnSeconds = 120, -- per move; 0 = no clock. Running out loses
moveAnimMs = 350,
}
Config.Betting = {
enabled = true, -- player vs player only
max = 5000, -- highest stake on the slider
step = 100,
paymentMethod = 'money', -- 'money' (cash) or 'bank'
}
Config.AutoDetect = true -- tables placed by maps become playable
Config.Debug = false -- true enables the calibration commands
Config.Board,Config.PiecesandConfig.Seatare tuned for the table and chair that ship with the script. Leave them alone unless you swap the models — the calibration tools in Usage write the new values for you.
Verifying the Installation#
After completing the installation, restart your server and look for this line in the console:
[qs-chess] Loaded 0 table(s) from SQL.0 is right on a new server: no table has been placed yet. If the line never appears, oxmysql is not connected or starts after Chess.
Then join your server and work through the first loop:
Place a table
Type
/chesscreator, press +, give the table a name, press Place, aim at the floor and click. Back in the creator, press Save table. The table and its two chairs appear where you aimed.Play the AI
Walk up to the table until
[E] - Play Chessappears, pressE, choose Player vs AI, pick Medium and press Start. You sit down on the white side and a ped takes the black chair.Make a move
Click and hold a pawn, drag it two squares forward and let go. If the pieces sit in the middle of their squares and the AI answers, everything is in place. Press
Backspaceto leave.
From here, Usage covers the creator in full, the other ways to add tables, matches between players and bets.



