From 70738e76f0dccc9986a8be485e68b740d83f8299 Mon Sep 17 00:00:00 2001 From: Yehonal Date: Thu, 9 Nov 2017 10:56:48 +0000 Subject: [PATCH] Added OnBeforeItemRoll hook and added missing parameter to: OnAfterRefCount OnBeforeDropAddItem please update your scripts if you're using them --- src/game/Loot/LootMgr.cpp | 6 ++++-- src/game/Scripting/ScriptMgr.h | 12 ++++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/game/Loot/LootMgr.cpp b/src/game/Loot/LootMgr.cpp index 22be10e0c..e8a4073aa 100644 --- a/src/game/Loot/LootMgr.cpp +++ b/src/game/Loot/LootMgr.cpp @@ -1317,6 +1317,8 @@ void LootTemplate::Process(Loot& loot, bool rate, uint16 lootMode, Player const* LootStoreItem* item = *i; if (!(item->lootmode & lootMode)) // Do not add if mode mismatch continue; + + sScriptMgr->OnBeforeItemRoll(player, loot, rate, lootMode, item); if (!item->Roll(rate)) continue; // Bad luck for the entry @@ -1328,12 +1330,12 @@ void LootTemplate::Process(Loot& loot, bool rate, uint16 lootMode, Player const* continue; // Error message already printed at loading stage uint32 maxcount = uint32(float(item->maxcount) * sWorld->getRate(RATE_DROP_ITEM_REFERENCED_AMOUNT)); - sScriptMgr->OnAfterRefCount(item, maxcount); + sScriptMgr->OnAfterRefCount(player, loot, rate, lootMode, item, maxcount); for (uint32 loop = 0; loop < maxcount; ++loop) // Ref multiplicator Referenced->Process(loot, rate, lootMode, player, item->group); } else { // Plain entries (not a reference, not grouped) - sScriptMgr->OnBeforeDropAddItem(player, loot, item); + sScriptMgr->OnBeforeDropAddItem(player, loot, rate, lootMode, item); loot.AddItem(*item); // Chance is already checked, just add } } diff --git a/src/game/Scripting/ScriptMgr.h b/src/game/Scripting/ScriptMgr.h index 2e84a488e..36b032c13 100644 --- a/src/game/Scripting/ScriptMgr.h +++ b/src/game/Scripting/ScriptMgr.h @@ -1001,8 +1001,11 @@ class GlobalScript : public ScriptObject // items virtual void OnItemDelFromDB(SQLTransaction& /*trans*/, uint32 /*itemGuid*/) { } virtual void OnMirrorImageDisplayItem(const Item* /*item*/, uint32& /*display*/) { } - virtual void OnAfterRefCount(LootStoreItem* /*LootStoreItem*/, uint32& /*maxcount*/) { } - virtual void OnBeforeDropAddItem(Player const* /*player*/, Loot& /*loot*/, LootStoreItem* /*LootStoreItem*/) { } + + // loot + virtual void OnAfterRefCount(Player const* /*player*/, LootStoreItem* /*LootStoreItem*/, Loot& /*loot*/, bool /*canRate*/, uint16 /*lootMode*/, uint32& /*maxcount*/) { } + virtual void OnBeforeDropAddItem(Player const* /*player*/, Loot& /*loot*/, bool /*canRate*/, uint16 /*lootMode*/, LootStoreItem* /*LootStoreItem*/) { } + virtual void OnBeforeItemRoll(Player const* /*player*/, Loot& /*loot*/, bool /*canRate*/, uint16 /*lootMode*/, LootStoreItem* /*LootStoreItem*/) { }; virtual void OnInitializeLockedDungeons(Player* /*player*/, uint8& /*level*/, uint32& /*lockData*/) { } virtual void OnAfterInitializeLockedDungeons(Player* /*player*/) { } @@ -1271,8 +1274,9 @@ class ScriptMgr void OnGlobalItemDelFromDB(SQLTransaction& trans, uint32 itemGuid); void OnGlobalMirrorImageDisplayItem(const Item *item, uint32 &display); void OnBeforeUpdateArenaPoints(ArenaTeam* at, std::map &ap); - void OnAfterRefCount(LootStoreItem* LootStoreItem, uint32 &maxcount); - void OnBeforeDropAddItem(Player const* player, Loot& loot, LootStoreItem* LootStoreItem); + void OnAfterRefCount(Player const* player, Loot& loot, bool canRate, uint16 lootMode, LootStoreItem* LootStoreItem, uint32 &maxcount); + void OnBeforeDropAddItem(Player const* player, Loot& loot, bool canRate, uint16 lootMode, LootStoreItem* LootStoreItem); + void OnBeforeItemRoll(Player const* player, Loot& loot, bool canRate, uint16 lootMode, LootStoreItem* LootStoreItem); void OnInitializeLockedDungeons(Player* player, uint8& level, uint32& lockData); void OnAfterInitializeLockedDungeons(Player* player);