# Projet

# 🎮 Admin Menu v2.1 - Altis Life

**Auteur**: ProtoMehka
**Version**: 2.1
**Date**: 2025-10-10
**Framework**: Altis Life 5.0+

---

## 📖 Description

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é.

![Version](https://img.shields.io/badge/version-2.1-blue)
![Framework](https://img.shields.io/badge/framework-Altis%20Life%205.0-green)
![Status](https://img.shields.io/badge/status-stable-success)

---

## ✨ Fonctionnalités

### 🎨 Interface Moderne
- Design épuré avec thème sombre et accents bleus
- Interface responsive avec SafeZone
- **4 onglets**: **Joueurs** / **Actions** / **Objets** / **Serveur**
- Navigation intuitive avec mise en surbrillance
- **Layout optimisé**: Liste joueurs compacte, grande carte, zone actions avec dropdown

### 🔍 Recherche
- Barre de recherche par nom de joueur
- Tri alphabétique automatique
- Code couleur par faction (Bleu=Cop, Vert=Civ, Orange=EMS)

### 🗺️ Mini-Map Interactive
- Affichage temps réel de la position du joueur sélectionné
- Centrage automatique sur le joueur
- Marqueur rouge avec nom
- Mise à jour toutes les 2 secondes
- **Grande taille** pour meilleure visibilité

### 📊 Informations Joueur
- Nom et Steam ID
- Faction avec code couleur
- Véhicule actuel
- Position GPS (coordonnées)
- Distance par rapport à l'admin
- **Argent (Cash et Banque)** - Récupération depuis la BDD via requête SQL

### ⚙️ Système de Permissions
- **Configuration centralisée** dans `config/Config_Admin.hpp`
- 5 niveaux admin (Support → Owner)
- **Menu déroulant dynamique** avec bouton EXÉCUTER
- Couleurs par niveau de permission
- Boutons affichés uniquement selon le niveau admin

### 🎯 Gestionnaire d'Objets
- **Détection d'items au sol** (WeaponHolder) dans un rayon personnalisable (1-50m)
- Affichage du contenu détaillé (armes, chargeurs, items, sacs)
- **Flèche 3D rouge** pointant vers l'item sélectionné
- **Suppression individuelle** d'items (les autres restent au sol)
- Suppression automatique du conteneur s'il devient vide

### 🔧 Logging
- Toutes les actions admin sont **loguées en base de données**
- Interface de visualisation des logs **supprimée** (logging backend préservé)
- Traçabilité complète des actions administratives

---

## 📁 Structure

```
admin_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_adminMenu.sqf               # 🎮 Contrôleur principal
    ├── fn_adminMenuTabChange.sqf      # 📑 Gestion onglets + dropdown
    ├── fn_adminRefreshList.sqf        # 📋 Liste joueurs
    ├── fn_adminSearchPlayer.sqf       # 🔍 Recherche
    ├── fn_adminPlayerSelected.sqf     # ℹ️ Infos + mini-map
    ├── fn_adminQueryFinances.sqf      # 💰 Requête infos financières
    ├── fn_adminReceiveFinances.sqf    # 💰 Réception infos financières
    ├── fn_adminRepairObject.sqf       # 🔧 Réparer objet
    ├── fn_adminDeleteObject.sqf       # 🗑️ Supprimer objet
    ├── fn_adminServerMsg.sqf          # 📢 Ouvrir dialog message serveur
    ├── fn_adminSendServerMsg.sqf      # 📢 Envoyer message serveur
    ├── fn_adminBroadcastMsg.sqf       # 📢 Broadcast message
    ├── fn_adminSpectate.sqf           # 👁️ Mode spectateur (TFAR compatible)
    ├── fn_adminTpHere.sqf             # 📍 Téléporter joueur vers admin
    ├── fn_adminFreeze.sqf             # ❄️ Geler joueur
    ├── fn_adminGodMode.sqf            # 🛡️ Mode invincibilité
    ├── fn_adminObjectManager.sqf      # 🎯 Ouvrir gestionnaire objets
    ├── fn_adminObjectRefresh.sqf      # 🔄 Scanner objets autour
    ├── fn_adminObjectSelect.sqf       # 🎯 Sélectionner objet (flèche 3D)
    └── fn_adminObjectDelete.sqf       # 🗑️ Supprimer item individuel

life_server/Functions/Admin/
├── fn_getPlayerFinances.sqf           # 💰 Requête SQL finances
└── fn_logAdminAction.sqf              # 📝 Logging actions admin en BDD
```

---

## 🚀 Installation Rapide

### 1️⃣ Copier les fichiers

**Client (admin_menu.Altis):**
```
✅ 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`):
```cpp
#include "Config_Admin.hpp"
```

### 3️⃣ Modifier Functions.hpp (Client)

```cpp
class Admin {
    file = "core\admin";
    // ... fonctions 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

```cpp
#include "admin_menu.hpp"
#include "server_message.hpp"
#include "object_manager.hpp"
```

### 5️⃣ Modifier config.cpp (Serveur)

```cpp
class Admin {
    file = "\life_server\Functions\Admin";
    class getPlayerFinances {};
    class logAdminAction {};
};
```

### 6️⃣ Modifier CfgRemoteExec.hpp (Client)

**Client functions:**
```cpp
F(life_fnc_adminQueryFinances,CLIENT)
F(life_fnc_adminReceiveFinances,CLIENT)
F(life_fnc_adminBroadcastMsg,CLIENT)
```

**Server functions:**
```cpp
F(TON_fnc_getPlayerFinances,SERVER)
F(TON_fnc_logAdminAction,SERVER)
```

### 7️⃣ Modifier player_inv.hpp (Client)

Bouton IDC 2021:
```cpp
onButtonClick = "closeDialog 0; createDialog ""life_admin_menu"";";
```

### 8️⃣ Base de données

Voir [INTEGRATION_DB.md](INTEGRATION_DB.md) pour la création de la table `admin_logs`.

### ✅ C'est prêt !

Appuyez sur `Y` → **Admin Menu**

---

## 📚 Documentation

| Document | Description |
|----------|-------------|
| **[INTEGRATION_CLIENT.md](INTEGRATION_CLIENT.md)** | 🖥️ Installation client (mission) |
| **[INTEGRATION_SERVER.md](INTEGRATION_SERVER.md)** | 🖥️ Installation serveur |
| **[INTEGRATION_DB.md](INTEGRATION_DB.md)** | 🗄️ Configuration base de données |
| **[CONFIG_ADMIN_GUIDE.md](CONFIG_ADMIN_GUIDE.md)** | 📖 Guide complet de configuration |
| **[CHANGELOG.md](CHANGELOG.md)** | 📝 Journal des modifications |

---

## ⚙️ Configuration

### Ajouter une Commande

Éditer `config/Config_Admin.hpp`:

```cpp
class Commands {
    list[] = {
        {"Ma Commande", "life_fnc_maFonction", 3, "players"}
        // Nom | Fonction | 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`:
```cpp
class DropdownSettings {
    maxButtonsBeforeDropdown = 0;  // 0 = Toujours dropdown, 999 = Toujours boutons
};
```

---

## 🎯 Niveaux Admin

| Niveau | Nom | Couleur | Permissions |
|--------|-----|---------|-------------|
| **1** | Support | 🟢 Vert | Infos joueurs |
| **2** | Modérateur | 🔵 Bleu clair | + Compensate |
| **3** | Admin | 🔵 Bleu | + Spectate, Teleport, Repair Object, **Object Manager** |
| **4** | Super Admin | 🟠 Orange | + TpHere, GodMode, Freeze, Delete Object, Server Message |
| **5** | Owner | 🔴 Rouge | Accès total (Debug Console) |

---

## 🔧 Compatibilité

- ✅ Altis Life 5.0 (AsYetUntitled)
- ✅ Frameworks Altis Life compatibles
- ✅ Arma 3 (dernière version)
- ⚠️ Requiert adaptation mineure pour frameworks custom

---

## 🛠️ Troubleshooting

### Le menu ne s'ouvre pas
✅ Vé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 (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

**Plus de détails**: [CONFIG_ADMIN_GUIDE.md](CONFIG_ADMIN_GUIDE.md)

---

## 📊 Fonctionnalités Implémentées

- [x] Interface moderne avec dropdown
- [x] Configuration centralisée (Config_Admin.hpp)
- [x] Server Message broadcast
- [x] Repair/Delete Object
- [x] Informations financières via SQL
- [x] Logging actions admin en BDD
- [x] Layout optimisé (liste compacte, grande carte)
- [x] Textes agrandis pour meilleure lisibilité
- [x] **Mode spectateur compatible TFAR** (détection automatique)
- [x] **Gestionnaire d'objets** avec suppression individuelle d'items
- [x] Corrections bugs (TP Here, Freeze, God Mode)

---

## 📄 Licence

Libre d'utilisation et de modification.
Crédit apprécié mais non obligatoire.

---

## 🙏 Crédits

**Auteur**: ProtoMehka
**Framework**: Altis Life 5.0 (AsYetUntitled)
**Date**: Octobre 2024 - Janvier 2025

---

**Version 2.1** - Octobre 2025