Skip to content

Configuration ​

All settings live in the config/ files. The global values act as defaults: each arena can override them individually from the arena builder.

Framework & inventory ​

The framework is chosen with a single option. The resource then automatically adapts notifications, inventory, currencies and admin detection.

lua
Config.Framework = "vorp"   -- "vorp" | "rsg" | "auto"
Config.Inventory = "auto"   -- "vorp" | "ox" | "rsg" | "auto"
  • "vorp" — VORP server (vorp_core).
  • "rsg" — RSG server, QB-RedM style (rsg-core).
  • "auto" — detects the running framework at launch (RSG takes priority if present, otherwise VORP).

Behaviours adapted per framework ​

AspectVORPRSG
Corevorp_corersg-core
Notificationsnative VORP tipsox_lib
Default inventoryvorp_inventoryox_inventory
Admin detectionadmin groupadmin / god permission, or ace
Available currenciescash, gold, rolcash, bank, crypto

Decoupled inventory ​

Config.Inventory is intentionally separated from the framework, to cover mixed servers (e.g. a VORP server using ox_inventory).

ValueEffect
"vorp"vorp_inventory
"ox"ox_inventory
"rsg"native rsg-inventory
"auto"VORP → vorp_inventory, RSG → ox_inventory

Currencies: RSG has no native gold. If a "gold" currency is configured, it is treated as cash on RSG. See Betting for the currency setting.

Access & map ​

OptionEffect
Config.requiredJobJobs allowed to use the arena. Empty = everyone.
Config.blipsNameBlip name shown on the map.
Config.blipsArenaBlip sprite.
lua
Config.requiredJob = {}                       -- e.g. { "police", "boxer" }
Config.blipsName   = "Fighting Arena"
Config.blipsArena  = "blip_ambient_bounty_hunter"

Rewards ​

Payout multiplier applied based on the difficulty of the defeated opponent (Player vs NPC).

lua
Config.Rewards = {
    weak    = 0.25,
    average = 0.5,
    strong  = 1,
    legend  = 2,
}

Pre- / post-fight auto-heal ​

Two independent flags control HP refills, on the way into the ring and on the way out.

lua
Config.autoHealAfterCombat  = true
Config.autoHealBeforeCombat = false

After the fight (autoHealAfterCombat) ​

At the end of a fight (solo, PvP, Royal Rumble), the player gets their HP back to full before leaving the ring.

  • true (default) — clean ending, the player walks out at full HP.
  • false — tougher RP: the player keeps the HP they had when the fight ended (they need a doctor / a consumable to heal).

Before the fight (autoHealBeforeCombat) ​

At the start of a PvP or Royal Rumble fight, the player's HP is reset to max for fairness (so nobody starts at 30% HP because they ate a bullet earlier).

  • true — fair fight, but most server-side anti-cheats flag any client-side HP increase as cheating.
  • false (default) — the player keeps whatever HP they walked into the ring with. Recommended if you run an anti-cheat (AnyAC, Badger, similar). To keep fairness anyway, set it to true AND whitelist josk_arena in your anti-cheat.

Fighters ​

lua
-- Solo roster (Player vs NPC): displayed name, model, HP, level
Config.adversaires = {
    { label = "The Champion", modele = "CS_WELSHFIGHTER",  health = 1500, level = "legend" },
    { label = "The Runt",     modele = "cs_sunworshipper", health = 100,  level = "weak"   },
    -- ...
}

-- Fighters used in NPC vs NPC and Royal Rumble
Config.adversairesPNJ = {
    { label = "The Champion", modele = "CS_WELSHFIGHTER" },
    -- ...
}
  • Config.adversaires — the solo opponent roster. The level field (weak/average/strong/legend) determines combat behaviour.
  • Config.adversairesPNJ — fighters for the NPC vs NPC and Royal Rumble modes.
  • Config.levelCombat — AI behaviour per level (accuracy, aggression, range, ability). Adjusting a level makes opponents tougher or easier.

Banned ped models (blacklist) ​

List of ped models you don't want to see in the arena. A banned model can't be added from the builder tablet (the field turns red and saving is refused) and is ignored if present in a global or per-arena roster.

lua
Config.PedBlacklist = {
    "RE_RALLYDISPUTE_MALES_01",
    "RE_RALLYSETUP_MALES_01",
    -- add models to ban here
}

Case-insensitive.

Betting ​

