diff options
author | Warpten <vertozor@gmail.com> | 2014-03-09 20:19:23 +0100 |
---|---|---|
committer | Warpten <vertozor@gmail.com> | 2014-03-09 20:19:23 +0100 |
commit | 96e0a7d71f1c5146aa64502d49e0cc2260f7ca16 (patch) | |
tree | 1df10c3c8e67053b83ad65a6e14726cf009be7e5 /src | |
parent | 4d215e7694ac9d66197f187c72affd67e759720d (diff) | |
parent | 91850fa9e441eb30ca9b28b87012a4e71ccbdef7 (diff) |
Merge pull request #11666 from kontownik/scripting_project
Core/Scripts: Introduce ItemScript::OnItemRemove, called when an Item is actually destroyed.
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 4 |
3 files changed, 15 insertions, 1 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 6e3ff34668f..36e0b2f20a9 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -12654,7 +12654,8 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update) RemoveAurasDueToSpell(proto->Spells[i].SpellId); ItemRemovedQuestCheck(pItem->GetEntry(), pItem->GetCount()); - + sScriptMgr->OnItemRemove(this, pItem); + if (bag == INVENTORY_SLOT_BAG_0) { SetUInt64Value(PLAYER_FIELD_INV_SLOT_HEAD + (slot * 2), 0); diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index d7a2c147edb..94cf1047dfb 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -691,6 +691,15 @@ bool ScriptMgr::OnItemExpire(Player* player, ItemTemplate const* proto) return tmpscript->OnExpire(player, proto); } +bool ScriptMgr::OnItemRemove(Player* player, Item* item) +{ + ASSERT(player); + ASSERT(item); + + GET_SCRIPT_RET(ItemScript, item->GetScriptId(), tmpscript, false); + return tmpscript->OnRemove(player, item); +} + bool ScriptMgr::OnDummyEffect(Unit* caster, uint32 spellId, SpellEffIndex effIndex, Creature* target) { ASSERT(caster); diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index a0724ac47fb..726ac025d3c 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -388,6 +388,9 @@ class ItemScript : public ScriptObject // Called when the item expires (is destroyed). virtual bool OnExpire(Player* /*player*/, ItemTemplate const* /*proto*/) { return false; } + + // Called when the item is destroyed. + virtual bool OnRemove(Player* /*player*/, Item* /*item*/) { return false; } }; class UnitScript : public ScriptObject @@ -918,6 +921,7 @@ class ScriptMgr bool OnQuestAccept(Player* player, Item* item, Quest const* quest); bool OnItemUse(Player* player, Item* item, SpellCastTargets const& targets); bool OnItemExpire(Player* player, ItemTemplate const* proto); + bool OnItemRemove(Player* player, Item* item); public: /* CreatureScript */ |