Bots et simulations asynchrones By Year
Quand les bots sont utilisés
Dans generateResultsJob(), si actData.isAsync est vrai, takeBotsDecision(actData) est appelé avant la génération des events et résultats.
Jeux avec bots explicites
Le routeur commun instancie actuellement BotsEnt1, BotsMk1 ou BotsMk2. Les équipes marquées isBot reçoivent alors des décisions générées avant le calcul des résultats.
flowchart LR
JOB[generateResultsJob] --> ASYNC{isAsync?}
ASYNC -->|oui| B[takeBotsDecision]
B --> BOT[Bot game-specific]
BOT --> TD[Team decisions]
ASYNC -->|non| EV[Events]
TD --> EV[Events]
EV --> RES[Generate Results]
ENT1
BotsEnt1 gère notamment prêts, capacité de production, construction d'usines, employés, matières premières, choix de pays et création/lancement de produit.
MK1/MK2
Les bots Marketing construisent des décisions de produit/marché selon un niveau et des heuristiques game-specific.
Attention
Le code désactive temporairement l'envoi de messages pendant la boucle bots afin d'éviter de spammer les clients avec chaque décision artificielle. Les documents équipes sont ensuite sauvegardés.
Ajouter ou modifier une décision de bot
Les bots sont exécutés par takeBotsDecision(actData) avant la génération de résultats des activités async. Une nouvelle décision métier qui est obligatoire doit être supportée par le bot du jeu.
Procédure
Bots<Game>.takeDecisions() ou un helper spécialisé.
Réutiliser les mêmes fonctions de coût/validation que les humains lorsque possible.
Éviter de modifier directement les résultats : le bot doit produire des décisions, puis passer dans le même moteur de génération.
Respecter le botLevel si le jeu simule plusieurs niveaux.
Vérifier cash/stock/capacité après chaque décision en chaîne.
Ajouter une garde si une static data attendue manque.
Jeux actuellement supportés
Le socle crée explicitement des bots pour ENT1, MK1 et MK2. HR1/MGT1 ne doivent pas être supposés bot-compatible sans implémentation dédiée.
Messages pendant les bots
Le framework peut désactiver temporairement certains messages pendant la boucle bot. C'est voulu : on ne veut pas envoyer à chaque client un RTT pour chaque micro-décision artificielle. Vérifier la synchronisation finale après sauvegarde/génération.