From b12768eb2f8dd147124beb14cd1b20b53f580eca Mon Sep 17 00:00:00 2001 From: 55Honey <71938210+55Honey@users.noreply.github.com> Date: Thu, 24 Mar 2022 20:26:38 +0100 Subject: [PATCH] fix: restore gossip menu after lua script Cherry pick from https://github.com/ElunaLuaEngine/Eluna/pull/405 Co-authored by https://github.com/Rochet2 --- GossipHooks.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/GossipHooks.cpp b/GossipHooks.cpp index 25459bf..a4ff26d 100644 --- a/GossipHooks.cpp +++ b/GossipHooks.cpp @@ -116,22 +116,32 @@ bool Eluna::OnGossipHello(Player* pPlayer, Creature* pCreature) bool Eluna::OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 sender, uint32 action) { START_HOOK_WITH_RETVAL(CreatureGossipBindings, GOSSIP_EVENT_ON_SELECT, pCreature->GetEntry(), false); + auto original_menu = *pPlayer->PlayerTalkClass; pPlayer->PlayerTalkClass->ClearMenus(); Push(pPlayer); Push(pCreature); Push(sender); Push(action); - return CallAllFunctionsBool(CreatureGossipBindings, key, true); + auto preventDefault = CallAllFunctionsBool(CreatureGossipBindings, key, true); + if (!preventDefault) { + *pPlayer->PlayerTalkClass = original_menu; + } + return preventDefault; } bool Eluna::OnGossipSelectCode(Player* pPlayer, Creature* pCreature, uint32 sender, uint32 action, const char* code) { START_HOOK_WITH_RETVAL(CreatureGossipBindings, GOSSIP_EVENT_ON_SELECT, pCreature->GetEntry(), false); + auto original_menu = *pPlayer->PlayerTalkClass; pPlayer->PlayerTalkClass->ClearMenus(); Push(pPlayer); Push(pCreature); Push(sender); Push(action); Push(code); - return CallAllFunctionsBool(CreatureGossipBindings, key, true); + auto preventDefault = CallAllFunctionsBool(CreatureGossipBindings, key, true); + if (!preventDefault) { + *pPlayer->PlayerTalkClass = original_menu; + } + return preventDefault; }