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 commandePersonnaliser les couleurs des boutons par niveauOrganiser les commandes dans des onglets personnalisésGérer les menus déroulants pour les onglets avec beaucoup d'actionsModifier 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
| ||
| ||
| ||
| ||
| ||
|
🗂️ 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 visuelMaintenir une interface propreFaciliter 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 disponiblesFiltrées par niveau adminTriées alphabétiquement
Bouton "EXÉCUTER"Apparaît sous la comboboxExécute la commande sélectionnéeCouleur selon le niveau de la commande
Quand commands[] <= 8 :
Affichage classique en boutonsUn bouton par commandePas 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
Ouvrirconfig/Config_Admin.hppTrouver la classe correspondante (PlayerManagement,AdminActions, etc.)Ajouter une ligne danscommands[]:
{"Ma Commande", "life_fnc_maFonction", 3, "players"}
Recompiler la missionLa 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
| |||
| |||
| |||
| |||
|
Format Couleur
{R, G, B, Alpha}
// R, G, B: 0.0 à 1.0
// Alpha: 0.0 (transparent) à 1.0 (opaque)
Icônes Arma 3
| |
| |
| |
| |
|
🎉 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 :
PersonnaliserConfig_Admin.hppselon vos besoinsAdapterfn_adminMenuTabChange.sqfpour lire cette configImplémenter le système de dropdownTester 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
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
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
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
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
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)
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.hppdoit ê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 >= 1avechint str life_adminlevel; - Vérifiez que
MasterHandler.hppinclut bienadmin_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.hppest bien inclus dansConfig_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.hppest bien dansadmin_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.sqfest 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.hpppourTON_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.hppmodifié -
Functions.hppmodifié -
MasterHandler.hppmodifié -
CfgRemoteExec.hppmodifié -
player_inv.hppmodifié - 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