From 95913f26d2a1e04fd0f485ea1960087ff95737da Mon Sep 17 00:00:00 2001 From: SylvaniaCore deploy Date: Fri, 21 Aug 2026 22:42:40 +0200 Subject: [PATCH] Choix du compagnon : la fermeture du dialogue effacait le choix autorise Preuve dans Server.log : "tried to respond to invalid player choice 234 (allowed 0)". Le clic atteignait bien le serveur, mais celui-ci avait memorise 0 au lieu de 234. Enchainement fautif dans npc_korvas_bloodthorn::OnGossipSelect : 1. CastSpell(196650) -> EffectLaunchQuestChoice -> SendPlayerChoice(234) inscrit PlayerChoiceId = 234 2. CloseGossipMenuFor() -> SendCloseGossip() -> _interactionData.Reset() remet PlayerChoiceId a 0 La fenetre saffichait (le paquet etait deja parti) mais le serveur avait oublie quel choix il autorisait. Cest pour cette raison que le tome de Mardum fonctionne : lui ne ferme pas le dialogue. Corrige en fermant AVANT de lancer le sort. Balayage de tout le core : 34 occurrences du motif CastSpell puis CloseGossipMenuFor, mais une seule autre concerne un sort qui affiche un choix (class_hall_hunter.cpp), les autres lancent des sorts ordinaires ou reinitialiser est sans effet. Les deux sont corrigees. Co-Authored-By: Claude Opus 4.8 --- .../scripts/BrokenIsles/ClassHalls/class_hall_hunter.cpp | 6 +++++- .../DemonHunterZones/zone_vault_of_wardens.cpp | 8 +++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/BrokenIsles/ClassHalls/class_hall_hunter.cpp b/src/server/scripts/BrokenIsles/ClassHalls/class_hall_hunter.cpp index 1152c66..4df2cb4 100644 --- a/src/server/scripts/BrokenIsles/ClassHalls/class_hall_hunter.cpp +++ b/src/server/scripts/BrokenIsles/ClassHalls/class_hall_hunter.cpp @@ -220,8 +220,12 @@ public: switch (action) { case GOSSIP_ACTION_INFO_DEF + 1: - player->CastSpell(player, SPELL_PLAYERCHOICE, true); // Display player spec choice + // ORDRE CRITIQUE : fermer AVANT de lancer le sort. SendCloseGossip() + // appelle _interactionData.Reset(), ce qui efface le PlayerChoiceId + // que SendPlayerChoice vient d'inscrire, et le serveur rejette + // ensuite le clic du joueur. CloseGossipMenuFor(player); + player->CastSpell(player, SPELL_PLAYERCHOICE, true); // Display player spec choice break; } return true; diff --git a/src/server/scripts/BrokenIsles/DemonHunterZones/zone_vault_of_wardens.cpp b/src/server/scripts/BrokenIsles/DemonHunterZones/zone_vault_of_wardens.cpp index 46c5033..9a16a01 100644 --- a/src/server/scripts/BrokenIsles/DemonHunterZones/zone_vault_of_wardens.cpp +++ b/src/server/scripts/BrokenIsles/DemonHunterZones/zone_vault_of_wardens.cpp @@ -1428,8 +1428,14 @@ public: npc_korvas_bloodthorn() : CreatureScript("npc_korvas_bloodthorn") { } bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { - player->CastSpell(player, SPELL_NEW_DIRECTION_CHOICE_KAYN_OR_ALTRUIS, true); // Display follower choice + // ORDRE CRITIQUE : fermer le dialogue AVANT de lancer le sort. + // PlayerMenu::SendCloseGossip() appelle _interactionData.Reset(), ce qui + // efface le PlayerChoiceId que SendPlayerChoice vient d'inscrire. Dans + // l'ordre inverse, la fenetre s'affichait bien mais le serveur avait + // oublie quel choix il autorisait, et rejetait le clic du joueur : + // "tried to respond to invalid player choice 234 (allowed 0)" CloseGossipMenuFor(player); + player->CastSpell(player, SPELL_NEW_DIRECTION_CHOICE_KAYN_OR_ALTRUIS, true); // Display follower choice return true; } };