From 5b09d675ddc0556d3d0c672e248571f229af04bd Mon Sep 17 00:00:00 2001 From: hondacrx Date: Thu, 4 Mar 2021 12:13:43 -0500 Subject: [PATCH] Scripts/Quests: Implemented new quest scripting hook, OnQuestAcknowledgeAutoAccept, used when player closes quest frame after viewing details of autoaccept quests Port From (https://github.com/TrinityCore/TrinityCore/commit/f269f60d8a5f6b0982eb46dc583e2618c98931fb) --- Source/Game/Handlers/QuestHandler.cs | 13 +++++++++++++ Source/Game/Networking/Packets/QuestPackets.cs | 12 ++++++++++++ Source/Game/Scripting/CoreScripts.cs | 3 +++ Source/Game/Scripting/ScriptManager.cs | 7 +++++++ 4 files changed, 35 insertions(+) diff --git a/Source/Game/Handlers/QuestHandler.cs b/Source/Game/Handlers/QuestHandler.cs index ff5e22130..1afb6d120 100644 --- a/Source/Game/Handlers/QuestHandler.cs +++ b/Source/Game/Handlers/QuestHandler.cs @@ -574,6 +574,19 @@ namespace Game } } + [WorldPacketHandler(ClientOpcodes.QuestGiverCloseQuest)] + void HandleQuestgiverCloseQuest(QuestGiverCloseQuest questGiverCloseQuest) + { + if (_player.FindQuestSlot(questGiverCloseQuest.QuestID) >= SharedConst.MaxQuestLogSize) + return; + + Quest quest = Global.ObjectMgr.GetQuestTemplate(questGiverCloseQuest.QuestID); + if (quest == null) + return; + + Global.ScriptMgr.OnQuestAcknowledgeAutoAccept(_player, quest); + } + [WorldPacketHandler(ClientOpcodes.PushQuestToParty)] void HandlePushQuestToParty(PushQuestToParty packet) { diff --git a/Source/Game/Networking/Packets/QuestPackets.cs b/Source/Game/Networking/Packets/QuestPackets.cs index 5796b866f..e7dd97a64 100644 --- a/Source/Game/Networking/Packets/QuestPackets.cs +++ b/Source/Game/Networking/Packets/QuestPackets.cs @@ -406,6 +406,18 @@ namespace Game.Networking.Packets public bool FromScript; // 0 - standart complete quest mode with npc, 1 - auto-complete mode } + public class QuestGiverCloseQuest : ClientPacket + { + public QuestGiverCloseQuest(WorldPacket packet) : base(packet) { } + + public override void Read() + { + QuestID = _worldPacket.ReadUInt32(); + } + + public uint QuestID; + } + public class QuestGiverQuestDetails : ServerPacket { public QuestGiverQuestDetails() : base(ServerOpcodes.QuestGiverQuestDetails) { } diff --git a/Source/Game/Scripting/CoreScripts.cs b/Source/Game/Scripting/CoreScripts.cs index 62932a62b..ca5947cc6 100644 --- a/Source/Game/Scripting/CoreScripts.cs +++ b/Source/Game/Scripting/CoreScripts.cs @@ -792,6 +792,9 @@ namespace Game.Scripting // Called when a quest status change public virtual void OnQuestStatusChange(Player player, Quest quest, QuestStatus oldStatus, QuestStatus newStatus) { } + // Called for auto accept quests when player closes quest UI after seeing initial quest details + public virtual void OnAcknowledgeAutoAccept(Player player, Quest quest) { } + // Called when a quest objective data change public virtual void OnQuestObjectiveChange(Player player, Quest quest, QuestObjective objective, int oldAmount, int newAmount) { } } diff --git a/Source/Game/Scripting/ScriptManager.cs b/Source/Game/Scripting/ScriptManager.cs index 30ad48e8b..a716f3211 100644 --- a/Source/Game/Scripting/ScriptManager.cs +++ b/Source/Game/Scripting/ScriptManager.cs @@ -1188,6 +1188,13 @@ namespace Game.Scripting RunScript(script => script.OnQuestStatusChange(player, quest, oldStatus, newStatus), quest.ScriptId); } + public void OnQuestAcknowledgeAutoAccept(Player player, Quest quest) + { + Cypher.Assert(player); + Cypher.Assert(quest != null); + + RunScript(script => script.OnAcknowledgeAutoAccept(player, quest), quest.ScriptId); + } public void OnQuestObjectiveChange(Player player, Quest quest, QuestObjective objective, int oldAmount, int newAmount) { Cypher.Assert(player);