master
14 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
fa6d14c4a0 |
Butin WoD/Legion : brancher les boss sur le Guide d aventure
Signalement Discord : les instances haut niveau ne lachent aucun equipement. Sur ce core, le butin d equipement des boss modernes ne vient pas de creature_loot_template mais de Unit::Kill, qui lit creature_template_journal (entree -> JournalEncounterID) puis tire 2 objets dans JournalEncounterItem.db2 avec le bon masque de difficulte et le bon contexte d objet. Cette table ne contenait que 45 lignes, toutes Burning Crusade : aucun boss de Draenor ni de Legion, et ces boss ont lootid = 0. Ils ne lachaient donc rigoureusement rien. 44 correspondances ajoutees, etablies depuis les DB2 officiels du client (JournalInstance -> JournalEncounter -> JournalEncounterCreature -> CreatureDisplayInfoID -> creature_template.modelid), une seule creature par rencontre et uniquement celles sans table de butin, pour ne rien doubler. Couvre entre autres la Fonderie des Rochenoire (10 boss), les Docks de fer, Haut-perchoir, le Pic Rochenoire, la Floraison eternelle, le Siege du Triumvirat (4 boss), le Tombeau de Sargeras (6), Gul dan et Elisande. Les scripts de generation et de verification sont dans chantiers/butin-journal. |
||
|
|
70fdf20075 |
Rivage brise 1460 : les vrais criteres, et le deroule de reference
SIGNALE EN JEU : « j ai passe ma phase 2 et ca m a switche jusqu a la 5 sans rien faire », puis « je suis en phase 4, juste a cote de Varian, et rien ne se valide ». Deux causes distinctes. La plage validait son etape DEUX fois : une fois par les criteres officiels que le moteur reconnait, une seconde par le CompleteStep() ajoute par-dessus. Le moteur avancait donc de deux crans. Le forcage est retire, les criteres suffisent. L etape « Trouver Varian » guettait une copie invoquee sur la plage, alors que la carte porte DEJA le vrai Varian en (1120, 2484) parmi les 757 creatures transposees -- comme Vol jin, Sylvanas et Jaina. Le joueur se tenait devant le bon personnage pendant que le script surveillait un sosie. On retient desormais celui de la base, distingue par son spawnId, et on ne le teleporte plus : l etape s appelle « Trouver ». L etape du portail comptait deux « ancres dimensionnelles » (90637) que le script fabriquait lui-meme. La video de la bataille affiche « 0/4 Ancres blindees detruites », et le wiki confirme : quatre 101667, dont la carte porte quinze exemplaires deja poses. Les criteres officiels 45131, 45228 et 45288 sont desormais alimentes. Le deroule de reference joint croise la video, les DB2 du build et le wiki. Il revele trois ecarts NON corriges : le commandant Horde est Azgalor et non Arganoth, l etape 4 Horde vise Sylvanas ET Baine, et l etape 9 Horde consiste a tenir la crete. Il etablit aussi que nos dialogues sont inventes -- BroadcastTextId a zero -- et que la replique de Jaina parlant d ancres « dimensionnelles » est ce qui a produit l erreur de code de l etape 5. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
b047cb7a02 |
Reference Legion : premiere section, la campagne du Front-de-Legion
Croisement entre les sources officielles et notre base, pas une fiche encyclopedique. Les quinze quetes de la campagne existent chez nous avec donneur et receveur : elle n etait pas cassee, seuls ses deux points d entree l etaient. Consigne le piege des DEUX scenarios du Rivage brise (1460 intro 7.0 et 1666 assaut 7.2), les trois Khadgar a ne pas confondre, les huit etapes du scenario 1280 relevees dans les DB2, et deux anomalies : la quete 46832 sans objectif, et un doublon de titre sur 48641. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
5c4c4b6d7a |
Chantier Rivage brise : carnet remis a jour apres le portage
Le carnet decrivait un etat du 27/08 ou rien n etait applique. Il note desormais ce qui est deploye, ce qui reste a verifier en jeu, et la raison pour laquelle les 5 chemins scriptes avaient ete manques : ils vivent dans waypoint_data_script, table absente de notre schema. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
a95670ac0a |
Rivage brise : portage de l'Assaut 7.2 (scenario 1280, carte 1666)
La carte 1666 etait declaree mais entierement vide, et instance_template y reclamait un script fantome. Les quetes 45102 « Begin the Assault » et 46734 « Assault on Broken Shore » etaient donc infranchissables : elles relevent de ce scenario, et non de l'introduction 7.0 deja portee sur la carte 1460. PORTAGE, PAS TRANSCRIPTION. La source (dufernst/LegionCore-7.3.5, meme lignee uwow) repose sur quatre extensions que nous n'avons pas : onScenarionNextStep/getScenarionStep, CRITERIA_TYPE_SCRIPT_EVENT_2, FunctionProcessor et une surcharge de GetClosestGraveYard. La progression est donc inversee : au lieu d'etre rappele a chaque etape, le script alimente les criteres officiels et le moteur avance seul -- la meme architecture que sur la carte 1460. Les neuf criteres des huit etapes ont ete releves dans les DB2 du build 7.3.5.26972 (ScenarioStep, CriteriaTree, Criteria) et non recopies de la source ; ils confirment ses identifiants d'asset. Sept sont de type 92 (SEND_EVENT_SCENARIO), un de type 73, un de type 68. Six ecarts d'API traites, tous constates et non supposes : InstanceScript(InstanceMap*), Conversation::CreateConversation (Player n'a pas cette methode -- la source l'appelait sur une creature, cela n'aurait pas compile), UNIT_NPC_FLAGS avec SetFlag64, DamageTaken a 2 arguments, OnSpellClick a 2, MovePath a 2. NON PORTE : player_scripts_for_start_assault, qui sondait chaque joueur a chaque tick pour lui imposer la quete 46730. Un donneur en base fait le meme travail sans ce cout. SQL joint : - rattachement des 5 scripts a leurs 11 entrees, toutes verifiees exclusives a la carte 1666 ; - les 87 points des 5 chemins scriptes. Ils vivaient dans waypoint_data_script, table absente de notre schema, d'ou leur oubli lors de l'extraction du 27/08. Le 11322708 est le vol d'arrivee : l'atteinte de son point 20 declenche l'etape 0, sans lui rien ne demarrait ; - le donneur manquant de 45102, l'archimage Khadgar 116302, deja pose chez nous aux coordonnees de la reference mais jamais declare. Les 593 creatures et 59 objets de la carte etaient generes depuis le 27/08 et n'avaient jamais ete appliques ; ils le sont desormais. RESERVE : rien de tout ceci n'a ete verifie en jeu. Les credits de quete 116253 et 116279 sont en outre cables sur la fermeture des deux premiers portails par deduction -- la quete parle de « First » et « Second Legion Spire destroyed » -- et non sur une donnee. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
a4d245ecbe |
Commandes : .npc add perdait la phase du maitre de jeu
Les PNJ crees en jeu n'etaient visibles qu'en mode MJ. InheritPhaseShift donnait bien la phase du joueur a la creature, mais SaveToDB n'ecrit que GetDBPhase() -- la phase DECLAREE EN BASE, nulle pour une creature creee a la volee. La commande detruit ensuite l'objet et le recree depuis la ligne enregistree, donc sans phase. Dans une aire phasee, PhaseShift:: CanSee exigeant une intersection, la creature etait invisible a tout joueur normal ; le mode MJ masquait le defaut, SetAlwaysVisible court-circuitant le test de phase. TrinityCore 3.3.5 transmettait la phase explicitement a Create et a SaveToDB, via un GetPhaseMaskForSpawn qui ignorait volontairement l'etat « MJ voit tout ». La reecriture du systeme de phases a perdu ce principe : master a le meme defaut. On le restaure, en annoncant la phase retenue puisqu'un joueur moderne peut en porter plusieurs alors qu'une ligne de la table creature n'a qu'un champ. SQL joint : phase 6666 posee sur l'aubergiste deja pose au port de Hurlevent, et suppression de 18 options de dialogue de type 1 qui doublonnaient une option fonctionnelle et se placaient au-dessus d'elle. Les options porteuses de conditions sont preservees -- une premiere version avait supprime a tort les options d'Halloween. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
3a4c6c01dd |
Hyjal : parler a Jaina faisait tomber le serveur -- et faction 16 au Rivage brise
1) PLANTAGE DU SERVEUR, cause reelle de la coupure de cette nuit Trace du vidage 3007513 : #0 Trinity::Assert(...) #1 npc_jaina_proudmoore::OnGossipHello(Player*, Creature*) #2 WorldSession::HandleGossipHelloOpcode hyjal.cpp utilisait ENSURE_AI(hyjalAI, creature->AI()), qui ASSERTE. Or GetAI() ne fabrique une hyjalAI que si GetHyjalAI() la trouve, donc uniquement dans l instance du Mont Hyjal. Ailleurs la creature recoit une IA quelconque et l assertion tue le process. Declencheur : un exemplaire de Jaina (17772) se trouve sur la carte 0, a Hurlevent (-8295, 1386), en plus de celui du Mont Hyjal. Lui parler suffisait a planter le serveur -- faille exploitable par n importe quel joueur, sans commande ni privilege. Les 5 occurrences passent en dynamic_cast avec sortie propre. J avais d abord conclu a une recursion en me fiant a la taille du vidage (387 Mo contre 133). C ETAIT FAUX : cette taille reflete la memoire allouee au moment du plantage, pas un debordement de pile. La trace, elle, etait parfaitement lisible. 2) RIVAGE BRISE : factions demoniaques ramenees a 16 Etabli par TEST A/B, pas par raisonnement. Une seule entree basculee en faction 16 (Molosse de l effroi gangrene, 90686), toutes choses egales par ailleurs. Verdict en jeu : « les molosses sont maintenant attaquables », les autres non. La sonde SPAWNDBG confirme que seule la faction distingue les deux : Felstalker Dreadhound faction=16 drapeaux=32768 drapeaux2=0 OK Felguard Legionnaire faction=2780 drapeaux=32768 drapeaux2=0 bloque Pourquoi 2780 echoue reste INEXPLIQUE : FactionTemplate.db2 lui donne EnemyGroup=15 (ennemi de tous) et sa faction 1786 a ReputationIndex=-1, donc aucune reputation n intervient. Sur le papier elle devrait etre hostile. Le refus vient du client, qu aucune sonde serveur ne peut observer. On retient donc la faction 16, demontree fonctionnelle dans ce scenario meme -- ecart assume avec la donnee de reference. 101 entrees, 464 spawns. Effet secondaire bienvenu : les demons cessent de s entretuer (Friend_0=14). 3) COMPTEUR : tout demon compte desormais Signale : « les molosses sont attaquables mais ne comptent pas dans l objectif ». OnUnitDeath ne reconnaissait que les cinq entrees invoquees par le script. On s appuie desormais sur le type demon plutot que sur une liste de 101 entrees qui vieillirait mal. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
5408eae697 |
Rivage brise 1460 : UNIT_FLAG2_UNK5 rendait les demons inattaquables
Signale en jeu, nommement : Gangreseigneur Rakkan, Legionnaire gangregarde, Molosse de l effroi gangrene. Et l observation decisive : « les demons inattaquables se battent avec les demons attaquables ». LA CAUSE EST DE MON FAIT. La transposition des modeles a importe unit_flags2 sur 147 entrees. Ces creatures valaient 0 avant ; elles ont recu 2097152, soit 0x200000 -- UNIT_FLAG2_UNK5. CE DRAPEAU EST PARTICULIER : notre serveur l IGNORE totalement, aucune de ses verifications ne le consulte. Le client, lui, l interprete et refuse de designer la creature comme cible. C est ce qui explique le symptome le plus deroutant de la serie : la sonde posee dans _IsValidAttackTarget n a JAMAIS produit la moindre ligne pour ces creatures. Le client refusait de lui-meme, sans jamais interroger le serveur. L ABSENCE DE TRACE ETAIT L INFORMATION -- j ai mis trois tours a la lire comme telle. CORRELATION QUI TRANCHE : demons INVOQUES (attaquables) : unit_flags2 = 0 demons STATIQUES (bloques) : bit 0x200000 present 67 entrees, 420 spawns. Seul ce bit est retire, le reste de la colonne est preserve. Le serveur ne s en sert pas : le retrait ne peut rien casser cote logique. Egalement dans ce lot, deux sondes conservees le temps de la validation : ATTDBG (recentree sur les factions 2780/1768) et SPAWNDBG (etat reel des creatures a leur creation). Deux divergences d API relevees au passage : getFaction() et getLevel(), en minuscule dans ce fork. Retour arriere joint. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
995122dc78 |
Rivage brise 1460 : les demons statiques etaient immunises aux joueurs
Signale en jeu : « les demons invoques c est ok mais pas les autres au fond ». Les creatures invoquees par le script etaient frappables, les placements statiques non. LA CAUSE EST DE MON FAIT. La transposition des modeles d hier a importe unit_flags sur 136 entrees. Parmi les valeurs reprises, 33536 et 537166592 contiennent le bit 256 -- UNIT_FLAG_IMMUNE_TO_PC. Dans le coeur de reference un script retire vraisemblablement ce drapeau au bon moment ; le notre ne gere aucun drapeau, les demons restaient donc immunises en permanence. Cela explique aussi pourquoi la sonde ATTDBG ne produisait plus rien : le client refusait de lui-meme, sans jamais interroger le serveur. L absence de trace etait l information. PORTEE : uniquement les factions HOSTILES -- 2780 (30 entrees), 1768 (20 : Anetheron, Balnazzar, Brutallus...), 2878 (Krosus), 14 (Gul dan), 2877 (Lave gangrenee). Soit 53 entrees. EPARGNES car l immunite y est legitime : factions 35, 2876, 2879, 1819 -- allies, pretres, montures, vaisseaux. 13 entrees conservees. SIMPLIFICATION ASSUMEE : Krosus et Gul dan perdent aussi leur immunite, alors qu une implementation fidele la retirerait au debut de leur etape. Notre script ne gere aucun drapeau : la conserver rendrait les etapes 7 et 8 infranchissables. La progression reste pilotee par la machine a etats du script. Retour arriere joint. A NOTER, non traite : les modeles de Varian (90713) et Jaina (90714) sont ceux d anciennes versions. Le dump de reference ne stocke aucun modele dans creature_template -- ses affichages viennent d ailleurs. Une autre source sera necessaire. Cosmetique, non bloquant. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
6219d00c06 |
Rivage brise 1460 : les modeles de creatures etaient des souches
Signale en jeu : « exemple lui n est pas attaquable », capture d un
.npc info montrant Felguard Legionnaire (109591) en Level: 1.
Nos creature_template de l epoque Legion sont des SOUCHES : sur les 152
entrees exclusives a cette carte, 141 etaient au niveau 1. La faction,
corrigee au tour precedent, n etait que la partie visible du trou.
Divergences relevees face au dump de reference :
minlevel 150/152 unit_flags2 147/152
maxlevel 145/152 unit_flags 136/152
unit_class 62/152 speed_run 55/152
AIName 32/152 speed_walk 12/152
151 entrees corrigees. Il ne reste que 6 souches : les entrees partagees
avec d autres cartes, volontairement ecartees comme pour les factions --
ce sont des declencheurs invisibles.
EXCLUS VOLONTAIREMENT du correctif, malgre leurs divergences :
AIName -- transposer pourrait defaire un comportement pose
sciemment chez nous.
flags_extra -- porte des drapeaux que le coeur calcule lui-meme, dont
CREATURE_FLAG_EXTRA_DUNGEON_BOSS pose au chargement
depuis instance_encounters.
Verification prealable ecrite : un comparateur colonne par colonne
(chantiers/rivage_brise/outils/comparer_templates.py) a mesure les
divergences avant toute modification, plutot que de transposer en bloc.
La faction n y figurait plus, confirmant que le correctif precedent avait
bien pris et que l outil dit vrai.
Retour arriere joint, reconstruit depuis les valeurs d avant correction.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
483b3c02bc |
Rivage brise 1460 : les demons etaient flagues en allies
Signale en jeu, capture a l appui : « ce sont bien des ennemis mais
flagues en allie » -- plaques de nom vertes sur les Legionnaires
gangregarde.
Sur les 156 entrees placees, 729 spawns sur 757 portaient la faction 35,
amicale envers tous. Comparaison avec creature_template du dump de
reference : 135 entrees divergeaient. Ce trou est ANTERIEUR a l import
des placements, qui ne touche pas creature_template -- c est une valeur
par defaut posee sur ces PNJ de Legion dans notre base.
Repartition retablie :
2780 441 creatures les demons de la Legion (hostiles)
2879 105 les PNJ Alliance
2876 67 les PNJ Horde
1768 23 les demons nommes (Anetheron, Balnazzar, Brutallus)
35 74 ce qui doit rester neutre : canons, vehicules,
navires, declencheurs invisibles
PRUDENCE OBSERVEE : creature_template.faction agit PARTOUT, pas seulement
sur la carte visee. Les 4 entrees possedant un spawn hors de la carte
1460 ont donc ete EXCLUES du correctif -- ce sont des declencheurs
invisibles (General Purpose Bunny) et un matelot, pour lesquels la
faction 35 est correcte. Portee reelle : 135 entrees exclusives a 1460.
Fichier de retour arriere joint (chantiers/rivage_brise/), reconstruit
depuis les valeurs en place avant modification.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
c8f1d570e1 |
Rivage brise : placements des cartes 1460 et 1666, generateur unifie
NON APPLIQUES au serveur. Verses pour relecture.
DECOUVERTE QUI RECADRE LE CHANTIER
Il y a DEUX Rivages brises, et je preparais le second en premier :
carte 1460 -- le lancement de Legion (Voljin, Varian, la defaite),
c est le contenu de la video fournie ;
carte 1666 -- l assaut de la 7.2 (Kalgorath, Arganoth, Mephistroth).
Pour la 1460, NOTRE SCRIPT EXISTE DEJA : scenario_broken_shore_intro.cpp,
464 lignes, correctement rattache -- instance_template reclame
scenario_broken_shore_intro et c est exactement le nom sous lequel il
s enregistre (RegisterInstanceScript, map 1460). Son scenario est aussi
deja declare (786). Il ne lui manquait QUE les placements. Aucun portage
C++ n est necessaire pour cette carte.
VERIFICATION CROISEE faite avant de generer : sur les 17 entrees que le
script attend, 10 sont placees dans la reference (Voljin, Sylvanas,
Baine, Thrall, Varian, Jaina, Mekkatorque, Genn, Krosus, Arganoth) et
les 7 autres sont INVOQUEES par le script lui-meme (Khadgar l.335,
ancres l.370-371, Tirion l.380, Guldan l.398, troupes via TroopEntry,
credit de fin l.431). La repartition est donc coherente.
CONTENU
carte 1460 : 757 creatures, 101 objets, 84 chemins (526 points)
carte 1666 : 593 creatures, 59 objets, 180 chemins (1495 points)
Toutes les creatures mobiles ont leur chemin, aucune orpheline.
BUG RATTRAPE A LA VALIDATION
Une premiere version de l outil, obtenue en substituant mecaniquement le
numero de carte, produisait pour la 1460 un fichier dont les DELETE
visaient encore la 1666 : il aurait vide la mauvaise carte et laisse
l autre intacte. Le generateur est reecrit, le numero de carte ne vit
plus qu a un seul endroit, et la difficulte est desormais DEDUITE du
spawnMask (verifiee puissance de 2, uniforme) au lieu d etre codee.
VALIDATION en base jetable pour les deux fichiers : import reussi,
comptages exacts, zero creature hors carte, zero mauvaise difficulte,
zero mobile sans chemin, zero collision de GUID avec la base reelle.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
bab69fab2d |
Rivage brise : SQL de placement genere (593 creatures, 59 objets, 180 chemins)
NON APPLIQUE au serveur. Le fichier est verse pour relecture. Transpose depuis le dump world de dufernst/LegionCore-7.3.5 vers notre schema. Le generateur est pilote par les NOMS de colonnes et s arrete plutot que de produire un decalage silencieux si un schema bouge. CONTENU 593 creatures, 59 objets, 180 chemins (1495 points). Les 180 creatures a MovementType=2 ont TOUTES leur chemin : aucune orpheline. DECISIONS etablies sur donnees spawnMask 4096 = 2^12 -> spawnDifficulties '12', la difficulte 12 etant « Normal Scenario » d apres Difficulty.db2 du build 7.3.5.26972. GUID renumerotes a partir de 290100000 et 210200000, au-dessus de nos maxima 290000114 et 210120986. PhaseId : chaine vide cote reference -> 0 chez nous (colonne entiere). VALIDATION faite dans une base jetable, pas sur dc_world : import reussi, comptages exacts, et cinq controles a zero -- aucune creature hors carte, aucune difficulte erronee, aucune mobile sans chemin, aucun chemin orphelin, aucune position nulle. Aucune collision de GUID avec la base reelle. La carte 1666 y est actuellement vide, donc le DELETE d en-tete n efface rien. Repartition en altitude coherente : 454 creatures au sol, 64 au-dessus de 600 (aeronefs presumes, a confirmer en jeu). ABANDONNE faute d equivalent : npcflag2, AiID, MovementID, MeleeID, isActive, skipClone, personal_size, isTeemingSpawn. 12 creatures portaient AiID=7424 : leur comportement est perdu et reste a refaire. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
15ac8dbd7a |
Chantier Rivage brise : materiel de reference et outillage d extraction
Rien n est applique au serveur. Ce commit ne fait que persister le travail de reperage, qui vivait dans /home/ubuntu/tmp et aurait ete perdu. LE BLOCAGE. instance_template reclame pour la carte 1666 un script nomme scenario_7.2_broken_shore_intro qui n existe nulle part dans notre code -- script fantome. La table scenarios n a aucune ligne pour cette carte. Les quetes 45102 et 46734 sont donc infranchissables. RASSEMBLE depuis dufernst/LegionCore-7.3.5 (meme lignee uwow) : - AssaultBrokenShore.cpp (500 lignes) et instance_AssaultBrokenShore.cpp (308 lignes) ; - reperage de 593 placements de creatures (67 entrees) et 59 placements d objets (52 entrees) sur la carte 1666, dans le dump world du depot. NOTRE BASE possede deja les 67 modeles de creatures et les 52 modeles d objets -- aucun manquant. Elle possede aussi les repliques francaises de Vol jin (90708) et Sylvanas (90709), qui n ont ni spawn ni script. DECISIONS DE TRANSPOSITION etablies sur donnees, pas supposees : - spawnMask 4096 = 2^12 -> spawnDifficulties '12', la difficulte 12 etant « Normal Scenario » d apres Difficulty.db2 du build 7.3.5.26972 ; - GUID renumerotes au-dessus de nos maxima (290000114 / 210120986) ; - huit colonnes de la reference sans equivalent chez nous, abandonnees. DEPENDANCES DECOUVERTES : 180 des 593 creatures ont MovementType 2 et suivent donc des chemins a extraire aussi ; 12 portent un AiID renvoyant a une table propre au coeur de reference, comportement a refaire. PIEGE CONSIGNE dans le README : le premier extracteur renvoyait zero ligne, ce qui aurait fait conclure a tort que la reference etait vide. Les instructions insert du dump s etalent sur plusieurs lignes. C est un controle sur cas positif connu qui a revele le bug. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |