-- tc-divisions : configuration / settings Config = Config or {} Config.Debug = false -- ============================================================================ -- CADRE / FRAMEWORK (Bridge) -- Le script détecte tout seul votre framework (Vision, Qbox, QBCore, ESX ou standalone), -- votre inventaire et votre système de cibles. Ne touchez à ceci que pour forcer un choix. -- The script auto-detects your framework, inventory and target system. Only edit this to force a choice. -- ============================================================================ Config.Bridge = { Framework = 'auto', -- 'auto' | 'vision' | 'qbox' | 'qbcore' | 'esx' | 'standalone' Inventory = 'auto', -- 'auto' | 'ox_inventory' | 'qs-inventory' | 'qb-inventory' | 'framework' | 'none' Target = 'auto', -- 'auto' | 'ox_target' | 'qb-target' | 'none' (non utilisé par ce script / unused here) Society = 'auto', -- compte société (non utilisé par ce script / unused here) Callbacks = 'auto', -- 'auto' | 'native' (callbacks du framework, sinon système intégré au script) VehicleKeys = 'auto', -- clés de véhicule : 'auto' | 'qb-vehiclekeys' | 'qs-vehiclekeys' | 'Renewed-Vehiclekeys' | 'wasabi_carlock' | 'none' Debug = false, -- affiche dans la console le framework / l'inventaire détectés Admins = {}, -- identifiants toujours admin, ex. 'license:xxxxxxxx' (en plus de l'ACE et des groupes du framework) AdminAce = 'command', -- permission ACE qui donne l'accès staff (add_ace group.admin command allow) ; hors Vision -- Hooks à fournir UNIQUEMENT en mode standalone (sans framework). Only for standalone mode. -- Pour ce script : getJob(src) -> { name, label, grade, gradeName, gradeLabel, onDuty }, -- listJobs() -> { police = { label = 'Police', grades = { { grade = 0, name = 'cadet', label = 'Cadet' } } } }, -- ainsi que getMoney / removeMoney / addMoney / itemCount / addItem pour les shops payants. -- L'identifiant du personnage est la licence Rockstar. -- Example: Standalone = { getJob = function(src) return {...} end, listJobs = function() return {...} end } Standalone = {}, } -- ============================================================================ -- INTÉGRATIONS OPTIONNELLES / OPTIONAL INTEGRATIONS -- Chaque intégration n'est utilisée que si la ressource correspondante est démarrée. -- ============================================================================ Config.Integrations = { logs = true, -- tc-logs : copie du journal vers Discord (webhooks configurés dans tc-logs) } -- ============================================================================ -- STAFF / ACCÈS ADMIN -- Vision : il suffit d'avoir UNE des permissions de compte ci-dessous, ou d'être dans AdminDiscords. -- Autres frameworks : ACE `Config.Bridge.AdminAce`, groupes admin du framework ou Config.Bridge.Admins, -- ou être dans AdminDiscords. -- ============================================================================ Config.Permissions = { 'gestion', 'gestion_features', 'dev' } -- IDs Discord qui ont accès à la gestion (chaînes entre guillemets). Laisser vide si inutile. -- Discord IDs granted staff access (strings). Leave empty if unused. Config.AdminDiscords = { -- '123456789012345678', } Config.Commands = { Gestion = 'divgestion', -- staff : menu complet (sur Vision aussi dans /gestion → « Divisions & accès ») Manage = 'division', -- joueurs : voir sa division ; patrons : affecter leurs employés Panic = 'panic', -- bouton panic (voir Config.Panic) } -- Grade minimum pour gérer les divisions de SON entreprise, quand rien n'est réglé -- en jeu pour ce job : 'top' = le grade le plus élevé du job, sinon un nombre. Config.DefaultManageGrade = 'top' -- Limites des divisions. Config.MaxDivisionsPerJob = 20 -- Coffres gérés par les patrons (/division → Coffres) : nombre de coffres de l'entreprise, -- emplacements et poids (kg) max de chaque coffre. Valeurs par défaut, réglables par -- entreprise dans /divgestion (fiche du job). Un coffre créé par le staff peut être confié -- à une entreprise (« Géré par ») : il compte alors dans sa limite. Config.BossChests = { max = 3, slots = 50, weight = 200 } -- Distance max (m) entre le patron et l'emplacement d'un coffre qu'il pose ou déplace. Config.BossChestReach = 10.0 -- Codes des coffres / shops (chiffres uniquement). Config.Code = { min = 4, max = 8 } -- Anti-bruteforce : après MaxAttempts codes faux, le joueur est bloqué LockSeconds -- secondes sur ce point (compté par personnage, survit à une reconnexion). Config.MaxAttempts = 3 Config.LockSeconds = 120 -- Un shop protégé par un code reste déverrouillé ce temps-là pour le joueur. Config.ShopUnlockSeconds = 600 -- Touche d'interaction (38 = E). Config.InteractKey = 38 -- Valeurs par défaut et bornes acceptées par le serveur. Config.ChestDefaults = { slots = 50, weight = 200, radius = 1.5 } Config.ShopDefaults = { radius = 1.5 } Config.GarageDefaults = { radius = 1.5, storeRadius = 5.0 } -- Garages : véhicules sortis en même temps par joueur (tous garages confondus). Config.GarageMaxOut = 0 -- 0 = pas de limite -- Gros véhicules (camions, bus, échelles…) : en taille « auto », un modèle plus long ou plus -- haut que ces valeurs (mètres) ne sort que sur les places marquées « gros véhicule » du -- garage (s'il en a), avec un dégagement plus large pour vérifier que la place est libre. Config.GarageLarge = { length = 8.0, height = 3.4, clearNormal = 3.0, clearLarge = 7.0 } -- Numéro de toit (secteur + matricule) demandé à la sortie des véhicules qui en ont un. -- Un chiffre par position ; chaque disposition liste les types de mods des positions, -- de gauche à droite. Le chiffre affiché par chaque variante est lu dans son libellé -- (« ONX_C4 », « NKSC_CSIGN_L4 »…), certains packs ayant des doublons ou des lettres. Config.Callsign = { layouts = { { 5, 42, 43, 44, 45 }, -- onx : positions A → E { 8, 10, 9 }, -- nk : gauche, centre, droite }, maxSlots = 5, sectorDigits = 2, -- chiffres max du secteur matriculeDigits = 4, -- chiffres max du matricule } -- Images des véhicules : modèle d'URL (%s = nom de spawn en minuscules), par exemple -- 'https://mon-cdn.exemple/vehicles/%s.webp' ou 'nui://ma_ressource/images/%s.png'. -- Vide = aucune image par défaut : l'interface affiche une icône de voiture. -- Une photo prise depuis le menu staff (bouton appareil photo, Vision) reste prioritaire. Config.VehicleImageFallback = '' Config.Limits = { slots = { 1, 500 }, weight = { 1, 10000 }, -- kg radius = { 0.8, 5.0 }, price = { 0, 1000000 }, quantity = { 1, 100 }, -- quantité donnée par achat perBuy = { 1, 50 }, -- nombre d'achats d'un coup } -- Moyens de paiement proposés dans les shops payants. Config.Payment = { cash = true, bank = true, } -- Images des objets : modèle d'URL (%s = nom de l'objet), par exemple -- 'nui://ox_inventory/web/images/%s.png'. Vide = détecté selon votre inventaire -- (ox_inventory, qb-inventory, qs-inventory) ; sans image, l'interface affiche une icône de boîte. Config.ItemImageBase = '' -- Tenues vendues dans les shops : l'achat donne l'objet `Item` avec la tenue en métadonnées -- (sexe, vêtements, nom). Enabled = 'auto' : actif sur Vision (objet « outfit » du core) ; -- ailleurs, mettre true seulement si votre inventaire / habillage sait utiliser cet objet. -- Outfits sold in shops: gives item `Item` with the outfit stored in its metadata. Config.Outfits = { Enabled = 'auto', Item = 'outfit' } -- Bouton panic (/panic) : alerte les collègues du même service. -- Vision : même alerte que le PANIC BUTTON du core (tous les jobs du même type). -- Autres frameworks : notification + point GPS temporaire chez les joueurs des jobs listés ici. -- Other frameworks: notification + temporary GPS blip for players with one of these jobs. Config.Panic = { Enabled = true, Jobs = { 'police', 'sheriff', 'ambulance' }, -- jobs concernés (hors Vision) RequireDuty = true, -- il faut être en service pour déclencher CooldownSeconds = 15, BlipSeconds = 60, -- durée du point GPS chez les collègues } -- Icônes du prompt d'interaction du core Vision (ignoré ailleurs : le script affiche une invite tc-ui). Config.InteractIcons = { chest = 'Stockage', shop = 'Catalogue', garage = 'Garage' } Config.Blips = { chest = { sprite = 587, color = 5, scale = 0.7 }, shop = { sprite = 52, color = 3, scale = 0.7 }, garage = { sprite = 357, color = 3, scale = 0.7 }, } -- Objets proposés dans le builder (un modèle libre peut aussi être saisi). Config.Props = { { model = '', label = 'Aucun (point invisible)' }, { model = 'prop_ld_int_safe_01', label = 'Coffre-fort' }, { model = 'p_v_43_safe_s', label = 'Petit coffre-fort' }, { model = 'prop_mil_crate_01', label = 'Caisse militaire' }, { model = 'prop_box_wood05a', label = 'Caisse en bois' }, { model = 'prop_toolchest_05', label = 'Servante à outils' }, { model = 'v_ind_cf_shelf2', label = 'Étagère' }, { model = 'prop_cs_cardbox_01', label = 'Carton' }, } -- PNJ proposés pour les shops (un modèle libre peut aussi être saisi). Config.Peds = { { model = '', label = 'Aucun' }, { model = 's_m_y_cop_01', label = 'Policier' }, { model = 's_f_y_cop_01', label = 'Policière' }, { model = 's_m_m_paramedic_01', label = 'Ambulancier' }, { model = 's_m_y_armymech_01', label = 'Logisticien' }, { model = 's_m_m_autoshop_01', label = 'Magasinier' }, { model = 'a_f_y_business_01', label = 'Employée' }, { model = 'a_m_y_business_02', label = 'Employé' }, }