Skip to content
Documentation
R_ArmWrestle

r_armwrestle Configuration

r_armwrestle config: tables, match rules, local opponents and difficulties, bets and keys.

All settings live in shared/config.lua. Restart the resource after changing it.

General

R.Locale = 'en' -- locales/<name>.json
R.Framework = 'auto' -- auto | esx | qb | qbox | none, bets only

R.InvertSweep = false
R.Tutorial = 5 -- intro hints for the first N matches
R.CrowdStream = true -- crowd murmur during the struggle
OptionDefaultWhat it does
R.Locale'en'Language file in locales/.
R.Framework'auto'Only used for bets. 'none' turns bets off.
R.InvertSweepfalseLeave false. Only change it if the arms move the wrong way (see Common Issues).
R.Tutorial5How many matches show the how-to hints. 0 turns them off.
R.CrowdStreamtrueCrowd sound during a match.

Tables

Arm wrestling tables already on your map work on their own. R.Tables is only for places that don't have one.

R.TableModel = 'prop_arm_wrestle_01'
R.StreamDistance = 80.0
R.SeatDistance = 1.4
R.SpectateDistance = 25.0

R.TableModels = { 'prop_arm_wrestle_01', 'bkr_prop_clubhouse_arm_wrestle_01a', 'bkr_prop_clubhouse_arm_wrestle_02a' }
R.DetectRadius = 6.0
R.DetectExpire = 300
R.MaxDetected = 64

R.Tables = {}
OptionDefaultWhat it does
R.TableModel'prop_arm_wrestle_01'Table prop used for your own spots.
R.StreamDistance80.0Distance at which your own tables appear for players.
R.SeatDistance1.4How close to a seat the E prompt shows.
R.SpectateDistance25.0Players this close can watch a match.
R.TableModels3 modelsTable props found on the map. Add the model of a custom table prop here.
R.DetectRadius6.0How close a player has to be for a map table to be found.
R.DetectExpire300Seconds an unused map table is kept before it's found again.
R.MaxDetected64Max map tables at once. 0 turns map tables off.

Your own tables

R.Tables = {
    { coords = vec3(-1172.6, -1572.2, 4.66), heading = 35.0 },
    { coords = vec3(1990.4, 3047.1, 46.21), heading = 240.0, model = 'bkr_prop_clubhouse_arm_wrestle_02a' }
}

coords is the base of the table on the ground. model is optional. The coordinates above are examples, use your own.

Physics

R.Physics = {
    Tick = 0.425,
    Gain = 0.031,
    Lead = 0.75,
    LeadDamp = 0.85,
    Decay = 0.1,
    Window = 0.35,
    MaxForce = 8.5,
    Strength = 1.0,
    IdleWindow = 150
}

These are GTA Online's own values and you don't need to touch them. To make rounds shorter, raise Gain a little. Strength multiplies everyone's push, players and locals.

Rules

R.Rules = {
    IntroTimeout = 15,
    GripHold = 2.0,
    MaxRoundTime = 90,
    RematchTime = 45,
    LeaveDistance = 4.0,
    Cooldown = 3,
    WaitTimeout = 180
}
OptionDefaultWhat it does
IntroTimeout15Max seconds the intro waits for both players to load.
GripHold2.0Seconds in the grip before 3-2-1-GO.
MaxRoundTime90After this the leader wins, or it's a draw.
RematchTime45Seconds to press Rematch.
LeaveDistance4.0Walking this far from the table counts as quitting.
Cooldown3Seconds before a player can sit again.
WaitTimeout180Seconds a player can wait alone. 0 = forever.

Dying, disconnecting or walking away counts as a loss.

Local opponents

R.Npc = {
    Enabled = true,
    Default = 'medium', -- easy | medium | hard
    Models = { 'a_m_y_musclbeac_01', 'a_m_m_hillbilly_01', 'a_m_m_salton_02', 'a_m_y_hippy_01', 'g_m_y_lost_01', 'a_m_m_farmer_01', 's_m_y_dockwork_01', 'a_m_y_beach_01' },
    RematchDelay = 2.5,
    Difficulty = {
        easy = { base = 2.8, var = 1.0, surge = { chance = 0.08, mult = 1.4, dur = 1.0 }, fatigue = 0.03, reaction = { 0.6, 1.2 } },
        medium = { base = 4.0, var = 1.4, surge = { chance = 0.12, mult = 1.5, dur = 1.2 }, fatigue = 0.025, reaction = { 0.4, 0.9 } },
        hard = { base = 5.4, var = 1.6, surge = { chance = 0.15, mult = 1.6, dur = 1.4 }, fatigue = 0.02, reaction = { 0.25, 0.6 } }
    }
}
OptionDefaultWhat it does
Enabledtruefalse = player vs player only.
Default'medium'Difficulty selected when the player sits down.
Models8 pedsA random one walks over.
RematchDelay2.5Seconds before the local accepts a rematch.

To make a level harder, raise its base (a fast player is about 7). reaction is how many seconds after GO the local starts pushing.

Bets

R.Bets = {
    Enabled = false,
    Account = 'cash', -- 'cash' | 'bank'
    Min = 100,
    Max = 10000,
    Chips = { 100, 500, 1000, 5000 },
    Step = 500,
    Currency = '$',
    HouseCut = 0 -- percent of the pot
}
OptionDefaultWhat it does
EnabledfalseTurns on bets between players. Needs ESX, QBCore or QBox.
Account'cash'Where stakes are taken from and paid to.
Min / Max100 / 10000Stake limits.
Chips / StepQuick amounts in the stake picker.
Currency'$'Shown before amounts.
HouseCut0Percent of the pot that is kept.

The seated player presses H to set a stake, and whoever sits down has to match it. The winner takes the pot. Draws and failed starts are refunded. Bets are never used against a local.

Keys

R.Keys = {
    Interact = 51, -- E
    QuitPad = 235,
    Npc = 47, -- G
    Stake = 74, -- H
    StakeCustom = 203, -- space
    DiffPrev = 174, -- arrow left
    DiffNext = 175 -- arrow right
}

These are GTA control IDs, so they work on keyboard and controller. Pushing is always A and D, or a stick.

Custom hooks

Who can sit, who can bet, downed players and notifications are set in client/cl_custom.lua and server/sv_custom.lua. See Exports & Hooks.