Skip to content

Architecture du core

SylvaniaCore deploy edited this page Aug 31, 2026 · 1 revision

Architecture du core

Lignée

TrinityCore  →  DestinyCore (slash-design)  →  SylvaniaCore (branche sylvaniacore)
                                    ↑
                       ArgusCore (référence, pas un parent)
  • Branche de travail : sylvaniacore (anciennement destinycore — toute doc parlant de cette branche est périmée).
  • Amont : remote upstream → slash-design/DestinyCore, base master @2d631f4e, ~227 commits de divergence. Compte exact : git rev-list --count 2d631f4e..HEAD.
  • ArgusCore (Trion-Control-Panel/ArgusCore, projet de FlyingPhoenix) : pas un ancêtre, pas d'historique commun — donc aucun cherry-pick possible. C'est une référence dont on transcrit manuellement les correctifs. Voir Chantiers en cours.
  • mod-playerbots (liyunfan1223/mod-playerbots, AzerothCore) : référence de logique pour les bots.

Le code conserve délibérément les noms internes de l'amont (DestinyCore, cibles CMake, chemins de configuration). C'est ce qui rend les mises à jour amont lisibles.


Arborescence

src/server/
├── authserver/        # (héritage) — le royaume utilise bnetserver
├── bnetserver/        # authentification Battle.net
├── worldserver/       # binaire du monde + worldserver.conf.dist
├── database/          # couche SGBD, pools de workers
├── shared/
└── game/              # le cœur

src/server/game/ — modules

Modules hérités (TrinityCore / DestinyCore) :

AI · Accounts · Achievements · Archaeology · AuctionHouse · AuctionHouseBot · BattlePay · BattlePets · Battlefield · Battlegrounds · BlackMarket · BrawlersGuild · Calendar · ChallengeMode · Chat · Combat · Conditions · DataStores · DungeonFinding · Entities · Events · Garrison · Globals · Grids · GroupFinder · Groups · Guilds · Handlers · Instances · Loot · Mails · Maps · Miscellaneous · Movement · OutdoorPvP · Phasing · Pools · Quests · Reputation · Scenarios · Scripting · Server · Services · Skills · Spells · Support · Texts · Tools · Warden · Weather · World

Modules propres au royaume :

Dossier Lignes Contenu
PlayerBot/ ~8 200 PlayerBotMgr (3 611), PlayerBotSetting (2 752), FieldBotMgr (1 093), AIWaypointsMgr (429), PlayerBotTalkMgr (348)
Mercenary/ ~1 730 MercenaryChat (967), MercenaryMgr (763)
CapitalSiege/ ~1 460 CapitalSiegeMgr (1 141), CommandSiege (320)

src/server/game/AI/PlayerAI/ — l'IA des bots

C'est l'héritage amont, et il est bien plus riche qu'il n'y paraît :

PlayerAI.cpp        BotAI.cpp         BotAISpells.cpp    BotAITool.cpp
BotMovementAI.cpp   BotBGAIMovement.cpp
BotArenaAI/  BotClassAI/  BotDuelAI/  BotFieldAI/  BotGroupAI/

À lire avant d'écrire quoi que ce soit sur les bots : BotGroupAI::ProcessBotCommand (BotGroupAI/BotGroupAI.cpp:640) implémente déjà un système complet d'ordres — summon, follow, stop, attack, gestion d'équipement, ciblage par rôle et par classe. Ne le réécrivez pas. Voir Commandes en jeu.


Répertoires hors code

Chemin Contenu
sylvania/ Notes internes du fork + scripts/ (release des bases, réconciliation de schéma, modèle de rollback)
sql/sylvania/ 119 correctifs de données du royaume, appliqués à la main (Bases de donnees)
chantiers/ Matériel de travail d'un chantier en cours (aujourd'hui rivage_brise/)
plans/ Analyses et feuilles de route (00-arguscore-analysis-and-roadmap.md)
ARGUSCORE_FIXES.md Backlog de la passe de maintenance sécurité/stabilité/blizzlike, une entrée par correctif
doc/ Documentation héritée TrinityCore (compilation, logging, scripting)

Deux pièges d'architecture propres à ce core

Ils reviennent constamment. Les connaître fait gagner des heures.

1. Du code C++ complet qui ne s'exécute jamais

Trois variantes, par ordre de fréquence :

  1. creature_template.ScriptName vide alors qu'une IA C++ existe (sur zone_mardum.cpp : 29 scripts déclarés, 12 rattachés) ;
  2. ScriptName mal orthographié, pointant sur un nom inexistant — ce core ne journalise aucun avertissement pour un ScriptName inconnu ;
  3. hook mort dans ScriptMgr : déclaré, défini… et appelé de nulle part. Cas avéré : ScriptMgr::OnCompleteQuestChoice. Le seul hook réellement invoqué pour les PlayerChoice est OnPlayerChoiceResponse, depuis QuestHandler.cpp.

Méthode de détection complète : Corriger le contenu.

2. Des fonctions débranchées par un return; sec

BotAIFly::UpdateFly commençait par un return; en tête de corps. Réflexe à avoir dans ce core : avant de déboguer une fonction qui « ne fait rien », lire sa première ligne.


Sélection de l'IA d'une créature

FactorySelector::selectAI teste le ScriptName AVANT l'AIName. Conséquence pratique : laisser AIName = 'SmartAI' en place quand on rattache un script C++ sert de filet de sécurité — si le script disparaît, le SmartAI reprend la main.

Corollaire : ne rattachez un script C++ que s'il est un sur-ensemble strict du SmartAI existant, ou si le PNJ est totalement inerte. Deux cas rencontrés où il fallait ne rien faire : npc_mardum_allari (94410) et npc_mardum_sevis_brightflame_shivarra (99915) sont des ébauches de ~12 lignes marquées // TEMP FIX, alors que leur SmartAI implémente tout le mécanisme. Les rattacher aurait cassé ce qui marchait.

Clone this wiki locally