lua
Config.Betting = {
    enabled              = true,
    allowManagerBet      = false,  -- a manager can bet on their own arena (rigged-fight RP -- see Betting docs)
    currency             = 0,      -- 0 = cash | 1 = gold | 2 = rol  (gold -> cash on RSG)
    minBet               = 1,
    maxBet               = 500,    -- max bet per player per fight
    rakePercent          = 5,      -- house cut (%)
    refundOnCancel       = true,   -- refund if the fight is cancelled
    refundIfNoWinnerBets = false,  -- no bet on the winner: false = house keeps, true = refund
    interactionDistance  = 2.5,    -- interaction distance with the bookmaker
    bookmakerPedModel    = "cs_jeb",
    allowedModes = {
        player     = false,  -- Player vs NPC
        npc        = true,   -- NPC vs NPC
        rumble     = true,   -- Royal Rumble
        pvp        = true,   -- Duel
        tournament = true,   -- Tournament match
    },
}

Each arena can override enabled, minBet, maxBet, rakePercent, allowedModes and allowManagerBet from the builder (see builder).

Management tablet ​

lua
Config.Tablet = {
    enabled          = true,
    openMode         = "item",          -- "command" | "item"
    command          = "boxing",        -- chat command (if openMode == "command")
    openItem         = "boxing_tablet", -- inventory item (if openMode == "item")
    requiredJob      = {},               -- allowed jobs (empty = Config.requiredJob, then everyone)
    locale           = "en",             -- tablet language: "fr" | "en"
    useClipboardAnim = true,             -- play the writing animation while open
}

Arena builder ​

lua
Config.Builder = {
    enabled     = true,
    command     = "arena_builder",
    adminGroups = { "admin" },   -- allowed groups (VORP)
    entryPedModels = {           -- models offered for the welcome NPC
        { label = "Bounty Hunter", modele = "blip_ambient_bounty_hunter" },
        { label = "Brawler",       modele = "mp_u_m_m_saloonbrawler_01"  },
        -- ...
    },
}

On VORP, access is granted to the groups listed in adminGroups. On RSG, it relies on the josk_arena.builder ace permission (see Installation).

Emotes ​

lua
Config.kitEmote       = { "KIT_EMOTE_TAUNT_BEST_SHOT_1", "KIT_EMOTE_ACTION_FLEX_1" }  -- staging / preview
Config.kitEmoteFinish = { "KIT_EMOTE_REACTION_APPLAUSE_1", "KIT_EMOTE_TAUNT_WAR_CRY_1" } -- victory

Add or remove entries freely.

Language (i18n) ​

Two languages ship by default: English (default) and French. The selection is server-wide; every player sees the same language.

Switch between included languages ​

The locale is set via the tablet config:

lua
Config.Tablet = {
    ...
    locale = "en",   -- "fr" | "en"
}

That single line drives both the tablet UI and the in-game text (notifications, prompts, NPC labels, Discord embeds). Restart the resource to apply — no rebuild needed (both dictionaries are already bundled).

Customise the wording ​

Every in-game text — notifications, prompts, NPC labels, Discord embeds — lives in config/arena_language.lua, which stays fully editable. The file holds one dictionary per language, English and French, so you can reword any line to match your server's tone. Keep the keys exactly as they are, change only the text between the quotes, then restart the resource.

lua
EN.victory        = "Victory!"
EN.bet_menu_title = "Betting office"

Add a new language ​

Need a language that isn't included? Get in touch on the support Discord — the resource is built to host extra dictionaries, and adding one is quick.

Fallback ​

If a line is missing from the active language, the resource falls back to English instead of showing an empty string, so a partially reworded dictionary always stays usable.

Server settings ​

Defined in server/server_config.lua (never sent to clients — this is where secrets like webhook URLs live).

Discord (optional) ​

lua
ServerConfig.Discord = {
    enabled   = true,
    webhook   = "",                  -- "https://discord.com/api/webhooks/<id>/<token>"
    username  = "Arena Master",      -- empty = default identity from the webhook
    avatarUrl = "",                  -- empty = default avatar from the webhook
}

Announcements for RP events (bets paid out, contracts signed/ended, tournaments finished, stables created/disbanded, arenas created/deleted). Setting enabled = false or leaving webhook = "" disables everything — no HTTP calls, zero cost.

Stable contracts ​

lua
ServerConfig.Contracts = {
    itemName    = "josk_item_contract", -- "paper contract" item
    issueOnSign = true,                 -- hand out the item on signing
}

See Installation for the items to create.