Commit Graph

101 Commits

Author SHA1 Message Date
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 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 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
SylvaniaCore deploy abb14c4b19 BG BotFill : priorite des ordres de banniere + nettoyage des BG deserts
1. ProcessRegulation appelait TryOccupied* (cible = banniere) puis
   Process*Requirement (cible = centre de la base) toutes les 500 ms : le
   second ecrasait le premier, les bots stationnaient a quelques metres des
   bannieres sans jamais les atteindre (zero capture constatee en jeu).
   Un ordre de banniere/drapeau prime desormais 20 s sur un ordre de
   position, dans les deux surcharges d AcceptCommand.
2. Distance de cast resserree a 4 m (le sort d ouverture 21651 echoue
   au-dela de sa portee).
3. Un BG sans joueur reel depuis plus d une minute renvoie ses bots au
   monde : un match Ile des Conquerants tournait a 40v39 bots pour personne.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 23:52:39 +02:00
SylvaniaCore deploy a7b1fa7843 BG BotFill : capture des bannieres d Arathi reparee
- GetNearGameObjectFlag reecrit : l ancienne detection par objet d aura
  (indices approximatifs, rayon 6 m) faisait cliquer les bots sur une
  banniere a 30 m -> sort d ouverture hors portee, zero capture.
  Renvoie desormais la banniere cliquable la plus proche (etat reel du
  noeud) dans un rayon de 30 m.
- TryOccupiedABNode : le bot marche jusqu a la banniere (< 8 m) avant de
  lancer le sort, et s arrete pour canaliser l ouverture.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 12:26:01 +02:00
SylvaniaCore deploy 4792617e3e BG BotFill : rejet des destinations nulles dans le mouvement des bots
La sonde a revele des ordres de deplacement vers (0,0,0) : la tuile navmesh
de l origine n existant pas, le chemin retombait en ligne droite a travers
la carte (survol du lac d Arathi, allers-retours incoherents). Garde posee
au point de passage oblige MovementTo(x,y,z).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 11:04:09 +02:00
SylvaniaCore deploy d0343e65cb BG BotFill : bots contournent l eau + verrou anti ping-pong des objectifs
- Filtre navmesh des bots sans NAV_WATER : fini l effet de glisse/vol sur les
  lacs (UpdateFilter reajoute l eau si le bot y est plonge, pour en sortir)
- AcceptCommand : un bot conserve sa cible tant qu elle n est pas atteinte
  (15 s max), sauf ordre drapeau. Le commandant realloue tout toutes les
  500 ms : les bots a mi-chemin oscillaient entre deux objectifs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 10:33:59 +02:00
SylvaniaCore deploy 6fcdfc7d2f BG BotFill : pathfinding des bots repare (tuiles navmesh + generateur de mouvement)
1. Les tuiles navmesh ne se chargeaient qu avec les grilles occupees : tout
   trajet de bot vers une zone vide retombait en BuildShortcut (ligne droite
   a travers le decor). Prechargement des tuiles des 5 cartes BG au boot.
2. MovePathfinding empilait un PointMovementGenerator generatePath=false qui
   relancait un deplacement en ligne droite au moindre changement de vitesse,
   ecrasant la spline du chemin. Remplace par un generateur passif.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 09:36:30 +02:00
