Intégration Client
📦📋 Guide d'Intégrationde Configuration Admin - Admin Menu v2.0Config_Admin.hpp
Auteur: ProtoMehka
Version: 2.0
Framework: Compatible Altis Life (5.0 et supérieur)1
Dernière mise à jour: 2025-10-0410
📋 Table des Matières
PrésentationFichiers du PackagePrérequisInstallation ComplèteIntégration dans un Autre FrameworkConfigurationDépendances et AdaptationsTroubleshooting
🎯 PrésentationObjectif
CeCentraliser toute la configuration du menu admin v2.0dans estun uneseul interface moderne et modulairefichier pour gérerpermettre votre serveur Altis Life. Il peut être intégré dans n'importe quel framework Altis Life avec quelques adaptations.
Fonctionnalités principales:
InterfaceDéfinirmoderneles 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
ongletsbeaucoup(Joueurs/Actions/Véhicules/Serveur)d'actions RechercheModifieretfacilementfiltressansdetoucherjoueursau Mini-map interactive avec tracking temps réelSystème de permissions configurablesDesign responsive et épurécode
📁 FichiersStructure du PackageFichier
Structure ComplèteLocalisation
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 permissions
├── dialog/
│ ├── admin_menu_new.hpp # Interface principale
│ └── MasterHandler.hpp # (modification requise)
└── core/
├── admin/
│ ├── fn_adminMenuNew.sqf # Contrôleur principal
│ ├── fn_adminMenuTabChange.sqf # Gestion onglets
│ ├── fn_adminRefreshList.sqf # Liste joueurs
│ ├── fn_adminSearchPlayer.sqf # Recherche
│ ├── fn_adminFilterPlayers.sqf # Filtres
│ └── fn_adminPlayerSelected.sqf # Infos joueur + map
└── pmenu/
└── fn_p_openMenu.sqf # (modification requise)
Fichiers à Créer (Nouveaux)
✅ config/Config_Admin.hpp
✅ dialog/admin_menu_new.hpp
✅ core/admin/fn_adminMenuNew.sqf
✅ core/admin/fn_adminMenuTabChange.sqf
✅ core/admin/fn_adminRefreshList.sqf
✅ core/admin/fn_adminSearchPlayer.sqf
✅ core/admin/fn_adminFilterPlayers.sqf
✅ core/admin/fn_adminPlayerSelected.sqf
Fichiers à Modifier (Existants)
🔧 Functions.hpp # Déclaration des fonctions
🔧 dialog/MasterHandler.hpp # Include du nouveau dialog
🔧 dialog/player_inv.hpp # Bouton ouverture menu
🔧 core/pmenu/fn_p_openMenu.sqf # (optionnel)
✅ Prérequis
Framework
Altis Life 5.0+(AsYetUntitled ou compatible)SQF compatibleSystème de dialogs Arma 3
Variables Requises
| | ||
| |||
|
Fonctions Externes Utilisées
| | |
| ||
| ||
| ||
Classes UI Requises
Life_RscText
Life_RscButtonMenu
Life_RscListBox
Life_RscEdit
Life_RscStructuredText
Life_RscMapControl
🚀 Installation Complète
Étape 1: Copier les Fichiers
Créer le dossier de configuration(si inexistant):admin_menu.Altis/config/Copier tous les nouveaux fichiers:config/Config_Admin.hpp dialog/admin_menu_new.hpp core/admin/fn_adminMenuNew.sqf core/admin/fn_adminMenuTabChange.sqf core/admin/fn_adminRefreshList.sqf core/admin/fn_adminSearchPlayer.sqf core/admin/fn_adminFilterPlayers.sqf core/admin/fn_adminPlayerSelected.sqf
Étape 2: Modifier Functions.hpp
Ouvrir Functions.hpp et trouver la section class Admin.
AJOUTER ces lignes:
class AdminTabs { file... = "core\admin"};
// ...Commandes fonctionspar existantescatégorie
class PlayerManagement { ... // ===== ADMIN MENU v2.0 - ProtoMehka =====
class adminMenuNew {};
class adminMenuTabChangeAdminActions { ... };
class adminRefreshListObjectManagement { ... };
class adminSearchPlayerServerManagement {}; class... adminFilterPlayers {};
class adminPlayerSelected {};
};
🎨 Configuration des Couleurs
ÉtapeCouleurs 3:par ModifierNiveau MasterHandler.hppAdmin
Ouvrir dialog/MasterHandler.hpp.
AJOUTER cette ligne après #include "admin_menu.hpp":
#includeclass "admin_menu.hpp"ButtonColors #include "admin_menu_new.hpp"{
// <--Format: AJOUTER{R, CETTEG, LIGNEB, Étape 4: Modifier player_inv.hpp
Ouvrir dialog/player_inv.hpp et trouver le bouton admin (IDC 2021).
REMPLACER:
onButtonClick = "closeDialog 0; createDialog ""life_admin_menu"";";
PAR:
onButtonClick = "closeDialog 0; createDialog ""life_admin_menu_new"";";
Étape 5: Tester
Compiler votre missionSe connecter au serveurAvoirlife_adminlevel >= 1Appuyer surY→ Cliquer "Admin Menu"
🔄 Intégration dans un Autre Framework
Cas 1: Framework Altis Life Compatible
Si votre framework utilise la même structure qu'Altis Life 5.0:
Vérifier les variables:
àlife_adminlevelAlpha} //DoitValeursexisterde(0-5)0.0 1.0
- class
SuivreLevel1l'installation complèteci-dessus Adapter les cheminssi nécessaire dans les#include
Cas 2: Framework Custom
A. Identifier les Variables Équivalentes
| | |
| ||
|
B. Adapter les Macros
Ouvrir core/admin/fn_adminMenuNew.sqf et tous les autres.
Rechercher:
FETCH_CONST(life_adminlevel)
Remplacer par votre variable:
// Exemple 1: Variable simple
player_adminLevel{ // ExempleSupport
2: Variable dans namespace
(player getVariable ["adminLevel", 0])
// Exemple 3: Fonction custom
[normal[] call my_fnc_getAdminLevel
Fichiers à modifier:
C. Adapter les Factions
Si vos factions sont différentes (west/civilian/independent):
Ouvrir fn_adminRefreshList.sqf:
// AVANT (Altis Life 5.0)
case west:= {"Cop"};0.3, case0.7, civilian:0.3, {"Civ"};
case independent: {"Medic"}0.7}; // APRÈSVert (votrenormal
framework)hover[] case west:= {"Police"}0.4, 0.8, 0.4, 0.9}; // VotreVert nomhover
casepressed[] civilian:= {"Civil"};0.2, case0.6, independent:0.2, {"Pompiers"}0.8}; // ExempleVert casepressé
east:disabled[] = {"Rebelles"}0.3, 0.3, 0.3, 0.5}; // SiGris vousdésactivé
avez};
uneclass 4eLevel2 faction{ Faire de même pour les couleurs:
// DansModérateur
fn_adminRefreshList.sqfnormal[] case west:= {[0.2, 0.4, 0.8]}6, 0.8, 0.7}; // Bleu policeclair
casehover[] civilian:= {[0.5, 0.7, 0.9, 0.9};
pressed[] = {0.3, 0.8,5, 0.3]7, 0.8};
disabled[] = {0.3, 0.3, 0.3, 0.5};
};
class Level3 { // Admin
normal[] = {0.38, 0.70, 0.89, 0.7}; // VertBleu civilAltis
casehover[] independent:= {[0.9,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]}0.2, 0.7}; // Orange
pompiershover[] case east:= {[0.8,9, 0.2,6, 0.2]3, 0.9};
pressed[] = {0.7, 0.4, 0.1, 0.8};
disabled[] = {0.3, 0.3, 0.3, 0.5};
};
class Level5 { // RougeOwner
rebelles (exemple)
D. Adapter les Boutons de Filtre
Ouvrir dialog/admin_menu_new.hpp:
Si vous avez une 4e faction, AJOUTER:
class FilterRebel: Life_RscButtonMenu {
idc = 29027; // Nouveau IDC
text = "REBEL";
onButtonClick = "[""rebel""] call life_fnc_adminFilterPlayers;";
x = 0.450 * safezoneW + safezoneX;
y = 0.27 * safezoneH + safezoneY;
w = 0.03 * safezoneW;
h = 0.02 * safezoneH;
colorBackground[normal[] = {0.8, 0.2, 0.2, 0.6}7}; // Rouge
sizeExhover[] = {0.02;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};
};
};
Puis modifier fn_adminFilterPlayers.sqf:
case "rebel": {_playerSide == east}; // Ajouter ce cas
E. Adapter les Fonctions Externes
Si vos nomsPalette de
fonctionsCouleurs diffèrent:
| Usage Recommandé | ||
|---|---|---|
| 🟢 Vert | |
|
| 🔵 Bleu Clair | |
|
| 🔵 Bleu | |
|
| 🟠 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é |
Exemple
dans
🗂️ fn_adminPlayerSelected.sqf:Configuration des Onglets
Structure de Base
//class AVANT
[player] remoteExecCall ["TON_fnc_player_query", _unit];
// APRÈS (si vous avez une autre fonction)
[player] remoteExecCall ["YOUR_fnc_playerQuery", _unit];
F. Adapter l'Ouverture du Menu
Si vous n'utilisez pas le même menu inventaire:
Trouver où vous ouvrez votre menu adminRemplacer par:createDialog "life_admin_menu_new";
Exemple: Si vous avez une touche dédiée:
// Dans votre fn_keyHandler.sqf
case 0x3B:Tabs {
// F1Nombre iftotal (life_adminleveld'onglets
>count = 1)4;
then// Configuration de chaque onglet
// Format: {Nom, ID, Icône, Couleur}
tabs[] = {
createDialog{
"life_admin_menu_new"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 3 - 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
Config_Admin.hppConfiguration Minimaliste (4 onglets, peu de commandes)
Ajouter une commande:
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", // 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 existantesjoueurs
{"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 Nouvelle Commande", "life_fnc_maFonction", 3, "players"}
// Nom affiché | Fonction | Niveau min | Onglet
};
};
Onglets disponibles:
Recompiler"players"-laOnglet JoueursmissionLa"actions"-commandeOngletapparaîtActionsautomatiquement dans le bon onglet !"vehicles""server"- Onglet Serveur
Changer le
niveauNiveau 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"}
// NiveauAPRÈS 3(dans requisl'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
CouleursTests par NiveauIn-Game
private// _colorTester avec différents niveaux
life_adminlevel = switch (_cmdLevel) do {
case 1: {[0.3, 0.7, 0.3, 0.7]};1; // Vert - Support
casecreateDialog 2:"life_admin_menu_new";
{[0.4,life_adminlevel 0.6,= 0.8, 0.7]};3; // BleuAdmin
claircreateDialog case"life_admin_menu_new";
3:life_adminlevel {[0.38,= 0.70, 0.89, 0.7]};5; // BleuOwner
casecreateDialog 4: {[0.8, 0.5, 0.2, 0.7]}; // Orange
case 5: {[0.8, 0.2, 0.2, 0.7]}; // Rouge
default {[0.5, 0.5, 0.5, 0.7]}; // Gris
}"life_admin_menu_new";
🔗📚 DépendancesRéférence et AdaptationsRapide
VariablesCommandes Globales CrééesConfig
| 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
life_admin_currentTab{R, G, B, Alpha}
// OngletR, actifG, (0-3)B: life_admin_selectedPlayer0.0 à 1.0
// JoueurAlpha: sélectionné0.0 (OBJECT)
life_admin_currentFilter // Filtre actif ("all", "cop", "civ", "medic")
life_admin_marker // Marqueur map (STRING)
life_admin_posUpdate // Handle misetransparent) à jour position1.0 (SCRIPT)
Nettoyage: Ces variables sont automatiquement nettoyées à la fermeture du menu.
Macros Utilisées
FETCH_CONST(life_adminlevel) // Depuis script_macros.hpp
Si vous n'avez pas ce macro:
REMPLACER par:
life_adminlevel // Variable directeopaque)
FonctionsIcônes duArma Framework Utilisées3
| 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
ObligatoiresAvec ce système de configuration :
Aucune✅fonctionFacilecustomàobligatoiremodifier(utilise:fonctionsToutArmaest3)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
OptionnellesProchaines étapes (pour fonctionnalités avancées):
TON_fnc_player_query- Infos financières joueurToutes les fonctionslife_fnc_admin*- Commandes admin
🛠️ Troubleshooting
Problème: Le menu ne s'ouvre pas
Solutions:
Vérifierlife_adminlevel:hint str life_adminlevel; // Doit être >= 1Vérifier les includes:MasterHandler.hppcontient#include "admin_menu_new.hpp"
Vérifier les erreurs RPT:C:\Users\VOTRE_NOM\AppData\Local\Arma 3\arma3_x64_xxx.rpt
Problème: Liste de joueurs vide
Solutions:
TesterplayableUnits:hint str (count playableUnits);Vérifier les factionsdansfn_adminRefreshList.sqf
Problème: Boutons d'action invisibles
Causes possibles:
Niveau admin insuffisant: Les boutons sont masqués silife_adminlevel < niveau_requisMauvaise configurationdansPersonnaliserConfig_Admin.hppselon vos besoins
Solution: Vérifier dans
fn_adminMenuTabChange.sqf ifcette (_adminLevelconfigProblème: Mini-map ne s'affiche pas
Solutions:
Vérifier la classeLife_RscMapControldansdropdowncommon.hpp- Tester
manuellement:avec_mapdifférents=niveauxfindDisplay 29000 displayCtrl 29040; ctrlType _map; // Doit retourner 101
Problème: Erreurs "Undefined variable"
Cause: Variables du framework différentes
Solution: Rechercher et remplacer dans tous les fichiers:
# Windows PowerShell
Get-ChildItem -Recurse -Filter "*.sqf" | Select-String "VARIABLE_A_REMPLACER"
# Linux/Mac
grep -r "VARIABLE_A_REMPLACER" *.sqf
📞 Support
Pour toute question ou problème:
Vérifier ce guide en entierConsulteradmin_menu_project.mdpour la documentation complèteVérifier les fichiers RPT pour les erreursadmin
📄 Licence
Auteur: ProtoMehka
Version: 2.1
Date: 2025-10-04
Framework: Altis Life 5.0+10
Libre d'utilisation et de modification.
Crédit apprécié mais non obligatoire.
🔄 Changelog
Version 2.0 (2025-10-04)
✨ Interface moderne avec onglets✨ Mini-map interactive✨ Système de recherche et filtres✨ Configuration centralisée des permissions✨ Design responsive SafeZone✨ Mise à jour temps réel positions joueurs
Fin du Guide d'Intégration