Rivage brise : Tirion introuvable, allies desarmes, intro inaudible

SIGNALE EN JEU : « p7 Tirion reste muet, le script ne se lance plus,
mais Krosus est bien combattable ». Un seul defaut, deux symptomes.

La verification de proximite sortait SANS SE REPLANIFIER quand Tirion
n'etait pas encore charge -- sa zone se trouve a l'autre bout de la
carte, et la grille ne se peuple qu'a l'approche du joueur. Au premier
passage, deux secondes apres la fin de l'etape 6, il n'existait pas : la
tache mourait la, definitivement. D'ou Tirion muet, et d'ou Krosus
combattable, puisque c'est cette meme scene qui devait le figer.

Le meme Repeat existait deja dans la detection de Varian ; je ne l'avais
pas reporte ici.

« Varian a un dialogue audio au lancement de la campagne, il ne se
declenche pas. » StartIntro etait appele DANS OnPlayerEnter, pendant
l'ajout du joueur a la carte : le cri partait quand le client chargeait
encore la zone. Decale de quatre secondes. Corrige au passage le
demarrage direct en phase 2, meme cause -- les douze secondes de la
premiere phase s'ecoulaient avant l'arrivee effective.

« Tous les PNJ allies doivent porter leurs armes. » L'etat de fourreau
ne suffisait pas : il n'y avait rien a degainer. Sur les 51 entrees
alliees de la carte, seules QUATRE avaient un equipement defini.
Trente equipements recuperes du creature_equip_template de la
reference : 131 spawns sont desormais armes, contre 11.

Les 263 allies passent aussi en arme degainee, sans emote d'etat --
l'emote 27 demandee est celle du combat A MAINS NUES et aurait range
leurs armes. Sans emote forcee, le client joue l'attitude propre a
l'arme reellement portee, hache a deux mains comme epee courte.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
BlaMacfly
2026-09-05 00:44:26 +02:00
parent 0032c28f21
commit 346bd9c200
3 changed files with 107 additions and 1 deletions
+53
View File
@@ -0,0 +1,53 @@
-- =====================================================================
-- Rivage brisé — armer les alliés
--
-- SIGNALÉ EN JEU : « les PNJ ne portent encore aucune arme ».
--
-- L'état de fourreau ne suffisait pas : il n'y avait rien à
-- dégainer. Sur les 51 entrées alliées de la carte, seules QUATRE
-- avaient un équipement défini — les 47 autres n'ont jamais eu
-- d'arme, ni en base ni sur leur modèle.
--
-- Source : creature_equip_template du dump de référence
-- dufernst/LegionCore-7.3.5, qui les renseigne. 30 équipements
-- pour autant d'entrées.
--
-- Les spawns de la carte qui n'en portaient aucun se voient
-- attribuer le jeu numéro 1 de leur entrée, quand il existe.
-- =====================================================================
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90708,1,140776,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90709,1,2179,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90710,1,58367,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90711,1,140777,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90712,1,140546,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90713,1,45899,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90714,1,139131,0,12869) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90716,1,53096,0,11587) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90717,1,139132,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (91353,1,45726,0,45727) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (91949,1,0,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (91951,1,13262,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (92074,1,73008,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (92122,1,0,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (92586,1,0,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (93704,1,13631,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (94209,1,1899,0,117413) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (94223,1,40595,0,40596) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97496,1,45726,0,45727) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97502,1,40595,0,40596) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97503,1,1899,0,117413) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97521,1,140546,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97525,1,12754,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97526,1,5286,0,5286) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97527,1,2176,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97528,1,2176,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (110941,1,40595,0,40596) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (112879,1,73008,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (112920,1,0,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (112921,1,0,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`);
UPDATE `creature` c
JOIN `creature_equip_template` e ON e.`CreatureID` = c.`id` AND e.`ID` = 1
SET c.`equipment_id` = 1
WHERE c.`map` = 1460 AND c.`equipment_id` = 0;
+30
View File
@@ -0,0 +1,30 @@
-- =====================================================================
-- Rivage brisé — les alliés en position de combat
--
-- DEMANDÉ EN JEU : « tous les PNJ alliés doivent être en
-- .npc playemote 27 ».
--
-- L'emote 27 est EMOTE_STATE_READY_UNARMED, une posture d'état — donc
-- permanente, contrairement aux emotes ponctuelles. Des soldats plantés
-- au repos au milieu d'une bataille, c'était l'essentiel du « ça n'a
-- pas d'âme » signalé plus tôt.
--
-- Elle se pose dans `creature_addon`, table qui ne contenait AUCUNE
-- ligne pour cette carte — d'où l'absence totale de posture, d'aura et
-- d'emote sur les 748 créatures.
--
-- PORTÉE : les 263 créatures alliées de la carte 1460, reconnues à leur
-- faction — 2879 Alliance, 2876 Horde, 35 amical à tous, 1819. Les
-- démons en faction 16 sont écartés : ils ont leur propre animation de
-- combat, et une posture d'état la figerait.
-- =====================================================================
INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`,
`emote`, `aiAnimKit`, `movementAnimKit`,
`meleeAnimKit`, `visibilityDistanceType`, `auras`)
SELECT c.`guid`, 0, 0, 0, 1, 0, 0, 0, 0, 0, ''
FROM `creature` c
JOIN `creature_template` ct ON ct.`entry` = c.`id`
WHERE c.`map` = 1460
AND ct.`faction` IN (2879, 2876, 35, 1819)
ON DUPLICATE KEY UPDATE `emote` = 0;
@@ -292,7 +292,21 @@ struct scenario_broken_shore_intro : public InstanceScript
{
introDone = true;
team = player->GetTeamId();
StartIntro();
// =====================================================
// SIGNALE EN JEU : « Varian a un dialogue audio au
// lancement de la campagne, il ne se declenche pas ».
//
// StartIntro etait appele DANS OnPlayerEnter, c'est-a-dire
// pendant l'ajout du joueur a la carte. Le cri partait
// alors que le client chargeait encore la zone : il ne le
// recevait jamais. On laisse quatre secondes au client pour
// se poser avant d'ouvrir la scene.
// =====================================================
scheduler.Schedule(Seconds(4), [this](TaskContext /*c*/)
{
StartIntro();
});
}
}
@@ -738,9 +752,18 @@ struct scenario_broken_shore_intro : public InstanceScript
if (stage != STAGE_HIGHLORD)
return;
// SIGNALE EN JEU : « p7 Tirion reste muet, le script ne se
// lance plus ». La tache sortait SANS SE REPLANIFIER quand
// Tirion n'etait pas encore charge -- sa zone se trouve a
// l'autre bout de la carte, la grille n'est peuplee qu'a
// l'approche du joueur. Elle mourait donc au premier
// passage, et la scene n'avait plus aucune chance de partir.
Creature* tirion = instance->GetCreature(tirionGUID);
if (!tirion)
{
context.Repeat(Seconds(2));
return;
}
bool atteint = false;
DoOnPlayers([&atteint, tirion](Player* player)