Commit Graph

156 Commits

Author SHA1 Message Date
SylvaniaCore deploy c25c130506 Quete 38728 (La Cle) : objectif trouvez le chemin vers le bas inatteignable
Signale en jeu : le joueur descend, trouve la Cle de voute sargerite,
clique dessus, rien ne se passe - et la quete reste bloquee.

Le troisieme objectif (credit 101760, Find the way downstairs) netait
accorde que par le script de Tyranna, dans DamageTaken, aux seuls joueurs
presents dans sa liste de menace au coup fatal. Deux facons detre bloque :
le script non rattache au moment du kill (cas rencontre), ou le coup fatal
porte par Kayn. Une fois en bas, plus aucun recours sur place : il faut
remonter et retuer le boss.

Lobjectif sappelle pourtant trouvez le chemin vers le bas et la cle se
trouve justement en bas. Le gameobject 245728 laccorde desormais aussi,
en plus du credit 100651 qui appartient a la quete suivante (38729).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 01:46:53 +02:00
SylvaniaCore deploy b1c0676a9b README: remerciements a ArgusCore (FlyingPhoenix)
ArgusCore (Trion-Control-Panel/ArgusCore) est une reference majeure pour
SylvaniaCore, notamment sur le moteur, la couche reseau et les mecaniques
de classes en 7.3.5. Ajoute en bonne place dans la section remerciements,
avec le lien vers le depot et vers le profil de son auteur.
2026-08-18 01:32:02 +02:00
SylvaniaCore deploy a1f146653e README: le Discord est celui des contributeurs, pas des joueurs
Le lien discord.gg/qmQBXbuXkx sert a la coordination du developpement du
core, pas au royaume. Bandeau deplace de la section Rejoindre le royaume
vers Contribuer, libelle des badges passe a Espace contributeurs et
precision explicite que ce nest pas le Discord des joueurs.
2026-08-18 01:28:58 +02:00
SylvaniaCore deploy 723b200dbe Quete 39515 (A moi la vengeance) : les 5 PNJ ne reagissaient pas
Signale en jeu : cliquer sur loption de dialogue dAllari, Cyana, Kayn,
Korvas ou Mannethrel ne produisait rien.

Cry Havoc existe en DEUX versions strictement jumelles - memes cinq
objectifs, meme donneur (Kayn 93127) - une par specialisation :
  39516 Semer la devastation  (Devastation)
  39515 A moi la vengeance !  (Vengeance)

Le script ne testait que 39516, en six endroits. Pour un joueur ayant
choisi Vengeance, HasQuest renvoyait faux et chaque handler sortait
immediatement. Le script de la Vigie brisee gere pourtant bien ses propres
variantes (_HA/_HH/_VA/_VH, _H/_V, _DMG_SPEC/_TANK_SPEC) : loubli est
propre a Mardum.

Verification systematique faite : en croisant toutes les quetes codees en
dur dans les deux scripts DH avec la liste des quetes partageant une
signature dobjectifs identique, Cry Havoc est la SEULE de Mardum a avoir
une jumelle non geree.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 01:25:53 +02:00
SylvaniaCore deploy 79190bef41 README: badge Discord du royaume
Badge Discord ajoute dans la rangee den-tete et bandeau for-the-badge
dans la section Rejoindre le royaume, pointant sur linvitation
discord.gg/qmQBXbuXkx.
2026-08-18 01:22:24 +02:00
SylvaniaCore deploy 764892f4be README: rebrand complet en SylvaniaCore
Reecriture du README en francais autour de SylvaniaCore : presentation du
royaume et de la philosophie blizz adaptatif, tableau des modules propres
(PlayerBots, Siege des Capitales, Mercenaires, localisation frFR), URLs de
clone et dissues repointees sur BlaMacfly/SylvaniaCore, section de
remerciements a DestinyCore/TrinityCore, mention legale Blizzard.

Les badges de build restent ceux de lamont, explicitement etiquetes comme
tels (le fork na pas de runs GitHub Actions). Les noms internes du code
(cibles CMake, chemins) sont volontairement inchanges.

Branche destinycore renommee en sylvaniacore.
2026-08-18 01:15:11 +02:00
SylvaniaCore deploy 5c72317b6f README: logo SylvaniaCore et en-tête du projet
Ajout du logo (.github/assets/sylvaniacore-logo.png) en en-tête centré,
titre SylvaniaCore avec mention du fork DestinyCore, badges stars/forks
repointés sur BlaMacfly/SylvaniaCore, et rappel du logo en pied de page.
2026-08-18 01:11:18 +02:00
SylvaniaCore deploy 81b37487dd Quete 40051 (Secrets gangrenes) : le choix de specialisation ne validait rien
Signale en jeu : le tome ouvre bien le choix, on selectionne Devastation ou
Vengeance, mais la quete reste incomplete.

Trois defauts :
1. Le script implementait OnCompleteQuestChoice, un hook declare dans
   ScriptMgr mais appele DE NULLE PART. Le seul hook invoque par le core
   est OnPlayerChoiceResponse (QuestHandler.cpp). La methode etait donc du
   code mort - preuve mesuree en base : le joueur navait pas appris le sort
   200749 et son activeTalentGroup restait a 0.
2. Aucun credit de quete nulle part, alors que 40051 exige lentree 99071.
3. La branche Devastation nactivait pas la specialisation, contrairement a
   celle de Vengeance : asymetrie qui laissait le joueur sans spe.

AssertEntry remplace par LookupEntry avec garde, pour ne pas abattre le
serveur si un identifiant de specialisation manquait.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 01:06:50 +02:00
SylvaniaCore deploy c9f4c87e61 PlayerChoice : boutons vides (choix de specialisation chasseur de demons)
Signale en jeu : le tome des secrets gangrenes ouvre le choix de
specialisation, la question saffiche mais les deux boutons sont vides.

Trois defauts cumules dans Player::SendPlayerChoice :
1. Le filtre exigeait une recompense avec un sort VALIDE pour quune
   reponse soit envoyee. Le choix 231 (Devastation / Vengeance) a
   SpellID=0 : les deux reponses etaient silencieusement ecartees.
2. displayPlayerChoice.Responses etait redimensionne AVANT le filtrage,
   laissant une entree vide par reponse ecartee - do les boutons vides.
3. Reward->SpellID etait dereference sans controle alors que Reward peut
   etre nul, comme le montre le test plus bas dans la meme fonction :
   un plantage en attente pour toute reponse sans ligne de recompense.

