-
Notifications
You must be signed in to change notification settings - Fork 3
Module PlayerBots
État : actif en production (pbotbg = 1, pbotall = 0, pbot = 0)
DestinyCore hérite d'un système PlayerBot complet, d'origine chinoise, que l'amont livre activé et que le royaume a coupé au profit d'un pilotage à la demande.
| Composant | Rôle |
|---|---|
PlayerBot/PlayerBotMgr |
Comptes et sessions de bots, remplissage BG / arène / LFG |
Server/PlayerBotSession |
File de schedules par bot : Online → Settting → InBGQueue → EnterBG → LeaveBG
|
Battlegrounds/CommandBG/ |
IA d'objectifs par champ de bataille — WS, AB, EY, AV, IC (~2 650 lignes) |
AI/PlayerAI/Bot* |
IA de classe (12 classes), mouvement BG, arène, duel, groupe |
dc_world.aiwaypoints |
61 points clés couvrant les 5 BG et les arènes |
Comptes PLAYERBOT1..180
|
181 personnages, toutes classes, niveaux 1 à 110 |
Le re-level d'un bot passe par Player::ResetPlayerToLevel (schedule Settting).
World.cppinitialise le gestionnaire de bots dès quepbotbgOUpbotallvaut 1. C'est ce qui permet aux modules maison de tourner avec le peuplement amont désactivé.
Objectif. Dès qu'un joueur réel lance une recherche de champ de bataille, le serveur calcule les places manquantes par équipe, connecte le nombre de bots nécessaire, les ajuste au bracket PvP du joueur, les inscrit dans la même file et les fait jouer les objectifs. Quand les joueurs quittent ou que le BG se termine, les bots ressortent et se déconnectent.
Le remplissage amont était inutilisable tel quel :
| Défaut amont | Correctif |
|---|---|
Activation tout-ou-rien : pbotall allumait aussi monde, LFG et arène cotée (88 bots en ligne en permanence) |
Clé pbotbg indépendante |
Remplissage codé en dur à 6 bots par faction, sur tous les brackets, avec un printf de debug |
Réécriture sur BattlegroundQueue::QueryNeedPlayerCount() — besoin réel du bracket |
| Aucun plafond : AV visait 40 v 40, soit ~78 bots pour 2 joueurs |
pbotbg_maxperteam (0 = tailles blizzlike) |
| Bots restant en ligne indéfiniment après le BG |
UpdateIdleBotLogout + pbotbg_idlelogout (300 s) |
Cette liste vaut comme carte des pièges du sous-système :
- file aléatoire
RB = 32non résolue vers un BG couvert ; - crash
irand(0,-1)quand un compte n'avait qu'un seul personnage ; -
noms de bots à chiffres refusés au login → renommage via
ai_playerbot_names+ contournement deCheckPlayerName; -
QueueID = 0dansProcessInBGQueue, plus une garde anti sur-provision surGetScheduledBotCount; - schedule
EnterBGjamais poussé → c'estInviteGroupToBGqui le pousse ; -
StartCommanderjamais appelé à l'ouverture des portes ; - 🔴 GUID 128 bits tronqués en
booldans les conteneursuint64des commandants — tout le registre tactique n'avait qu'une seule clé ; - tuiles navmesh des BG préchargées au boot, générateur de mouvement concurrent supprimé ;
- filtre eau, verrou anti ping-pong de 15 s, rejet des destinations
(0,0,0); - capture des bannières AB : détecteur réécrit, approche à moins de 8 m avant le sort 21651 ;
- un seul BG peuplé à la fois (
GetBotBGActivity+ verrous).
Le ciblage n'est plus aléatoire — il est noté :
| Critère | Poids |
|---|---|
| Porteur de drapeau ennemi | +1000 |
| Soigneur ennemi (classe + spé) | +400 |
| Cible blessée | +3 par % de vie manquant |
Feu concentré (par allié déjà au contact, lu sur getAttackers()) |
+60 |
| Distance | −1 par mètre |
| Hors ligne de vue | −250 |
| À plus de 50 m de l'objectif | forte dépriorisation (sauf porteur de drapeau) |
Le porteur de drapeau ami ne sélectionne plus de cible : il court au but. Escorte à WS (3 alliés dans 60 m). Vague de sortie de cimetière : attente de 3 alliés à 30 m, 8 s maximum, annulée si le bot est attaqué, si un ennemi entre au cimetière, ou s'il porte le drapeau.
- Seuls WS, AB, EY, AV, IC déclenchent des bots (liste
m_BGTypes,PlayerBotMgr.cpp:126). Les BG Cataclysm et ultérieurs (Twin Peaks, Silvershard, Kotmogu, Deepwind, Seething Shore) n'ont pas de commandant. - Arène cotée et LFG restent sous
pbotall, donc éteints. - Jamais entièrement validé en jeu : les captures de bannières et de drapeaux restent à confirmer après les correctifs d'approche.
- Persistance d'objectif par événement (à la manière de mod-playerbots) au lieu du verrou de 15 s.
- Routes prédéfinies via
aiwaypoints.link— la colonne est vide aujourd'hui, les bots coupent au lieu de suivre les routes.
Voir Configuration pour le tableau complet.
pbot = 0 # pas de bots amis à l'arrivée d'un joueur
pbotall = 0 # pas de peuplement automatique du monde / LFG
pbotbg = 1 # remplissage des champs de bataille
pbotbg_maxperteam = 0 # 0 = tailles blizzlike
pbotbg_idlelogout = 300 # déconnexion d'un bot inactif hors BG/file
pbotasl = 88 # plafond global de bots en ligne
pbottitle = 600 # titre « Mercenaire » imposé à tout botLe core embarque déjà un système complet d'ordres (BotGroupAI::ProcessBotCommand) : summon,
follow, stop, attack, gestion d'équipement, ciblage @tank / @heal / par classe.
Ne le réécrivez pas — voir Commandes en jeu.
Tout bot porte le titre custom « Mercenaire » (CharTitles 600, MaskID 380), imposé à chaque
login, précisément pour qu'un joueur ne puisse jamais le confondre avec un vrai joueur. Voir
Autres customs et Hotfixes DB2.
En base, ne confondez pas les bots avec des joueurs bloqués : les dizaines de personnages sur les cartes 529 et 628 sont les bots de champ de bataille.
SylvaniaCore — GPL v2 · La Légion de Sylvania · Discord contributeurs World of Warcraft® et Blizzard Entertainment® sont des marques déposées de Blizzard Entertainment, Inc. Projet non affilié.
Démarrer
Comprendre
Modules
Développer