SylvaniaCore deploy b40f842134 BG BotFill : correctif racine de l IA d objectifs - GUID 128 bits tronques en bool
Le registre des commandants (PlayerStatus/PlayerGUIDs) etait indexe uint64 ;
ObjectGuid (128 bits) s y convertissait via operator bool() -> tous les
joueurs partageaient la cle 1. Premier bot enrole, tous les autres rejetes
comme doublons, et les recherches inverses (GetBotBGAI) ne trouvaient
personne : les commandants ne pilotaient aucun bot. Conteneurs et signatures
retypes en ObjectGuid dans CommandBG et les 5 commandants (WS/AB/EY/AV/IC).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 00:31:09 +02:00
SylvaniaCore deploy f3b5667c5f BG BotFill : StartCommander appele a l ouverture des portes
StartCommander (passage de l IA des bots en mode combat / assignation des
objectifs) n avait aucun site d appel : les commandants restaient en phase
preparation et les bots figes au spawn pendant tout le match.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 23:58:18 +02:00
SylvaniaCore deploy 366768cc95 BG BotFill : les bots acceptent l invitation au BG (schedule EnterBG jamais pousse)
BGSType_EnterBG n avait aucun site d emission : les bots restaient invites
jusqu a expiration et le joueur entrait seul dans le BG. InviteGroupToBG
pousse desormais le schedule aux sessions bots, et ProcessEnterBG utilise
le slot de file reel comme Ticket.Id (attendu par HandleBattleFieldPort).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 23:46:22 +02:00
SylvaniaCore deploy f7c82f0089 BG BotFill : QueueID renseigne dans l inscription BG des bots + garde-fou anti sur-provision
ProcessInBGQueue envoyait BattlemasterJoin avec QueueID=0 (ligne commentee du
portage) : toutes les inscriptions bots etaient rejetees (invalid bgtype 0).
Ajout de GetScheduledBotCount : tant que 8+ bots sont en cours d engagement
(login/re-level/inscription), le tick n en engage pas de nouveaux (on est
montes a 92 bots en ligne pour un 15v15).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 23:37:03 +02:00
SylvaniaCore deploy b75ae952b8 BG BotFill : bypass du check de nom pour les sessions bots au login
Player::LoadFromDB refusait silencieusement les persos bots (noms avec
chiffres type Bot5951) et posait AT_LOGIN_RENAME en boucle. Les 181 bots
ont ete renommes en base via ai_playerbot_names, et les sessions bots ne
passent plus par CheckPlayerName.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 23:24:28 +02:00
SylvaniaCore deploy f697d76a88 Correction racine du crash #56 : irand(0,-1) dans GetRandomCharacterByFuction
Avec un seul personnage sur le compte bot, characters.size()/2 - 1 = -1
=> ASSERT max >= min => SIGSEGV des que le module BG BotFill engage un bot.
Le contournement historique etait pbotall=0 ; la borne est desormais sure.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 23:07:57 +02:00
SylvaniaCore deploy 5560d27be5 BG BotFill : la file aleatoire (RB=32) est resolue vers un BG couvert par l IA des bots
L UI PvP Legion n envoie que la file aleatoire, que le core bloquait en dur
(message 'This Battleground has been disabled'). On tire desormais au sort un
BG parmi WS/AB/EY/AV/IC dont le bracket existe pour le niveau du joueur.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 22:58:01 +02:00
SylvaniaCore deploy 6cc9f3a17a Module BG BotFill : remplissage dynamique des champs de bataille par PlayerBots
Nouvelle cle pbotbg : active le remplissage des BG par bots (WS/AB/EY/AV/IC)
sans reveiller les bots de monde/LFG/arene (pbotall reste a 0).
- OnRealPlayerJoinBattlegroundQueue reecrit : bracket du joueur +
  QueryNeedPlayerCount (besoin reel) au lieu de 5 bots fixes par faction
- pbotbg_maxperteam : plafond de taille d equipe vise par le remplissage
- pbotbg_idlelogout : deconnexion des bots inactifs apres N secondes
- broadcast chinois remplace par un log, printf de debug supprime

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 22:45:31 +02:00
SylvaniaCore deploy 94b6fd654a Fix quete Bataille pyrotechnique (29786) : Zhao-Ren immobile = combat inamorcable
Le serpent restait en vol stationnaire au centre de larene (714, 4168) hors
combat : MovePath(ZHAOREN_PATH) netait lance que dans EnterCombat. Or les
6 lanceurs de feux dartifice (64507) forment un anneau a 24-35m du centre et
leur tir exige que la cible soit AU-DESSUS du joueur -> aucun lanceur ne
pouvait latteindre, et le combat ne demarre que sur impact de fusee
(SpellHit SPELL_OVERPACKED_FIREWORK). Blocage circulaire : quete impossible.

