Skip to main content

Intégration Serveur

🔧 Guide d'Intégration Serveur - Admin Menu v2.01

Auteur: ProtoMehka Version: 2.01 Date: 10 Janvier 2025 Framework: Altis Life 5.0+


📖 Introduction

Ce guide détaille l'installation de la partie serveur du menu admin v2.0.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 └── fn_getAdminLogs.sqf          # Récupère les logs depuis laen 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 32 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)

Chemin : admin_menu.Altis/CfgRemoteExec.hpp

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 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

fn_getAdminLogs.sqf

Description : Récupère les logs admin depuis la base de données.

Paramètres :

    0: OBJECT - Admin qui demande les logs 1: 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 :

      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;
      

      Test 3: Récupération Logs

      En jeu :

        Ouvrir le menu admin Cliquer sur "View Logs" (onglet SERVEUR) Vérifier que les logs s'affichent

        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 :

        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

        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 :

        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)

        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éé
          ☐ 32 fichiers .sqf copiés
          ☐ config.cpp modifié (classe Admin ajoutée)ajoutée avec 2 fonctions)
          ☐ CfgRemoteExec.hpp modifié (32 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