Correctif general, valable pour tous les choix, pas seulement celui-ci.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 00:56:55 +02:00
SylvaniaCore deploy b671ae3c10 Campagne DH : traduction FR des 119 repliques scriptees restantes
Complete mardum_fr_broadcast.sql. Ces lignes de creature_text ne portent
aucun BroadcastTextId : le pont ne pouvait rien pour elles et aucune
traduction officielle nexiste.

Couverture finale des cartes 1481 et 1468 :
  repliques scriptees   142 / 142
  options de gossip      15 / 15
  quetes                 42 / 42

Les deux lignes contenant du balisage dinterface (chemin dicone, lien de
sort) sont traitees par substitution ciblee sur loriginal, pour ne toucher
quaux mots. Rechargeable a chaud, aucun redemarrage requis.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 00:31:41 +02:00
SylvaniaCore deploy bec6968b81 Campagne DH : traduction FR des 55 textes diffuses de Mardum
Le corps des dialogues, les options de gossip et une partie des repliques
scriptees de Mardum et de la Vigie brisee passent par 57 textes diffuses
qui navaient AUCUNE traduction, dans aucune langue.

Sources officielles ecartees par verification : absents du BroadcastText.db2
du client (3869 entrees seulement), absents de wago.tools pour tous les
builds, non exposes par Wowhead (broadcast-text= renvoie 404), absents des
bases de reference. Ces 55 traductions sont donc redigees, dans la
terminologie francaise officielle du jeu.

Mecanisme verifie : HandleDBQueryBulk serialise lenregistrement via
store->WriteRecord(id, GetSessionDbcLocale(), ...). Les chaines localisees
etant chargees au boot, un redemarrage est requis - et le client doit vider
son cache, ayant deja memorise la version anglaise.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 00:26:53 +02:00
SylvaniaCore deploy d0380580f4 Mardum : second lot de liaisons de scripts (11 entrees)
Quete 38766 (Avant detre submerges) bloquee : le credit 106003 accorde par
npc_doom_commander_beliash netait jamais attribue. Beliash et Fel Lord Caza
portaient un ScriptName MAL ORTHOGRAPHIE (npc_mardum_doom_commander_beliash,
npc_mardum_fel_lord_caza) qui nexiste nulle part dans le core, et ce core
ne signale pas les ScriptName inconnus.

Ayant vu le defaut se repeter, remontee de tous les credits accordes par
zone_mardum.cpp : trois blocages supplementaires attendaient sur la suite
de la campagne (38728 La Cle, 39495 Hidden No More, 38727 Halte au
bombardement). Tous corriges ici.

Innocuite verifiee : les SmartAI de Beliash et Caza sont des sous-ensembles
stricts de leurs IA C++ ; tous les autres etaient totalement inertes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 00:15:46 +02:00
SylvaniaCore deploy 8ce525b9f1 Mardum : rattache 6 IA C++ ecrites mais jamais liees aux PNJ
Quete 39049 (Loeil rive sur lobjectif) bloquee : tuer lInquisiteur Baleful
(93105) naccordait aucun des deux credits requis (96159 et 105946). LIA
npc_inquisitor_baleful les accorde et apprend le Faisceau incandescent,
mais le template avait ScriptName vide.

Audit du fichier zone_mardum.cpp : 29 scripts declares, 12 seulement
rattaches. Ce patch en lie 6 - ceux dont la liaison ne remplace aucun
comportement existant. Les 5 autres sont les recruteurs de compagnons de
la quete Cry Havoc, qui aurait bloque plus loin.

Reste a arbitrer (remplacerait un SmartAI actif) : 94410, 99915, 93221,
96441 - ces deux derniers portant un ScriptName mal orthographie qui ne
pointe sur rien.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 00:06:51 +02:00
SylvaniaCore deploy 4d9029e3d2 Quete 38669 (Notre dernier espoir) : traduction frFR officielle
Seule quete de la campagne chasseur de demons sans ligne frFR sur les 42
des cartes 1481 et 1468. Textes officiels releves sur Wowhead FR.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 23:52:20 +02:00
SylvaniaCore deploy 8974a7b115 Restaure len-tete tronque du patch de traductions frFR
Les accents graves de len-tete avaient ete interpretes par le shell lors
de la creation du fichier, supprimant deux passages.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 23:42:57 +02:00
SylvaniaCore deploy e9eaa54adf Traductions frFR extraites du client 7.3.5 (+907 broadcast_text)
Extraction des DB2 frFR du client (mapextractor -e 2 -l frFR) et import des
chaines absentes de broadcast_text_locale. Documente aussi la limite
decouverte : le client ne stocke que 3869 entrees localement, les dialogues
Legion (dont toute la campagne DH) nont de traduction dans aucune langue.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 23:41:47 +02:00
SylvaniaCore deploy 1fcbf699a7 Cime du Vortex : triangle de runes dAsaad inoperant
Cinq balises invisibles referencees par boss_asaad.cpp etaient absentes de
la base (463870 emetteur mobile, 463871-3 marqueurs de sommet, 463874 ancre
des faisceaux finaux). Entrees propres au core, inexistantes aussi dans la
base officielle 7.3.5. Les appels etant correctement gardes, aucun crash :
les faisceaux etaient simplement sautes en silence et la rune ne sest
jamais affichee.

Creees par clonage de 46387 Storm Target. Verifie au prealable que le
traceur 46492, lancre 46387 et les 4 sorts de faisceau (86981, 86921,
86923, 86925 dans Spell.db2) etaient bien presents.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 22:57:12 +02:00
SylvaniaCore deploy fc00afa703 Cime du Vortex : crash serveur a la mort dAltairus
Signale par un joueur, reproduit 2 fois (SIGSEGV 17/08 22:09 et 22:15).
JustDied() invoque le Slipstream 45457 pour ouvrir la voie vers la 2e
plateforme, puis pose son drapeau de dialogue sans verifier le retour.
Lentree 45457 nexiste dans aucune base (ni la notre, ni TDB 7.3.5) :
SummonCreature renvoie nullptr et le dereferencement tue le worldserver
dans Unit::Kill a chaque mort du boss.

- SQL : creation de lentree 45457 par clonage de 45455, avec le script
  npc_slipstream_two deja present et enregistre dans le core.
- C++ : controle du nullptr sur les deux occurrences du motif (Altairus
  et Grand Vizir Ertan) pour quune donnee manquante ne puisse plus
  faire tomber le serveur.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 22:49:08 +02:00
