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:
@@ -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;
|
||||
@@ -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`);
|
||||
Reference in New Issue
Block a user