Skip to main content

Intégration Client

📋🖥️ Guide ded'Intégration Configuration Admin - Config_Admin.hpp

Auteur: ProtoMehka Version: 2.1 Dernière mise à jour: 2025-10-10


🎯 Objectif

Centraliser toute la configuration du menu admin dans un seul fichier pour permettre :

    Définir les niveaux admin requis pour chaque commande Personnaliser les couleurs des boutons par niveau Organiser les commandes dans des onglets personnalisés Gérer les menus déroulants pour les onglets avec beaucoup d'actions Modifier facilement sans toucher au code

    📁 Structure du Fichier

    Localisation

    admin_menu.Altis/config/Config_Admin.hpp
    

    Architecture

    class Life_AdminConfig {
        // Niveaux d'administration
        class AdminLevels { ... };
    
        // Couleurs des boutons par niveau
        class ButtonColors { ... };
    
        // Configuration des onglets
        class Tabs { ... };
    
        // Commandes par catégorie
        class PlayerManagement { ... };
        class AdminActions { ... };
        class ObjectManagement { ... };
        class ServerManagement { ... };
    };
    

    🎨 Configuration des Couleurs

    Couleurs par Niveau Admin

    class ButtonColors {
        // Format: {R, G, B, Alpha}
        // Valeurs de 0.0 à 1.0
    
        class Level1 {  // Support
            normal[] = {0.3, 0.7, 0.3, 0.7};      // Vert normal
            hover[] = {0.4, 0.8, 0.4, 0.9};       // Vert hover
            pressed[] = {0.2, 0.6, 0.2, 0.8};     // Vert pressé
            disabled[] = {0.3, 0.3, 0.3, 0.5};    // Gris désactivé
        };
    
        class Level2 {  // Modérateur
            normal[] = {0.4, 0.6, 0.8, 0.7};      // Bleu clair
            hover[] = {0.5, 0.7, 0.9, 0.9};
            pressed[] = {0.3, 0.5, 0.7, 0.8};
            disabled[] = {0.3, 0.3, 0.3, 0.5};
        };
    
        class Level3 {  // Admin
            normal[] = {0.38, 0.70, 0.89, 0.7};   // Bleu Altis
            hover[] = {0.48, 0.80, 0.99, 0.9};
            pressed[] = {0.28, 0.60, 0.79, 0.8};
            disabled[] = {0.3, 0.3, 0.3, 0.5};
        };
    
        class Level4 {  // Super Admin
            normal[] = {0.8, 0.5, 0.2, 0.7};      // Orange
            hover[] = {0.9, 0.6, 0.3, 0.9};
            pressed[] = {0.7, 0.4, 0.1, 0.8};
            disabled[] = {0.3, 0.3, 0.3, 0.5};
        };
    
        class Level5 {  // Owner
            normal[] = {0.8, 0.2, 0.2, 0.7};      // Rouge
            hover[] = {0.9, 0.3, 0.3, 0.9};
            pressed[] = {0.7, 0.1, 0.1, 0.8};
            disabled[] = {0.3, 0.3, 0.3, 0.5};
        };
    };
    

    Palette de Couleurs Recommandées

    Couleur RGB Usage Recommandé 🟢 Vert {0.3, 0.7, 0.3} Niveau 1 (Support) 🔵 Bleu Clair {0.4, 0.6, 0.8} Niveau 2 (Modérateur) 🔵 Bleu {0.38, 0.70, 0.89} Niveau 3 (Admin) 🟠 Orange {0.8, 0.5, 0.2} Niveau 4 (Super Admin) 🔴 Rouge {0.8, 0.2, 0.2} Niveau 5 (Owner) ⚪ Gris {0.3, 0.3, 0.3} Désactivé

    🗂️ Configuration des Onglets

    Structure de Base

    class Tabs {
        // Nombre total d'onglets
        count = 4;
    
        // Configuration de chaque onglet
        // Format: {Nom, ID, Icône, Couleur}
    
        tabs[] = {
            {
                "JOUEURS",                                              // Nom affiché
                "players",                                               // ID interne
                "\A3\ui_f\data\GUI\Rsc\RscDisplayArsenal\face_ca.paa",  // Icône
                {0.38, 0.70, 0.89, 0.7}                                 // Couleur
            },
            {
                "ACTIONS",
                "actions",
                "\A3\ui_f\data\IGUI\Cfg\Actions\settimer_ca.paa",
                {0.8, 0.5, 0.2, 0.7}
            },
            {
                "OBJETS",
                "objects",
                "\A3\ui_f\data\IGUI\Cfg\Actions\getindriver_ca.paa",
                {0.3, 0.7, 0.3, 0.7}
            },
            {
                "SERVEUR",
                "server",
                "\A3\ui_f\data\IGUI\Cfg\Actions\settimer_ca.paa",
                {0.8, 0.2, 0.2, 0.7}
            }
        };
    };
    

    Ajouter un Nouvel Onglet

    Exemple: Ajouter un onglet "UTILITAIRES"

    class Tabs {
        count = 5;  // Incrémenter le nombre
    
        tabs[] = {
            // ... onglets existants ...
            {
                "UTILITAIRES",
                "utilities",
                "\A3\ui_f\data\IGUI\Cfg\Actions\repair_ca.paa",
                {0.5, 0.5, 0.9, 0.7}
            }
        };
    };
    

    🎮 Configuration des Commandes

    Format de Base

    // Format d'une commande:
    {
        "Nom Affiché",           // Texte du bouton
        "fonction_sqf",          // Fonction à appeler
        niveau_minimum,          // Niveau admin requis (1-5)
        "onglet_id",            // Dans quel onglet placer
        "icone"                 // (Optionnel) Chemin vers icône
    }
    

    Exemple Complet

    class PlayerManagement {
        // Toutes les commandes liées aux joueurs
        commands[] = {
            // Niveau 1 - Support
            {"Get ID", "life_fnc_adminGetID", 1, "players", ""},
            {"Query Player", "life_fnc_adminQuery", 1, "players", ""},
    
            // Niveau 2 - Modérateur
            {"Compensate", "life_fnc_adminCompensate", 2, "players", ""},
    
            // Niveau 3Client - Admin {"Spectate", "life_fnc_adminSpectate", 3, "players", ""},
            {"TP to Player", "life_fnc_adminTeleport", 3, "players", ""},
            {"Heal Player", "life_fnc_adminHeal", 3, "players", ""},
            {"Revive Player", "life_fnc_adminRevive", 3, "players", ""},
    
            // Niveau 4 - Super Admin
            {"TP Here", "life_fnc_adminTpHere", 4, "players", ""},
            {"Freeze Player", "life_fnc_adminFreeze", 4, "players", ""},
            {"Kick Player", "life_fnc_adminKick", 4, "players", ""},
            {"Give Money", "life_fnc_adminGiveMoney", 4, "players", ""},
    
            // Niveau 5 - Owner
            {"Ban Player", "life_fnc_adminBan", 5, "players", ""},
            {"Set Admin Level", "life_fnc_adminSetLevel", 5, "players", ""}
        };
    };
    
    class AdminActions {
        // Actions personnelles de l'admin
        commands[] = {
            {"God Mode", "life_fnc_adminGodMode", 4, "actions", ""},
            {"Markers", "life_fnc_adminMarkers", 4, "actions", ""},
            {"Debug Console", "life_fnc_adminDebugCon", 5, "actions", ""},
            {"Invisibility", "life_fnc_adminInvisibility", 4, "actions", ""},
            {"No Recoil", "life_fnc_adminNoRecoil", 4, "actions", ""}
        };
    };
    
    class ObjectManagement {
        // Gestion objets et véhicules
        commands[] = {
            {"Repair Object", "life_fnc_adminRepairObject", 3, "objects", ""},
            {"Delete Object", "life_fnc_adminDeleteObject", 4, "objects", ""},
            {"Refuel Vehicle", "life_fnc_adminRefuelVehicle", 3, "objects", ""},
            {"Flip Vehicle", "life_fnc_adminFlipVehicle", 3, "objects", ""},
            {"Spawn Vehicle", "life_fnc_adminSpawnVehicle", 4, "objects", ""}
        };
    };
    
    class ServerManagement {
        // Gestion du serveur
        commands[] = {
            {"Server Message", "life_fnc_adminServerMsg", 4, "server", ""},
            {"Restart Warning", "life_fnc_adminRestartWarning", 5, "server", ""},
            {"Server Statistics", "life_fnc_adminServerStats", 3, "server", ""},
            {"Weather Control", "life_fnc_adminWeather", 4, "server", ""},
            {"Time Control", "life_fnc_adminTime", 4, "server", ""},
            {"Cleanup Dead", "life_fnc_adminCleanup", 4, "server", ""},
            {"Admin Chat", "life_fnc_adminChat", 1, "server", ""}
        };
    };
    

    📜 Menu Déroulant (Dropdown)

    Pourquoi un Menu Déroulant ?

    Quand un onglet contient plus de 8 commandes, un menu déroulant est recommandé pour :

      Éviter l'encombrement visuel Maintenir une interface propre Faciliter la recherche de commandes

      Configuration du Seuil

      class DropdownSettings {
          // Nombre max de boutons avant de passer en dropdown
          maxButtonsBeforeDropdown = 8;
      
          // Hauteur du dropdown
          dropdownHeight = 0.35;  // En SafeZone
      
          // Position du bouton "EXÉCUTER"
          executeButtonColor[] = {0.38, 0.70, 0.89, 0.9};
      };
      

      Architecture Dropdown

      Quand commands[] > 8 :

        Combobox (Liste déroulante)

          Affiche toutes les commandes disponibles Filtrées par niveau admin Triées alphabétiquement

          Bouton "EXÉCUTER"

            Apparaît sous la combobox Exécute la commande sélectionnée Couleur selon le niveau de la commande

            Quand commands[] <= 8 :

              Affichage classique en boutons Un bouton par commande Pas de dropdown

              Exemple d'Implémentation

              // Dans fn_adminMenuTabChange.sqf
              
              private _commands = [];
              switch (_tabIndex) do {
                  case 0: { // JOUEURS
                      _commands = getArray(missionConfigFile >> "Life_AdminConfig" >> "PlayerManagement" >> "commands");
                  };
                  // ... autres onglets
              };
              
              // Filtrer par niveau admin
              private _availableCommands = [];
              {
                  private _cmdName = _x select 0;
                  private _cmdFunction = _x select 1;
                  private _cmdLevel = _x select 2;
              
                  if (life_adminlevel >= _cmdLevel) then {
                      _availableCommands pushBack _x;
                  };
              } forEach _commands;
              
              // Vérifier si dropdown nécessaire
              private _maxButtons = getNumber(missionConfigFile >> "Life_AdminConfig" >> "DropdownSettings" >> "maxButtonsBeforeDropdown");
              
              if (count _availableCommands > _maxButtons) then {
                  // CRÉER DROPDOWN
                  private _dropdown = _display ctrlCreate ["RscCombo", 29100];
                  _dropdown ctrlSetPosition [0.35 * safezoneW + safezoneX, 0.35 * safezoneH + safezoneY, 0.25 * safezoneW, 0.03 * safezoneH];
                  _dropdown ctrlCommit 0;
              
                  // Remplir dropdown
                  {
                      private _cmdName = _x select 0;
                      private _index = _dropdown lbAdd _cmdName;
                      _dropdown lbSetData [_index, _x select 1]; // Stocker fonction
                      _dropdown lbSetValue [_index, _x select 2]; // Stocker niveau
                  } forEach _availableCommands;
              
                  // Bouton EXÉCUTER
                  private _executeBtn = _display ctrlCreate ["RscButton", 29101];
                  _executeBtn ctrlSetText "EXÉCUTER";
                  _executeBtn ctrlSetPosition [0.35 * safezoneW + safezoneX, 0.39 * safezoneH + safezoneY, 0.25 * safezoneW, 0.03 * safezoneH];
                  _executeBtn ctrlCommit 0;
              
                  _executeBtn ctrlAddEventHandler ["ButtonClick", {
                      private _display = findDisplay 29000;
                      private _dropdown = _display displayCtrl 29100;
                      private _selectedIndex = lbCurSel _dropdown;
              
                      if (_selectedIndex >= 0) then {
                          private _function = _dropdown lbData _selectedIndex;
                          call compile format["call %1;", _function];
                      };
                  }];
              
              } else {
                  // CRÉER BOUTONS CLASSIQUES
                  private _yOffset = 0;
                  {
                      private _btn = _display ctrlCreate ["RscButton", 29100 + _forEachIndex];
                      // ... création bouton classique
                      _yOffset = _yOffset + 0.035;
                  } forEach _availableCommands;
              };
              

              🎨 Personnalisation Avancée

              Icônes Personnalisées

              commands[] = {
                  {
                      "Heal Player",
                      "life_fnc_adminHeal",
                      3,
                      "players",
                      "\A3\ui_f\data\IGUI\Cfg\Actions\heal_ca.paa"  // Icône custom
                  }
              };
              

              Tooltips (Infobulles)

              class Tooltips {
                  enabled = 1;  // Activer les tooltips
              
                  // Format: {"fonction", "Description"}
                  descriptions[] = {
                      {"life_fnc_adminHeal", "Soigner complètement le joueur sélectionné"},
                      {"life_fnc_adminFreeze", "Geler/Dégeler le joueur ciblé"},
                      {"life_fnc_adminBan", "Bannir définitivement le joueur du serveur"}
                  };
              };
              

              Sons Personnalisés

              class Sounds {
                  // Sons lors d'actions
                  onButtonClick = "click";
                  onCommandExecute = "FD_Finish_F";
                  onError = "FD_CP_Not_Clear_F";
                  onSuccess = "FD_Finish_F";
              };
              

              📋 Exemples de Configuration

              Configuration Minimaliste (4 onglets, peu de commandes)

              class Life_AdminConfig {
                  class AdminLevels {
                      levels[] = {"Joueur", "Support", "Modérateur", "Admin", "Super Admin", "Owner"};
                  };
              
                  class DropdownSettings {
                      maxButtonsBeforeDropdown = 10;  // Seuil élevé
                  };
              
                  class PlayerManagement {
                      commands[] = {
                          {"Spectate", "life_fnc_adminSpectate", 3, "players"},
                          {"TP to Player", "life_fnc_adminTeleport", 3, "players"},
                          {"Freeze", "life_fnc_adminFreeze", 4, "players"}
                      };
                  };
              
                  // ... autres classes minimalistes
              };
              

              Configuration Avancée (5+ onglets, beaucoup de commandes)

              class Life_AdminConfig {
                  class AdminLevels {
                      levels[] = {
                          "Joueur",           // 0
                          "Trial Support",    // v2.1
                          "Support",          // 2
                          "Modérateur",       // 3
                          "Admin",            // 4
                          "Super Admin",      // 5
                          "Head Admin",       // 6
                          "Owner"             // 7
                      };
                  };
              
                  class DropdownSettings {
                      maxButtonsBeforeDropdown = 6;  // Seuil bas = dropdown plus fréquent
                      dropdownHeight = 0.4;
                  };
              
                  class Tabs {
                      count = 6;
                      tabs[] = {
                          {"JOUEURS", "players", "\A3\...", {0.38, 0.70, 0.89, 0.7}},
                          {"ACTIONS", "actions", "\A3\...", {0.8, 0.5, 0.2, 0.7}},
                          {"VÉHICULES", "vehicles", "\A3\...", {0.3, 0.7, 0.3, 0.7}},
                          {"SERVEUR", "server", "\A3\...", {0.8, 0.2, 0.2, 0.7}},
                          {"UTILITAIRES", "utilities", "\A3\...", {0.5, 0.5, 0.9, 0.7}},
                          {"LOGS", "logs", "\A3\...", {0.4, 0.4, 0.4, 0.7}}
                      };
                  };
              
                  class PlayerManagement {
                      commands[] = {
                          // 15+ commandes joueurs
                          {"Get ID", "life_fnc_adminGetID", 1, "players"},
                          {"Query", "life_fnc_adminQuery", 1, "players"},
                          {"Spectate", "life_fnc_adminSpectate", 3, "players"},
                          {"TP to", "life_fnc_adminTeleport", 3, "players"},
                          {"Heal", "life_fnc_adminHeal", 3, "players"},
                          {"Revive", "life_fnc_adminRevive", 3, "players"},
                          {"TP Here", "life_fnc_adminTpHere", 4, "players"},
                          {"Freeze", "life_fnc_adminFreeze", 4, "players"},
                          {"Kick", "life_fnc_adminKick", 4, "players"},
                          {"Give Money", "life_fnc_adminGiveMoney", 4, "players"},
                          {"Strip Weapons", "life_fnc_adminStripWeapons", 4, "players"},
                          {"Ban Temp", "life_fnc_adminBanTemp", 5, "players"},
                          {"Ban Perm", "life_fnc_adminBan", 6, "players"},
                          {"Unban", "life_fnc_adminUnban", 6, "players"},
                          {"Set Admin", "life_fnc_adminSetLevel", 7, "players"}
                      };
                  };
              
                  // ... autres classes avec beaucoup de commandes
              };
              

              🛠️ Modification Dynamique

              Ajouter une Commande

                Ouvrir config/Config_Admin.hpp Trouver la classe correspondante (PlayerManagement, AdminActions, etc.) Ajouter une ligne dans commands[]:
                {"Ma Commande", "life_fnc_maFonction", 3, "players"}
                
                  Recompiler la mission La commande apparaît automatiquement dans le bon onglet !

                  Changer le Niveau Requis

                  // AVANT
                  {"Freeze Player", "life_fnc_adminFreeze", 4, "players"}
                  
                  // APRÈS (accessible dès niveau 3)
                  {"Freeze Player", "life_fnc_adminFreeze", 3, "players"}
                  

                  Déplacer une Commande d'Onglet

                  // AVANT (dans l'onglet ACTIONS)
                  {"God Mode", "life_fnc_adminGodMode", 4, "actions"}
                  
                  // APRÈS (dans l'onglet UTILITAIRES)
                  {"God Mode", "life_fnc_adminGodMode", 4, "utilities"}
                  

                  🧪 Tests et Validation

                  Checklist de Validation

                  ☐ Tous les niveaux admin ont des couleurs distinctes
                  ☐ Les onglets sont bien nommés et dans l'ordre souhaité
                  ☐ Chaque commande est dans le bon onglet
                  ☐ Les niveaux admin sont corrects (pas de niveau 1 avec debug)
                  ☐ Le seuil dropdown est adapté au nombre de commandes
                  ☐ Les icônes s'affichent correctement
                  ☐ Les tooltips sont clairs et utiles
                  ☐ Pas de doublons de commandes
                  ☐ Toutes les fonctions existent et sont déclarées
                  

                  Tests In-Game

                  // Tester avec différents niveaux
                  life_adminlevel = 1;  // Support
                  createDialog "life_admin_menu_new";
                  
                  life_adminlevel = 3;  // Admin
                  createDialog "life_admin_menu_new";
                  
                  life_adminlevel = 5;  // Owner
                  createDialog "life_admin_menu_new";
                  

                  📚 Référence Rapide

                  Commandes Config

                  Propriété Type Valeurs Description count NUMBER 1-10 Nombre d'onglets maxButtonsBeforeDropdown NUMBER 5-15 Seuil dropdown levels[] ARRAY Strings Noms des niveaux admin commands[] ARRAY Arrays Liste des commandes tabs[] ARRAY Arrays Configuration onglets

                  Format Couleur

                  {R, G, B, Alpha}
                  // R, G, B: 0.0 à 1.0
                  // Alpha: 0.0 (transparent) à 1.0 (opaque)
                  

                  Icônes Arma 3

                  Chemin Description \A3\ui_f\data\GUI\Rsc\RscDisplayArsenal\face_ca.paa Visage (joueurs) \A3\ui_f\data\IGUI\Cfg\Actions\settimer_ca.paa Horloge \A3\ui_f\data\IGUI\Cfg\Actions\getindriver_ca.paa Véhicule \A3\ui_f\data\IGUI\Cfg\Actions\repair_ca.paa Réparer \A3\ui_f\data\IGUI\Cfg\Actions\heal_ca.paa Soigner

                  🎉 Conclusion

                  Avec ce système de configuration :

                    ✅ Facile à modifier : Tout est dans un seul fichier ✅ Flexible : Supporte 1 à 10+ onglets ✅ Scalable : Dropdown automatique si trop de commandes ✅ Personnalisable : Couleurs, icônes, tooltips ✅ Maintenable : Pas besoin de toucher au code SQF

                    Prochaines étapes :

                      Personnaliser Config_Admin.hpp selon vos besoins Adapter fn_adminMenuTabChange.sqf pour lire cette config Implémenter le système de dropdown Tester avec différents niveaux admin

                      Auteur: ProtoMehka Version: 2.1 Date: 2025-10-10 Janvier 2025 Framework: Altis Life 5.0+


                      📋 Table des Matières

                        Prérequis Fichiers à Copier Modifications des Fichiers de Configuration Vérification de l'Installation Troubleshooting

                        ✅ Prérequis

                        Avant de commencer, assurez-vous d'avoir :

                           Framework Altis Life 5.0 ou supérieur  Accès aux fichiers de la mission (admin_menu.Altis/)  Éditeur de texte (Notepad++, VSCode, etc.)  Backup complet de votre mission

                          📦 Fichiers à Copier

                          Étape 1 : Nouveaux Fichiers

                          Copiez les fichiers suivants dans votre mission admin_menu.Altis/ :

                          Configuration (1 fichier)

                          admin_menu.Altis/config/
                          └── Config_Admin.hpp          ✨ NOUVEAU
                          

                          Interface (3 fichiers)

                          admin_menu.Altis/dialog/
                          ├── admin_menu.hpp             ⚠️ REMPLACER
                          ├── server_message.hpp         ⚠️ REMPLACER
                          └── object_manager.hpp         ✨ NOUVEAU (v2.1)
                          

                          Fonctions Admin Core (12 fichiers)

                          admin_menu.Altis/core/admin/
                          ├── fn_adminMenu.sqf               ⚠️ REMPLACER
                          ├── fn_adminMenuTabChange.sqf      ⚠️ REMPLACER
                          ├── fn_adminRefreshList.sqf        ⚠️ REMPLACER
                          ├── fn_adminSearchPlayer.sqf       ⚠️ REMPLACER
                          ├── fn_adminPlayerSelected.sqf     ⚠️ REMPLACER
                          ├── fn_adminQueryFinances.sqf      ⚠️ REMPLACER
                          ├── fn_adminReceiveFinances.sqf    ⚠️ REMPLACER
                          ├── fn_adminRepairObject.sqf       ⚠️ REMPLACER
                          ├── fn_adminDeleteObject.sqf       ⚠️ REMPLACER
                          ├── fn_adminServerMsg.sqf          ⚠️ REMPLACER
                          ├── fn_adminSendServerMsg.sqf      ⚠️ REMPLACER
                          └── fn_adminBroadcastMsg.sqf       ⚠️ REMPLACER
                          

                          Fonctions Admin - Corrections v2.1 (5 fichiers)

                          admin_menu.Altis/core/admin/
                          ├── fn_adminSpectate.sqf           ⚠️ REMPLACER (TFAR compatible)
                          ├── fn_adminTpHere.sqf             ⚠️ REMPLACER (IDC corrigé)
                          ├── fn_adminFreeze.sqf             ⚠️ REMPLACER (IDC corrigé)
                          └── fn_adminGodMode.sqf            ⚠️ REMPLACER (closeDialog supprimé)
                          

                          Object Manager - NOUVEAU v2.1 (4 fichiers)

                          admin_menu.Altis/core/admin/
                          ├── fn_adminObjectManager.sqf      ✨ NOUVEAU
                          ├── fn_adminObjectRefresh.sqf      ✨ NOUVEAU
                          ├── fn_adminObjectSelect.sqf       ✨ NOUVEAU
                          └── fn_adminObjectDelete.sqf       ✨ NOUVEAU
                          

                          Autres Fonctions Admin (3 fichiers)

                          admin_menu.Altis/core/admin/
                          ├── fn_adminCompensate.sqf         ⚠️ REMPLACER (logging ajouté)
                          ├── fn_adminDebugCon.sqf           ⚠️ REMPLACER (logging ajouté)
                          └── fn_adminMarkers.sqf            ⚠️ REMPLACER (logging ajouté)
                          

                          Fonction Teleport (1 fichier)

                          admin_menu.Altis/core/functions/
                          └── fn_teleport.sqf                ⚠️ REMPLACER (logging ajouté)
                          

                          🔧 Modifications des Fichiers de Configuration

                          Étape 2 : Config_Master.hpp

                          Fichier: admin_menu.Altis/config/Config_Master.hpp

                          Localiser la section des includes (généralement au début du fichier, après class Life_Settings).

                          Ajouter cette ligne :

                          #include "Config_Admin.hpp"
                          

                          Exemple de placement :

                          class Life_Settings {
                              /* ... autres paramètres ... */
                          };
                          
                          #include "Config_Admin.hpp"      // ← AJOUTER ICI
                          #include "Config_Master.hpp"
                          #include "Config_Clothing.hpp"
                          // ... autres includes ...
                          

                          Étape 3 : Functions.hpp

                          Fichier: admin_menu.Altis/Functions.hpp

                          Localiser la classe Admin (environ ligne 70-90).

                          Remplacer ou compléter avec les nouvelles fonctions :

                          class Admin {
                              file = "core\admin";
                          
                              // Fonctions existantes (conserver si elles existent)
                              class adminCompensate {};
                              class adminDebugCon {};
                              class adminFreeze {};
                              class admingetID {};
                              class adminGodMode {};
                              class adminid {};
                              class admininfo {};
                              class adminMarkers {};
                              class adminQuery {};
                              class adminSpectate {};
                              class adminTeleport {};
                              class adminTpHere {};
                          
                              // ✨ NOUVELLES FONCTIONS - Admin Menu v2.1
                              class adminMenu {};
                              class adminMenuTabChange {};
                              class adminRefreshList {};
                              class adminSearchPlayer {};
                              class adminPlayerSelected {};
                              class adminQueryFinances {};
                              class adminReceiveFinances {};
                              class adminRepairObject {};
                              class adminDeleteObject {};
                              class adminServerMsg {};
                              class adminSendServerMsg {};
                              class adminBroadcastMsg {};
                          
                              // ✨ Object Manager v2.1
                              class adminObjectManager {};
                              class adminObjectRefresh {};
                              class adminObjectSelect {};
                              class adminObjectDelete {};
                          };
                          

                          Étape 4 : MasterHandler.hpp

                          Fichier: admin_menu.Altis/dialog/MasterHandler.hpp

                          Localiser les includes de dialogs admin.

                          Modifier pour inclure les nouveaux dialogs :

                          // Admin Menu v2.1
                          #include "admin_menu.hpp"
                          #include "server_message.hpp"
                          #include "object_manager.hpp"
                          

                          ⚠️ Important : Supprimez l'ancien include si présent :

                          // #include "admin_menu_new.hpp"   ← SUPPRIMER si présent
                          

                          Étape 5 : CfgRemoteExec.hpp

                          Fichier: admin_menu.Altis/CfgRemoteExec.hpp

                          Ajouter les permissions pour les nouvelles fonctions client :

                          // Admin Menu v2.1 - Client Functions
                          F(life_fnc_adminQueryFinances,CLIENT)
                          F(life_fnc_adminReceiveFinances,CLIENT)
                          F(life_fnc_adminBroadcastMsg,CLIENT)
                          

                          Ajouter les permissions pour les fonctions serveur :

                          // Admin Menu v2.1 - Server Functions
                          F(TON_fnc_getPlayerFinances,SERVER)
                          F(TON_fnc_logAdminAction,SERVER)
                          

                          Exemple complet d'une section :

                          class CfgRemoteExec {
                              class Functions {
                                  mode = 1;
                                  jip = 0;
                          
                                  // ... autres fonctions ...
                          
                                  // Admin Menu v2.0 - Client
                                  F(life_fnc_adminQueryFinances,CLIENT)
                                  F(life_fnc_adminReceiveFinances,CLIENT)
                                  F(life_fnc_adminBroadcastMsg,CLIENT)
                          
                                  // Admin Menu v2.0 - Server
                                  F(TON_fnc_getPlayerFinances,SERVER)
                                  F(TON_fnc_logAdminAction,SERVER)
                              };
                          };
                          

                          Étape 6 : player_inv.hpp

                          Fichier: admin_menu.Altis/dialog/player_inv.hpp

                          Localiser le bouton "Admin Menu" (généralement IDC 2021).

                          Modifier l'action onButtonClick :

                          class ButtonAdminMenu: Life_RscButtonMenu {
                              idc = 2021;
                              text = "$STR_PM_AdminMenu";
                              colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5};
                              onButtonClick = "closeDialog 0; createDialog ""life_admin_menu"";";  // ← MODIFIER ICI
                              x = 0.0204 * safezoneW + safezoneX;
                              y = 0.82 * safezoneH + safezoneY;
                              w = 0.0392 * safezoneW;
                              h = 0.033 * safezoneH;
                          };
                          

                          ⚠️ Important : L'ancien nom était potentiellement life_admin_menu_new, vérifiez et changez en life_admin_menu.


                          Étape 7 : common.hpp (Optionnel)

                          Fichier: admin_menu.Altis/dialog/common.hpp

                          Ce fichier a reçu des modifications mineures (+1 ligne). Si vous avez des customisations importantes dans votre common.hpp, vérifiez les différences.

                          Conseil : Si vous n'avez pas modifié ce fichier, remplacez-le par la nouvelle version.


                          ✅ Vérification de l'Installation

                          Test 1 : Compilation

                            Packez votre mission (PBO) Vérifiez qu'il n'y a aucune erreur de compilation Recherchez dans les logs :
                              Config_Admin.hpp doit être chargé Aucune erreur <NULL-config>

                              Test 2 : Logs de Démarrage

                              Lancez la mission et vérifiez le fichier RPT :

                              [ADMIN MENU] Config_Admin.hpp chargé
                              [ADMIN MENU] 12 commandes disponibles
                              [ADMIN REFRESH] Liste des joueurs chargée
                              

                              Test 3 : Menu Fonctionnel

                                Connectez-vous avec un compte admin (life_adminlevel >= 1) Appuyez sur Y → Admin Menu Vérifiez :
                                   Le menu s'ouvre correctement  Les 4 onglets sont visibles (Joueurs/Actions/Objets/Serveur)  La liste des joueurs s'affiche  La recherche fonctionne  Le dropdown affiche les commandes  La mini-map s'affiche quand un joueur est sélectionné

                                  Test 4 : Commandes

                                  Testez une commande simple comme Markers ou God Mode :

                                    Sélectionnez la commande dans le dropdown Cliquez sur EXÉCUTER Vérifiez que la commande s'exécute Vérifiez dans la BDD que l'action est loguée (table admin_logs)

                                    🐛 Troubleshooting

                                    Problème : Le menu ne s'ouvre pas

                                    Solution :

                                      Vérifiez life_adminlevel >= 1 avec hint str life_adminlevel; Vérifiez que MasterHandler.hpp inclut bien admin_menu.hpp Vérifiez les logs RPT pour erreurs de compilation

                                      Problème : Liste de joueurs vide

                                      Solution :

                                        Vérifiez les logs : [ADMIN REFRESH] doit apparaître Testez hint str (count playableUnits); pour voir si la fonction fonctionne Ouvrez/fermez le menu plusieurs fois (délai de chargement)

                                        Problème : Aucune commande affichée

                                        Solution :

                                          Vérifiez que Config_Admin.hpp est bien inclus dans Config_Master.hpp Vérifiez les logs : [ADMIN MENU] X commandes disponibles Vérifiez votre niveau admin (certaines commandes nécessitent niveau 3+)

                                          Problème : Erreur <NULL-config>

                                          Solution :

                                            Assurez-vous que Config_Admin.hpp est bien dans admin_menu.Altis/config/ Vérifiez l'include dans Config_Master.hpp (ligne exacte, chemin) Recompilez la mission

                                            Problème : Dropdown ne s'affiche pas

                                            Solution :

                                              Vérifiez que fn_adminMenuTabChange.sqf est bien copié Vérifiez que la fonction est déclarée dans Functions.hpp Testez en changeant d'onglet plusieurs fois

                                              Problème : Finances ne s'affichent pas

                                              Solution :

                                                Vérifiez que la partie serveur est installée (voir INTEGRATION_SERVER.md) Vérifiez CfgRemoteExec.hpp pour TON_fnc_getPlayerFinances Vérifiez les logs serveur pour erreurs SQL

                                                📚 Documentation Complémentaire

                                                Document Description README.md Documentation générale du projet CONFIG_ADMIN_GUIDE.md Guide de configuration détaillé INTEGRATION_SERVER.md Installation côté serveur INTEGRATION_DB.md Configuration base de données CHANGELOG.md Journal des modifications

                                                ✅ Checklist Finale

                                                Avant de mettre en production :

                                                   Tous les fichiers sont copiés  Config_Master.hpp modifié  Functions.hpp modifié  MasterHandler.hpp modifié  CfgRemoteExec.hpp modifié  player_inv.hpp modifié  Mission recompilée sans erreur  Logs RPT vérifiés  Menu testé en jeu  Commandes testées  Logging vérifié en BDD  Backup effectué

                                                  Installation côté serveur : Voir INTEGRATION_SERVER.md Configuration BDD : Voir INTEGRATION_DB.md


                                                  🆕 Nouveautés v2.1

                                                  Corrections de Bugs

                                                    ✅ TP Here : IDC corrigé (2902 → 29020) ✅ Freeze Player : IDC corrigé (2902 → 29020) ✅ God Mode : Ne ferme plus le menu ✅ Server Message : Fonction et remoteExec corrigés ✅ Spectate : Touche F fonctionnelle, caméra repositionnée, compatible TFAR

                                                    Nouvelle Fonctionnalité

                                                      ✨ Object Manager : Gestionnaire d'items au sol
                                                        Détection items dans rayon personnalisable (1-50m) Affichage contenu WeaponHolder détaillé Flèche 3D rouge sur item sélectionné Suppression individuelle d'items Les autres items restent au sol

                                                        Version 2.1 - 10 Janvier 2025