SylvaniaCore deploy 2e7a255918 Quete 31450 (Un nouveau destin) : implementation de la branche Alliance
Aysa Cloudsinger (60566), receptrice de la quete et donneuse de la suivante
(30987 Rejoindre lAlliance), na aucun spawn - pas meme dans la base mondiale
officielle TrinityCore 7.3.5. La branche Horde (Ji 60570) est complete, la
branche Alliance nexiste pas : quete bloquee pour tout pandaren Alliance.

Spawn place au POI client de la quete (-9118, 392), le meme relevé qui
correspond au metre pres au spawn de Ji cote Horde. Phase 1164 transposee
sur laire 12 (Elwynn) avec les conditions Durotar, quete 30987 a la place
de 31012.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 12:04:23 +02:00
SylvaniaCore deploy 11bf738554 Horde Druid 60896 : fin des cadavres ambulants sur lIle Vagabonde
curhealth=0 en base + RegenHealth=0 au template => SetSpawnHealth() appelle
SetHealth(0) sur une creature pourtant vivante : le client laffiche en
cadavre pendant que le serveur continue sa patrouille. Alignement sur
lentree jumelle 60770, deja a RegenHealth=1.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 11:32:14 +02:00
SylvaniaCore deploy 49e3c727d6 BG BotFill : doctrine du porteur de drapeau + fin du spam de log par tick
1. Un porteur de drapeau ne selectionne plus de cible : il court au but
   pendant que son escorte le protege (doctrine PvP). Auparavant il engageait
   le premier ennemi croise et mourait au milieu du terrain avec le drapeau.
2. Retrait de 4 traces PBOT heritees de l upstream, emises a chaque tick de
   chaque bot (80 bots en Alterac) : formatage et ecriture disque inutiles a
   chaque passage, et l une d elles dereferencait GetBattleground() sans
   controle de nullite.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 11:22:03 +02:00
SylvaniaCore deploy 0bb8fb7d90 BG BotFill : doctrine de ciblage PvP en champ de bataille
Le bot prenait l ennemi le plus bas en vie sous 80 %, sinon un ennemi AU
HASARD : aucun feu concentre, soigneurs ennemis jamais inquietes, porteur de
drapeau ignore. Les cibles sont desormais notees selon la doctrine PvP de
champ de bataille (Vanilla -> Legion) :
  porteur de drapeau  +1000  (objectif du match)
  soigneur ennemi     +400   (un soigneur libre rend le combat ingagnable)
  cible blessee       +3 par point de vie manquant (achever plutot qu etaler)
  allie deja au contact +60 chacun (feu concentre)
  distance            -1 par metre
  hors ligne de vue   -250
Detection du soigneur par classe ET specialisation (un paladin protection
n est plus traite comme un soigneur) ; le feu concentre se lit sur la liste
des attaquants de la cible, sans recherche couteuse.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 11:17:30 +02:00
SylvaniaCore deploy beaf2ff164 Quete 29792 (Voues a la grandeur) : implementation de louverture des portes
Le mecanisme nexistait pas : les 2 credits (59946/59947) etaient definis mais
rien ne les accordait, les portes sont des gameobject type 0 (non cliquables,
ouverture par script uniquement) et les compagnons censes les ouvrir (Aysa,
Ji, Jojo) nont aucune IA. Sy ajoutent des doublons dobjets empiles (version
ouverte + fermee en PhaseId 0) que le phasing retail separe - do le symptome
une porte ouverte, lautre bloquante et inerte. Bug connu des serveurs prives.

Correctif : un declencheur invisible dedie (entree custom 900000, SmartAI)
devant chaque porte accorde le credit et ouvre la porte a lapproche (12m).
Entree custom plutot que lInvisible Stalker 15214 partage, pour ne pas
ajouter SmartAI a un template utilise partout ; scripts attaches aux GUID
pour differencier les deux portes. Valide en jeu.
2026-08-17 11:10:03 +02:00
SylvaniaCore deploy 0f880f0f9b IA de classe : recalibration Legion des huit classes restantes
Suite de la recalibration commencee par le mage. Meme methode : chaque valeur
a ete verifiee presente dans character_spell chez les bots de niveau 110 du
serveur, la base faisant foi plutot qu une documentation externe.

  Guerrier    12 constantes    Paladin      8
  Chaman      11               Priest       8
  Druide       9               Voleur       6
  Chasseur     5               Demoniste    3

Cas notable du guerrier : Frappe mortelle et Broyeur de colosse, le coeur de la
rotation Armes, n avaient aucune constante dans l IA. Deux constantes devenues
mortes ont ete repointees dessus.

Le chaman Restauration recupere toute sa panoplie de soins, qui etait
integralement inoperante : Vague de soins, Salve de soins, Chaine de soins,
Vague de rappel, Pluie de soins, Totem de maree de soins, Totem de lien
spirituel. C est la condition pour que les soigneurs de la horde du siege
tiennent leur role.

Le pretre Ombre retrouve Attaque mentale, Toucher vampirique, Eruption du Vide
et Forme d ombre ; le paladin Vindicte Lame de justice, Verdict du templier et
Tempete divine ; le druide Equilibre Courroux solaire, Frappe lunaire et
Poussee d etoiles, et le Gardien Fourrure de fer et Regeneration frenetique.

Total sur les neuf classes : 49 constantes recalibrees.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 23:23:40 +02:00
SylvaniaCore deploy b98cc56745 IA de classe : recalibration Legion du mage, et inventaire des neuf classes
Les IA de BotClassAI resolvent leurs sorts par FindMaxRankSpellByExist. Quand le
bot ne connait pas l identifiant, la constante vaut 0 et toutes les branches qui
en dependent sont sautees en silence. Mesure sur les bots 110 du serveur : entre
80 et 93 pour cent du repertoire de chaque IA est du code mort, les identifiants
datant d une version bien anterieure du jeu. Le chaman connait 3 des 43 sorts
qu il reclame, le mage 4 sur 46.

Mage recalibre en premier, sept constantes : Trait de givre, Lance de glace,
Bourrasque, Blizzard, Orbe de givre, Barriere de glace, Frappe de feu. Les
valeurs viennent de la base du serveur et non d une documentation : ce sont les
sorts que les mages 110 possedent reellement.

