From 06850338348ab4effa374ea3122d41e7efa01b34 Mon Sep 17 00:00:00 2001 From: Rat Date: Mon, 6 Apr 2015 14:01:39 +0200 Subject: Core/Spells: implemented SPELL_EFFECT_DESTROY_ITEM --- src/server/game/Spells/Spell.h | 1 + src/server/game/Spells/SpellEffects.cpp | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) (limited to 'src') 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 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); + } +} -- cgit v1.2.3