Projet
Projet🎮 de Refonte duAdmin Menu Adminv2.1 - Arma 3 Altis Life
Auteur: ProtoMehka
Version: 2.0
📋 Vue d'ensemble
Modernisation complète du menu admin accessible depuis le menu inventaire (Y), avec ajout de fonctionnalités avancées et système de logging en base de données.
🏗️ Structure Actuelle
Fichiers Principaux
admin_menu.Altis/dialog/admin_menu.hppadmin_menu.Altis/core/admin/fn_adminMenu.sqfadmin_menu.Altis/core/pmenu/fn_p_openMenu.sqfadmin_menu.Altis/dialog/player_inv.hppadmin_menu.Altis/Functions.hppadmin_menu.Altis/CfgRemoteExec.hppFonctionnalités Existantes (Framework 5.0 de base)
fn_adminGetID.sqffn_adminQuery.sqffn_adminCompensate.sqffn_adminSpectate.sqffn_adminTeleport.sqffn_adminTpHere.sqffn_adminGodMode.sqffn_adminFreeze.sqffn_adminMarkers.sqffn_adminDebugCon.sqfNouvelles Fonctionnalités Ajoutées v2.0
fn_adminRepairObject.sqffn_adminDeleteObject.sqffn_adminQueryFinances.sqffn_adminReceiveFinances.sqfNiveaux d'Administration
0 = Joueur normal
1 = Support (GetID + Query uniquement)
2 = Modérateur (+ Compensate)
3 = Admin (+ Spectate + Teleport)
4 = Super Admin (+ TpHere, GodMode, Freeze, Markers)
5 = Owner (+ Debug, accès total)
Note: Les niveaux dans le code diffèrent légèrement de la documentation initiale.
🎨 Modifications Planifiées
1. Interface Modernisée ✅ TERMINÉ
2. Nouvelles Fonctionnalités
Gestion Joueurs
Gestion Objets/Véhicules
Serveur
Utilitaires
3. Système de Logging
Base de Données
Table admin_logs avec:
Actions Loggées
🗄️ Base de Données
Nouvelle Table: admin_logs
CREATE TABLE IF NOT EXISTS `admin_logs` (
`id` INT NOT NULL AUTO_INCREMENT,
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`admin_pid` VARCHAR(17) NOT NULL,
`admin_name` VARCHAR(32) NOT NULL,
`action` VARCHAR(64) NOT NULL,
`target_pid` VARCHAR(17) DEFAULT NULL,
`target_name` VARCHAR(32) DEFAULT NULL,
`details` TEXT,
`admin_ip` VARCHAR(45) DEFAULT NULL,
`server_id` VARCHAR(32) DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `index_admin` (`admin_pid`),
INDEX `index_action` (`action`),
INDEX `index_timestamp` (`timestamp`),
CONSTRAINT `FK_admin_logs_admin` FOREIGN KEY (`admin_pid`)
REFERENCES `players` (`pid`)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Table Bans (optionnel)
CREATE TABLE IF NOT EXISTS `admin_bans` (
`id` INT NOT NULL AUTO_INCREMENT,
`pid` VARCHAR(17) NOT NULL,
`player_name` VARCHAR(32) NOT NULL,
`banned_by` VARCHAR(17) NOT NULL,
`reason` TEXT NOT NULL,
`ban_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`expire_time` TIMESTAMP NULL DEFAULT NULL,
`active` TINYINT NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
INDEX `index_pid` (`pid`),
INDEX `index_active` (`active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
📝 Nouveaux Fichiers Créés v2.0
Core Functions ✅ CRÉÉS
admin_menu/core/admin/fn_adminMenuNew.sqfadmin_menu/core/admin/fn_adminMenuTabChange.sqfadmin_menu/core/admin/fn_adminRefreshList.sqfadmin_menu/core/admin/fn_adminSearchPlayer.sqfadmin_menu/core/admin/fn_adminPlayerSelected.sqfadmin_menu/core/admin/fn_adminRepairObject.sqfadmin_menu/core/admin/fn_adminDeleteObject.sqfadmin_menu/core/admin/fn_adminQueryFinances.sqfadmin_menu/core/admin/fn_adminReceiveFinances.sqfDialogs ✅ CRÉÉ
admin_menu/dialog/admin_menu_new.hppFichiers à Créer (Phases Futures)
admin_menu/core/admin/fn_adminKick.sqfadmin_menu/core/admin/fn_adminBan.sqfadmin_menu/core/admin/fn_adminHeal.sqfadmin_menu/core/admin/fn_adminRevive.sqfadmin_menu/core/admin/fn_adminLog.sqfadmin_menu/core/admin/fn_adminViewLogs.sqfadmin_menu/dialog/admin_ban.hppadmin_menu/dialog/admin_logs_viewer.hppServer Functions
life_server/Functions/Admin/fn_logAdminAction.sqflife_server/Functions/Admin/fn_kickPlayer.sqflife_server/Functions/Admin/fn_banPlayer.sqflife_server/Functions/Admin/fn_getAdminLogs.sqf🔧 Fichiers à Modifier
Configuration
admin_menu/Functions.hppadmin_menu/CfgRemoteExec.hppadmin_menu/description.extlife_server/functions.sqfExistants
admin_menu/dialog/admin_menu.hppadmin_menu/core/admin/fn_adminMenu.sqfadmin_menu/core/pmenu/fn_p_openMenu.sqf🚀 Commandes Utiles
Base de Données
-- Créer la table de logs
SOURCE admin_logs_table.sql;
-- Voir les dernières actions admin
SELECT * FROM admin_logs ORDER BY timestamp DESC LIMIT 50;
-- Actions d'un admin spécifique
SELECT * FROM admin_logs WHERE admin_pid = '76561198XXXXXXXX' ORDER BY timestamp DESC;
-- Actions par type
SELECT action, COUNT(*) as count FROM admin_logs GROUP BY action ORDER BY count DESC;
-- Rechercher dans les logs
SELECT * FROM admin_logs WHERE details LIKE '%recherche%';
SQF Testing
// Tester le niveau admin
hint format["Admin Level: %1", life_adminlevel];
// Forcer ouverture menu admin
createDialog "life_admin_menu_new";
// Logger une action (test)
["test_action", player, "Test de logging"] call life_fnc_adminLog;
// Voir variables globales admin
hint str [life_god, life_markers, life_adminlevel];
Compilation
# Créer le PBO
armake build admin_menu admin_menu.pbo
# Extraire le PBO
armake unpack admin_menu.pbo admin_menu_extracted/
🔍 Analyse de l'Existant (Complétée)
Architecture Actuelle
Structure Client (admin_menu.Altis/):
core/admin/ # 10 fonctions admin
├── fn_adminCompensate.sqf
├── fn_adminDebugCon.sqf
├── fn_adminFreeze.sqf
├── fn_adminGetID.sqf
├── fn_adminGodMode.sqf
├── fn_adminID.sqf
├── fn_adminInfo.sqf
├── fn_adminMarkers.sqf
├── fn_adminMenu.sqf # Contrôleur principal
├── fn_adminQuery.sqf
├── fn_adminSpectate.sqf
├── fn_adminTeleport.sqf
└── fn_adminTpHere.sqf
dialog/
└── admin_menu.hpp # Interface IDD 2900
Structure Serveur (life_server/):
Functions/
├── Actions/
├── Gangs/
├── Housing/
├── Jail/
├── MySQL/ # Fonctions DB importantes
├── PlayTime/
├── Systems/
└── WantedSystem/
functions.sqf # Définitions fonctions publiques
⚠️ PROBLÈME MAJEUR IDENTIFIÉ: Aucun système de logging actuellement en place!
Points Critiques
Aucun Logging: Toutes les commandes admin sont NON LOGGÉES
fn_adminCompensate.sqffn_adminFreeze.sqffn_adminGodMode.sqffn_adminTeleport.sqfArchitecture Client-Side: La majorité des fonctions sont côté client uniquement
Communication Client↔Server:
remoteExecCallCfgRemoteExec.hppBase de Données:
admin_logsaltislife.sql📊 Progression
Phase 1: Analyse & Infrastructure ✅
Phase 2: Implémentation Logging Prioritaire 🔥
TON_fnc_logAdminActionlife_fnc_adminLogPhase 3: Interface Modernisée ✅
Phase 4: Nouvelles Fonctionnalités ⏳
Phase 5: Visualisation Logs ⏳
Phase 6: Tests & Déploiement ⏳
⚠️ Notes Importantes
Sécurité
life_adminlevelPerformance
Compatibilité
📚 Ressources
Documentation
Outils
🔄 Changelog
Version 1.0.0 - En développement
📋 Résumé Exécutif
État Actuel
admin_logsPriorités
Prochaines Étapes Recommandées
TON_fnc_logAdminActionlife_fnc_adminLogDernière mise à jourDate: 2025-10-04
Développeur: ProtoMehka10
Framework: Altis Life 5.0 (AsYetUntitled)
Statut: Phase 3 (Interface) ✅ Complétée | Phase 2 (Logging) ⏳ À faire0+
🎉📖 NOUVEAUTÉSDescription
Interface admin moderne et épurée pour serveurs Altis Life, avec système d'onglets, mini-map interactive, recherche de joueurs et permissions configurables via fichier de configuration centralisé.
✨ Fonctionnalités
🎨 Interface Admin v2.0
✨ Fonctionnalités ImplémentéesModerne
Interface Moderne:
- Design épuré avec thème sombre et accents bleus
- Interface responsive avec SafeZone
Bouton4de fermeture (X) rouge intuitif
Système d'Ongletsonglets:
Liste
🔍 des Joueurs
Recherche et Filtres:
- Barre de recherche par nom de joueur
4Trifiltresalphabétiquerapides: TOUS / COP / CIV / EMSautomatiqueBoutonCodedecouleurrechercheparavecfactionicône(Bleu=Cop,🔍
Informations
🗺️ Joueur
Mini-Map Interactive:
- Affichage temps réel de la position du joueur sélectionné
- Centrage automatique sur le joueur
- Marqueur rouge avec nom
du joueur - Mise à jour
en temps réel (toutes les 2secondes)secondes ZoomGrandeettailledéplacement
Gestion
📊 desInformations Permissions
- Nom et Steam ID
⚙️ Système de Permissions
config/Config_Admin.hpp
📁🎯 FichiersGestionnaire Créésd'Objets
Configuration:
Détectionconfig/Config_Admin.hpp-d'itemsConfigurationaudessolpermissions(WeaponHolder)etdanscommandesun rayon personnalisable (1-50m)
Interface:
🔧 Logging
Toutesdialog/admin_menu_new.hpp-lesNouveauactionsdialogadminmodernesont loguées en base de données
Fonctions:
📁
Structureadmin_menu.Altis/ ├── config/ │ └── Config_Admin.hpp # ⚙️ Configuration centralisée ├── dialog/ │ ├── admin_menu.hpp # 🎨 Interface principale │ ├── server_message.hpp # 💬 Dialog message serveur │ └── object_manager.hpp # 🎯 Dialog gestionnaire d'objets └── core/admin/fn_adminMenuNew.├── fn_adminMenu.sqf-# 🎮 Contrôleur principal
core/admin/├── fn_adminMenuTabChange.sqf core/admin/dropdown
├── fn_adminRefreshList.sqf core/admin/├── fn_adminSearchPlayer.sqf core/admin/fn_adminFilterPlayers.sqfcore/admin/fn_adminPlayerSelected.sqf 🚀 Installation Rapide
1️⃣ Copier les fichiers
✅ config/Config_Admin.hpp
✅ dialog/admin_menu.hpp
✅ dialog/server_message.hpp
✅ dialog/object_manager.hpp
✅ core/admin/fn_admin*.sqf (28 fichiers)
Serveur (life_server):
✅ Functions/Admin/fn_getPlayerFinances.sqf
✅ Functions/Admin/fn_logAdminAction.sqf
2️⃣ Modifier Config_Master.hpp
Ajouter tout en haut de la section des includes (après class Life_Settings):
#include "Config_Admin.hpp"
3️⃣ Modifier Functions.hpp -(Client)
class desAdmin nouvelles{
file = "core\admin";
// ... fonctions dialog/existantes conservées ...
// Admin Menu v2.1
class adminMenu {};
class adminMenuTabChange {};
class adminRefreshList {};
class adminSearchPlayer {};
class adminPlayerSelected {};
class adminRepairObject {};
class adminDeleteObject {};
class adminQueryFinances {};
class adminReceiveFinances {};
class adminServerMsg {};
class adminSendServerMsg {};
class adminBroadcastMsg {};
class adminSpectate {};
class adminTpHere {};
class adminFreeze {};
class adminGodMode {};
class adminObjectManager {};
class adminObjectRefresh {};
class adminObjectSelect {};
class adminObjectDelete {};
};
4️⃣ Modifier MasterHandler.hpp
#include "admin_menu.hpp"
#include "server_message.hpp"
#include "object_manager.hpp"
5️⃣ InclusionModifier duconfig.cpp nouveau(Serveur)
class Admin {
file = "\life_server\Functions\Admin";
class getPlayerFinances {};
class logAdminAction {};
};
6️⃣ Modifier CfgRemoteExec.hpp (Client)
Client functions:
dialog/F(life_fnc_adminQueryFinances,CLIENT)
F(life_fnc_adminReceiveFinances,CLIENT)
F(life_fnc_adminBroadcastMsg,CLIENT)
Server functions:
F(TON_fnc_getPlayerFinances,SERVER)
F(TON_fnc_logAdminAction,SERVER)
7️⃣ Modifier player_inv.hpp -(Client)
Bouton adminIDC menu2021:
onButtonClick à= jour"closeDialog core/pmenu/fn_p_openMenu.sqf0; createDialog ""life_admin_menu"";";
- Commentaires ajoutés
🚀8️⃣ CommentBase Utiliserde données
Voir
admin_logs.
✅ C'est prêt !
Appuyez sur Y (inventaire) → Bouton "Admin Menu"
📚 Documentation
⚙️ Configuration
Ajouter Permissionsune Commande
ÉditezÉditer config/Config_Admin.hpp pour:
Exemple::
class Commands {
list[] = {
{"HealMa Player"Commande", "life_fnc_adminHeal"life_fnc_maFonction", 3, "players"}
// Nom affiché | Fonction à appeler | Niveau min (1-5) | Onglet
};
};
Onglets Disponibles
"players" → Onglet Joueurs
"actions" → Onglet Actions
"objects" → Onglet Objets
"server" → Onglet Serveur
Dropdown / Boutons
Modifier dans Config_Admin.hpp:
class DropdownSettings {
maxButtonsBeforeDropdown = 0; // 0 = Toujours dropdown, 999 = Toujours boutons
};
📊🎯 RésuméNiveaux desAdmin
🔧 Compatibilité
🛠️ Troubleshooting
✅Le Terminémenu -ne Phases'ouvre 1: Interface Moderniséepas
Fichiers✅ CréésVérifier life_adminlevel >= 1
✅ Vérifier includes dans MasterHandler.hpp et Config_Master.hpp
Liste de joueurs vide
✅ Vérifier logs [ADMIN REFRESH] dans le RPT
✅ Tester hint str (12):count playableUnits);
Aucune commande affichée
✅ Vérifier que Config_Admin.hpp est bien inclus dans Config_Master.hpp
✅ Vérifier les logs [ADMIN MENU] pour voir si les commandes sont chargées
ClientPlus (admin_menu.Altis)de détails: CONFIG_ADMIN_GUIDE.md
📊 Fonctionnalités Implémentées
dialog/admin_menu_new.hpp-Interface moderne avec4 onglets
core/admin/fn_adminMenuNew.sqfcore/admin/fn_adminMenuTabChange.sqfcore/admin/fn_adminRefreshList.sqfcore/admin/fn_adminSearchPlayer.sqfcore/admin/fn_adminPlayerSelected.sqfcore/admin/fn_adminRepairObject.sqfcore/admin/fn_adminDeleteObject.sqfcore/admin/fn_adminQueryFinances.sqfcore/admin/fn_adminReceiveFinances.sqfcore/admin/fn_adminServerMsg.sqfcore/admin/fn_adminBroadcastMsg.sqfcore/admin/fn_adminViewLogs.sqfServeur (life_server):
14. Functions/Admin/fn_getPlayerFinances.sqf - Requête SQL SELECT cash, bankacc FROM players WHERE pid='...'
Fichiers Modifiés (6):
Client:
Functions.hppCfgRemoteExec.hppdialog/admin_menu_new.hppcore/admin/fn_adminMarkers.sqfcore/admin/fn_adminCompensate.sqfServeur:
6. life_server/config.cpp - Ajout classe Admin avec fn_getPlayerFinances
Fonctionnalités:
Corrections de Bugs:
ctrlDeletectrlShow falseDB_fnc_asyncCallspawnArchitecture Technique:
Infos Financières (Client → Client):
fn_adminPlayerSelectedlife_fnc_adminQueryFinancesCASHBANKscript_macros.hpplife_fnc_adminReceiveFinanceslife_fnc_numberTextServer Message (Admin → Tous):
life_fnc_adminBroadcastMsg🔄 En Cours - Phase 2: Système de Logging
Statut: Prévu mais non démarré
admin_logs📅 Prévu - Phase 3: Nouvelles Commandes
Fonctionnalités à développer:
🎯📄 Prochaines Étapes RecommandéesLicence
Libre
d'utilisation et de modification. Crédit apprécié mais non obligatoire.🙏 Crédits
TestsAuteur: ApprofondisProtoMehka
Framework: Altis Life 5.0 (AsYetUntitled)
Date: Octobre 2024 - ValiderJanvier toutes2025
📞 Support
[ADMIN MENU] et [ADMIN REFRESH]
DernièreVersion mise à jour:2.1 Octobre- 2024Janvier Auteur: ProtoMehka
Version: 2.02025