Intégration Serveur
🔧 Guide d'Intégration Serveur - Admin Menu v2.0
Auteur: ProtoMehka Version: 2.0 Framework: Altis Life 5.0+
📖 Introduction
Ce guide détaille l'installation de la partie serveur du menu admin v2.0. Il couvre :
- Les fonctions serveur pour les requêtes SQL
- 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
└── fn_getAdminLogs.sqf # Récupère les logs depuis la 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 3 fichiers .sqf dans life_server/Functions/Admin/ :
✅ fn_getPlayerFinances.sqf
✅ fn_logAdminAction.sqf
✅ fn_getAdminLogs.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 {};
class getAdminLogs {};
};
Résultat final :
class TON_System {
tag = "TON";
// Autres classes...
class MySQL_Database {
// ...
};
class Admin {
file = "\life_server\Functions\Admin";
class getPlayerFinances {};
class logAdminAction {};
class getAdminLogs {};
};
};
4️⃣ Modifier CfgRemoteExec.hpp (Client)
Ajouter dans la section /* Server only functions */ :
F(TON_fnc_getPlayerFinances,SERVER)
F(TON_fnc_logAdminAction,SERVER)
F(TON_fnc_getAdminLogs,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(TON_fnc_getAdminLogs,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
fn_getAdminLogs.sqf
Description : Récupère les logs admin depuis la base de données.
Paramètres :
0: OBJECT- Admin qui demande les logs1: NUMBER- Nombre de logs (défaut: 50, max: 200)2: STRING- Filtre par commande (optionnel)3: STRING- Filtre par PID admin (optionnel)
Fonctionnement :
- Construit une requête SELECT avec filtres optionnels
- Limite à 200 résultats maximum
- Envoie les résultats au client
Exemple de requête SQL :
SELECT id, pid, player_name, target, execution_time, command, details
FROM admin_logs
ORDER BY execution_time DESC
LIMIT 50
Avec filtre :
SELECT id, pid, player_name, target, execution_time, command, details
FROM admin_logs
WHERE command = 'TELEPORT'
ORDER BY execution_time DESC
LIMIT 50
🔐 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;
Test 3: Récupération Logs
En jeu :
RPT Serveur :
"[ADMIN LOGS] Query: SELECT id, pid, player_name, target, execution_time, command, details FROM admin_logs ORDER BY execution_time DESC LIMIT 50"
"[ADMIN LOGS] Query result: 5 rows"
🐛 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
Erreur: "Invalid number in expression"
Cause : Le parsing automatique de extDB3 essaie d'interpréter les données comme du code
Solution : Déjà corrigé dans fn_getAdminLogs.sqf (pas de 3ème paramètre true)
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)
Limitation des Résultats
- Maximum 200 logs par requête
- Tri par date décroissante (plus récents d'abord)
- Filtrage optionnel pour réduire les résultats
✅ Checklist d'Installation
☐ Dossier life_server/Functions/Admin créé
☐ 3 fichiers .sqf copiés
☐ config.cpp modifié (classe Admin ajoutée)
☐ CfgRemoteExec.hpp modifié (3 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_GUIDE.md - Partie client
- INTEGRATION_DB.md - Partie base de données
- README.md - Vue d'ensemble
Installation serveur terminée ! 🎉
Prochaine étape : Configuration de la base de données