How a Match Works#
Every match follows the same loop, whether it is practice against a bot or a duel with money on it:
Moment | What happens |
|---|---|
At the table | Standing within 1.5 m of a table shows [E] - Play Arm wrestle. |
The settings | Match Settings asks for the difficulty against a bot, or the bet against a player. Ready starts it. |
Sitting down | Both wrestlers are put in their seats on opposite sides of the table, locked in place, and play the intro animation. |
The countdown | 3, 2, 1 and GO! fill the screen, one second each, with a sound on every number. Pressing early does nothing. |
The struggle | Tap |
The finish | Winner and loser poses play, You win ! or You lost appears, and four seconds later both stand up — the moment any bet is paid. |
The server decides everything that matters: who sits where, the strength, who won and who gets paid. The player's game only sends the taps and animates the result.
Placing Tables#
Tables are placed in game and stored in the database — there are no coordinates to write in the config. Only tables placed with the creator are playable; an arm wrestling table that is part of a map stays decoration.
The creator#
/armwrestlecreator opens the Arm Wrestling Table Creator: every table on the server on the left, with a search box and a + button, and the selected table on the right. Each row shows the table's name and its model, and a button that teleports you to it after asking.
Section | What you set there |
|---|---|
Table Info | The table's name. Required. |
Table Model | The prop to spawn — one of |
Pricing | A price and a payment method, Cash Money or Bank Transfer. See Table prices below. |
Placement | Select for a new table — enabled once a model is chosen. The coordinates and heading appear once it is placed. |
Location | For an existing table: where it stands, and Reposition to move it. |
Save Table needs a name, a model and a location. An existing table is saved with Save Changes, and Delete removes it from the world and the database after asking. Every change reaches every player at once — there is nothing to restart. Esc closes the creator.
Dropping a table in the world#
Select closes the window and hands you a placement mode. A see-through copy of the table follows whatever you look at, up to 50 m away, with a red marker and a red line from you to it. It rests on the ground on its own — the script reads the model's size — and the heading and height offset are shown at the top of the screen.
Key | Does |
|---|---|
| Drop it here. Works only while the aim is on a surface. |
| Rotate it, for as long as the key is held — 80° a second by default. |
| Raise or lower it, 5 cm per notch. |
| Cancel and go back to the creator. |
The HUD and the minimap are hidden while placing. The creator reopens with the location filled in, and Re-select places it again.
Leave room on both sides. The two wrestlers sit on opposite sides of the table, so place it where a player fits on each side — not against a wall or a bar — and turn it with
Z/Xso it lines up with the room.
Table models#
Three GTA V props are ready to pick, together with the feel of the placement mode:
Config.Creator = {
permission = 'command.armwrestlecreator',
rotateSpeed = 80.0, -- degrees per second while rotating
heightStep = 0.05, -- metres per mouse-wheel notch
groundOffset = 0.0, -- extra height on top of the automatic ground offset
models = {
{ hash = `prop_arm_wrestle_01`, label = 'Arm Wrestle Table' },
{ hash = `bkr_prop_clubhouse_arm_wrestle_01a`, label = 'Clubhouse Arm Wrestle (A)' },
{ hash = `bkr_prop_clubhouse_arm_wrestle_02a`, label = 'Clubhouse Arm Wrestle (B)' },
},
}Add any other prop with a line of its own — the model name between backticks and the label shown in the creator. The seats are placed for tables of this size and shape, so a prop that is much bigger or smaller sits the wrestlers in the wrong spot. If tables float or sink on your map, groundOffset adds or removes height for every placement.
Starting a Match#
Walk up to a table — the prompt appears within 1.5 m — and press E. The menu offers two kinds of match; a table that already has one on it answers That table is already in use.
Player vs Bot → pick a difficulty in Match Settings — Easy, Hard or Normal → Ready. You take a seat and a bot sits down opposite you: a random character from Config.Bot.models, seen by everybody nearby.
Bot matches never carry a bet and cost nothing. They are practice, and a way to try the game alone.
Player vs Player lists everybody within 15 m of the table, nearest first, with their name, server ID and distance. Pick one and Match Settings opens with your opponent's card and — with betting on — a slider for the bet, from No bet up to the maximum.
Ready sends the challenge, and your opponent sees Arm Wrestling Challenge — <name> wants to arm wrestle you! — with the bet. They have 30 seconds to Accept or Decline; Esc declines. When they accept, the bet is taken from both of you and both of you are seated at the table.
You can have one challenge out at a time, and a player can have only one waiting for their answer.
Stay by the table while you wait: both players are sat down the moment the challenge is accepted.
If the table is taken or deleted before they accept, the challenge falls through and nobody pays.
Winning a Match#
Arm Wrestling is a tapping contest. Each match keeps one number, the strength, on a scale from 0 to 100. It starts at 50, the middle, and every push moves it towards one side. The arms on screen follow it — upright at 50, and the closer it gets to either end, the lower the losing hand. Reach the end and the match is over.
Rule | Detail |
|---|---|
One push | One tap of |
Worth | 1.5 points — 34 pushes to win from the middle if the other side does nothing. |
Against a player | Both push in opposite directions, so the faster tapper wins. There is no clock: a match lasts until one hand touches the table. |
Against a bot | The bot pushes back at the rhythm of its difficulty — see below. |
Every push goes through the server, which adds it up and tells both players where the arms are, so both screens show the same struggle.
Bot Difficulties#
A bot pushes back on its own, a set amount at a set rhythm, with some randomness so it never feels mechanical. To win you have to push faster than it does:
Difficulty | The bot pushes | Taps per second just to hold it |
|---|---|---|
Easy | 1.2 points about every 0.7 s | About 1.2 |
Normal | 1.9 points about every 0.38 s | About 3.4 |
Hard | 2.2 points about every 0.22 s | About 6.7 |
Each difficulty is a block in Config.Bot.difficulties. These are the defaults:
Config.Bot = {
models = {
'a_m_y_skater_01',
'a_m_y_musclbeac_01',
'g_m_y_lost_01',
's_m_y_dockwork_01',
'a_m_y_hipster_01',
},
difficulties = {
easy = { label = 'Easy', pressInterval = 700, pressAmount = 1.2, variance = 0.40 },
normal = { label = 'Normal', pressInterval = 380, pressAmount = 1.9, variance = 0.25 },
hard = { label = 'Hard', pressInterval = 220, pressAmount = 2.2, variance = 0.15 },
},
defaultDifficulty = 'normal',
}Setting | Means |
|---|---|
| Milliseconds between the bot's pushes, on average. Lower is harder. Never shorter than 150. |
| Points per bot push, on the same scale as a player's 1.5. |
| Randomness applied to the interval — |
| The button's text, unless the locale file translates |
| Used when a match asks for a difficulty that does not exist. |
| Any list of ped models. One is picked at random for every bot match. |
A new block — expert = { label = 'Expert', ... } — adds another button to Match Settings. The buttons are listed in alphabetical order of their keys.
Bets#
Bets are for player matches only. The challenger picks the amount on a slider, from No bet up to Config.Betting.max in steps of Config.Betting.step — $10,000 in steps of $100 by default. Both players pay the same amount, in cash, when the challenge is accepted. The server checks both purses first: if either player cannot pay, the challenge is refused and nobody is charged.
How the match ended | The pot |
|---|---|
A player pinned the other | The winner takes both bets, paid when they stand up. |
A player left with | Both bets are refunded. |
A player disconnected | The one still there takes both bets. |
Set Config.Betting.enabled = false to remove the slider altogether. To take bets from the bank, or in something other than money, see Integrations.
Table prices#
The creator's Pricing section saves a price and a payment method with each table, and the database keeps them. In this version they are stored only: starting a match does not charge them, and bets are the only money that changes hands.
Leaving a Match#
Way | Result |
|---|---|
| Stands you up and ends the match for both players. Before there is a winner, any bet is refunded. |
Disconnecting | The match ends, and the player who stayed takes both bets. |
The win | Both stand up four seconds after the last push. |
While seated you cannot walk, use weapons or get into a vehicle; the chat and voice keep working.
The Screen During a Match#
Where | What is there |
|---|---|
Centre | The countdown — a large 3, 2 and 1, then a green GO!. |
Bottom right | The keys: Exit ( |
Notifications | You win ! or You lost at the end, and every challenge message — through |
Your character's face strains for the whole match, and both wrestlers play GTA V's winner and loser poses at the end. Every key is listed on Commands and Controls.