Fix : MovePath(ZHAOREN_PATH, true) des Reset(), il tourne donc hors combat
comme sur retail. Le chemin (12 points) passe a 6-8m au-dessus des lanceurs.
Valide en jeu : dragon en rotation, combat et quete termines.
2026-08-11 09:38:30 +00:00
SylvaniaCore deploy 68c10fa6ea Fix chaines de quetes a invisibilite : rafraichir les auras spell_area au rendu/acceptation
Les entrees spell_area conditionnees par un statut de quete (quest_start/
quest_end) n etaient reevaluees QUE lors d un changement de zone/aire.
Consequence : rendre une quete sans changer d aire ne donnait jamais l aura
attendue. Sur l Ile Vagabonde, la chaine utilise See Quest Invis 4/5 : apres
avoir rendu Dafeng (29785) sur place, le joueur n obtenait pas 104566, donc
Aysa (Quest Invisibility 4) restait INVISIBLE et Bataille pyrotechnique
(29786) ne pouvait jamais etre prise. Chaine morte sans deco/reco.

Fix : appel de UpdateAreaDependentAuras() en fin de RewardQuest et de
AddQuest (cas miroir a l acceptation).
Portee : toute chaine a invisibilite de quete du serveur.
Diagnostic : .gps du joueur (aire 5886 correcte) + lecture de
SpellArea::IsFitToRequirements ; valide en jeu (Aysa visible, quete offerte).
2026-08-11 09:07:37 +00:00
SylvaniaCore deploy 2830420cf5 Fix traductions FR serveur-wide : reparer m_availableDbcLocaleMask
Le masque des locales disponibles etait initialise a 0 et JAMAIS renseigne
(cablage perdu dans ce fork custom) -> World::GetAvailableDbcLocale()
retombait toujours sur enUS -> GetSessionDbcLocale() forcait enUS ->
les hotfix de broadcast_text (dialogues PNJ, corps de gossip) etaient
pousses en ANGLAIS par-dessus les donnees FR natives du client.

Fix : DB2Manager::LoadStores expose le masque reel des locales (fichiers
disque + locales chargees depuis la base hotfix quand DB2.Hotfix.LoadAllLocales
est actif, broadcast_text_locale faisant foi), branche dans World apres
LoadStores. Necessite aussi DB2.Hotfix.LoadAllLocales=1 dans worldserver.conf.

Valide en jeu : tous les dialogues PNJ de l Ile Vagabonde passent en francais.
Portee : serveur entier (tout texte resolu via le systeme de hotfix).
2026-08-11 08:33:19 +00:00
SylvaniaCore deploy 81c3e790c4 Transcription ArgusCore lot 11 : pretre/chasseur/guerrier/druide
- Pretre Esprit gardien (47788) : SCHOOL_ABSORB sur EFFECT_2, pas EFFECT_1
  — la sauvegarde anti-mort ne fonctionnait JAMAIS (2 hooks rebindes)
- Chasseur Filet du traqueur (200108) : MOD_ROOT_2 (reel) au lieu de
  MOD_ROOT — le burst de vitesse post-racine ne partait jamais
- Guerrier Mort soudaine (52437) : ABILITY_IGNORE_AURASTATE (reel) au lieu
  de DUMMY — le reset de Colossus Smash ne partait jamais
- Druide Instinct de tueur (108299) : DUMMY (reel) au lieu de
  MOD_SHAPESHIFT (2 hooks)
- Dernier recours guerrier (12975) + familier (53478) : scripts debranches,
  l effet natif APPLY_AURA/MOD_INCREASE_HEALTH fait deja tout (patch SQL)

Analyses sans action (pas de fix verifie transposable) : mage Flame On
(redesign charge-recovery), druide Omen of Clarity resto, pretre Vampiric
Touch proc, warrior Ravager (FIXME assume chez Argus aussi), voleur
nerve_strike/nightstalker, warlock life_tap/demonic_empowerment/darkglare
(designs differents, notes dans le suivi de chantier).
Demoniste : couverture complete cote features, 9 hooks morts restants notes.
2026-08-09 20:30:12 +00:00
SylvaniaCore deploy 3393b8482f Transcription ArgusCore lot 10 : chasseur de demons, recheck 7.3.5
- Lames demoniaques (203555) : hook proc sur PROC_TRIGGER_SPELL (reel) au
  lieu de DUMMY — le talent Havoc ne proccait jamais [aa54261d]
