Skip to content

Configuration

L'ensemble des réglages se trouve dans les fichiers config/. Les valeurs globales servent de valeurs par défaut : chaque arène peut les surcharger individuellement depuis le constructeur d'arènes.

Framework & inventaire

Le framework se choisit avec une unique option. La ressource adapte ensuite automatiquement les notifications, l'inventaire, les devises et la détection des administrateurs.

lua
Config.Framework = "vorp"   -- "vorp" | "rsg" | "auto"
Config.Inventory = "auto"   -- "vorp" | "ox" | "rsg" | "auto"
  • "vorp" — serveur VORP (vorp_core).
  • "rsg" — serveur RSG, de style QB-RedM (rsg-core).
  • "auto" — détecte le framework démarré au lancement (RSG est prioritaire s'il est présent, sinon VORP).

Comportements adaptés selon le framework

AspectVORPRSG
Corevorp_corersg-core
Notificationstips natifs VORPox_lib
Inventaire par défautvorp_inventoryox_inventory
Détection administrateurgroupe adminpermission admin / god, ou ace
Devises disponiblescash, or, rolcash, bank, crypto

Inventaire découplé

Config.Inventory est volontairement séparé du framework, pour couvrir les serveurs mixtes (par exemple un serveur VORP utilisant ox_inventory).

ValeurEffet
"vorp"vorp_inventory
"ox"ox_inventory
"rsg"inventaire natif rsg-inventory
"auto"VORP → vorp_inventory, RSG → ox_inventory

Devises : RSG ne dispose pas d'or natif. Si une devise « or » est configurée, elle est traitée comme du cash sur RSG. Voir Paris pour le réglage currency.

Accès & carte

OptionEffet
Config.requiredJobMétiers autorisés à utiliser l'arène. Vide = tout le monde.
Config.blipsNameNom du blip affiché sur la carte.
Config.blipsArenaSprite du blip.
lua
Config.requiredJob = {}                       -- ex. { "police", "boxeur" }
Config.blipsName   = "Arene de combat"
Config.blipsArena  = "blip_ambient_bounty_hunter"

Récompenses

Multiplicateur de gain appliqué selon la difficulté de l'adversaire vaincu (Joueur vs PNJ).

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

Soin avant / après combat

Deux options indépendantes contrôlent les remises à PV pleins, à l'entrée et à la sortie du ring.

lua
Config.autoHealAfterCombat  = true
Config.autoHealBeforeCombat = false

Sortie de combat (autoHealAfterCombat)

À la fin d'un combat (solo, PvP, Royal Rumble), le joueur récupère automatiquement la totalité de ses points de vie avant de quitter le ring.

  • true (par défaut) — fin propre, le joueur sort avec ses PV pleins.
  • false — RP plus dur : le joueur garde les PV qu'il avait à la fin du combat (il doit aller voir un médecin / consommer un objet pour se soigner).

Entrée en combat (autoHealBeforeCombat)

Au début d'un combat PvP ou Royal Rumble, les PV du joueur sont remis au maximum pour l'équité (personne ne commence à 30 % parce qu'il s'est pris une balle plus tôt).

  • true — combat équilibré, mais la plupart des anti-cheats côté serveur signalent toute augmentation de PV côté client comme triche.
  • false (par défaut) — le joueur garde les PV avec lesquels il entre dans l'arène. Recommandé si vous utilisez un anti-cheat (AnyAC, Badger, équivalents). Pour une équité quand même, mettre true ET whitelist josk_arena dans votre anti-cheat.

Combattants

lua
-- Roster solo (Joueur vs PNJ) : nom affiché, modèle, points de vie, niveau
Config.adversaires = {
    { label = "Le champion", modele = "CS_WELSHFIGHTER", health = 1500, level = "legend" },
    { label = "Le chétif",   modele = "cs_sunworshipper", health = 100,  level = "weak"   },
    -- ...
}

-- Combattants utilisés en PNJ vs PNJ et Royal Rumble
Config.adversairesPNJ = {
    { label = "Le champion", modele = "CS_WELSHFIGHTER" },
    -- ...
}
  • Config.adversaires — roster des adversaires solo. Le champ level (weak/average/strong/legend) détermine le comportement de combat.
  • Config.adversairesPNJ — combattants des modes PNJ vs PNJ et Royal Rumble.
  • Config.levelCombat — comportement de l'IA par niveau (précision, agressivité, portée, capacité). Ajuster un niveau rend les adversaires plus ou moins coriaces.

Modèles bannis (blacklist)

Liste des modèles de peds que tu ne veux pas voir en arène. Un modèle banni ne peut pas être ajouté depuis la tablette du constructeur (le champ s'affiche en rouge et la sauvegarde est refusée) et est ignoré s'il figure dans un roster global ou par-arène.

lua
Config.PedBlacklist = {
    "RE_RALLYDISPUTE_MALES_01",
    "RE_RALLYSETUP_MALES_01",
    -- ajoute ici les modèles à interdire
}

Insensible à la casse.

Paris

lua
Config.Betting = {
    enabled              = true,
    allowManagerBet      = false,  -- un gestionnaire peut parier sur sa propre arène (RP de combats truqués -- voir docs Paris)
    currency             = 0,      -- 0 = cash | 1 = or | 2 = rol  (or -> cash sur RSG)
    minBet               = 1,
    maxBet               = 500,    -- mise max par joueur et par combat
    rakePercent          = 5,      -- commission de la maison (%)
    refundOnCancel       = true,   -- rembourse si le combat est annulé
    refundIfNoWinnerBets = false,  -- aucun pari sur le vainqueur : false = la maison garde, true = remboursement
    interactionDistance  = 2.5,    -- distance d'interaction avec le bookmaker
    bookmakerPedModel    = "cs_jeb",
    allowedModes = {
        player     = false,  -- Joueur vs PNJ
        npc        = true,   -- PNJ vs PNJ
        rumble     = true,   -- Royal Rumble
        pvp        = true,   -- Duel
        tournament = true,   -- Match de tournoi
    },
}

Chaque arène peut surcharger enabled, minBet, maxBet, rakePercent, allowedModes et allowManagerBet depuis le constructeur (cf. builder).

Tablette de gestion

lua
Config.Tablet = {
    enabled          = true,
    openMode         = "item",          -- "command" | "item"
    command          = "boxing",        -- commande chat (si openMode == "command")
    openItem         = "boxing_tablet", -- item d'inventaire (si openMode == "item")
    requiredJob      = {},               -- métiers autorisés (vide = Config.requiredJob, puis tout le monde)
    locale           = "en",             -- langue de la tablette : "fr" | "en"
    useClipboardAnim = true,             -- joue l'animation d'écriture pendant l'ouverture
}

Constructeur d'arènes

lua
Config.Builder = {
    enabled     = true,
    command     = "arena_builder",
    adminGroups = { "admin" },   -- groupes autorisés (VORP)
    entryPedModels = {           -- modèles proposés pour le PNJ d'accueil
        { label = "Chasseur de primes", modele = "blip_ambient_bounty_hunter" },
        { label = "Bagarreur",          modele = "mp_u_m_m_saloonbrawler_01"  },
        -- ...
    },
}

Sur VORP, l'accès est accordé aux groupes listés dans adminGroups. Sur RSG, il repose sur la permission ace josk_arena.builder (voir Installation).

Émotes

lua
Config.kitEmote       = { "KIT_EMOTE_TAUNT_BEST_SHOT_1", "KIT_EMOTE_ACTION_FLEX_1" }  -- mise en scène / preview
Config.kitEmoteFinish = { "KIT_EMOTE_REACTION_APPLAUSE_1", "KIT_EMOTE_TAUNT_WAR_CRY_1" } -- victoire

Ajouter ou retirer des entrées librement.

Langue (i18n)

Deux langues sont livrées par défaut : anglais (par défaut) et français. Le choix est server-wide ; tous les joueurs voient la même langue.

Basculer entre les langues incluses

Le choix se fait dans la config de la tablette :

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

Cette ligne pilote à la fois la tablette et les textes en jeu (notifications, prompts, labels PNJ, embeds Discord). Restart la ressource pour appliquer — pas besoin de rebuild (les deux dictionnaires sont déjà embarqués dans le bundle).

Ajouter une nouvelle langue

Pour ajouter une troisième langue (espagnol par exemple), deux couches à modifier — la partie Lua (textes en jeu) et la partie NUI (tablette) :

1. Côté Lua — dupliquer config/arena_language.lua et traduire les valeurs. Les clés doivent rester identiques. Puis pointer fxmanifest.lua sur le nouveau fichier :

lua
shared_scripts {
    'config/arena_config.lua',
    'config/arena_language_es.lua',   -- au lieu de arena_language.lua
    'config/arena_shared.lua',
}

2. Côté NUI — dupliquer web/src/i18n/en.js dans un nouveau fichier (es.js) et traduire les valeurs. Puis enregistrer la locale dans web/src/i18n/index.js :

js
import fr from './fr.js';
import en from './en.js';
import es from './es.js';                // <-- nouveau

export const T = { fr, en, es };          // <-- nouveau

Rebuilder le bundle NUI :

bash
cd web && npm run build

3. Activer — passer Config.Tablet.locale = "es" et restart la ressource.

Chaîne de fallback

Si une clé manque dans la locale active, la tablette retombe sur EN d'abord, puis FR, puis la clé brute. Une traduction partielle reste donc utilisable — les chaînes manquantes apparaissent en anglais à la place de la nouvelle langue.

Réglages serveur

Définis dans server/server_config.lua (jamais transmis aux clients — c'est ici que vivent les secrets comme les URLs de webhook).

Discord (optionnel)

lua
ServerConfig.Discord = {
    enabled   = false,
    webhook   = "",                  -- "https://discord.com/api/webhooks/<id>/<token>"
    username  = "Maitre d'arene",    -- vide = identité par défaut du webhook
    avatarUrl = "",                  -- vide = avatar par défaut du webhook
}

Annonces des événements RP (paris payés, contrats signés/rompus, tournois terminés, écuries créées/dissoutes, arènes créées/supprimées). Mettre enabled = false ou laisser webhook = "" désactive l'ensemble — aucun appel HTTP, zéro coût.

Contrats d'écurie

lua
ServerConfig.Contracts = {
    itemName    = "josk_item_contract", -- item « contrat papier »
    issueOnSign = true,                 -- remet l'item à la signature
}

Voir Installation pour les items à créer.