Intégration Serveur
🔧 Guide d'Intégration Serveur - Admin Menu v2.1
Auteur: ProtoMehka Version: 2.1 Date: 10 Janvier 2025 Framework: Altis Life 5.0+
📖 Introduction
Ce guide détaille l'installation de la partie serveur du menu admin v2.1. Il couvre :
- Les fonctions serveur pour les requêtes SQL
- Le système de logging des actions admin
- La configuration du serveur
- Les permissions remoteExec
Prérequis :
- Serveur Altis Life fonctionnel avec extDB3
- Accès aux fichiers
life_server - Base de données MySQL/MariaDB configurée
📁 Structure des Fichiers Serveur
life_server/
└── Functions/
└── Admin/
├── fn_getPlayerFinances.sqf # Récupère cash/banque d'un joueur
└── fn_logAdminAction.sqf # Enregistre les actions admin en BDD
🚀 Installation
1️⃣ Créer le Dossier Admin
Si le dossier n'existe pas déjà :
life_server/Functions/Admin/
2️⃣ Copier les Fichiers
Copiez les 2 fichiers .sqf dans life_server/Functions/Admin/ :
✅ fn_getPlayerFinances.sqf
✅ fn_logAdminAction.sqf
3️⃣ Modifier config.cpp
Chemin : life_server/config.cpp
Localiser la classe TON_System :
class TON_System {
tag = "TON";
// ... autres classes existantes ...
};
Ajouter cette classe DANS TON_System :
class Admin {
file = "\life_server\Functions\Admin";
class getPlayerFinances {};
class logAdminAction {};
};
Résultat final :
class TON_System {
tag = "TON";
// Autres classes...
class MySQL_Database {
// ...
};
class Admin {
file = "\life_server\Functions\Admin";
class getPlayerFinances {};
class logAdminAction {};
};
};
4️⃣ Modifier CfgRemoteExec.hpp (Client)
Ajouter dans la section /* Server only functions */ :
F(TON_fnc_getPlayerFinances,SERVER)
F(TON_fnc_logAdminAction,SERVER)
Exemple complet :
/* Server only functions */
F(DB_fnc_insertRequest,SERVER)
F(DB_fnc_queryRequest,SERVER)
F(DB_fnc_updatePartial,SERVER)
F(DB_fnc_updateRequest,SERVER)
F(TON_fnc_getPlayerFinances,SERVER)
F(TON_fnc_logAdminAction,SERVER)
F(life_fnc_jailSys,SERVER)
// ... autres fonctions serveur
📋 Détail des Fonctions
fn_getPlayerFinances.sqf
Description : Récupère le cash et la banque d'un joueur depuis la base de données.
Paramètres :
0: STRING- PID du joueur cible1: OBJECT- Admin qui demande les infos
Fonctionnement :
- Reçoit une demande du client (admin)
- Exécute :
SELECT cash, bankacc FROM players WHERE pid='...' - Envoie les résultats au client via
remoteExecCall
Exemple de requête SQL :
SELECT cash, bankacc FROM players WHERE pid='76561198012345678'
fn_logAdminAction.sqf
Description : Enregistre une action admin dans la base de données.
Paramètres :
0: STRING- PID de l'admin1: STRING- Nom de l'admin2: STRING- Commande exécutée3: STRING- Cible (optionnel, nom du joueur ciblé)4: STRING- Détails additionnels (optionnel)
Fonctionnement :
- Reçoit les données d'une action admin
- Échappe les guillemets pour la sécurité SQL
- Insère dans la table
admin_logs
Exemple de requête SQL :
INSERT INTO admin_logs (pid, player_name, command, target, details)
VALUES ('76561198012345678', 'Admin Name', 'TELEPORT', NULL, 'X:3612 Y:13138')
Gestion des valeurs NULL :
- Si
targetoudetailssont vides, ils sont insérés commeNULLet non comme chaînes vides
🔐 Sécurité
Protection SQL Injection
Les fonctions utilisent regexReplace pour échapper les guillemets :
_adminName = _adminName regexReplace ["'", "''"];
_target = _target regexReplace ["'", "''"];
_details = _details regexReplace ["'", "''"];
_command = _command regexReplace ["'", "''"];
Validation des Données
Vérifications avant exécution :
- PID et commande non vides
- Objet admin valide
- Limite de résultats respectée
🧪 Tests
Test 1: Récupération Finances
En jeu :
RPT Serveur :
"[ADMIN] fn_getPlayerFinances called - PID: 76561198012345678, Admin: civ_1"
"[ADMIN] Executing query: SELECT cash, bankacc FROM players WHERE pid='76561198012345678'"
"[ADMIN] Query result: [5000,50000]"
"[ADMIN] Sending to admin - PID: 76561198012345678, Cash: 5000, Bank: 50000"
Test 2: Logging Action
En jeu :
- Utiliser une commande admin (Teleport, GodMode, etc.)
RPT Serveur :
"[ADMIN LOGS] Logged action - Admin: PlayerName (76561198012345678), Command: TELEPORT, Target: "
Vérifier en BDD :
SELECT * FROM admin_logs ORDER BY execution_time DESC LIMIT 5;
🐛 Troubleshooting
Erreur: "Protocol Error: Error MariaDBQueryException"
Cause : Problème avec la requête SQL (syntaxe, colonne inexistante, etc.)
Solution :
- Vérifier que la table
admin_logsexiste - Vérifier que toutes les colonnes existent (voir INTEGRATION_DB.md)
- Vérifier les logs serveur pour voir la requête exacte
Logs non enregistrés
Vérifications :
- Table
admin_logsexiste en BDD TON_fnc_logAdminActiondans CfgRemoteExec.hpp- Pas d'erreur SQL dans le RPT serveur
Finances ne s'affichent pas
Vérifications :
- Table
playerscontient les colonnescashetbankacc TON_fnc_getPlayerFinancesdans CfgRemoteExec.hpp- Le PID du joueur existe en BDD
📊 Performance
Optimisation des Requêtes
Les index sont créés automatiquement (voir INTEGRATION_DB.md) :
- Index sur
pid(admin) - Index sur
command(type d'action) - Index sur
execution_time(tri chronologique)
✅ Checklist d'Installation
☐ Dossier life_server/Functions/Admin créé
☐ 2 fichiers .sqf copiés
☐ config.cpp modifié (classe Admin ajoutée avec 2 fonctions)
☐ CfgRemoteExec.hpp modifié (2 fonctions serveur ajoutées)
☐ Table admin_logs créée en BDD (voir INTEGRATION_DB.md)
☐ Serveur compilé sans erreur
☐ Tests effectués avec succès
📞 Support
Problèmes fréquents :
- 🔍 Vérifier les RPT serveur pour les erreurs SQL
- 🔍 Vérifier que extDB3 est bien configuré
- 🔍 Vérifier les permissions dans CfgRemoteExec.hpp
Documentation :
- INTEGRATION_CLIENT.md - Partie client
- INTEGRATION_DB.md - Partie base de données
- README.md - Vue d'ensemble
🆕 Nouveautés v2.1
Fonctionnalités Utilisant le Serveur
Object Manager :
- Logging des suppressions d'items :
DELETE_ITEM | Type: weapon | Class: hgun_Rook40_F - Utilise
TON_fnc_logAdminActionpour tracer les suppressions
Actions Admin avec Logging Renforcé :
- Toutes les commandes admin sont loguées via
TON_fnc_logAdminAction - Logs stockés dans la table
admin_logsavec timestamp automatique
Spectate Mode :
- Compatible TFAR (détection automatique)
- Logging de l'action spectate avec nom de la cible
Pas de Modification Serveur Requise
Les fonctions serveur v2.0 sont 100% compatibles avec v2.1 :
- ✅
fn_getPlayerFinances.sqf- Inchangé - ✅
fn_logAdminAction.sqf- Inchangé
Aucune modification côté serveur n'est nécessaire pour migrer de v2.0 vers v2.1.
Installation serveur terminée ! 🎉
Prochaine étape : Configuration de la base de données
Version 2.1 - 10 Janvier 2025