- Annihilation (201428/227518) : EFFECT_1 rebinde WEAPON_PERCENT_DAMAGE
- Metamorphose (201453) : immunite du saut — hook rebinde EFFECT_0 +
  APPLY_AURA (une valeur d aura 39 etait passee comme type d effet)
- Barrage gangrene : bindings SQL des deux scripts INVERSES (aura sur le
  sort de degats et inversement) — echange [82dbceb4]
- Aura d immolation : ajout du binding Vengeance 219830 (seul Havoc
  178740 etait couvert) [aa54261d]
Notes sans action : Glide (approche differente a evaluer en jeu), Marque
de feu 204022 (FIXME assume aussi chez Argus), fury refiller 203650
(pipeline de donnees, comme Soul Reaper DK).
2026-08-09 20:10:20 +00:00
SylvaniaCore deploy e3ab513653 Transcription ArgusCore lot 9 : DK / chaman / paladin
- DK Pilier de givre (51271) : immunite knockout jamais appliquee, hook
  EFFECT_2 rebinde sur MOD_DAMAGE_PERCENT_DONE (reel) [b972eb3d]
- Chaman Guidance ancestrale (108281) : proc de duplication des soins
  rebinde sur PERIODIC_DUMMY (reel) [92990cd1]
- Paladin Guide de vertu (200025) : hook de ciblage EFFECT_0 mort retire,
  ciblage natif suffisant [875ca905]
Soul Reaper DK note pour inspection pipeline (meme hook OK chez Argus).
2026-08-09 20:03:52 +00:00
SylvaniaCore deploy df469267ac Transcription ArgusCore lot 8 : moine, recheck 7.3.5
- Elixir de soins (122280) : hook proc sur DUMMY (reel) au lieu de
  PROC_TRIGGER_SPELL — le passif ne proccait jamais [603df7a1]
- Eclair de jade (117952) : script supprime, proc de chi 25%/tick = reliquat
  MoP, le canal Legion ne genere rien [8ffc9d55]
- Effuse (116694) : relais de soin MoP mort retire, redirection Soothing
  Mist conservee
- Stagger (124273/4/5) : hook remove rebinde EFFECT_1/DUMMY
- The de mana (197908) : debranche, effet natif Legion (patch SQL)
Preuve locale : erreurs did-not-match au boot pour chaque hook corrige.
2026-08-09 20:03:51 +00:00
SylvaniaCore deploy 3fd0da928a Transcription ArgusCore lot 7 : fallback socket realm [a7f5223f]
Les paquets destines au socket instance absent (SMSG_PET_SPELLS_MESSAGE etc.)
etaient jetes silencieusement -> familiers inertes. Repli sur le socket realm,
seul garanti pour toute session connectee.
2026-08-09 20:03:51 +00:00
SylvaniaCore deploy 4dfe00ae33 Transcription ArgusCore lot 6 : fondations engine
- Aura 373 (MOD_SPEED_NO_CONTROL) implementee dans UpdateSpeed : vitesse
  verrouillee des dash (Roulade moine x2.75/x3.75, Fel Rush) au lieu d un
  comportement non cape [aa54261d]
- AuraScript::_Validate accepte SPELL_EFFECT_APPLY_AURA_ON_PET dans les
  7 verifications d effets d aura [d308bf0b]
Methodologie : 7 commits engine analyses, 5 N/A justifies (systemes absents
ou deja presents chez nous).
2026-08-09 20:03:51 +00:00
SylvaniaCore deploy 7f2fe99830 Fix invulnerabilite silencieuse des comptes GM : ne plus auto-activer CHEAT_GOD au login
Le core upstream activait .cheat god a chaque connexion d un compte GM,
meme en mode joueur (.gm off). Consequence : les degats des creatures
etaient annonces au client (combat log) mais jamais appliques cote
serveur -> barre de vie client figee sur la derniere valeur, regen et
nourriture visuellement inertes (rien a regenerer cote serveur).
Diagnostic par sondes HPDBG sur SetHealth/RegenerateHealth/BuildValuesUpdate.
Le god mode reste disponible via .cheat god on explicite.
2026-08-08 10:27:53 +00:00
SylvaniaCore deploy df107cb232 ToS : fix crash SIGSEGV a la creation d instance (recursion infinie GetSaveData)
Le harnais bot a intercepte 3 crashs avant tout joueur : mon renommage de la passe 4
(GetBossSaveData -> GetSaveData, la suggestion du compilateur) avait transforme
l override GetSaveData en appel recursif infini -> stack overflow des qu une instance
1676 se cree. Fix racine : suppression des overrides GetSaveData/Load du module,
la persistance generique d InstanceScript (SetBossState) fait foi dans les deux sens.

