Configuration

Shared configuration

Config = {
    Debug = false,
    Opacites = { -- Nombre entiers variant de 0 à 255
        ContextMenu = 150,
        Glare = 0,
        Subtitle = 180,
        Banner = 230,
        Background = 150,
        ActiveButton = 180,
        ButtonDescription = 180,
        InstructionalButtons = 50,
    },
    UseCustomBanner = true,
    MenuBannerAnimated = true,          -- Activer la bannière animée
    MenuBannerDict = "standard.gif",  -- Nom du fichier de votre bannière (emplacement : Florent_admin/images/exemple.png) | L'extension peut être : .png / .jpg / .gif / .webp
    MenuGlobalColors = {"~s~", "~y~", "~o~"},  -- Couleur principale, couleur secondaire et la couleur terciaire du menu (codes couleurs de GTA) | Ne pas laisser vide !
    MenuMaxButtonsPerPage = 10,         -- Maximum : 20 (sinon ça dépasse de l'écran) | Plus il y a de bouttons dans une page, plus le menu consommera de ressources processeur

    MenuTitle = "Administration",   -- Titre du menu
    Service = false, -- Don't touch
    MyGroupLabel = "Utilisateur", -- Don't touch 
    MyGroupName = "user", -- Don't touch
    IsAdmin = false, -- Don't touch
    ActiveRGB = false, -- Active le mode RGB sur les boutons
    ActiveHelpButtons = true, -- Active les bouttons d'aide des touches
    UseTarget = "FContextMenu", -- "none", "ox_target", "FContextMenu", "custom"

    AdminVehicleModel = "", -- Mets le nom de spawn du véhicule que tu souhaites utiliser pour l'administration

    UTC = 0, -- Valeur de l'UTC (Temps en heures à ajouter à l'heure locale du serveur)
    ServerName = "Server Name", -- Mets le nom de ton serveur, ceci apparaîtra dans le menu et dans les notifications
    NotificationsType = "txAdmin", -- Concerne les message d'administrateurs et les warns (txAdmin = utilise les notifications du txAdmin, vide = utilise les notifications pas défaut)
    NotificationsChar = "YOUR_CHAR", -- Nom du CHAR pour les notifications avancées d'ESX (logo dans les notifications)
    NotificationsTitle = "~r~Administration", -- Titre des notifictions pour les administrateurs
    NotificationsTitle2 = "📞 ~y~Support 📞", -- Titre des notifictions pour les citoyens

    ForceSteamAuth = false, -- Sur "true" si vous utilisez l'authentification par steam

    WeaponInItems = true,   -- Si vos armes sont en item, laissez sur "true"

    ShowDroppedPlayersPermanentIdsInGameAtTheirLastPosition = true, -- Si il est définit sur "true", lors de la déconnexion d'un joueur, son Identifiant permanent sera diffusé à partir d'un hologramme à sa dernière position connue par le serveur (visible à la distance maximale de Config.DrawDistance)
    ShowDroppedPlayersPermanentIdsTime = 30, -- Temps durant lequel le message sera affiché (en secondes)

    ------ Discord Rich Presence 
    UseRichPresence = true,                 -- Voulez-vous utiliser le RichPresence ?
    DisplayAdminModeInRichPresence = true, -- Voulez-vous que l'on puisse voir si le Mode Administration est Actif dans le RichPresence ?
    DicordAppId = "",    -- ID de votre application discord (Portail des développeurs Discord)
    ImageAsset = {"image", "image2"},                  -- Nom des images utilisées, la première étant la grande, la deuxième la petite
    DiscordInviteURL = "https://discord.gg/example", -- Lien d'invitation vers votre serveur Discord

    Stats = {
        Staffs = 0, -- Don't touch
        Tickets = 0, -- Don't touch 
        Players = {}, -- Don't touch 
        Reports = {}, -- Don't touch
    },

    TextInputType = "oxlib", -- Différents thèmes lors de la saisie textuelle : "oxlib" / "esx" / "gta" / "lation"

    DisplayConnections = true, -- Affiche ou non le message de connexion/déconnexion d'un joueur au serveur
    DisplayNewReports = true, -- Affiche ou non une notification à la réception d'un nouveau report
    DisplayStatusMessage = true,
    ---@class stautsMessage
    ---@class top
    ---@field message string|nil
    ---@field keepOutOfService boolean
    ---@class bottom
    ---@field message string|nil
    ---@field keepOutOfService boolean
    StatusMessage = {
        -- %MyReportsCount (stats des tickets pris en charges au global)
        -- %OpenedReports (affiche le nombre total de reports actuellement ouverts, inclus les non pris et les pris en charge)
        -- %WaitingReports (affiche le nombre de reports non pris en charge)
        -- %ProcessingReports (affiche le nombre de reports pris en charge mais non terminés)
        -- %MyGroup (affiche le label du groupe actuel)
        -- %Staffs (affiche le nombre de staffs en service)
        -- %Players (affiche le nombre de joueurs connectés)
        top = {
            message = "~s~Reports en attente: ~r~%WaitingReports ~s~| ~y~%ProcessingReports ~s~pris en charge",
            keepOutOfService = true,
        },
        bottom = {
            message = "• Mode Administration Actif •\n~b~Reports résolus ~y~[~o~%MyReportsCount~y~]",
            keepOutOfService = false,
        },
    },

    AdminCanExitReportMenu = true,    -- Si il est défini sur vrai, l'administrateur pourra quitter le menu report lors de la prise en charge de l'un de ces derniers.
    ReportStatesLabels = {
        ["opened"]      = "~g~Ouvert",
        ["inProgress"]  = "~y~En cours",
    },
    WaitForNewReportTime = 60, -- Temps (en secondes) que l'utilisateur devra patienter avant d'émettre un nouveau report
    OpenedReportWarningTime = 300, -- Temps (en secondes) avant l'apparition d'un message récapitulatif indiquant le nombre de reports ayant le statut "opened" étant toujours actifs

    WarnDisplayingDuration = 7.5, -- Temps d'affichage du warn (en secondes) sur l'écran du joueur
    TimeToRefreshPermissions = 2, -- Temps (en secondes) avant l'actualisation des permissions du joueur (dans le menu), concerne uniquement l'affichage des bouttons du menu
    DisplayButtonsForUnauthorizedPeople = false, -- Si il est défini sur vrai, les personnes n'ayant pas accès aux fonctionnalités verrons les bouttons, mais ne pourront pas les utiliser

    --------- BUILDERS PROPERTIES
    DrawDistance = 30.0,  -- Distance maximale de visibilité des markers (pour joueur à pied)
    Markers = {
        ["TYPE"] = 1,   -- Type de marker
        ["R"] = 255,    -- Couleur Rouge du marker
        ["G"] = 255,    -- Couleur Verte du marker
        ["B"] = 0,      -- Couleur Bleue du marker
        ["A"] = 50,     -- Opacité du marker
    },
    UseBuilders = {
        ["StashsBuilder"]               = true,     -- Utiliser le Stashs Builder (nécessite: qs-inventory / ox_inventory)
        ["ElevatorBuilder"]             = true,     -- Utiliser l'Elevator Builder
        ["BlipsBuilder"]                = true,     -- Utiliser le Blips Builder
        ["DoorsBuilder"]                = true,     -- Utiliser le Doors Builder
        ["HandlingsEditor"]             = true,     -- Utiliser le l'éditeur en jeu de Handlings des véhicules
        ["PNJDensity"]                  = true,     -- Utiliser le manager de la Densité des PNJ
        ["GangsBuilder"]                = true,     -- Utiliser le Gangs Builder
        ["PropsBuilder"]                = true,     -- Utiliser le Props Builder
        ["predifinedSanctionsBuilder"]  = true,     -- Utiliser le Builder de Sanctions personnalisées
        ["SafeZonesBuilder"]            = true,     -- Utiliser le Safe Zones Builder
    },

    --------- PERSONAL OPTIONS MENU
    OptionsPersonnelles = { -- Par défaut tout est sur False, mais vous pouvez les définir sur True si vous voulez que cela soit activé par défaut
        DevMode = false,
        NoClip = false,
        NoRagdoll = false,
        Blips = true,
        PlayerTags = true,
        HideMyGamerTag = false,
        SpectatorMode = false, -- Ne pas changer la valeur (false)
        Coords = false,
        Invisibility = false,
        Invincibility = false,
        AntiCarkill = false,
        SuperJump = false,
        FastRun = false,
        FastSwim = false,
        InfiniteAmmo = false,
        InfiniteStamina = false,
        NocturnalVision = false,
        ThermalVision = false,
        HidingMode = false, -- Ne pas changer les valeur (false)
    },

    --------- VEHICLE OPTIONS MENU
    OptionsVehicules = { -- Par défaut tout est sur False, mais vous pouvez les définir sur True si vous voulez que cela soit activé par défaut
        KeepVehicleOnGround = false,
        AutoRepair = false,
        GodMod = false,
        Invisibility = false,
        Rainbow = false,
        Freeze = false,
        EngineMult = false,
        TorqueMult = false,
    },

    -- DO NOT EDIT
    DevOptions = {
        PropsInfo = false,
        VehiclesInfo = false,
        PedsInfo = false,
    },

    --------- MENU CONTROLS
    Controls = {
        OpenMenu = "F10",
        NoClip = {
            Toogle = "PAGEUP",
            Monter = "A",
            Descendre = "E",
            Gauche = "Q",
            Droite = "D",
            Avancer = "Z",
            Reculer = "S",
            ChangerVitesse = "LEFTSHIFT",
        },
    },

    --------- JAIL COORDINATES
    JailLocation = vector3(3896.67, 25.87, 22.89),       -- Lieu de téléportation lorsqu'une personne est Jail (et position du Blip sur la carte)
    UnJailLocation = vector3(1846.42, 2585.85, 44.67),      -- Lieu de téléportation lorsqu'une personne est sortie de Jail

    -- Les objets retirés ne sont pas redonnés à la sortie du Jail !
    JailRemoveWeapons = false,                                -- Si le joueur envoyé en Jail doit être démuni de toutes ses armes
    JailRemoveItems = false,                                  -- Si le joueur envoyé en Jail doit être démuni des objets prescrits ci-dessous
    JailRemoveItemsList = {
        "phone",
    },

    --------- ADMIN OUTFITS
    ReloadInAdminOutfit = true, -- Lorsque l'administrateur reload son skin, cela remet le skin d'administrateur si Config.UseAdminOutfit est utilisé
    UseAdminOutfit = true, -- Laissez sur "true" si vous souhaitez utiliser les tenues d'administration à la prise de service, définies ci-dessous
    AdminOutfits = {
        --[[
        ["example"] = {
            --- If you want to define a ped (ped model)
            male = "u_m_y_pogo_01",

            --- If you want to define an outfit
            female = {
                ['helmet_1']= 61,   ['helmet_2']= 0,
                ['chain_1'] = 0,    ['chain_2'] = -1,
                ['decals_1']= 0,    ['decals_2']= -1,
                ['tshirt_1']= 15,   ['tshirt_2']= -1,
                ['torso_1'] = 298,  ['torso_2'] = 0,
                ['bags_1']  = -1,   ['bags_2']  = -1,
                ['arms']    = 220,  ['arms_2']  = -1,
                ['pants_1'] = 120,  ['pants_2'] = 0,
                ['shoes_1'] = 74,   ['shoes_2'] = 0,
                ['mask_1']  = 37,   ['mask_2']  = 0,
                ['bproof_1']= 0,
            }
        }
        ]]

        ["owner"] = {
            male = {
                ['helmet_1']= 104,  ['helmet_2']= 0,
                ['chain_1'] = 0,    ['chain_2'] = -1,
                ['decals_1']= 0,    ['decals_2']= -1,
                ['tshirt_1']= 15,   ['tshirt_2']= -1,
                ['torso_1'] = 407,  ['torso_2'] = 0,
                ['bags_1']  = -1,   ['bags_2']  = -1,
                ['arms']    = 159,  ['arms_2']  = -1,
                ['pants_1'] = 153,  ['pants_2'] = 0,
                ['shoes_1'] = 118,  ['shoes_2'] = 0,
                ['mask_1']  = 28,   ['mask_2']  = 0,
                ['bproof_1']= 0,
            },
            female = {
                ['helmet_1']= 61,   ['helmet_2']= 0,
                ['chain_1'] = 0,    ['chain_2'] = -1,
                ['decals_1']= 0,    ['decals_2']= -1,
                ['tshirt_1']= 15,   ['tshirt_2']= -1,
                ['torso_1'] = 298,  ['torso_2'] = 0,
                ['bags_1']  = -1,   ['bags_2']  = -1,
                ['arms']    = 220,  ['arms_2']  = -1,
                ['pants_1'] = 120,  ['pants_2'] = 0,
                ['shoes_1'] = 74,   ['shoes_2'] = 0,
                ['mask_1']  = 37,   ['mask_2']  = 0,
                ['bproof_1']= 0,
            },
        },
        ["_dev"] = {
            male = {
                ['helmet_1']= 104,  ['helmet_2']= 1,
                ['chain_1'] = 0,    ['chain_2'] = -1,
                ['decals_1']= 0,    ['decals_2']= -1,
                ['tshirt_1']= 15,   ['tshirt_2']= -1,
                ['torso_1'] = 407,  ['torso_2'] = 1,
                ['bags_1']  = -1,   ['bags_2']  = -1,
                ['arms']    = 159,  ['arms_2']  = -1,
                ['pants_1'] = 153,  ['pants_2'] = 1,
                ['shoes_1'] = 118,  ['shoes_2'] = 1,
                ['mask_1']  = 28,   ['mask_2']  = 1,
                ['bproof_1']= 0,
            },
            female = {
                ['helmet_1']= 61,   ['helmet_2']= 1,
                ['chain_1'] = 0,    ['chain_2'] = -1,
                ['decals_1']= 0,    ['decals_2']= -1,
                ['tshirt_1']= 15,   ['tshirt_2']= -1,
                ['torso_1'] = 298,  ['torso_2'] = 1,
                ['bags_1']  = -1,   ['bags_2']  = -1,
                ['arms']    = 220,  ['arms_2']  = -1,
                ['pants_1'] = 120,  ['pants_2'] = 1,
                ['shoes_1'] = 74,   ['shoes_2'] = 1,
                ['mask_1']  = 37,   ['mask_2']  = 1,
                ['bproof_1']= 0,
            },
        },
        ["gstaff"] = {
        },
        ["gl"] = {
        },
        ["gi"] = {
        },
        ["superadmin"] = {
        },
        ["admin"] = {
        },
        ["mod"] = {
        },
        ["helper"] = {
        }
    },
    TenueJail = {
        male = {
            ['helmet_1']= -1,   ['helmet_2']= 0, 
            ['chain_1'] = 0,    ['chain_2'] = 0,
            ['decals_1']= 0,    ['decals_2']= 0,
            ['tshirt_1']= 15,   ['tshirt_2']= 0,
            ['torso_1'] = 828,  ['torso_2'] = 0,
            ['bags_1']  = -1,   ['bags_2']  = 0,
            ['arms']    = 3,    ['arms_2']  = 0,
            ['pants_1'] = 121,  ['pants_2'] = 4,
            ['shoes_1'] = 105,  ['shoes_2'] = 0,
            ['mask_1']  = -1,   ['mask_2']  = 6,
            ['bproof_1']= 0,
        },
        female = {
            ['helmet_1']= -1,   ['helmet_2']= 0,
            ['chain_1'] = 0,    ['chain_2'] = 0,
            ['decals_1']= 0,    ['decals_2']= 0,
            ['tshirt_1']= 15,   ['tshirt_2']= 0,
            ['torso_1'] = 4,    ['torso_2'] = 7,
            ['bags_1']  = -1,   ['bags_2']  = 0,
            ['arms']    = 4,    ['arms_2']  = 0,
            ['pants_1'] = 88,   ['pants_2'] = 4,
            ['shoes_1'] = 114,  ['shoes_2'] = 1,
            ['mask_1']  = -1,   ['mask_2']  = 6,
            ['bproof_1']= -1,
        },
    },

    CommandsTelport = {
        {cmd = "tpback", zoneLabel = "Retour à une ancienne position"},
        {cmd = "tppc", zoneLabel = "Parking Central", coords = vector3(216.24, -808.66, 29.75)},
    },

    --------- MANAGE PLAYER (CUSTOM OPTION)
    ---@class PlayerCustomOption
    ---@field enabled boolean
    ---@field label string
    ---@field description string
    ---@field onSelect function
    PlayerCustomOption = {
        enabled = false, -- Si vous souhaitez que le bouton soit visible dans le menu, mettez-le sur "true"
        label = "Custom button",
        description = "",
        onSelect = function(playerData)
            print("This is an example !", json.encode(playerData, {indent=true}))
        end,
    },
    --------- MANAGE CHARACTER VEHICLES
    ---@type table
    VehiclesManageOptions = {
        -- vehicleData corresponding to GetPlayerVehicles() returned data (server/functions_open.lua)
        ---@class BtnVehicleOption
        ---@field label string
        ---@field description string|nil
        ---@field onSelect function
        {
            label = "Example",
            description = "",
            onSelect = function(vehicleData)
                print("This is an example !", json.encode(vehicleData, {indent=true}))
            end,
        }
    },
    --------- MANAGE CHARACTER HOUSES
    ---@type table
    PropertiesManageOptions = {
        -- propertyData corresponding to GetPlayerProperties() returned data (server/functions_open.lua)
        ---@class BtnPropertyOption
        ---@field label string
        ---@field description string|nil
        ---@field onSelect function
        {
            label = "Example",
            description = "",
            onSelect = function(propertyData)
                print("This is an example !", json.encode(propertyData, {indent=true}))
            end,
        }
    },


    --------- SELF TELEPORT OPTIONS
    PersonalTeleportOptions = {
        {Name = "~r~Marker~s~",         Action = function() AdminTeleportToWaypoint()end},
        {Name = "~r~Parking Central~s~",Action = function() AdminTeleportToCoords(vector3(216.24, -808.66, 29.75))end},
        {Name = "~r~Maze Bank~s~",      Action = function() AdminTeleportToCoords(vector3(-74.91, -818.74, 325.18))end},
        {Name = "~r~Police~s~",         Action = function() AdminTeleportToCoords(vector3(-362.65, -357.06, 30.59))end},
        {Name = "~r~Hôpital~s~",        Action = function() AdminTeleportToCoords(vector3(301.07, -578.34, 42.26))end},
        {Name = "~r~Aéroport~s~",       Action = function() AdminTeleportToCoords(vector3(-1037.44, -2738.03, 19.16))end},
        {Name = "~r~Prison~s~",         Action = function() AdminTeleportToCoords(vector3(1846.42, 2585.85, 44.67))end},
        {Name = "~r~Gouvernement~s~",   Action = function() AdminTeleportToCoords(vector3(-414.7, 1162.43, 324.85))end},
        {Name = "~r~Cayo Perico~s~",    Action = function() AdminTeleportToCoords(vector3(4512.04, -4518.31, 3.12))end},
        {Name = "~r~Ancienne Position~s~",Action = function() ESX.TriggerServerCallback("FlorentAdmin:TeleportToOldPos", function() end, tostring(GetPlayerServerId(PlayerId()))) end},
    },
    PersonalTeleportOptionsIndex = 1, -- Don't touch

    --------- GOTO OPTIONS
    PlayerTeleportOptions = {
        {Name = "~r~Sur vous~s~",       coords = false},
        {Name = "~r~Parking Central~s~",coords = vector3(216.24, -808.66, 29.75)},
        {Name = "~r~Maze Bank~s~",      coords = vector3(-74.91, -818.74, 325.18)},
        {Name = "~r~Police~s~",         coords = vector3(-362.65, -357.06, 30.59)},
        {Name = "~r~Hôpital~s~",        coords = vector3(301.07, -578.34, 42.26)},
        {Name = "~r~Aéroport~s~",       coords = vector3(-1037.44, -2738.03, 19.16)},
        {Name = "~r~Prison~s~",         coords = vector3(1846.42, 2585.85, 44.67)},
        {Name = "~r~Gouvernement~s~",   coords = vector3(-414.7, 1162.43, 324.85)},
        {Name = "~r~Cayo Perico~s~",    coords = vector3(4512.04, -4518.31, 3.12)},
        {Name = "~r~Ancienne Position~s~"},
    },
    PlayerTeleportOptionsIndex = 1, -- Don't touch

    --------- VEHICLE ACTIONS MENU
    ActionsVehicles = {
        {Name = "~r~Remplir le réservoir~s~",   perm = "refuelVehicle", Action = function(vehicle) AdminRefuelVehicle(vehicle) end},
        {Name = "~r~Réparer~s~",                perm = "repairVehicle", Action = function(vehicle) AdminRepairVehicle(vehicle) end},
        {Name = "~r~Nettoyer~s~",               perm = "washVehicle",   Action = function(vehicle) AdminWashVehicle(vehicle)   end},
        {Name = "~r~Retourner~s~",              perm = "returnVehicle", Action = function(vehicle) AdminReturnVehicle(vehicle) end},
        {Name = "~r~Supprimer~s~",              perm = "deleteVehicle", Action = function(vehicle) ESX.Game.DeleteVehicle(vehicle) end},
    },
    ActionsVehiclesIndex = 1,

    --------- COPY COORDINATES (DEVELOPPERS MENU)
    DeveloperCopyCoords = { -- %x %y %z %h seront respectivement remplacés par les coordonées x, y, z et le heading du joueur, chaque valeur est optionnelle
        {Name = "~r~Format classique V3~s~",syntax = '%x, %y, %z'},
        {Name = "~r~Format Vector3~s~",     syntax = 'vector3(%x, %y, %z)'},
        {Name = "~r~Format JSON V3~s~",     syntax = '{"x": %x,"y": %y,"z": %z}'},
        {Name = "~r~Format classique V4~s~",syntax = '%x, %y, %z, %h'},
        {Name = "~r~Format Vector4~s~",     syntax = 'vector4(%x, %y, %z, %h)'},
        {Name = "~r~Format JSON V4~s~",     syntax = '{"x": %x,"y": %y,"z": %z, "w": %h}'},
    },
    DeveloperCopyCoordsIndex = 1,

    --------- MENU COLORS (CAN BE PERSONALIZED)
    MenuColors = {
        {Name = "~r~Rouge~s~",      color = '~r~'},
        {Name = "~r~Orange~s~",     color = '~o~'},
        {Name = "~r~Jaune~s~",      color = '~y~'},
        {Name = "~r~Blanc~s~",      color = '~s~'},
        {Name = "~r~Vert~s~",       color = '~g~'},
        {Name = "~r~Bleu~s~",       color = '~b~'},
        {Name = "~r~Violet~s~",     color = '~p~'},
    },
    MenuColorsIndex = 1,
    MenuColorsIndex2 = 1,
    MenuColorsIndex3 = 1,

    --------- ADMIN GROUPS
    AdminGroups = { -- Plus le grade est haut dans la liste ci-dessous, plus le grade a de permissions
        {name = "owner",        label = "Fondateur"},
        {name = "_dev",         label = "Développeur"},
        {name = "gstaff",       label = "Gérant-Staff"},
        {name = "gl",           label = "Gérant-Légal"},
        {name = "gi",           label = "Gérant-Illégal"},
        {name = "superadmin",   label = "Super-Administrateur"},
        {name = "admin",        label = "Administrateur"},
        {name = "mod",          label = "Modérateur"},
        {name = "helper",       label = "Helpeur"},
    },

    --------- NO CLIP
    NoClipSpeeds = {
        {label = "Très lent",               speed = 0},
        {label = "Lent",                    speed = 1},
        {label = "Normal",                  speed = 2.5},
        {label = "Rapide",                  speed = 5},
        {label = "Très rapide",             speed = 10},
        {label = "Extrèmement rapide",      speed = 20},
        {label = "Extrèmement rapide v2.0", speed = 40},
        {label = "Vitesse maximale",        speed = 60}
    },
    NoClipSpeedIndex = 1, -- Don't touch
    
    --------- PROP OPTIONS
    PropsSpeeds = {
        {label = "Très lent",               speed = 0.01},
        {label = "Lent",                    speed = 0.05},
        {label = "Normal",                  speed = 0.1},
        {label = "Rapide",                  speed = 0.2},
        {label = "Très rapide",             speed = 0.5},
    },
    PropsSpeedIndex = 1, -- Don't touch

    --------- PEDS MENU
    PedsList = {
        {model = "a_c_chimp",           label = "Singe",        img = "a_c_chimp.webp"},
        {model = "s_m_m_movspace_01",   label = "Cosmonaute",   img = "s_m_m_movspace_01.webp"},
        {model = "a_c_cat_01",          label = "Chat",         img = "a_c_cat_01.webp"},
        {model = "a_c_chickenhawk",     label = "Aigle",        img = "a_c_chickenhawk.webp"},
        {model = "g_m_importexport_01", label = "Gang",         img = "g_m_importexport_01.webp"},
        {model = "s_m_y_autopsy_01",    label = "Médecin",      img = "s_m_y_autopsy_01.webp"},
        {model = "s_m_m_doctor_01",     label = "Chirurgien",   img = "s_m_m_doctor_01.webp"},
    },

    --------- SHOP (FShop) ITEMS TYPES
    ShopItemTypes = {
        Options = {
            {
                Name = "Véhicule",
                Type = "vehicle",
            },
            {
                Name = "Avion",
                Type = "plane",
            },
            {
                Name = "Hélicoptère",
                Type = "heli",
            },
            {
                Name = "Objet",
                Type = "item",
            },
            {
                Name = "Arme",
                Type = "weapon",
            },
            {
                Name = "Argent liquide",
                Type = "money",
            },
            {
                Name = "Argent bancaire",
                Type = "bank",
            },
            {
                Name = "Argent sale",
                Type = "black_money",
            },
        },
        Index = 1,
    },

    --------- MENU PERMISSIONS
    Permissions = {
        -- minGroup : Indique le groupe minimal ayant accès à l'option (la hiérarchie des groupes se fait dans Config.AdminGroups)
        -- ["text"] : Permission (do not touch) 
        ["showPlayerInfos"]             =   {minGroup = "helper"},      -- Voir les informations sur le joueur
        ["spectatePlayer"]              =   {minGroup = "helper"},      -- Mode spectateur
        --["requestPlayerStreaming"]    =   {minGroup = "admin"},     -- Voir l'écran du joueur en direct live
        ["freeze"]                      =   {minGroup = "admin"},       -- Geler le joueur
        ["playAnimation"]               =   {minGroup = "admin"},       -- Faire jouer une animation aux joueurs
        ["clearPlayerAnimations"]       =   {minGroup = "helper"},      -- Stopper toutes les animations d'un joueur
        ["clearPlayerProps"]            =   {minGroup = "helper"},      -- Retirer tous les props associés au ped du joueur
        ["setPlayerCustomPed"]          =   {minGroup = "gstaff"},      -- Définir un ped personnalisé pour le joueur
        ["reloadPlayerSkin"]            =   {minGroup = "helper"},      -- Recharger l'apparence du joueur depuis celle enregistrée par le serveur
        ["openPlayerClothesMenu"]       =   {minGroup = "admin"},       -- Ouvrir le menu de gestion des vêtements du joueur
        ["openPlayerCharacterMenu"]     =   {minGroup = "gstaff"},      -- Ouvrir le menu de gestion de l'apparence du personnage du joueur
        ["sendPrivateMessage"]          =   {minGroup = "helper"},      -- Envoyer un message privé au joueur
        ["openInventory"]               =   {minGroup = "helper"},      -- Afficher les infos des comptes, armes et inventaire du joueur
        ["customOption"]                =   {minGroup = "superadmin"},  -- Option personnalisé dans le menu gestion du joueur (Config.PlayerCustomOption)
        ["manageInventory"]             =   {minGroup = "superadmin"},  -- Ouvrir l'inventaire du joueur (modifiez la fonction UseCustomInventory() dans "client/functions_open.lua" si vous avez un inventaire personnalisé)
        ["managePlayerVehicles"]        =   {minGroup = "admin"},       -- Gérer et voir les véhicules associés au personnage
        ["managePlayerProperties"]      =   {minGroup = "admin"},       -- Gérer et voir les propriétés associées au personnage
        ["managePlayerInstance"]        =   {minGroup = "mod"},         -- Gérer l'instance du joueur (Reset, goto)
        ["revivePlayer"]                =   {minGroup = "mod"},         -- Commande & Option pour revive
        ["healPlayer"]                  =   {minGroup = "mod"},         -- Commande & Option pour heal
        ["killPlayer"]                  =   {minGroup = "admin"},       -- Commande pour tuer un joueur
        ["teleportPlayer"]              =   {minGroup = "helper"},      -- Téléporter le joueur
        ["selfTeleportToPlayer"]        =   {minGroup = "helper"},      -- Se téléporter au joueur
        ["teleportVehicle"]             =   {minGroup = "mod"},         -- Se téléporter dans son véhicule
        ["setJob"]                      =   {minGroup = "admin"},       -- Définir les métiers du joueur
        ["manageReports"]               =   {minGroup = "helper"},      -- Ouvrir la liste et prendre en charge les reports

        -- Menu des Sanctions
        ["warnPlayer"]                  =   {minGroup = "helper"},      -- Donner un avertissement au joueur
        ["jailPlayer"]                  =   {minGroup = "helper"},      -- Commande & Option pour jail et unjail le joueur
        ["kickPlayer"]                  =   {minGroup = "mod"},         -- Commande & Option pour expulser le joueur du serveur
        ["banPlayer"]                   =   {minGroup = "mod"},         -- Commandes & Options pour bannir le joueur du serveur
        ["wipePlayer"]                  =   {minGroup = "superadmin"},  -- Commande & Option pour réinitialiser le compte d'un joueur

        -- Catégorie Options Personnelles
        ["devmode"]                     =   {minGroup = "superadmin"},        -- Mode Développeur
        ["menu_options"]                =   {minGroup = "helper"},      -- Options du menu
        ["rapidTeleport"]               =   {minGroup = "admin"},       -- Téléportation rapide
        ["chosePed"]                    =   {minGroup = "superadmin"},  -- Menu Peds
        ["hideMeFromOthers"]            =   {minGroup = "gstaff"},      -- Permet de devenir invisible dans le menu Staff (seulement pour ceux n'ayant pas la permission "devmode")
        ["blips"]                       =   {minGroup = "mod"},         -- Blips (affiche une icone à chaque joueur sur votre carte)
        ["gamerTags"]                   =   {minGroup = "helper"},      -- Pseudos (affiche les noms RP des joueurs)
        ["coords"]                      =   {minGroup = "admin"},       -- Affiche les coordonnées en temps réel
        ["noClip"]                      =   {minGroup = "helper"},      -- No Clip
        ["noRagdoll"]                   =   {minGroup = "admin"},       -- No Ragdoll (évite les chutes)
        ["invisibility"]                =   {minGroup = "superadmin"},  -- Invisibilité
        ["godMod"]                      =   {minGroup = "superadmin"},  -- Invincibilité
        ["antiCarkill"]                 =   {minGroup = "admin"},       -- Anti Carkill (évite de mourir écrasé par un véhicule)
        ["superJump"]                   =   {minGroup = "superadmin"},  -- Boost de sauts
        ["fastRun"]                     =   {minGroup = "admin"},       -- Course accélérée
        ["fastSwim"]                    =   {minGroup = "admin"},       -- Nage accélérée
        ["infiniteAmmo"]                =   {minGroup = "gstaff"},      -- Munitions infinies
        ["infiniteStamina"]             =   {minGroup = "superadmin"},  -- Endurance illimitée
        ["nocturnalVision"]             =   {minGroup = "owner"},       -- Vision nocturne
        ["thermalVision"]               =   {minGroup = "owner"},       -- Vision thermique

        -- Catégorie véhicules
        ["categoryVehicles"]            =   {minGroup = "helper"},      -- 
        ["canSeeVehicleInfo"]           =   {minGroup = "mod"},         -- Affiche les informations relatives au véhicule actuel
        ["spawnRandomVehicle"]          =   {minGroup = "admin"},       -- Faire apparaître un véhicule aléatoire
        ["spawnVehicleByName"]          =   {minGroup = "admin"},       -- Faire apparaître un véhicule par son nom de spawn
        ["spawnAdminVehicle"]           =   {minGroup = "admin"},       -- Faire apparaître le véhicule d'Administration
        ["spawnVehicleList"]            =   {minGroup = "admin"},       -- Voir la liste complète des véhicules
        ["optionsVehicle"]              =   {minGroup = "superadmin"},  -- Options relatives au véhicule actuel
        ["refuelVehicle"]               =   {minGroup = "admin"},       -- Remplir le réservoir d'essence du véhicule
        ["repairVehicle"]               =   {minGroup = "helper"},      -- Réparer le véhicule
        ["washVehicle"]                 =   {minGroup = "helper"},      -- Nettoyer le véhicule
        ["returnVehicle"]               =   {minGroup = "superadmin"},  -- Retourner le véhicule
        ["deleteVehicle"]               =   {minGroup = "helper"},      -- Supprimer le véhicule
        ["fullcustomVehicle"]           =   {minGroup = "superadmin"},  -- Customiser le véhicule au maximum
        ["customVehicle"]               =   {minGroup = "superadmin"},  -- Menu Custom du véhicule

        -- Catégorie Options véhicules
        ["keepVehicleOnGround"]         =   {minGroup = "admin"},       -- Garder le véhicule collé au sol
        ["autoRepair"]                  =   {minGroup = "superadmin"},  -- Garder le véhicule collé au sol
        ["vehicleGodMod"]               =   {minGroup = "superadmin"},  -- Rendre votre véhicule invincible
        ["vehicleInvisibility"]         =   {minGroup = "superadmin"},  -- Rendre votre véhicule ainsi que ses occupants invisibles
        ["vehicleRainbow"]              =   {minGroup = "_dev"},        -- Rendre votre véhicule multicolore
        ["freezeVehicle"]               =   {minGroup = "mod"},         -- Gèler votre véhicule
        ["vehicleEngineMult"]           =   {minGroup = "admin"},       -- Activer le multiplicateur de la puissance moteur
        ["vehicleTorqueMult"]           =   {minGroup = "admin"},       -- Activer le multiplicateur de la force moteur
        ["changeVehiclePlate"]          =   {minGroup = "superadmin"},  -- Changer la plaque du véhicule

        -- Catégorie Gestion Serveur
        ["annonce"]                     =   {minGroup = "admin"},       -- Commande & Option d'annonce serveur
        ["screenclient"]                =   {minGroup = "mod"},         -- Commande & Option de capture de l'écran d'un joueur
        ["give"]                        =   {minGroup = "superadmin"},  -- Commande & Option de Give
        ["banList"]                     =   {minGroup = "gstaff"},      -- Menu listant les bannissements
        ["banListRefresh"]              =   {minGroup = "gstaff"},      -- Rafraîchir la liste des bannissements
        ["reviveAll"]                   =   {minGroup = "mod"},         -- Commande & Options pour réanimer tout le monde
        ["healAll"]                     =   {minGroup = "mod"},         -- Commande & Options pour heal tout le monde
        ["bringAllPlayers"]             =   {minGroup = "superadmin"},  -- Téléporter tous les joueurs sur notre positition
        ["openAdminTrash"]              =   {minGroup = "admin"},       -- Ouvrir la poubelle admin
        ["setGroup"]                    =   {minGroup = "gstaff"},      -- Changer le groupe d'un joueur
        ["clearArea"]                   =   {minGroup = "mod"},         -- Nettoyer la zone (peds, véhicules, objets) avec un rayon personnalisé

        -- Catégorie Mode Développeur (nécessite la permission "devmode")
        ["manageAdministrators"]        =   {minGroup = "gstaff"},      -- Menu gestion des administrateurs (en ligne et hors ligne)
        ["elevatorsBuilder"]            =   {minGroup = "_dev"},        -- Menu gestion du Builder d'ascenseurs
        ["blipsBuilder"]                =   {minGroup = "_dev"},        -- Menu gestion du Builder de Blips
        ["stashsBuilder"]               =   {minGroup = "_dev"},        -- Menu gestion du Builder de Coffres
        ["npcDensity"]                  =   {minGroup = "_dev"},        -- Menu gestion de la densité des PNJ
        ["manageEnterprises"]           =   {minGroup = "gl"},          -- Menu gestion des entreprises
        ["gangsBuilder"]                =   {minGroup = "gi"},          -- Menu gestion du Builder de Gangs
        ["manageCharacters"]            =   {minGroup = "gstaff"},      -- Menu gestion des personnages
        ["doorsBuilder"]                =   {minGroup = "_dev"},        -- Menu gestion du Builder de Portes
        ["propsBuilder"]                =   {minGroup = "_dev"},        -- Menu gestion du Builder de Props
        ["manageVehicles"]              =   {minGroup = "_dev"},        -- Menu gestion des véhicules (handling, labels, son custom)
        ["predifinedSanctionsBuilder"]  =   {minGroup = "gstaff"},      -- menu gestion des sanctions personnalisées
        ["safezonesBuilder"]            =   {minGroup = "_dev"},        -- Menu gestion du Builder de Zones Sécurisées

        -- Catégorie Context Menu
        ["openContext"]                 =   {minGroup = "mod"},         -- Permet l'Affichage des informations / options d'Administrateur
        ["contextPersonalOptions"]      =   {minGroup = "gstaff"},      -- Permet l'utilisation des options personnelles
        ["contextPlayerOptions"]        =   {minGroup = "mod"},         -- Permet l'utilisation des options sur le joueur
        ["contextShowPlayerName"]       =   {minGroup = "mod"},         -- Permet l'affichage du Nom RP du joueur
        ["contextTakeApparence"]        =   {minGroup = "superadmin"},  -- Prendre l'apparence du joueur
        ["contextChangeTime"]           =   {minGroup = "_dev"},        -- Changer l'heure et la Météo
        ["contextSpawnProp"]            =   {minGroup = "_dev"},        -- Faire spawn un prop
        ["contextSpawnVehicle"]         =   {minGroup = "_dev"},        -- Faire spawn un véhicule
        ["contextSpawnPed"]             =   {minGroup = "_dev"},        -- Faire spawn un ped
        ["contextManageObject"]         =   {minGroup = "superadmin"},  -- Gérer les objets (Déplacer, Dupliquer, Supprimer)
        ["contextManagePed"]            =   {minGroup = "superadmin"},  -- Gérer les peds (Déplacer, Dupliquer, Supprimer)
    },
}

Server configuration

Mis à jour