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>
This commit is contained in:
BlaMacfly
2026-08-31 22:21:11 +02:00
parent e1ccf30afc
commit a4d245ecbe
4 changed files with 7893 additions and 0 deletions
+26
View File
@@ -0,0 +1,26 @@
-- =====================================================================
-- Aubergiste du port de Hurlevent — phase manquante
--
-- Spawn cree en jeu par `.npc add 6727` (Innkeeper Brianna) a
-- (-8296.06, 1388.89, 4.95), aire 4411 « Port de Hurlevent ».
--
-- La commande a enregistre la ligne SANS phase, alors que `phase_area`
-- place tout joueur de cette aire en 6666 « Pre-Broken Shore Stormwind
-- Harbor » (et 13306 pour la rampe). PhaseShift::CanSee exigeant une
-- intersection, la creature etait invisible a tout joueur normal, et
-- visible en mode MJ seulement -- SetAlwaysVisible court-circuitant le
-- test de phase.
--
-- La cause est corrigee dans le core (cs_npc.cpp) : les prochains
-- `.npc add` conserveront la phase. Cette ligne repare le spawn deja
-- pose, pour ne pas avoir a le recreer.
--
-- 6666 et non 13306 : l'aubergiste est sur le quai, pas sur la rampe,
-- et c'est la phase que portent les 371 autres creatures de cette aire.
-- =====================================================================
UPDATE `creature`
SET `PhaseId` = 6666
WHERE `guid` = 290200759
AND `id` = 6727
AND `PhaseId` = 0;
+42
View File
@@ -0,0 +1,42 @@
-- =====================================================================
-- Options de dialogue mortes qui doublonnent une option fonctionnelle
--
-- Une ligne de type 1 (bavardage) est affichee sans aucune verification
-- par Player::PrepareGossipMenu (« no checks »), mais sa selection ne
-- declenche aucune action. Lorsqu'une telle ligne porte le MEME texte
-- qu'une option reellement fonctionnelle du meme menu -- aubergiste (8),
-- marchand (3), transmogrification (16) -- le joueur voit la ligne en
-- double et celle du haut ne fait rien.
--
-- PREMIERE VERSION ERRONEE, CORRIGEE ICI
-- La version precedente supprimait aussi huit options portant des
-- CONDITIONS : evenement 12 (Halloween) actif et absence de l'aura
-- 24755 « Tricked or Treated ». C'etait l'option « Des bonbons ou un
-- sort ! », que la base habille du meme texte que l'option d'auberge.
-- Hors periode d'Halloween elle n'est jamais affichee : la supprimer
-- ne corrigeait rien et retirait du contenu saisonnier.
--
-- D'ou la clause NOT EXISTS : toute option soumise a une condition est
-- desormais preservee, sans avoir a juger de la condition elle-meme.
--
-- CE CORRECTIF NE RESOUT PAS le probleme de liaison de pierre de foyer
-- signale en jeu : le menu 342 fait partie des huit cas conditionnes,
-- son option morte n'etait donc pas affichee. La cause reste a trouver.
-- Il est conserve parce qu'il corrige un vrai defaut d'affichage
-- ailleurs, pas parce qu'il repond au symptome signale.
--
-- Retour arriere : chantiers/gossip_menu_option_retour_20260831.sql
-- =====================================================================
DELETE g1
FROM `gossip_menu_option` g1
JOIN `gossip_menu_option` g2
ON g2.`MenuId` = g1.`MenuId`
AND g2.`OptionText` = g1.`OptionText`
AND g2.`OptionType` IN (3, 8, 16)
WHERE g1.`OptionType` = 1
AND NOT EXISTS (SELECT 1
FROM `conditions` c
WHERE c.`SourceTypeOrReferenceId` = 15
AND c.`SourceGroup` = g1.`MenuId`
AND c.`SourceEntry` = g1.`OptionIndex`);