sylvania/RECALIBRATION-IA-CLASSES.md consigne la methode et le kit Legion
verifie present pour les neuf classes, pour ne pas refaire ce releve.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 23:16:47 +02:00
SylvaniaCore deploy 6b89200c47 Siege des Capitales : composition de la horde par roles
La horde etait recrutee sans regard pour les roles : n importe quelle classe,
avec la specialisation que le personnage portait deja. Les IA de classe savent
pourtant distinguer les roles - BotPaladinAI soigne en Sacre, BotPriestAI hors
Ombre, BotShamanAI en Restauration - mais cette logique ne servait a rien
puisque la specialisation n etait jamais imposee.

Le recrutement vise desormais des quotas, nouvelles cles siege_tank_pct et
siege_healer_pct (10 et 20 par defaut, somme plafonnee a 60). Les soigneurs et
les tanks sont engages en premier : sans eux la horde fond avant le trone.
FindSpecIndexForRole interroge ChrSpecialization pour trouver la specialisation
que la classe doit prendre, et le re-level la lui impose via parameter3.

Les specialisations d index superieur a 2 sont ecartees : elles sont hors de
portee du re-level, qui refuse talent > 2. Cela concerne la Restauration du
druide, dont l IA de classe attend de toute facon un druide a trois
specialisations, calibrage d avant Legion.

L imposition de la specialisation passe par Player::ActivateTalentGroup, sur son
propre tick du re-level. Une premiere tentative ecrivait
PLAYER_FIELD_CURRENT_SPEC_ID a la main pendant que stats et auras etaient
recalculees, et provoquait un debordement de pile.

Verifie en conditions reelles, assaut a 50 bots : apparition de guerriers
Protection et de druides Gardien en tank, de chamans Restauration en soigneur,
sept talents par bot et par specialisation, aucun plantage, progression 29 a 30
sur 30.

Reste a affiner : le quota de soigneurs n est pas toujours atteint faute de
comptes disponibles dans les classes soignantes au moment du recrutement.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 23:08:23 +02:00
SylvaniaCore deploy 5aeeb91c52 PlayerBot : ordres stop et summon operants, rotation des mercenaires
Trois defauts distincts, tous verifies en jeu par sondes temporaires puis par
comparaison des positions en base.

1. L ordre « stop » n arretait rien. Le suivi est un generateur MoveFollow pose
   sur le MotionMaster ; ClearMovement() se contente d appeler StopMoving() et
   le generateur, toujours en tete de pile, relançait la poursuite au tick
   suivant. ProcessStopCommand vide desormais la pile de mouvement.

2. Le teleport d un bot aboutissait cote serveur - positions identiques en base
   apres un « summon » - mais les clients continuaient de l afficher a son
   ancienne place : l etape finale diffuse un paquet portant un opcode CLIENT
   (CMSG_MOVE_FALL_LAND) que les clients voisins ne savent pas lire. L objet est
   maintenant reconstruit chez les joueurs alentour, et le MotionMaster vide a
   chaque acquittement, comme le fait mod-playerbots dans HandleTeleportAck.

3. Cote module, l invocation posait un TeleportTo direct : meme cause, meme
   effet, le mercenaire semblait n arriver jamais au portail. Elle passe
   desormais par l ordre « summon » de l IA de groupe, au tick qui suit l entree
   dans le groupe - le temps que l IA reconnaisse son maitre.

Enfin, FindCandidate retournait le premier compte bot eligible d une carte
ordonnee par identifiant : c etait invariablement le meme mercenaire. Tous les
candidats sont desormais collectes puis tires au sort, en ligne comme hors
ligne, un seul personnage par compte pour ne pas biaiser le tirage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 15:30:31 +02:00
SylvaniaCore deploy 70e47be8b6 PlayerBot : la monture d un bot de groupe calque celle de son maitre
Le core ne savait que monter, jamais descendre : TryUpMount() sortait des la
premiere ligne si l aura de monture etait deja posee, et rien n appelait
Dismount() hors lancement de sort. Un mercenaire recrute alors qu il galopait
sur le terrain restait donc en selle indefiniment, y compris derriere un maitre
a pied.

UpdateMountState() remplace TryUpMount() dans le tick et traite les trois cas :
maitre a pied, le bot descend (RemoveAurasByType, la monture portee pouvant
venir de l IA de terrain et ne pas etre m_UseMountID) ; maitre monte au sol,
monture terrestre ; maitre en vol, monture volante.

Le vol passe par BotAIFly::UpdateFly, qui etait neutralisee par un return sec en
tete de corps. Elle est retablie : c est le seul code qui fasse suivre un bot en
trois dimensions, et BotGroupAI est son unique appelant - aucun autre mode d IA
n est touche.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 13:47:30 +02:00
SylvaniaCore deploy 9e18ce4cec Mercenaires : manuel des ordres dans le gossip du portail
Le core sait deja piloter les bots de groupe (BotGroupAI::ProcessBotCommand) :
ordres ecrits dans le canal de groupe par le chef, ou chuchotes a un mercenaire
precis. Rien de tout cela n etait documente en jeu.

Le portail gagne un sous-menu en quatre rubriques - deplacement, combat,
ciblage par role ou par classe, equipement et specialisation - qui recense les
ordres existants en messages systeme, lesquels restent dans la fenetre de
discussion contrairement au texte d une boite de dialogue.

Aucune commande nouvelle : le portail enseigne, il n execute pas.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 13:31:38 +02:00
SylvaniaCore deploy 8a46e5b08d Bots de groupe : rehabillage a chaque montee de niveau
Seuls les talents et les sorts suivaient la montee de niveau d un bot
(OnLevelupToBotAI : ReupdateTalents + LearnSpells). L equipement, lui, n etait
pose qu une fois, au re-level initial : un mercenaire embauche au niveau 20 et
monte a 25 gardait son stuff de niveau 20 pour tout le contrat et devenait de
plus en plus fragile.

Nouvelle methode PlayerBotSetting::RefreshEquipment() : reprend le seul bloc
equipement du re-level complet -- UnequipFromAll, CheckInventroy,
AddEquipFromAll, UpequipFromAll, SupplementOtherItems -- puis UpdateAllStats
et SaveToDB. On ne repasse volontairement ni par ResetTalents ni par
ActivateSpecialization : la reattribution de specialisation en cours de partie
est le chemin des crashs connus dans Unit::GetAPMultiplier.

ProcessDelayLevelup renvoie desormais false tant que le bot est en combat : le
schedule reste en tete de file et sera retente au tick suivant, plutot que de
desarmer le bot en pleine bagarre. RefreshEquipment reverifie de son cote.

