diff options
author | Rat <gmstreetrat@gmail.com> | 2015-04-06 14:01:39 +0200 |
---|---|---|
committer | Rat <gmstreetrat@gmail.com> | 2015-04-06 14:01:39 +0200 |
commit | 06850338348ab4effa374ea3122d41e7efa01b34 (patch) | |
tree | c7211052789aa668bed52b5f189dfb6c653a152c | |
parent | c5bbc9287d1e8ae9335598780ebd7db47b522fb2 (diff) |
Core/Spells: implemented SPELL_EFFECT_DESTROY_ITEM
-rw-r--r-- | src/server/game/Spells/Spell.h | 1 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 19 |
2 files changed, 19 insertions, 1 deletions
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 9ddcc221e21..4190cca0ab4 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -367,6 +367,7 @@ class Spell void EffectResurrectWithAura(SpellEffIndex effIndex); void EffectCreateAreaTrigger(SpellEffIndex effIndex); void EffectRemoveTalent(SpellEffIndex effIndex); + void EffectDestroyItem(SpellEffIndex effIndex); typedef std::set<Aura*> UsedSpellMods; diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 49314333f5b..6063a97d2ca 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -242,7 +242,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]= &Spell::EffectGiveCurrency, //166 SPELL_EFFECT_GIVE_CURRENCY &Spell::EffectNULL, //167 SPELL_EFFECT_167 &Spell::EffectNULL, //168 SPELL_EFFECT_ALLOW_CONTROL_PET - &Spell::EffectNULL, //169 SPELL_EFFECT_DESTROY_ITEM + &Spell::EffectDestroyItem, //169 SPELL_EFFECT_DESTROY_ITEM &Spell::EffectNULL, //170 SPELL_EFFECT_UPDATE_ZONE_AURAS_AND_PHASES &Spell::EffectNULL, //171 SPELL_EFFECT_171 &Spell::EffectResurrectWithAura, //172 SPELL_EFFECT_RESURRECT_WITH_AURA @@ -5786,3 +5786,20 @@ void Spell::EffectRemoveTalent(SpellEffIndex /*effIndex*/) player->RemoveTalent(talent); player->SendTalentsInfoData(); } + +void Spell::EffectDestroyItem(SpellEffIndex effIndex) +{ + if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) + return; + + if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER) + return; + + Player* player = unitTarget->ToPlayer(); + if (SpellEffectInfo const* effect = GetEffect(effIndex)) + { + uint32 itemId = effect->ItemType; + if (Item* item = player->GetItemByEntry(itemId)) + player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true); + } +} |