From 9e58ef6940c78d92f1553cf7ab75e87a6e2cf112 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sat, 25 May 2019 22:33:21 +0200 Subject: Core/SmartAI: Improve SMART_EVENT_GOSSIP_HELLO Add another value to event_param1 for SMART_EVENT_GOSSIP_HELLO to support all cases of OnGossipHello/OnReportUse in GameObjects: - event_param1 set to 0: execute the action for both OnGossipHello and OnReportUse. This might result in the action being executed twice when clicking the GameObject - event_param1 set to 1: execute the action for only OnGossipHello - event_param1 set to 2: execute the action for only OnReportUse --- src/server/game/AI/SmartScripts/SmartScript.cpp | 20 ++++++++++++++++++-- src/server/game/AI/SmartScripts/SmartScriptMgr.h | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 825920c5d7d..725c6027f61 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2992,8 +2992,24 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui ProcessAction(e, unit, var0, var1, bvar, spell, gob); break; case SMART_EVENT_GOSSIP_HELLO: - if (e.event.gossipHello.noReportUse && var0) - return; + switch (e.event.gossipHello.filter) + { + case 0: + // no filter set, always execute action + break; + case 1: + // OnGossipHello only filter set, skip action if OnReportUse + if (var0) + return; + case 2: + // OnReportUse only filter set, skip action if OnGossipHello + if (!var0) + return; + default: + // Ignore any other value + break; + } + ProcessAction(e, unit, var0, var1, bvar, spell, gob); break; case SMART_EVENT_IS_BEHIND_TARGET: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index aa80033ed5f..f2e9d4b55de 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -357,7 +357,7 @@ struct SmartEvent struct { - uint32 noReportUse; + uint32 filter; } gossipHello; struct -- cgit v1.2.3