Ce commit emporte aussi ActivateSpecialization (PlayerBotSetting), ecrit lors
d une session precedente, deployé depuis le 15/08 mais jamais commité.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 13:20:01 +02:00
SylvaniaCore deploy 0dbbb73a24 Mercenaires : double liberation du Group, et bots congedies par le balayage d inactivite
Double liberation
-----------------
Group::Disband() declenche sScriptMgr->OnGroupDisband(this) en toute premiere
instruction et se termine par sGroupMgr->RemoveGroup(this); delete this;

MercenaryMgr::OnGroupDisband congediait aussitot, donc ReleaseBot appelait
bot->RemoveFromGroup(), donc Group::RemoveMember, qui disband le groupe des
qu il repasse sous deux membres : un second Disband() imbrique faisait
delete this, puis le Disband() exterieur reprenait la main sur un objet
libere et le liberait une seconde fois. Le garde-fou m_releasing ne protegeait
que nos propres hooks, pas la reentrance du core.

Le tas s en trouvait corrompu et le serveur tombait bien plus tard, dans un
malloc sans rapport (Object::_InitValues sur un chargement de grille). Piege
pose avec MALLOC_CONF=junk:true,redzone:true,quarantine:...,abort:true, qui a
signale le bloc passe deux fois par le chemin de liberation.

Les deux hooks de groupe se contentent desormais de marquer les contrats
(pendingRelease) ; Update() les libere au tick suivant, hors de la pile
d appel du core.

Balayage d inactivite
---------------------
PlayerBotMgr::UpdateIdleBotLogout exemptait les bots du siege des capitales
mais pas les mercenaires : un bot loue, immobile aupres de son employeur,
etait juge inactif et deconnecte au bout de pbotbg_idlelogout secondes.
Exemption ajoutee via MercenaryMgr::IsAccountHired().

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 08:23:16 +02:00
SylvaniaCore deploy 3bdd7fd4e8 Les PNJ poses avec .npc add disparaissaient au redemarrage
Creature::SaveToDB et GameObject::SaveToDB passaient directement
data.spawnDifficulties a StringJoin, qui serialise avec un flux. Or
`enum Difficulty` a pour type sous-jacent uint8 : le flux ecrivait donc le
*caractere* brut au lieu du nombre. Une difficulte 0, celle du monde ouvert,
donnait un octet NUL.

Au chargement suivant la colonne etait illisible et ObjectMgr rejetait le
spawn -- "not spawned in any difficulty, skipped". Tout PNJ pose en jeu
tenait donc jusqu au redemarrage, puis disparaissait. 46 lignes etaient
concernees en base, dont les 42 Portails d Invocation de Mercenaire.

Conversion en uint32 avant la jointure.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 08:23:16 +02:00
SylvaniaCore deploy 65dacb0de7 Titre « Mercenaire » obligatoire sur tous les playerbots
CharTitles.db2 (7.3.5) ne contient aucun titre « Mercenaire » : 364 entrees,
ID max 522, MaskID max 373. On cree donc l entree custom 600 / MaskID 380
dans la table `char_titles` de la base hotfix, poussee au client par une
ligne `hotfix_data` (TableHash CharTitles = 0x85DF9E8E).

PlayerBotMgr::ApplyBotTitle() accorde puis selectionne ce titre a chaque
connexion de bot, depuis OnPlayerBotLogin(). Un bot ne peut donc pas s en
defaire, et les vrais joueurs les reconnaissent d un coup d oeil.

Cle de configuration pbottitle (600 par defaut, 0 = aucun titre force).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 00:15:23 +02:00
SylvaniaCore deploy b448747b3b Mercenaires : portail sans sous-titre et niveau masque
Le sous-titre est retire. Surtout, rank 3 ne suffit pas a masquer le niveau :
le contour dore vient de Classification (rank), le « ?? » a la place du niveau
vient de Flags[0] (type_flags), envoye separement dans la reponse de requete
creature. type_flags = 4 (CREATURE_TYPE_FLAG_BOSS_MOB) ajoute.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 00:01:13 +02:00
SylvaniaCore deploy c57a213a98 Mercenaires : portail a l echelle 0.5
Le modele 74465 est un portail de taille reglementaire, trop imposant pour un
PNJ de service. Demi-echelle.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 23:57:40 +02:00
SylvaniaCore deploy 47e707e8d6 Mercenaires : PNJ d invocation de playerbots payants
Le Portail d Invocation de Mercenaire (creature 1000010) loue au joueur la
compagnie d un playerbot contre 100 pieces d or, dans le role achete (tank,
soigneur ou combattant) et au niveau de son employeur.

Le contrat est volontairement fragile : quitter le groupe, dissoudre le groupe,
expulser le mercenaire ou se deconnecter le renvoie hors du monde sur-le-champ,
et l invocation suivante se repaie. Un filet de securite dans Update() rattrape
les ruptures que les hooks n auraient pas vues.

Aucun fichier du core n est modifie : tout passe par GroupScript::OnRemoveMember
et OnDisband, PlayerScript::OnLogout et WorldScript. Seul ajout exterieur, un
accesseur CapitalSiegeMgr::IsAccountEngaged() pour ne pas debaucher un bot deja
enrole dans l assaut quotidien.

Plafond a quatre mercenaires : un groupe compte cinq places, employeur inclus.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 23:53:15 +02:00
SylvaniaCore deploy a5fb052b89 PlayerBot : attribution des talents au re-level
PlayerBotSetting::LearnTalents() etait un corps vide alors que l etape 1 du
re-level appelle ResetTalents(true). Les bots repartaient donc au combat sans
un seul talent : sept rangs manquants a 110, soit une part importante de la
rotation de chaque classe. Constate en base avant correction, zero ligne de
character_talent pour huit classes sur neuf.

La fonction apprend desormais un talent par rang ouvert par le niveau, tire au
hasard parmi les colonnes que la specialisation du personnage autorise.

Deuxieme correction, dans ProcessSetting : le raccourci qui evite un re-level
inutile ne se declenche plus que si le bot possede reellement ses talents. Sans
ce controle, un bot deja au bon niveau sautait tout le reglage et restait a zero
talent, heritage de l epoque ou LearnTalents ne faisait rien.

Une premiere version de LearnTalents faisait aussi basculer la specialisation
en cours de re-level, par SetPrimarySpecialization et ecriture directe de
PLAYER_FIELD_CURRENT_SPEC_ID, hors du chemin officiel ActivateTalentGroup. Elle
provoquait un debordement de pile : cinq segfaults et quatre redemarrages du
worldserver en douze minutes. Ce volet est retire, la specialisation n est plus
touchee. La composition par roles qui en dependait est reportee.

