Projet
Projet de Refonte du Menu Admin - 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
- Interface:
admin_menu.Altis/dialog/admin_menu.hpp(IDD 2900) - Contrôleur:
admin_menu.Altis/core/admin/fn_adminMenu.sqf - Ouverture:
admin_menu.Altis/core/pmenu/fn_p_openMenu.sqf - Inventaire:
admin_menu.Altis/dialog/player_inv.hpp - Configuration:
admin_menu.Altis/Functions.hpp(déclarations fonctions) - Remote Exec:
admin_menu.Altis/CfgRemoteExec.hpp(whitelist sécurité)
Fonctionnalités Existantes (Framework 5.0 de base)
| Fonction | Fichier | Niveau Admin Requis | Type | Logging Actuel |
|---|---|---|---|---|
fn_adminGetID.sqf |
Retiré (infos affichées auto) | |||
fn_adminQuery.sqf |
Retiré (infos affichées auto) | |||
| Compensate | fn_adminCompensate.sqf |
2+ | Client only | ❌ Non |
| Spectate | fn_adminSpectate.sqf |
3+ | Client only | ❌ Non |
| Teleport | fn_adminTeleport.sqf |
3+ | Client only | ❌ Non |
| TP Here | fn_adminTpHere.sqf |
4+ | Client→Client | ❌ Non |
| God Mode | fn_adminGodMode.sqf |
4+ | Client only | ❌ Non |
| Freeze | fn_adminFreeze.sqf |
4+ | Client→Client | ❌ Non |
| Markers | fn_adminMarkers.sqf |
4+ | Client only | ✅ Corrigé (spawn wrapper) |
| Debug | fn_adminDebugCon.sqf |
5+ | Client only | ❌ Non |
Nouvelles Fonctionnalités Ajoutées v2.0
| Fonction | Fichier | Niveau Admin Requis | Type | Status |
|---|---|---|---|---|
| Repair Object | fn_adminRepairObject.sqf |
3+ | Client only | ✅ Ajouté |
| Delete Object | fn_adminDeleteObject.sqf |
4+ | Client only | ✅ Ajouté |
| Query Finances | fn_adminQueryFinances.sqf |
1+ | Client→Client | ✅ Ajouté |
| Receive Finances | fn_adminReceiveFinances.sqf |
1+ | Client only | ✅ Ajouté |
Niveaux 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É
- Design moderne avec dégradés et transparence
- Organisation en onglets (Joueurs / Actions / Objets / Serveur)
- Zone de recherche de joueurs avec bouton "RECHERCHER"
- Affichage amélioré des informations joueur (Steam ID, faction, véhicule, position, distance, cash, banque)
- Mini-map interactive avec mise à jour en temps réel
- Marqueurs sur la map pour le joueur sélectionné
- Responsive design avec SafeZone
- Système de requête financière via remoteExec
- Suppression des boutons "Get ID" et "Query Player" (infos déjà affichées automatiquement)
2. Nouvelles Fonctionnalités
Gestion Joueurs
- Kick Player - Expulser un joueur
- Ban Player - Bannir un joueur (temporaire/permanent)
- Heal Player - Soigner un joueur
- Revive Player - Réanimer un joueur
- Strip Weapons - Retirer les armes
- Give Money - Donner de l'argent
- Set Admin Level - Modifier le niveau admin
- Teleport To Player - Se téléporter vers un joueur
- Spectate Camera - Amélioration de la caméra spectateur
Gestion Objets/Véhicules
- Repair Object - Réparer objet ciblé (cursorObject)
- Delete Object - Supprimer objet ciblé (cursorObject)
- Refuel Vehicle - Ravitailler véhicule
- Flip Vehicle - Retourner véhicule
- List Player Vehicles - Voir véhicules d'un joueur
- Spawn Vehicle - Faire apparaître un véhicule
Serveur
- Server Messages - Messages serveur personnalisés
- Restart Warnings - Avertissements de restart
- Admin Chat - Chat entre admins
- View Admin Logs - Consulter les logs in-game
- Server Statistics - Stats serveur en temps réel
Utilitaires
- Weather Control - Contrôle météo
- Time Control - Contrôle heure
- Cleanup Dead - Nettoyer les corps/véhicules
- Toggle Invisibility - Invisibilité admin
- No Recoil - Désactiver le recul
3. Système de Logging
Base de Données
Table admin_logs avec:
- ID de log (auto-increment)
- Timestamp
- Admin (Steam ID + nom)
- Action effectuée
- Cible (joueur/véhicule)
- Détails (JSON pour données supplémentaires)
- IP admin
- Serveur
Actions Loggées
- Toutes les actions admin (kick, ban, tp, godmode, etc.)
- Modifications de base de données
- Compensations données
- Changements de niveau admin
- Messages serveur envoyés
🗄️ 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
Dialogs ✅ CRÉÉ
Fichiers à Créer (Phases Futures)
Server 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
Existants
🚀 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.sqf: Donne de l'argent sans tracefn_adminFreeze.sqf: Freeze joueur sans logfn_adminGodMode.sqf: Active godmode localement uniquementfn_adminTeleport.sqf: Téléportation non tracée
-
Architecture Client-Side: La majorité des fonctions sont côté client uniquement
- Pas de validation serveur
- Risque de manipulation
- Pas de centralisation des logs
-
Communication Client↔Server:
- Utilise
remoteExecCallpour les fonctions critiques - Sécurisé via
CfgRemoteExec.hpp(whitelist) - Fonctions serveur limitées (TON_fnc_getID, TON_fnc_player_query)
- Utilise
-
Base de Données:
- Table
admin_logscréée dansaltislife.sql✅ - MAIS: Aucune fonction serveur pour y écrire ❌
- Aucune fonction côté client pour déclencher le logging ❌
- Table
📊 Progression
Phase 1: Analyse & Infrastructure ✅
- Analyse structure existante
- Identification de toutes les commandes admin (10 fonctions)
- Audit système de logging (résultat: aucun logging)
- Documentation architecture actuelle
- Création fonction de logging générique serveur
- Création fonction wrapper logging client
- Configuration CfgRemoteExec pour nouvelles fonctions
Phase 2: Implémentation Logging Prioritaire 🔥
- Fonction serveur:
TON_fnc_logAdminAction(life_server) - Fonction client:
life_fnc_adminLog(wrapper) - Modifier toutes les 10 fonctions existantes pour logger
- Tester logging en DB pour chaque commande
Phase 3: Interface Modernisée ✅
- Design nouveau dialog admin_menu_new.hpp
- Création fn_adminMenuNew.sqf (contrôleur principal)
- Système d'onglets (Joueurs / Actions / Véhicules / Serveur)
- Recherche joueurs avec filtres (Cop/Civ/EMS/All)
- Affichage position joueur sur mini-map en temps réel
- Configuration centralisée des permissions (Config_Admin.hpp)
- Interface responsive avec SafeZone
- Design moderne avec couleurs par faction
- Boutons dynamiques selon admin_level
Phase 4: Nouvelles Fonctionnalités ⏳
- Gestion joueurs (kick, ban, heal, revive, etc.)
- Gestion véhicules (repair, delete, spawn)
- Contrôles serveur (messages, restart warnings)
- Utilitaires admin (invisibility, weather, time)
Phase 5: Visualisation Logs ⏳
- Interface visualisation logs in-game
- Filtres par admin/action/date
- Export logs
- Dashboard stats
Phase 6: Tests & Déploiement ⏳
- Tests unitaires
- Tests en condition réelle
- Documentation utilisateur
- Formation admins
⚠️ Notes Importantes
Sécurité
- ✅ Toujours vérifier
life_adminlevelavant exécution - ✅ Utiliser CfgRemoteExec pour whitelist les fonctions
- ✅ Logger TOUTES les actions admin sensibles
- ✅ Valider inputs utilisateur (SQL injection, etc.)
- ✅ Chiffrer les IDs dans les logs si nécessaire
Performance
- ⚡ Limiter fréquence refresh liste joueurs
- ⚡ Pagination pour les logs (max 100 par page)
- ⚡ Cache pour requêtes fréquentes
- ⚡ Async pour requêtes DB lourdes
Compatibilité
- 🔄 Maintenir compatibilité ascendante
- 🔄 Tester avec versions Arma 3 différentes
- 🔄 Vérifier compatibilité extDB3
- 🔄 Documenter breaking changes
📚 Ressources
Documentation
Outils
- Arma 3 Tools (Publisher, Font Config, etc.)
- GUI Editor in-game
- extDB3 Latest version
- MySQL Workbench
🔄 Changelog
Version 1.0.0 - En développement
- ✨ Nouvelle interface moderne
- ✨ 15+ nouvelles fonctionnalités admin
- ✨ Système de logging complet en BDD
- ✨ Viewer de logs in-game
- ✨ Organisation en onglets
- 🐛 Corrections bugs existants
📋 Résumé Exécutif
État Actuel
- ✅ Framework Altis Life 5.0 (AsYetUntitled) installé
- ✅ 10 fonctions admin de base fonctionnelles
- ✅ Table
admin_logscréée en base de données - ✅ NOUVELLE INTERFACE ADMIN v2.0 créée - Moderne, onglets, mini-map, recherche
- ✅ Système de configuration des permissions centralisé
- ❌ Logging non implémenté - prochaine étape prioritaire
Priorités
- 🔥 URGENT: Implémenter le système de logging pour surveiller les modos
- ✅ TERMINÉ: Interface modernisée avec onglets, recherche, mini-map ✨
- ✨ EN COURS: Ajouter nouvelles fonctionnalités (kick, ban, heal, etc.)
Prochaines Étapes Recommandées
- Créer fonction serveur de logging (
TON_fnc_logAdminAction) - Créer wrapper client (
life_fnc_adminLog) - Modifier les 10 fonctions existantes pour appeler le logger
- Tester le système de logging
- Designer nouvelle interface moderne
Dernière mise à jour: 2025-10-04 Développeur: ProtoMehka Framework: Altis Life 5.0 (AsYetUntitled) Statut: Phase 3 (Interface) ✅ Complétée | Phase 2 (Logging) ⏳ À faire
🎉 NOUVEAUTÉS - Interface Admin v2.0
✨ Fonctionnalités Implémentées
Interface Moderne:
- Design épuré avec thème sombre et accents bleus
- Interface responsive avec SafeZone
- Bouton de fermeture (X) rouge intuitif
- Couleurs par faction (Bleu=Cop, Vert=Civ, Orange=EMS)
Système d'Onglets:
- 4 onglets: Joueurs / Actions / Véhicules / Serveur
- Navigation intuitive avec mise en surbrillance
- Boutons dynamiques selon l'onglet actif
- Permissions filtrées par admin_level automatiquement
Liste des Joueurs:
- Affichage en temps réel de tous les joueurs connectés
- Tri alphabétique automatique
- Code couleur par faction
- Compteur de joueurs
Recherche et Filtres:
- Barre de recherche par nom de joueur
- 4 filtres rapides: TOUS / COP / CIV / EMS
- Bouton de recherche avec icône 🔍
- Filtrage instantané
Informations Joueur:
- Nom et Steam ID
- Faction avec code couleur
- Véhicule actuel ou "À pied"
- Position GPS (coordonnées)
- Distance par rapport à l'admin
- Infos financières (en cours de développement)
Mini-Map Interactive:
- Affichage 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 2 secondes)
- Zoom et déplacement
- Marqueur s'efface après 30 secondes
Gestion des Permissions:
- Configuration centralisée dans
Config_Admin.hpp - Facile à modifier sans toucher au code
- Couleurs par niveau admin:
- 🟢 Vert = Support (niveau 1)
- 🔵 Bleu clair = Modérateur (niveau 2)
- 🔵 Bleu = Admin (niveau 3)
- 🟠 Orange = Super Admin (niveau 4)
- 🔴 Rouge = Owner (niveau 5)
📁 Fichiers Créés
Configuration:
config/Config_Admin.hpp- Configuration des permissions et commandes
Interface:
Fonctions:
core/admin/fn_adminMenuNew.sqf- Contrôleur principalcore/admin/fn_adminMenuTabChange.sqf- Gestion des ongletscore/admin/fn_adminRefreshList.sqf- Rafraîchissement liste joueurscore/admin/fn_adminSearchPlayer.sqf- Recherche de joueurscore/admin/fn_adminFilterPlayers.sqf- Filtres par factioncore/admin/fn_adminPlayerSelected.sqf- Sélection joueur + mini-map
Fichiers Modifiés:
Functions.hpp- Déclaration des nouvelles fonctionsdialog/MasterHandler.hpp- Inclusion du nouveau dialogdialog/player_inv.hpp- Bouton admin menu mis à jourcore/pmenu/fn_p_openMenu.sqf- Commentaires ajoutés
🚀 Comment Utiliser
⚙️ Configuration des Permissions
Éditez config/Config_Admin.hpp pour:
- Ajouter/retirer des commandes
- Modifier les niveaux requis
- Réorganiser les onglets
- Personnaliser les couleurs
Exemple:
{"Heal Player", "life_fnc_adminHeal", 3, "players"}
// Nom affiché | Fonction à appeler | Niveau min | Onglet
📊 Résumé des Modifications v2.0 (Octobre 2024)
✅ Terminé - Phase 1: Interface Modernisée
Fichiers Créés (12):
Serveur (life_server):
14. Functions/Admin/fn_getPlayerFinances.sqf - Requête SQL SELECT cash, bankacc FROM players WHERE pid='...'
Fichiers Modifiés (6):
Client:
Functions.hpp- Ajout de 11 déclarations de fonctionsCfgRemoteExec.hpp- Autorisation remoteExec (3 client, 1 serveur)dialog/admin_menu_new.hpp- Onglet "VEHICULES" → "OBJETS", ajustement hauteur liste joueurscore/admin/fn_adminMarkers.sqf- Correction erreur "Suspending not allowed" (spawn wrapper)core/admin/fn_adminCompensate.sqf- Correction erreur "Suspending not allowed" (spawn wrapper)
Serveur:
6. life_server/config.cpp - Ajout classe Admin avec fn_getPlayerFinances
Fonctionnalités:
- ✅ Interface à 4 onglets: Joueurs / Actions / Objets / Serveur
- ✅ Recherche de joueurs en temps réel avec bouton "RECHERCHER"
- ✅ Mini-map interactive avec marqueur rouge et mise à jour auto (2s)
- ✅ Affichage infos joueur: Nom, Steam ID, Faction, Véhicule, Position, Distance
- ✅ Système de requête financière - Cash et Banque récupérés via remoteExec client→client
- ✅ Boutons dynamiques selon niveau admin (couleurs par niveau)
- ✅ Suppression des boutons redondants "Get ID" et "Query Player"
- ✅ Actions sur objets: Repair Object (niveau 3) et Delete Object (niveau 4)
- ✅ Server Message (niveau 4) - Envoyer messages broadcast à tous les joueurs
- ✅ View Logs (niveau 3) - Placeholder pour consultation logs admin (BDD à implémenter)
- ✅ Correction bugs: superposition boutons, affichage recherche, hauteur liste, markers
Corrections de Bugs:
- ✅ Bouton recherche invisible → Changé emoji en texte "RECHERCHER" + largeur 0.07
- ✅ Boutons superposés au changement d'onglet →
ctrlDeleteau lieu dectrlShow false - ✅ Infos financières ne s'affichaient jamais → Requête SQL serveur avec
DB_fnc_asyncCall - ✅ Liste joueurs trop haute → Position Y: 0.27→0.28, Hauteur: 0.5→0.48
- ✅ Erreur "Suspending not allowed" dans fn_adminMarkers → Wrapper
spawn
Architecture Technique:
Infos Financières (Client → Client):
- Admin → Joueur cible:
fn_adminPlayerSelectedenvoie requête vialife_fnc_adminQueryFinances - Joueur cible: Lit ses variables locales
CASHetBANK(macroscript_macros.hpp) - Joueur cible → Admin: Renvoie via
life_fnc_adminReceiveFinances - Admin: Affiche avec formatage
life_fnc_numberText
Server Message (Admin → Tous):
- Admin: Ouvre dialog BIS_fnc_guiMessage pour saisir le message
- Admin → Tous: Broadcast via
life_fnc_adminBroadcastMsg(remoteExec RCLIENT) - Tous les clients: Affichage titleText + systemChat + son notification
🔄 En Cours - Phase 2: Système de Logging
Statut: Prévu mais non démarré
- Table
admin_logsen base de données - Fonction générique de logging
- Logging automatique de toutes les actions admin
- Interface de consultation des logs in-game
📅 Prévu - Phase 3: Nouvelles Commandes
Fonctionnalités à développer:
- Kick/Ban joueurs
- Heal/Revive joueurs
- Gestion véhicules avancée (spawn, refuel, flip)
- Messages serveur ✅ Implémenté
- Contrôle météo/heure
- Admin chat
- View Logs (placeholder) ✅ Base créée
🎯 Prochaines Étapes Recommandées
- Tests Approfondis - Valider toutes les fonctionnalités sur serveur de test
- Logging System - Implémenter le système de logs en base de données
- Nouvelles Commandes - Ajouter kick, ban, heal, revive
- Documentation - Créer guide utilisateur pour admins
- Optimisation - Vérifier performances avec 50+ joueurs
Dernière mise à jour: Octobre 2024 Auteur: ProtoMehka Version: 2.0