Skip to main content

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)

Chemin : admin_menu.Altis/CfgRemoteExec.hpp

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 cible
  • 1: OBJECT - Admin qui demande les infos

Fonctionnement :

  1. Reçoit une demande du client (admin)
  2. Exécute : SELECT cash, bankacc FROM players WHERE pid='...'
  3. 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'admin
  • 1: STRING - Nom de l'admin
  • 2: STRING - Commande exécutée
  • 3: STRING - Cible (optionnel, nom du joueur ciblé)
  • 4: STRING - Détails additionnels (optionnel)

Fonctionnement :

  1. Reçoit les données d'une action admin
  2. Échappe les guillemets pour la sécurité SQL
  3. 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 target ou details sont vides, ils sont insérés comme NULL et 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 :

  1. Ouvrir le menu admin
  2. Sélectionner un joueur
  3. Vérifier que Cash et Banque s'affichent

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 :

  1. 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 :

  1. Vérifier que la table admin_logs existe
  2. Vérifier que toutes les colonnes existent (voir INTEGRATION_DB.md)
  3. Vérifier les logs serveur pour voir la requête exacte

Logs non enregistrés

Vérifications :

  1. Table admin_logs existe en BDD
  2. TON_fnc_logAdminAction dans CfgRemoteExec.hpp
  3. Pas d'erreur SQL dans le RPT serveur

Finances ne s'affichent pas

Vérifications :

  1. Table players contient les colonnes cash et bankacc
  2. TON_fnc_getPlayerFinances dans CfgRemoteExec.hpp
  3. 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 :


🆕 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_logAdminAction pour 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_logs avec 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