Verifie apres deploiement : un bot seul puis cinquante, sept talents chacun sur
les neuf classes, aucun plantage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 22:00:04 +02:00
SylvaniaCore deploy 03d5a97582 PlayerBot : octroi des sorts de niveau et de specialisation au re-level
PlayerBotSetting::LearnSpells() n apprenait les sorts que depuis les donnees de
dresseur de classe (GetNpcTrainerSpells). En 7.3.5 les dresseurs n enseignent
plus le kit moderne : il s octroie a la montee de niveau et via la
specialisation. Les bots re-leveles arrivaient donc avec stuff et talents mais
un livre de sorts incomplet.

LearnDefaultSkills(), LearnSpecializationSpells() et
UpdateSkillsToMaxSkillsForLevel() sont desormais appeles avant le passage par
les dresseurs. Mesure avant / apres sur les bots 110 du siege, nombre moyen de
sorts connus :

  guerrier 43 -> 56    paladin 43 -> 51    chasseur 44 -> 55
  voleur   44 -> 63    pretre  44 -> 56    chaman   44 -> 56
  mage     44 -> 54    druide  44 -> 56

Concerne aussi le remplissage des champs de bataille, qui re-level par le meme
chemin.

Deuxieme correction : BotBGAIMovement::IsNearToPosition() repondait toujours
 pas encore arrive  hors champ de bataille. Les appelants ne coupaient donc
jamais court et relancaient un calcul de chemin a chaque tick, d ou le flot de
messages de pathfinding en echec pendant le siege. Le mode siege passe
desormais cette garde.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 19:36:51 +02:00
SylvaniaCore deploy 330f614a71 Quete 29791 (montgolfiere) : contournement par teleportation, desync client/serveur non resolue
Le vol souffre dune desynchronisation reelle : cote serveur la montgolfiere
(55649, VehicleId 1820) suit parfaitement ses 21 points de passage (sonde
journalisant la position chaque seconde, passager colle a 3m), mais le client
affiche un trajet totalement different (est au lieu du nord-ouest), confirme
par extraction des coordonnees TomTom image par image dune video.

Eliminees par la mesure : CAN_CONTROL (aucun siege du vehicule ne le porte,
joueur en siege 0 UNCONTROLLED), conflit de sieges, course a lembarquement
(WP_START retarde a 8s), etat de vol (anim tier correct), repli socket realm.
Angle mort restant : le contenu reel du paquet de spline envoye au client.

Contournement : a lacceptation chez Aysa (56662), les 2 objectifs sont
credites et le joueur teleporte au point datterrissage officiel (745,3665,194,
releve sur video du serveur officiel), pres dElder Shaopai qui recoit la quete.
Les 21 points authentiques restent intacts : reactiver WP_START suffira quand
la desync sera corrigee.

Note technique : actions independantes (chacune sur son evenement 19) et non
chainees par link - ce core ne propage pas les liens au-dela dun niveau.
Valide en jeu.
2026-08-15 19:05:13 +02:00
SylvaniaCore deploy 9d0f0c16de Siege des Capitales : rayon de prise a partie du dirigeant decouple
La priorite de cible sur le dirigeant utilisait searchRange * 2, donc la portee
d engagement courante. Abaisser siege_engage_range pour reduire l attrition
retrecissait du meme coup le rayon a partir duquel le dirigeant devient la
cible prioritaire, exactement quand on cherchait a le rendre atteignable. Les
deux valeurs sont desormais independantes, nouvelle cle
siege_boss_engage_range (40 yards par defaut, borne a 10 - 60).

Portee d engagement abaissee a 10 yards dans le fichier de configuration
distribue : mesures a 50 bots sur la route relevee en jeu, avec
siege_boss_engage_range a 40.

  engage 18                 waypoint 29/30, bot le plus proche a 94 yards
  engage 10, boss couple    waypoint 29/30, bot le plus proche a 47 yards
  engage 10, boss a 40      waypoint 30/30, bot le plus proche a 3 yards

La horde franchit donc desormais la totalite de la route et atteint le
dirigeant au contact.

Reste ouvert : Anduin ne perd toujours pas un point de vie, y compris avec un
bot mort a 3 yards de lui. L hypothese d une protection par la faction est
ecartee par deux essais avec sa faction forcee a 12, dont un ou la horde a
franchi les 30 waypoints. Rien dans creature_template ne l explique non plus :
ni masque d immunite, ni aura, ni script, et son unit_flags 0x8000 ne figure
pas parmi les drapeaux bloquants de Unit::_IsValidAttackTarget. Le diagnostic
suivant demande d instrumenter la selection de cible cote bot.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 17:34:52 +02:00
SylvaniaCore deploy 82e2d497ed Solocraft : Heroic de 8 a 6
Reglage d equilibrage. A 8, un joueur seul en heroique atteignait environ x10 degats
pour du contenu calibre 5 joueurs. 6 laisse une marge d environ +40 pour cent, qui
couvre les mecaniques heroiques sans trivialiser le donjon.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 16:52:20 +02:00
SylvaniaCore deploy 069f92387c Solocraft : equilibrage reel du bonus solo
Le bonus etait ressenti comme hardcore et incoherent. Quatre causes, toutes corrigees.

1. La taille du groupe etait calculee puis ignoree : elle ne servait qu'au message
   d'annonce. Un joueur seul et un groupe de 5 recevaient le meme x5 chacun, donc le
   solo ramait et le groupe complet ecrasait tout. Le bonus vaut desormais
   difficulte / joueurs presents dans l'instance (5 joueurs en donjon 5 -> x1).

2. Seules les stats primaires etaient buffees. Les degats d'une attaque valent
   (degats_arme + AP/3.5) et seule la moitie AP en profitait : le joueur encaissait x5
   mais tapait a peine plus fort. Ajout d'un bonus sur UNIT_MOD_DAMAGE_MAINHAND/
   OFFHAND/RANGED, dose par Solocraft.DamagePct.

3. Les familiers derivent leurs PV et leur AP du maitre mais ne recalculaient pas apres
   le buff : un pet deja invoque restait a x1. Appel de UpdateAllStats sur pet et gardien.

4. Rejoindre ou quitter un groupe en pleine instance ne recalculait rien. Ajout d'un
   GroupScript.

