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   = "Arene de combat"
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,
}

Fighters

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

-- Fighters used in NPC vs NPC and Royal Rumble
Config.adversairesPNJ = {
    { label = "Le 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.

Betting

lua
Config.Betting = {
    enabled              = true,
    allowManagerBet      = false,  -- a manager can bet on their own arena (testing)
    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 and allowedModes.

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           = "fr",             -- 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.

Discord (optional)

lua
Config.Discord = {
    enabled = true,
    webhook = "https://discord.com/api/webhooks/...",
}

Announcements for RP events (bets, contracts, tournaments, stables). Setting enabled = false disables everything.

Server settings

Defined in server/server_config.lua (never sent to clients):

lua
ServerConfig.Announce = {
    tournamentChampions = true,   -- enriched announcement when a tournament ends
    bigPayoutThreshold  = 1000,   -- announcement if the paid pool exceeds this threshold (0 = off)
}

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

See Installation for the items to create.