2 points par GN⁺ 2026-03-08 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Projet open source qui réimplémente entièrement un serveur Ultima Online en .NET 10 et C#, avec un objectif de hautes performances et d’exécution stable grâce à l’AOT (compilation anticipée)
  • Il dispose d’une architecture modulaire, d’un traitement précis de la boucle de jeu et d’un outillage de paquets, tout en prenant en charge les interactions en jeu et le contrôle de l’IA via des scripts Lua
  • Il fournit une infrastructure serveur complète, incluant un système de persistance basé sur MessagePack-CSharp, le réseau TCP, des endpoints d’administration HTTP, ainsi que Docker et une stack de monitoring
  • Des fonctionnalités d’extension par script comme les commandes basées sur Lua, l’IA des PNJ, les effets visuels et le système d’UI (Gump) permettent de mettre en œuvre un gameplay personnalisable
  • Le projet est publié en open source et est considéré comme un framework serveur .NET moderne utile pour le développement de serveurs MMO haute performance et la recherche sur la restauration de jeux legacy

Aperçu du projet

  • Moongate v2 est un projet moderne de serveur Ultima Online écrit en .NET 10, qui assure de hautes performances et une bonne maintenabilité grâce à une structure modulaire et à la compilation AOT
  • Il est conçu avec une architecture intégrant la génération automatique des définitions de paquets, une boucle de jeu déterministe et une couverture de tests
  • Il a été reconstruit de zéro en s’inspirant de serveurs existants comme ModernUO, RunUO et ServUO, sans en copier le code

Objectifs principaux

  • Construire une base serveur maintenable, centrée sur la précision et la vitesse d’itération
  • Clarifier la séparation entre le réseau et la boucle de jeu et garantir la sûreté des threads
  • Appliquer une modélisation des paquets fondée sur les types et un mode d’enregistrement par génération de code
  • Préserver une structure compatible AOT tout en assurant l’efficacité du développement local

État actuel du développement

  • Les fonctionnalités clés sont déjà implémentées, notamment le serveur TCP, le parsing des paquets, le bus d’événements, la gestion des sessions, l’interface d’administration HTTP et le runtime Lua
  • Le projet inclut aussi la génération automatique de métadonnées Lua, une UI console, une boucle de jeu basée sur des timers, le pathfinding A*, le contrôle de l’éclairage et de la météo, ainsi qu’une fonction d’envoi d’e-mails
  • Un module de persistance basé sur MessagePack permet de sauvegarder l’état du jeu sous forme de snapshots et de fichiers journal
  • Des images Docker et une stack de monitoring Prometheus/Grafana sont fournies pour faciliter le déploiement en environnement d’exploitation

Système de script et de commandes

  • Il intègre un moteur de scripting Lua (basé sur MoonSharp) permettant de contrôler l’IA des PNJ, le comportement des objets, les effets visuels et l’UI (Gump)
  • Il prend en charge à la fois un système d’enregistrement de commandes en C# et un enregistrement dynamique de commandes en Lua
  • Exemples : commandes GM .teleport, .add_item_backpack, .set_world_light
  • Le dispatch par ScriptId des objets permet de gérer les événements de clic à partir de tables Lua

Performances et benchmarks

  • D’après les mesures réalisées avec BenchmarkDotNet, les principales opérations de parsing et de sérialisation des paquets sont traitées à l’échelle de quelques dizaines de nanosecondes
  • Dans la comparaison AOT vs JIT, certaines opérations montrent un gain de vitesse pouvant atteindre 5 à 6 fois
  • L’efficacité de traitement de chemins critiques du jeu comme SpatialWorldService et ItemService est mesurée en détail

Déploiement et exécution

  • .NET SDK 10.0.x requis
  • Procédure d’exécution de base :
    dotnet restore
    dotnet build
    dotnet run --project src/Moongate.Server
    
  • Une configuration basée sur des variables d’environnement (MOONGATE_*) permet de contrôler les paramètres détaillés liés au port HTTP, à la boucle de jeu, aux e-mails, au scripting, etc.
  • Un exemple de Docker Compose est fourni, avec les ports par défaut 2593 (jeu) et 8088 (HTTP)

Licence et contribution

Résumé des caractéristiques techniques

  • Framework serveur MMO basé sur C# + .NET 10 + NativeAOT
  • Prend en charge l’intégration de scripts Lua, la persistance MessagePack et le monitoring Prometheus/Grafana
  • Inclut le déploiement Docker et des scripts d’automatisation
  • Une conception haute performance, modulaire et centrée sur les tests, adaptée au développement de serveurs modernes

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.