Aussi : plus de soin complet gratuit si le buff est recalcule en combat, logs passes de
INFO a DEBUG sur scripts.solocraft (ils saturaient dc-world.log), Solocraft.Mythic rend
le mythique configurable, acces au conteneur protege par mutex.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 16:37:10 +02:00
SylvaniaCore deploy 7b781cf602 Siege des Capitales : route de Hurlevent relevee en jeu
La route ne vient plus de coordonnees deduites de la base mais du trajet
reellement marche par un joueur, de la route d Elwynn au trone d Anduin. La
trace brute de 69 releves a ete traitee : elagage des aller-retours, puis un
point tous les ~45 yards plus tout changement d etage de plus de 6 yards et
tout virage de plus de 50 degres. Resultat, 30 waypoints au lieu de 24.

L apport decisif est la montee dans le donjon, desormais en paliers reguliers
(105, 115, 125, 132, 136, 145, 152, 157) la ou la version deduite sautait d un
etage a l autre. Les bots s y coincaient dans les batiments et la console etait
inondee de messages de pathfinding en echec.

Point de rassemblement recale sur le depart du trajet.

Mesures apres application, assaut a 50 bots : la horde atteint le waypoint
29 sur 30 avec une trentaine de survivants, contre un plafond a 21 sur 24
auparavant.

Reste ouvert : le bot le plus proche, mort ou vif, s arrete a 94 yards du
trone. Anduin n a donc jamais ete engage, et l hypothese d une protection par
la faction est ecartee par la mesure : un essai avec sa faction forcee a 12,
attaquable puisque les bots tuent les civils de cette faction, n a rien change.
Le verrou est la garde royale de l etage, pas le dirigeant.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 14:52:43 +02:00
SylvaniaCore deploy 7971b57cb4 Siege des Capitales E8 : dirigeant comme objectif, et correction du recrutement
E8 - dirigeant de la capitale. Au declenchement le module le retrouve par son
creature.guid (nouvelles cles siege_*_boss_spawn), force le chargement de sa
grille si aucun joueur n est present, retire les drapeaux bloquants reellement
presents, applique niveau et points de vie, et le designe comme objectif du
commandant. Sa mort est detectee a chaque tick et vaut victoire immediate. En
fin d evenement tout est restaure : drapeaux exactement ceux qui avaient ete
retires, niveau, points de vie, faction, et sortie de combat. Rien n est ecrit
en base, un arret du worldserver laisse donc la creature intacte.

Le reglage du dirigeant est absolu et par ville (siege_*_boss_level,
siege_*_boss_health, siege_*_boss_faction, 0 = ne pas toucher) et non plus un
multiplicateur global : les deux chefs n ont rien de comparable, Anduin depasse
le milliard de points de vie quand Vol jin, reste au niveau 83, en a quelques
milliers. Un multiplicateur de 50 sur Anduin donnait 69 milliards.

AcceptCommand() ne pilote que le deplacement : une cible d attaque prioritaire
(SetSiegeTarget) a ete ajoutee, sinon les bots atteignaient le trone et
passaient leur temps sur la garde rapprochee.

Correction du recrutement, defaut signale en jeu : des bots Alliance se
retrouvaient enroles dans l assaut sur Hurlevent. La cause est dans le core,
PlayerBotBaseInfo::GetRandomCharacterByFuction() se termine par
 return characters.begin()->second  et renvoie donc le premier personnage du
compte, faction ignoree, quand il n en trouve aucun de la faction demandee. Le
module choisit desormais lui-meme le personnage et le connecte par
BGSType_Online_GUID, avec verification de la faction apres connexion et
garde-fou dans CommandSiege::AddBot. Le quota est rendu sur tout refus, sinon
la horde arrivait incomplete. Verifie : 15 bots recrutes, 15 horde, 15 au
niveau 110.

.siege status affiche l etat du dirigeant en direct.

Reste ouvert : aucun assaut n a encore entame les points de vie d Anduin. La
horde entierement horde se fait laminer par la garde avant le trone, la ou les
essais precedents progressaient plus loin uniquement parce que des bots
Alliance traversaient la ville sans etre inquietes. A retester avec l effectif
complet de 50.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 13:01:06 +02:00
SylvaniaCore deploy 6349ea7c21 Siege des Capitales E7 : spawner etale et deblocage de la marche des bots
E7 - recrutement de la horde. Le gestionnaire engage siege_spawn_rate bots par
seconde jusqu au quota : bot deja connecte et inoccupe en priorite, sinon
connexion d une session bot libre. Chaque recrue est remise a niveau par le
schedule BGSType_Settting existant, teleportee au point de rassemblement, puis
enrolee dans CommandSiege. Le plafond porte sur le total engage depuis le debut
et non sur l effectif present : un bot tue n est jamais remplace, il n y a pas
de vague sans fin. En fin d evenement tout l effectif est deconnecte, morts
compris, y compris les recrues encore en chemin.

Le premier essai en conditions reelles a fige la horde a son point d entree.
Quatre causes distinctes, toutes corrigees :

1. IsNotSelect() est aussi appele par IsNotMovement() avec le bot lui-meme en
   parametre. La regle siege_pvp y repondait  ne pas selectionner  pour un bot
   non flagge PvP, ce qui declenchait StopMoving(). La regle est desormais
   restreinte aux joueurs adverses autres que soi.
2. BotWarlockAI::ProcessNormalSpell() renvoyait true hors champ de bataille, et
   la boucle d IA fait  if (!IsInCombat() && ProcessNormalSpell()) return  : les
   demonistes n atteignaient jamais leur deplacement et restaient plantes au
   point de depart. Le mode siege passe maintenant cette garde.
3. Portee d engagement. BotBGAI cherche une cible a 32 yards ; en ville il y a
   toujours un civil a portee, si bien que l IA ne se deplace jamais (elle ne
   marche que sans cible selectionnee). Nouvelle cle siege_engage_range, 18
   yards par defaut : on n engage que ce qui barre le passage.
4. Enlisement. Lacher la cible ne suffit pas, l IA en reselectionne une au tick
   suivant. Nouvelle fenetre de marche forcee (siege_stall_timeout,
   siege_advance_window) pendant laquelle le bot ignore les cibles et avance.

Les bots du siege sont aussi exemptes de la deconnexion d inactivite du module
BG BotFill, qui vidait la horde en pleine progression.

