Aller au contenu

veafServerHook — Hook serveur VEAF

Fichier: VEAF-Server-hook.lua | Emplacement: Saved Games/<serveur>/Scripts/Hooks/


Objectif

Hook DCS (environnement GameGUI) tournant sur un serveur dédié. Il :

  • écoute le chat, exécute ses propres commandes serveur (/send, /pause, /restart…) et relaie toute autre commande /module (/secu elevate, /alias…) à la mission via veafRemote / veafSecurity ;
  • charge la liste des pilotes (niveaux de permission par UCID) ;
  • redémarre optionnellement le serveur quand il est inactif (opt-in) ;
  • pousse optionnellement de la télémétrie vers un serveur d'API (opt-in).

Ce n'est pas un module de mission : il n'est pas injecté dans le .miz, il se dépose dans le dossier Scripts/Hooks/ du serveur et se charge au démarrage de DCS.


Installation

  1. Déposer VEAF-Server-hook.lua dans Saved Games/<serveur>/Scripts/Hooks/.
  2. Déposer veaf-pilots.txt dans la racine Saved Games/ (un seul fichier partagé sert tous les serveurs par défaut) et l'éditer. Pour un fichier propre à un serveur, définir pilotsDir (voir ci-dessous).
  3. Ajouter un VEAF-specific-server-hook.lua dans le même dossier pour la configuration propre au serveur (voir ci-dessous).
  4. Redémarrer le serveur : le hook est chargé au démarrage de DCS ; recharger la mission ne suffit pas.

Ordre de chargement DCS : les fichiers de Scripts/Hooks/ sont chargés par ordre alphabétique. VEAF-Server-hook.lua se charge avant VEAF-specific-server-hook.lua, qui peut donc surcharger les réglages ci-dessous avant le premier événement.


Configuration (via le specific-hook)

Le VEAF-Server-hook.lua est générique : ses valeurs par défaut conviennent à un serveur simple. Tout ce qui est propre à un serveur va dans VEAF-specific-server-hook.lua :

veafServerHook.enableAutoRestart     = false  -- watchdog de redémarrage + commandes /restart /restartnow /halt
veafServerHook.enableBufferingSocket = false  -- télémétrie vers un serveur d'API (module natif BufferingSocket)
veafServerHook.pilotsDir             = nil     -- dossier du fichier pilotes ; défaut = racine Saved Games/ partagée
  • enableAutoRestart (défaut false) : active le redémarrage automatique du serveur inactif et les commandes chat restart / restartnow / halt. À laisser désactivé si les redémarrages sont gérés par un outil externe (ex. DCSServerBot).
  • enableBufferingSocket (défaut false) : active la télémétrie. Le module natif BufferingSocket est chargé de façon défensive : s'il est absent, la télémétrie est désactivée automatiquement et le hook continue de fonctionner (aucun crash).
  • pilotsDir (défaut nil → racine Saved Games/ partagée, un niveau au-dessus du dossier serveur) : tous les serveurs VEAF lisent le même veaf-pilots.txt sans configuration propre. Le pointer ailleurs (p. ex. le dossier du hook) pour un serveur autonome avec sa propre liste.

Le specific-hook porte aussi serverName et serverBotChannel (injectés dans la mission).


Fichier des pilotes (veaf-pilots.txt)

Table Lua indexée par UCID, avec un niveau de permission par pilote :

pilots =
{
  ["<ucid>"] = { name = "Nom", level = 99 },
  ...
}

Grille des niveaux (croissant) :

Niveau Peut…
0 envoyer des messages (/send)
1 relayer des commandes VEAF vers la mission (/alias, /atis, /secu elevate… — chaque module applique ensuite son propre contrôle ; /secu login et /secu logout ne font plus que répondre qu'il n'y a plus de connexion globale)
10 /pause, et /restart, /halt (si enableAutoRestart)
30 /restartnow
50 /haltnow
90 /code (exécution de code arbitraire)
99 administrateur

Mise à jour

Remplacer VEAF-Server-hook.lua par la nouvelle version, conserver le VEAF-specific-server-hook.lua et le veaf-pilots.txt existants, puis redémarrer le serveur.

Après 6.25, le hook envoie le niveau du pilote à la mission à chaque changement de slot. Avec un hook plus ancien, une mission rechargée pendant qu'un pilote reste connecté ne connaît pas son niveau tant qu'il n'a tapé aucune commande de tchat : le menu radio le traite comme un pilote de niveau 0, et le journal de la mission l'écrit (took [...] with no known level).