aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWarpten <vertozor@gmail.com>2014-03-09 20:19:23 +0100
committerWarpten <vertozor@gmail.com>2014-03-09 20:19:23 +0100
commit96e0a7d71f1c5146aa64502d49e0cc2260f7ca16 (patch)
tree1df10c3c8e67053b83ad65a6e14726cf009be7e5 /src
parent4d215e7694ac9d66197f187c72affd67e759720d (diff)
parent91850fa9e441eb30ca9b28b87012a4e71ccbdef7 (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.cpp3
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp9
-rw-r--r--src/server/game/Scripting/ScriptMgr.h4
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 */