From 6177ce4688fc34af7cebb0d47a15be1553fbffc1 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 7 Nov 2022 00:26:47 -0300 Subject: [PATCH] feat(Core/Scripting): Create OnStoreNewItem() hook (#13725) --- src/server/game/Entities/Player/PlayerStorage.cpp | 2 +- src/server/game/Scripting/ScriptDefines/PlayerScript.cpp | 8 ++++++++ src/server/game/Scripting/ScriptMgr.h | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp index bfd19ceff5..56f11af58f 100644 --- a/src/server/game/Entities/Player/PlayerStorage.cpp +++ b/src/server/game/Entities/Player/PlayerStorage.cpp @@ -2594,7 +2594,7 @@ Item* Player::StoreNewItem(ItemPosCountVec const& dest, uint32 item, bool update CharacterDatabase.Execute(stmt); } - sScriptMgr->OnLootItem(this, pItem, count, ObjectGuid::Empty); + sScriptMgr->OnStoreNewItem(this, pItem, count); } return pItem; } diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index a8794e8216..8c09e7b606 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -582,6 +582,14 @@ void ScriptMgr::OnLootItem(Player* player, Item* item, uint32 count, ObjectGuid }); } +void ScriptMgr::OnStoreNewItem(Player* player, Item* item, uint32 count) +{ + ExecuteScript([&](PlayerScript* script) + { + script->OnStoreNewItem(player, item, count); + }); +} + void ScriptMgr::OnCreateItem(Player* player, Item* item, uint32 count) { ExecuteScript([&](PlayerScript* script) diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 986cc6f99e..3adf5264d2 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -1180,6 +1180,9 @@ public: //After looting item virtual void OnLootItem(Player* /*player*/, Item* /*item*/, uint32 /*count*/, ObjectGuid /*lootguid*/) { } + //After looting item (includes master loot). + virtual void OnStoreNewItem(Player* /*player*/, Item* /*item*/, uint32 /*count*/) { } + //After creating item (eg profession item creation) virtual void OnCreateItem(Player* /*player*/, Item* /*item*/, uint32 /*count*/) { } @@ -2275,6 +2278,7 @@ public: /* PlayerScript */ void GetCustomArenaPersonalRating(Player const* player, uint8 slot, uint32& rating) const; void OnGetMaxPersonalArenaRatingRequirement(Player const* player, uint32 minSlot, uint32& maxArenaRating) const; void OnLootItem(Player* player, Item* item, uint32 count, ObjectGuid lootguid); + void OnStoreNewItem(Player* player, Item* item, uint32 count); void OnCreateItem(Player* player, Item* item, uint32 count); void OnQuestRewardItem(Player* player, Item* item, uint32 count); void OnGroupRollRewardItem(Player* player, Item* item, uint32 count, RollVote voteType, Roll* roll);