LECON : ne jamais accepter aveuglement le did-you-mean du compilateur quand la
fonction suggeree est celle qu on est en train de definir.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-02 02:59:12 +00:00
SylvaniaCore deploy 69dbb2e657 Tombe de Sargeras : module complet 9/9 boss porte depuis DestinyCoreNew (mudyx)
AVANT : 4 boss etaient des coquilles vides de 28-33 lignes (Hote affige, Jeune fille
de vigilance, Sassz ine, KIL JAEDEN le boss final) et AUCUN boss n etait binde en DB
(ScriptName vides sauf Goroth) -> le raid entier etait decoratif malgre 978 spawns.

APRES : module lignee uwow complet (12 161 lignes, 12 fichiers) transcrit vers nos
APIs en 7 passes de compatibilite (~880 erreurs de compilation resorbees) :
instance script complet (portes, frames, graveyards), 9 encounters scriptes,
trash/evenements, 74 bindings de sorts, ~60 ScriptName de creatures, ATs.

Ajouts CORE reutilisables (compat DestinyCoreNew, prepareront le futur port Antorus) :
- UnitAI : DoCastTopAggro, GetObjectData, hooks no-op (SpellFinishCast,
  OnApplyOrRemoveAura, OnRemoveAuraTarget, OnAreaTriggerDespawn/Cast, OnInterruptCast,
  IsDisableGenerateLoot, GetModifyedData)
- CreatureAI : Talk(guid), Talk(liste aleatoire), ZoneTalk
- ScriptedAI : CheckHomeDistToEvade + alias IsHeroicRaid/IsMythicRaid/IsLfrRaid/
  IsNormalRaid/IsHeroicPlusRaid ; SummonList::GetCreature
- Unit : GetAnyOwner, CastSpellDelay x2 ; Creature : SetReactState(delay), StopAttack
- Map : ApplyOnEveryPlayer, IsHeroicPlusRaid ; GameObject : AddDelayedEvent (m_Events)
- Position : SimplePosXYRelocationByAngle, GenerateNonDuplicatePoints, IsLinesCross
  (reecrit sans G3D::LineSegment2D, absent de notre g3dlite)
- MotionMaster : MoveSmoothFlyPath x2 ; AreaTrigger : GetRadius/SetSphereScale(no-op)/
  isMoving/Despawn/GetProgressCompat ; AreaTriggerAI : IsValidTarget/CalculateSpline

Degradations douces assumees (documentees en commentaire dans le code) :
filtrage de cibles des ATs (IsValidTarget jamais appele par notre moteur), scale
dynamique des zones de Kil jaeden, conversations cinematiques, distribution de loot
personnelle, hooks d interruption/notification d aura, quelques approximations de
roles (SoloQ->ROLE_TANK) et de type de degats.

SQL : sql/sylvania/tomb_of_sargeras_bindings.sql (applique en DB).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-01 22:21:27 +00:00
SylvaniaCore deploy b4b14b591c Survol des cores 7.3.5 GitHub actifs : 2 fixes pathing transcrits (LegionCore-Reforged)
Inspection des cores 7.3.5 actifs en 2026 hors ArgusCore : Legion-Studios (releases
ecrasees, inexploitable), levrules (locales russes), Psychostout (dump sans historique),
mudyx/DestinyCoreNew (meme famille que nous ; ses fixes ciblent sa propre dette, notre
Nythendra est deja correcte ; NOTE : il possede des scripts Antorus/Tombe de Sargeras
qu on n a pas -> gisement de contenu futur), Titans/LegionCore-Reforged (2 fixes retenus).