Verifie en conditions reelles : 5 bots niveau 110 partis de la Vallee des Heros
atteignent le waypoint 21 sur 24, soit les etages du donjon de Hurlevent, en
environ quatre minutes, en tuant des PNJ en chemin et en perdant deux des leurs.
Le nettoyage de fin deconnecte bien tout l effectif.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 10:24:13 +02:00
SylvaniaCore deploy 6de29d95bf Siege des Capitales E5-E6 : commandant d assaut et mode siege des bots
E5 - CommandSiege (game/CapitalSiege) : meme role que CommandBG en champ de
bataille, il ne combat pas et distribue des ordres de deplacement. Il charge
sa route depuis aiwaypoints (plage d entrees configurable), fait avancer
chaque bot a son rythme de point en point, et bascule sur le dirigeant une
fois le dernier point atteint. Un bot au contact ne recoit aucun ordre : la
boucle de combat de BotBGAI garde la priorite, sinon la horde traverserait la
ville sans jamais rien tuer. Un bot tue est compte en perte et n est pas
remis en jeu.

La route est validee avant que le creneau du jour soit consomme : un assaut
sans waypoints est refuse et pourra se declencher normalement une fois la
route en base, au lieu de bruler la journee.

E6 - mode siege dans BotBGAI. Le bot garde toute son IA de combat mais cesse
de dependre d un Battleground : le verrou InBattleground() ne s applique plus,
l etat d assaut est impose, et la resurrection de champ de bataille est
desactivee. La regle siege_pvp est appliquee dans IsNotSelect() : par defaut
les bots n engagent que les joueurs deja flagges PvP.

Correction de fond au passage : SearchCreatureListFromRange() construisait un
searcher mais ne visitait jamais la grille (VisitNearbyGridObject n existe
plus dans ce core, l appel avait ete commente sans remplacement). La liste
restait vide, donc les bots ne voyaient aucune creature - en siege comme en
champ de bataille. Remplace par Cell::VisitGridObjects.

Commande GM .siege recruit ajoutee comme harnais de test en attendant le
spawner automatique (E7) : enrole le playerbot selectionne dans la horde.

Verifie apres deploiement : assaut sur Orgrimmar refuse faute de route (les
waypoints 2000-2099 arriveront en E10), assaut sur Hurlevent accepte avec la
route de 24 points chargee de l entree 1000 a 1023.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 23:39:03 +02:00
SylvaniaCore deploy f9f7de5c9c BG BotFill : un seul champ de bataille peuple par les bots a la fois
Nouvelle methode GetBotBGActivity() qui inspecte les sessions bots en ligne et
renvoie l instance de BG ou ils se battent deja, ainsi que le type de BG pour
lequel ils sont inscrits en file.

QueryBattlegroundRequirement() s en sert pour ne completer que l instance
deja servie, et pour n ouvrir une nouvelle file que si aucun engagement n est
en cours. Sans ce garde-fou, plusieurs BG simultanes se disputaient le meme
vivier de bots et aucun ne se remplissait correctement.
2026-08-14 22:31:15 +02:00
SylvaniaCore deploy 1c13b02e3e Siege des Capitales E4 : route d assaut de Hurlevent
Vingt-quatre waypoints de la Vallee des Heros au trone d Anduin Wrynn, dans
la plage d entrees reservee 1000-1099 (2000-2099 pour Orgrimmar).

Aucune coordonnee inventee : chaque point vient soit d un trajet de patrouille
reel (waypoint_data des patrouilleurs de Hurlevent), soit de la position d un
PNJ effectivement spawne. Les points sont donc marchables par construction,
ce qui evite de valider la route a la main en jeu. Detour calcule le chemin
entre deux points consecutifs, la route n a pas besoin d etre dense.

Trace : pont de la Vallee des Heros, porte, place du Commerce, route du canal,
allee du Donjon, cour et perron, grand hall, salle du trone, escalier, galerie
des emissaires, antichambre, trone.

Le point de rassemblement passe de la valeur game_tele (-8833, 622) au
waypoint 1000 (-8904, 692) : l ancienne tombait deja sur le pont, a l interieur
du perimetre garde.

Verifie en conditions reelles apres deploiement : tirage quotidien d une heure
aleatoire, alternance de faction, declenchement et arret manuels, ouverture et
fermeture de la ligne d historique, verrou anti-rejeu du creneau quotidien.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 22:31:07 +02:00
SylvaniaCore deploy a8f8ba210b Siege des Capitales E1-E3 : ordonnanceur, persistance, commandes GM
Nouveau module d evenement quotidien : une horde de playerbots assaille la
capitale adverse et tente d abattre son dirigeant. Cette premiere tranche
livre le squelette, la persistance et l ordonnancement ; le spawner, l IA
d assaut et l eveil du dirigeant suivent (E4-E8).

Le serveur tourne sur DestinyCore, sans systeme de modules : le module prend
donc la forme d un script module TrinityCore (decouverte CMake automatique
via AddCapitalSiegeScripts()), avec le gestionnaire dans la bibliotheque game
comme PlayerBotMgr, puisque l IA d assaut devra y acceder depuis BotBGAI.

game/CapitalSiege/CapitalSiegeMgr : tirage quotidien d une heure aleatoire
dans une plage configurable, alternance stricte de la faction attaquante,
machine a etats et arret d urgence si le diff monde depasse le seuil.
Le jour est consomme au declenchement et non a la fin, donc un redemarrage
du worldserver en plein evenement ne peut pas le rejouer.

scripts/CapitalSiege : branchement par WorldScript (aucune modification de
World.cpp), et commandes GM .siege status/start/stop/history sous la
permission RBAC_PERM_COMMAND_EVENT existante.

Persistance dans dc_characters et non dc_world : il s agit d etat mutable
ecrit par le serveur, qu une reimportation de la base de contenu ne doit pas
effacer. Six requetes preparees ajoutees a CharacterDatabase. Toute ligne
d historique restee ouverte est refermee au demarrage du core.

MMaps verifies pour les deux capitales : carte 0 (592 tuiles) et carte 1
(715 tuiles), tuiles de Hurlevent et d Orgrimmar presentes. La navigation
des bots passe par PathGenerator/MotionMaster, donc Detour, pas les VMaps.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 18:03:06 +02:00
SylvaniaCore deploy c2ae2c3ced Nettoyage: suppression des traces de debug BGF-DBG du chantier BG BotFill
Ces 20 lignes de TC_LOG_ERROR servaient au diagnostic du remplissage BG
(tick BotBGAI, ordres de mouvement, occupation des bannieres, raccourcis de
pathfinding). Elles spamment Server.log a chaque tick de bot et a chaque
calcul de chemin. Retirees avant le chantier Siege des Capitales pour
repartir sur un log propre.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 16:49:38 +02:00