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>
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>
Issue TrinityCore #22243 (fermee sans solution) : Shang Xi disparait a
lacceptation, aucun dialogue, quete interminable. Trois causes cumulees,
identifiees par sondes temporaires et .debug phase :
1. PHASE : le PNJ de scene (56686) heritait de la phase du donneur (1527),
que le joueur PERD justement en acceptant la quete (il ne garde que
1327). Cree mais invisible. Mesure : summon=OK cibleVoitSummon=NON.
2. DIALOGUES : repliques et sons ciblaient invocateur (7) / proprietaire
(23) - non resolus dans les listes daction differees (source_type 9).
3. CREDIT : le sort 106625 (credit du PNJ 56688 = lobjectif) ciblait 23 et
sexecutait au meme instant que la disparition du PNJ.
Correctifs : retrait de phase avant invocation + le joueur invoque ;
le PNJ force sa phase sur 1327 ; textes/sons cibles sur soi ; credit
attribue directement (KilledMonster) au joueur le plus proche ; despawn
repousse de 3s. Patch SQL rejouable, valide en jeu de bout en bout.
Note : seul le patch SQL est commite - dautres fichiers du working tree
appartiennent a une session parallele (module bots/BG).
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>
- 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>
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>
- 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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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.
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).
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).
Village peuple en 2 passes (guids 20540xxx + 21000xxx) se chevauchant a
l entree -> jusqu a 4 singes empiles sur le meme point. Retrait des 4
doublons < 2m, village conserve peuple (~30 Hozen, blizz adaptatif).
Le client 7.3.5 embarque 88k traductions frFR officielles mais TC lit
creature_text_locale (11 lignes) et gossip_menu_option_locale (18 lignes).
Pont via BroadcastTextId : +12 288 dialogues de creatures et +5 605 options
de gossip en francais, serveur entier. Recharge a chaud, aucun restart.
Decouvert en testant l Ile Vagabonde (dialogues d ambiance en anglais).
Degats des sorts de creatures verifies authentiques (sonde DMGDBG : melee
14-16, Back Kick 69 = ratio MoP retail) -> intacts. La deviation etait la
densite custom : 70 spawns la ou le retail en met ~30. Echantillonnage a
dispersion maximale, espacement final 28m > rayon d aggro (~17m) : le
multi-pull redevient un choix du joueur.
Philosophie actee avec l admin : blizz adaptatif = preserver les valeurs
Blizzard, corriger les deviations custom.
- 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.
- 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).
- 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.
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.
- 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).
Deux bugs a la Mare des Reflets (Ile Vagabonde) empechaient de finir
la quete jouer 5x avec l Esprit de l eau :
- Shu jouable (65493) portait l aura d invisibilite 89304 (reservee au
Water Spout Bunny 60488) -> spawne mais invisible.
- spell_water_spout_quest_credit (invoque l Esprit de l eau au terme de
la quete) present dans le core mais lie a aucun sort -> PNJ final absent.
Patch SQL data : sql/sylvania/shu_water_spirit_fix.sql
Signale et valide en jeu par le joueur.
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.
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>
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>
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>
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>
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>
dc_world n est pas couverte par le backup auto (auth+characters seulement, dump
compresse ~78 Mo). Ces patchs sont la trace versionnee hors-VPS des changements
data : framework scenarios d artefact, campagne moine, intro Rive Brisee, bindings
Ring of Peace/Chi-Ji, trainers, quetes, fixes divers.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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>
- LFG: quitter la file en solo n autorise que SON propre ticket, pas celui d un autre (28b8d962)
- Calendrier: modifier un evenement ou y ajouter une invitation reserve au proprietaire
ou a un invite moderateur (helper CalendarEventEditableBy sur UpdateEvent + Invite) (0c2fed59)
Non portes (deja OK/absents chez nous) : arene join utilise deja la vraie note (pas le
bug hardcode a 1) ; Chant de Chi-Ji areatrigger DEJA implemente (at_monk_song_of_chiji).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PathGenerator::ValidatePathAgainstCollision() appelee en fin de BuildPointPath :
valide chaque segment du chemin MMAP contre la collision vmap (isInLineOfSight,
ModelIgnoreFlags::Nothing). Le MMAP ne modelise pas les objets fins (clotures,
barrieres) -> un chemin nav-mesh valide peut les traverser. Si un segment est bloque,
on tronque le chemin (PATHFIND_INCOMPLETE) pour que l unite s arrete devant l obstacle.
Adapte a nos APIs : _sourceUnit, isInLineOfSight 8-params, log printf, halfHeight fixe.
Skippe les chemins non-MMAP (vol/nage/raccourcis).
ARBITRAGE reversible : plus realiste mais risque de sur-troncature (PNJ qui s arretent
devant une porte/rampe M2 vue comme obstacle). A surveiller : PNJ bloques en mouvement.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Les 9 verifications de LoS de sorts dans Spell.cpp passent de ModelIgnoreFlags::M2
(ignore les doodads M2) a ::Nothing (les prend en compte). Effet : on ne peut plus
lancer de sort a travers piliers/arbres/portes qui sont des modeles M2. Nos vmaps
contiennent bien la geometrie M2 (13545 modeles .m2.vmo) donc le changement est effectif.
Couvre : cibles de chaine, CheckCast (cible+destination), CheckEffectTarget, ecorchage/cadavre.
ARBITRAGE reversible : plus Blizzlike mais risque de faux blocages sur doodads a
collision imprecise. Verifie en scenario (combat OK, 0 erreur LoS anormale). Revert =
Nothing -> M2 sur ces 9 sites si les joueurs signalent des sorts bloques a tort.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Anti-crash (adaptes a nos APIs) :
- Spell: assert dur sur cible destination -> log+skip (a00b85b2)
- SpellAuraEffects: DoT weapon-percent, caster nul -> tick a 0 (b456b7f7)
- Battleground: PlayerScores.find sans garde -> continue si absent (e875f9f4)
- VehicleHandler: 4x siege nul deref -> return (392466b1)
- LootHandler: division par zero si liste vide -> return (e8196eed)
Anti-exploit :
- PetHandler: index action bar hors bornes (OOB write) + abandon reserve au proprietaire (fec060ab)
- Guild: onglet de banque reserve au chef (2288f107) ; attribution de rang ne peut viser/donner un rang >= au sien (f94d82dc)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- PlayerBotSession : simulation de l ack de teleport PROCHE (CMSG_MOVE_TELEPORT_ACK),
debloque les .tele enchaines sur un bot (le 1er passait, les suivants restaient coinces)
- Runner artefacts, fixes issus de la passe bot in-game (7 scenarios certifies ACTIFS) :
* vagues engagees explicitement (SetReactState AGGRESSIVE + SetInCombatWithZone) :
les TempSummon de Map n aggro pas seuls -> mobs inertes sur TOUS les scenarios
* phase 169 appliquee aux invocations (alignement avec OnPlayerEnter)
* tolerance GetHeight 25->60m (Skywall : plateformes etagees, le garde-fou lachait
les vagues dans le vide) + sonde QA-PROBE etiquetee par map (visibilite/combat/pos)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- PlayerBotSession : simulation de l ack MSG_MOVE_WORLDPORT pour un bot en jeu
(IsBeingTeleportedFar) ; sans ca tout .tele name sur un bot restait bloque
- BotFieldAI : eviction hors instance gatee par la config pbotqa (harnais scenarios)
- Diagnostics QA-BOTLOG/QA-RUNLOG (login bot, holder async, cycle du runner)
- Runner artefacts : Z des spawns cale au sol via GetHeight avec repli sur l ancre,
offsets resserres (plateformes type Skywall)
- Cause racine login bots : noms generes invalides (chiffres) rejetes par
CheckPlayerName -> persos QA renommes en DB (Botqa/Botqb, compte 32)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Toutes les maps de scenario d artefact sont couvertes. Config ~/dc-patches/artifact_batch10.sql, options 54-59.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>