Portes depuis LegionCore-Reforged 814091a (verifies buggues chez nous) :
- PathGenerator::BuildPolyPath : dans la branche farFromPoly on ne recalait QUE le point
  d arrivee ; le point de DEPART restait aberrant quand l unite est au-dessus du navmesh
  (debout sur un GO : quai, caisse, plateforme) -> chemins aberrants des poursuivants.
  Recalage du startPoint sur son poly ajoute.
- MMapManager : budget de noeuds Detour de la navmesh query 1024 -> 2048 : les tres longs
  chemins echouaient faute de budget.

Ecartes apres verification (pieges evites) : displayId 39 -> 32290 aurait CREE un bug
(nos 1216 GO display 39 spawnes = points d assise volontairement invisibles, 0 coffre) ;
locales frFR (nos 104640 noms FR >> leurs 9880, schema different) ; criteria appearance
(deja gere, 4 sites CriteriaHandler).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-01 17:10:07 +00:00
SylvaniaCore deploy 3b8478ddd6 Transcription ArgusCore lot 5 : degats du Bond heroique + timer capitaine Alterac
Inspection des 111 nouveaux commits ArgusCore (26/07 -> 01/08). Seuls 2 bugs sur 5
candidats existaient reellement chez nous (les autres deja corrects, voir ci-dessous) :

- Bond heroique (6544) : la constante SPELL_WARRIOR_HEROIC_LEAP_DAMAGE (52174) etait
  declaree mais JAMAIS castee -> le bond ne faisait aucun degat a l atterrissage.
  Le champ TriggerSpell de l effet JUMP_DEST n est pas peuple dans ce client, donc on
  caste explicitement. Compromis assume : part au lancement, pas a l impact exact. (32dfd577)
- Vallee d Alterac : m_CaptainBuffTimer initialise avec urand(0,4)*60 au lieu de *60000
  -> buff des capitaines quasi immediat au lieu de 2-6 min. Une seule des deux occurrences
  etait buguee (l initialisation), l autre etait deja correcte. (a4f5083d)

DEJA CORRECTS chez nous (verifies, rien a porter) : opcode SMSG_ACCOUNT_HEIRLOOM_UPDATE
0x25C5 (ArgusCore cite DestinyCore comme reference), constantes AV/IoC 600/300,
areatrigger_teleport a ID negatifs (notre conteneur est deja int64), map IDs des BG
(architecture differente, pas de battleground_scripts chez nous).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-01 15:24:17 +00:00
SylvaniaCore deploy f4cc719d02 FIX BLOQUANT (signalement #16) : les 2 scenarios narratifs recoivent le triple fix du runner
Cause racine : une invocation faite par la MAP (instance->SummonCreature) n herite
d AUCUNE phase, contrairement a un summon fait par une creature. Les joueurs etant mis
en phase 169 par OnPlayerEnter, toutes les vagues et PNJ de ces 2 scenarios etaient
invisibles/intangibles => etape 1 infranchissable (joueur Argus bloque sur la map 1460).
Ce defaut avait ete trouve par le harnais bot le 26/07 et corrige dans le runner
d artefacts UNIQUEMENT ; les 2 scenarios narratifs, ecrits avant, ne l avaient jamais recu.

- Rive Brisee : helpers Summon/SummonAt centralises -> phase 169 + Z cale au sol ;
  aggro forcee sur les vagues de demons (compteur d etape) ; allies non touches
- Moine Serenity s End : helper SummonPhased (phase + Z), 22 appels map rediriges

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 05:36:11 +00:00
SylvaniaCore deploy a5466c4d00 Moine : Ring of Peace (116844) implemente - areatrigger d ejection
Dernier manque moine de l audit 10/07. AreaTrigger id 718 (trouve via SpellEffect.db2
effet 179 CREATE_AREATRIGGER misc[0]=718). Struct at_monk_ring_of_peace : OnUnitEnter
ejecte tout ennemi valide hors de l anneau (KnockbackFrom depuis le centre), mecanique
Legion 7.3.5 confirmee (wowhead/wowpedia : anneau 8s, ennemis entrants ejectes).
Binding : areatrigger_scripts(718) -> ~/dc-patches/ring_of_peace.sql.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-26 21:32:04 +00:00