Apres Une nouvelle direction (40373), la campagne sarretait net.
1) La liberte a portee dailes (4 variantes spe x faction) : recepteurs
Kayn 96666 et Altruis 96669, aucun donneur. Attribue a Kayn pour les
quatre - il en est deja recepteur, il est le SEUL des deux a etre spawne
(96669 na aucun spawn nulle part), et il porte npcflag=3. Le champ
AllowableRaces filtre deja Alliance/Horde.
2) Le depart des Illidari (39689/39690) : recepteur Khadgar 97978, dont le
script gere justement le OnQuestReward de ces deux quetes. Il arrive a la
fin de la quete precedente, cest donc lui qui enchaine.
Limite connue : rien ne filtre la SPECIALISATION (ce core na aucun type de
condition pour cela), un joueur verra les deux variantes de sa faction.
Meme limite que les deux Arretez Guldan.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
La fenetre saffichait correctement mais cliquer ne confirmait rien. Le
handler serveur est pourtant sain : HandlePlayerChoiceResponse appelle
OnPlayerChoiceResponse puis nexige aucune recompense. Le clic narrivait
donc pas jusquau serveur.
Seule divergence structurelle avec le choix 231, qui fonctionne : celui-ci
possede une ligne playerchoice_response_reward par reponse, entierement a
zero, la ou 234 nen avait aucune. Dans SendPlayerChoice, le bloc Reward
nest emis que si Reward existe : les reponses de 234 partaient donc sans ce
bloc. Les deux choix partagent par ailleurs le meme jeton de confirmation
et le meme style dinterface.
HYPOTHESE EMPIRIQUE, pas une cause prouvee : impossible dobserver ce que le
client fait du bloc manquant. Cest la seule divergence entre un choix qui
marche et un qui ne marche pas, et le changement naccorde rien a personne.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signale en jeu : choisir entre Kayn et Altruis ne declenche rien.
1) HOOK MORT, 4 occurrences. OnCompleteQuestChoice est declare dans
ScriptMgr mais appele DE NULLE PART ; le seul hook invoque a la reception
dun choix est OnPlayerChoiceResponse (QuestHandler.cpp). Corrige dans :
zone_vault_of_wardens.cpp choix Kayn / Altruis
zone_legion_dalaran_legion.cpp Dalaran
class_hall_dh.cpp fief chasseur de demons
class_hall_hunter.cpp fief chasseur
Meme defaut que celui corrige a Mardum (commit 81b37487). Dautres fichiers
(class_hall_monk, class_hall_artifact_choices) utilisaient deja le bon nom,
ce qui confirme le diagnostic.
2) CREDIT MANQUANT. Le handler ne lancait quun sort : lobjectif 99278
(choisir entre Kayn et Altruis) de la quete 40373 netait accorde par rien.
3) QUETE SANS DONNEUR. 40373 a un recepteur et deux objectifs coherents
mais aucune ligne creature_queststarter. Attribuee a Korvas 97644 : elle en
est deja la receptrice, cest son propre script qui ouvre la fenetre de
choix, elle recoit aussi la quete precedente 39686, et elle porte npcflag=3.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
La table playerchoice stocke ce texte directement en russe (ChoiceId 234)
et aucune ligne de localisation frFR nexistait. SendPlayerChoice lit la
table de base puis lecrase par la version localisee si elle existe : on
remplit donc playerchoice_locale et playerchoice_response_locale plutot que
decraser la base, ce qui reste reversible et sans perte pour un russophone.
Traduction redigee, terminologie francaise du jeu, balisage de couleur et
sauts de ligne preserves.
SIX AUTRES CHOIX SONT AUSSI EN RUSSE et restent a traduire : 237 et 238
(gemme et anneau), 247/262/265/280 (choix darme prodigieuse, qui concerne
toutes les classes).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
zone_vault_of_wardens.cpp declare 26 scripts, UN SEUL etait rattache. Toute
la fin de la campagne DH en dependait : Bastillax, le Bassin du Jugement,
Khadgar, le choix entre Kayn et Altruis.
Les commentaires du fichier sont trompeurs et mont induit en erreur trois
fois : lentree 243967 y est donnee pour DEUX scripts differents et elle est
fausse dans les deux cas ; 197180 est un identifiant de sort presente comme
une creature. Chaque correspondance a donc ete etablie par les donnees - nom
en base, role de donneur/recepteur de quete, ou proximite geographique - puis
verifiee. Detail de chaque identification dans len-tete du patch.
Innocuite : les 11 cibles nont NI ScriptName NI ligne smart_scripts, il ny a
rien a remplacer.
Non rattaches deliberement : 92718 Maiev, 92986 Altruis, 99631, 99632, les 4
scripts de combat et les 2 cellules ont tous un SmartAI actif et exigeraient
une comparaison ligne a ligne - meme prudence quà Mardum, ou deux IA C++ se
sont revelees etre des ebauches inferieures au SmartAI en place.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1) Quete 39686 Jusquau sommet ne se validait pas. Son unique objectif
attend le credit 96814, quaucune source naccordait : le code C++
go_warden_ascent (surveille les joueurs a moins de 10 m et credite des que
leur Z depasse 253) netait pas rattache au gameobject 244644, lascenseur.
2) Portails de la Legion (99501, 114358) rendus fonctionnels - demande
explicite de lutilisateur. Ils sont indispensables a lobjectif bonus 39742
(34 ennemis a credit 97969) : les 119 creatures qui donnent ce credit ont un
respawn de 2 h, donc un joueur traversant la zone une fois ne peut pas
boucler lobjectif. Les portails sont la source renouvelable prevue.
Trois obstacles cumules leves : npcflag 0 -> 1, retrait de NOT_SELECTABLE
sur 99501 (33555200 -> 768, immunites conservees pour quil reste cliquable
sans etre frappable), et ScriptName vide -> npc_legion_portal.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signale en jeu : plus aucune quete apres Le soulevement des Illidari. En
base, 12 quetes du Caveau jamais prises et le joueur bascule directement
sur Dalaran (44663).
Kayn 92984 est declare donneur de 39682 Envole-moi dans creature_queststarter
mais son npcflag valait 0 : aucun drapeau de dialogue ni de donneur. Or
cest la quete dentree de toute la branche haute - elle donne la
chauve-souris qui permet de monter chez Allari (96675) et Korvas (97643),
places a z=126 alors que Kayn est en bas a z=-282.
Aligne sur npcflag=3 comme ses deux collegues donneurs de la zone.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signale en jeu : Mirana attaque le joueur quand il laide a combattre les
demons. Elle nattaquait pas delle-meme.
Deroule de Unit::GetReactionTo avec la faction 2643 : pas hostile aux
joueurs (groupe ennemi 8 = Legion), pas amicale non plus (groupe ami 0),
pas de drapeau HOSTILE_BY_DEFAULT -> retombe sur REP_NEUTRAL. Neutre veut
dire ATTAQUABLE : les degats de zone du chasseur de demons la touchaient et
elle ripostait.
Ces deux PNJ etaient les seuls de la carte 1468 en 2643. Tous les autres
allies du Caveau sont en 2804, qui declare les joueurs comme amis tout en
restant hostile a la Legion. Alignes sur leurs pairs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Lobjectif 3 de Arretez Guldan (credit 106241, Crusher and Sledge slain and
power taken) netait accorde par AUCUNE source : aucune ligne smart_scripts
avec action 33 param 106241 sur tout le serveur, et le code C++ qui le
donne nest pas rattache.
Constat plus large : zone_vault_of_wardens.cpp declare 26 scripts et UN
SEUL est lie en base. 25 IA ecrites et jamais branchees - Maiev, Kayn,
Altruis, les geoliers, les portails, les miroirs.
Credit ajoute au SmartAI existant plutot que de rattacher le C++ : cela
evite de remplacer le SmartAI de Sledge (7 lignes) et de reconduire la
fragilite du C++, qui naccorde le credit quaux joueurs presents dans la
liste de menace au coup fatal - le motif exact qui avait bloque Tyranna
(commit 7987f07d). Cible 18 = tous les joueurs a 100 m, sans condition.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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.
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>
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>
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>
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>
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.
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>
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>
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>
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).
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.
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.
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>
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>
The spell script spell_hun_dire_beast summoned the zone "Beast" guardian but
never ordered it to attack, and the ~108 summon templates had no AIName/ScriptName,
so the beasts idled next to the owner instead of engaging the target.
Add a dedicated ScriptedAI npc_pet_hun_dire_beast (mirroring npc_pet_hunter_snake_trap,
minus the snake-specific level-40 health formula and poison) that, on spawn, attacks
the summoner target (owner GetVictim / getAttackerForHelper), and bind it to the 108
inert level-1 friendly "Beast" summon templates via sql/sylvania/dire_beast_ai_20260705.sql.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Le trainer moderne generique First Aid (TrainerId 160) n'avait pas le
sort 3273 (apprenti = apprendre la profession), et 6 menus de Secourisme
routaient vers lui ou vers le trainer VIDE 877 => fenetre d'entrainement
vide pour un debutant (Shaina Fuller/Hurlevent, Arnok/Orgrimmar, Doc
Zapnozzle, Nus, Amelia Atherton, Anchorite Yazmina, Jandros Terres,
Aresella, Joseph Wilson).
Fix:
- +3273 sur trainer_spell TrainerId 160
- gossip_menu_option_trainer: menus 657,4761,5855,8802,22169,10826 -> 160
(tous 100% Secourisme, verifie)
Active a chaud sans restart: .reload trainer + .reload gossip_menu_option
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>