Before You Begin#
Before installing Arm Wrestling, make sure your server meets the minimum requirements. Three things are mandatory; everything else is optional and detected on its own.
Requirement | Status | Notes |
|---|---|---|
OneSync | Required | Declared as a dependency — the resource does not start without it. |
| Required | Stores the tables placed with the creator. |
| Required | Callbacks, the table menu and notifications. |
Framework | Optional |
|
| Optional | Notifications in its style. |
| Optional | Draws the [E] - Play Arm wrestle prompt instead of the built-in 3D text. |
Arm Wrestling uses GTA V's own arm wrestling tables and animations, so there is nothing to stream and no asset pack to install.
GitHubReleases · overextended/oxmysqlMySQL resource for FXServer.GitHubReleases · overextended/ox_libA FiveM resource and script library for Lua and JS.Downloading Arm Wrestling#
After purchasing Arm Wrestling, 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 Arm Wrestling.
After extracting the download, you should have the following folder:
qs-armwrestling/
├── config.lua -- everything you may edit
├── custom/ -- money and player names per framework (editable)
├── client/ -- the game itself
├── server/ -- matches, bets and saved tables
├── shared/ -- helpers used by both sides
├── database/ -- sql.sql, imported once
├── locales/ -- 41 languages (editable)
└── web/build/ -- the interface, ready to useOnly
config.lua,custom/andlocales/are open for editing. Everything else is protected by the CFX asset escrow and is replaced as a whole by each update. Keep the folder namedqs-armwrestling— the version check looks it up by that name.
Installing the Resource#
Move the qs-armwrestling folder into your server's resources directory. It can live anywhere inside it, including a category folder:
resources/
└── [qs]/
└── qs-armwrestling/Once copied, open your server.cfg and make sure every dependency — and everything it should detect — starts before Arm Wrestling:
ensure oxmysql
ensure ox_lib
# Framework
ensure es_extended
# ensure qb-core
# ensure qbx_core
# Optional
ensure qs-interface
ensure qs-textui
ensure qs-armwrestlingThe loading order matters. The framework is detected once, when Arm Wrestling starts, so one that starts later is not found: Arm Wrestling falls back to standalone mode and bets take and pay nothing. A qs-textui that starts later leaves the built-in prompt in place.
The Database#
Arm Wrestling keeps the tables placed with the creator in one database table, qs_armwrestling_tables. Import database/sql.sql once, before the first start — the resource reads that table but does not create it. Run the file in HeidiSQL, phpMyAdmin, DBeaver or any client connected to your server's database:
CREATE TABLE IF NOT EXISTS `qs_armwrestling_tables` (
`id` VARCHAR(32) NOT NULL,
`coords` LONGTEXT DEFAULT NULL,
`model` VARCHAR(64) NOT NULL,
`label` VARCHAR(128) NOT NULL DEFAULT '',
`price` INT NOT NULL DEFAULT 0,
`payment_method` VARCHAR(16) NOT NULL DEFAULT 'money',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;It holds one row per table:
Column | Holds |
|---|---|
| The table's identifier, worked out from where it stands. Moving a table gives it a new one. |
| Position and heading as JSON: |
| The prop's hash, one of |
| The name given in the creator. |
| The price and account ( |
Granting Creator Access#
The table creator is behind an ACE permission, command.armwrestlecreator by default. Give it to your admin group in server.cfg and put yourself in that group:
add_ace group.admin command.armwrestlecreator allow
add_principal identifier.license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx group.adminIf your admin group already has add_ace group.admin command allow — FiveM's default server.cfg ships with it — your staff already have access, since that line covers every command. Aces in server.cfg are read when it is executed, so restart the server after adding them.
The permission's name is Config.Creator.permission. Set it to an ace of your own and grant that one instead:
Config.Creator = {
permission = 'qs-armwrestling.admin',
-- ...
}The server checks it again every time a table is saved, moved or deleted, so a modified client cannot change tables without it.
Configuring the Resource#
Everything lives in one commented file, config.lua. It is read when the resource starts, so restart qs-armwrestling after editing it.
Section | Contents |
|---|---|
| The language — one of 41 codes. |
| Detected on its own from the list above it. Add a line there only to support another framework — see Integrations. |
| The creator permission, how fast a table turns and rises while placing it, a ground offset, and the table models that can be picked. |
| How close to the table a player must be to be challenged, and how long a challenge waits for an answer. |
| Bets between players: on or off, and the bet slider's maximum and step. |
| The characters a bot can be, and each difficulty's speed and strength. |
| Debug printing. Leave it |
The values worth reviewing first:
Config.Locale = 'en' -- ar, bg, bn ... uk, ur, vi, zh
Config.Challenge = {
nearbyPlayerRadius = 15.0, -- metres around the table to list opponents
timeout = 30, -- seconds to answer a challenge
}
Config.Betting = {
enabled = true, -- false removes the bet slider
min = 0,
max = 10000, -- the slider's maximum
step = 100, -- the slider's step
}
Config.Bot = {
defaultDifficulty = 'normal', -- used when a difficulty is missing
-- models and difficulties: see Usage
}The bot difficulties and the table models are explained, value by value, in Usage.
Verifying the Installation#
Restart your server and read the console. On a working install you will see:
[qs-armwrestling:INFO] Server framework loaded: esx
[qs-armwrestling:INFO] Loaded 0 arm wrestling table(s) from SQL.The first line names the framework it found — esx, qb or standalone. If it says standalone on a server that has a framework, that framework starts too late. The second line counts the tables saved with the creator; if it never appears, or an oxmysql error about qs_armwrestling_tables does, the SQL has not been imported.
Then join your server and work through the first loop:
Place a table
Type
/armwrestlecreator, press +, name the table, pick a model and press Select. Aim at the floor, left click to drop it, then Save Table.Beat a bot
Walk up to the table and press
E→ Player vs Bot → Easy → Ready. After GO!, tapEas fast as you can.Challenge somebody
With a second player within 15 m, choose Player vs Player, pick them from the list, set a bet and press Ready. They accept on their own screen.
Nothing in the creator needs a restart: tables, names and models reach every player at once. Usage covers everything a match can do.



