From 8f293d00eef488855482abc1dda2dfac35ec247f Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 17 May 2026 08:06:40 -0300 Subject: [PATCH] feat(Core): add OnPlayerQuestAccept hook to PlayerScript (#25875) Co-authored-by: Claude Sonnet 4.6 --- src/server/game/Entities/Player/PlayerQuest.cpp | 1 + src/server/game/Scripting/ScriptDefines/PlayerScript.cpp | 5 +++++ src/server/game/Scripting/ScriptDefines/PlayerScript.h | 9 +++++++++ src/server/game/Scripting/ScriptMgr.h | 1 + 4 files changed, 16 insertions(+) diff --git a/src/server/game/Entities/Player/PlayerQuest.cpp b/src/server/game/Entities/Player/PlayerQuest.cpp index 1a6ff32f1..94ac419b4 100644 --- a/src/server/game/Entities/Player/PlayerQuest.cpp +++ b/src/server/game/Entities/Player/PlayerQuest.cpp @@ -422,6 +422,7 @@ bool Player::CanRewardQuest(Quest const* quest, bool msg) void Player::AddQuestAndCheckCompletion(Quest const* quest, Object* questGiver) { AddQuest(quest, questGiver); + sScriptMgr->OnPlayerQuestAccept(this, quest); if (CanCompleteQuest(quest->GetQuestId())) CompleteQuest(quest->GetQuestId()); diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index 1c550761b..90a0db340 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -852,6 +852,11 @@ void ScriptMgr::OnPlayerQuestAbandon(Player* player, uint32 questId) CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_QUEST_ABANDON, script->OnPlayerQuestAbandon(player, questId)); } +void ScriptMgr::OnPlayerQuestAccept(Player* player, Quest const* quest) +{ + CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_PLAYER_QUEST_ACCEPT, script->OnPlayerQuestAccept(player, quest)); +} + // Player anti cheat void ScriptMgr::AnticheatSetCanFlybyServer(Player* player, bool apply) { diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.h b/src/server/game/Scripting/ScriptDefines/PlayerScript.h index dba182707..1b50095b6 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.h +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.h @@ -190,6 +190,7 @@ enum PlayerHook PLAYERHOOK_ON_PLAYER_ENTER_COMBAT, PLAYERHOOK_ON_PLAYER_LEAVE_COMBAT, PLAYERHOOK_ON_QUEST_ABANDON, + PLAYERHOOK_ON_PLAYER_QUEST_ACCEPT, PLAYERHOOK_ON_GET_QUEST_RATE, PLAYERHOOK_ON_CAN_PLAYER_FLY_IN_ZONE, PLAYERHOOK_ANTICHEAT_SET_CAN_FLY_BY_SERVER, @@ -730,6 +731,14 @@ public: */ virtual void OnPlayerQuestAbandon(Player* /*player*/, uint32 /*questId*/) { } + /** + * @brief This hook called after a player accepts a quest, regardless of quest giver type + * + * @param player Contains information about the Player + * @param quest Contains information about the Quest + */ + virtual void OnPlayerQuestAccept(Player* /*player*/, Quest const* /*quest*/) { } + /** * @brief This hook called before other CanFlyChecks are applied * diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 7c9015451..3b4744c1d 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -454,6 +454,7 @@ public: /* PlayerScript */ void OnPlayerEnterCombat(Player* player, Unit* enemy); void OnPlayerLeaveCombat(Player* player); void OnPlayerQuestAbandon(Player* player, uint32 questId); + void OnPlayerQuestAccept(Player* player, Quest const* quest); bool OnPlayerCanSendErrorAlreadyLooted(Player* player); void OnPlayerAfterCreatureLoot(Player* player); void OnPlayerAfterCreatureLootMoney(Player* player);