diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Spells/Spell.h | 1 | ||||
-rwxr-xr-x | src/server/game/Spells/SpellEffects.cpp | 32 |
2 files changed, 32 insertions, 1 deletions
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index e7edb82a4c7..126026510c9 100755 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -399,6 +399,7 @@ class Spell void EffectRedirectThreat(SpellEffIndex effIndex); void EffectWMODamage(SpellEffIndex effIndex); void EffectWMORepair(SpellEffIndex effIndex); + void EffectWMOChange(SpellEffIndex effIndex); void EffectActivateRune(SpellEffIndex effIndex); void EffectCreateTamedPet(SpellEffIndex effIndex); void EffectDiscoverTaxi(SpellEffIndex effIndex); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 9de681f4443..75862002c78 100755 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -153,7 +153,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]= &Spell::EffectActivateObject, // 86 SPELL_EFFECT_ACTIVATE_OBJECT &Spell::EffectWMODamage, // 87 SPELL_EFFECT_WMO_DAMAGE &Spell::EffectWMORepair, // 88 SPELL_EFFECT_WMO_REPAIR - &Spell::EffectUnused, // 89 SPELL_EFFECT_WMO_CHANGE // 0 intact // 1 damaged // 2 destroyed // 3 rebuilding + &Spell::EffectWMOChange, // 89 SPELL_EFFECT_WMO_CHANGE // 0 intact // 1 damaged // 2 destroyed // 3 rebuilding &Spell::EffectKillCreditPersonal, // 90 SPELL_EFFECT_KILL_CREDIT Kill credit but only for single person &Spell::EffectUnused, // 91 SPELL_EFFECT_THREAT_ALL one spell: zzOLDBrainwash &Spell::EffectEnchantHeldItem, // 92 SPELL_EFFECT_ENCHANT_HELD_ITEM @@ -6767,6 +6767,36 @@ void Spell::EffectWMORepair(SpellEffIndex /*effIndex*/) gameObjTarget->Rebuild(); } +void Spell::EffectWMOChange(SpellEffIndex effIndex) +{ + if (gameObjTarget && gameObjTarget->GetGoType() == GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING) + { + Unit* caster = m_originalCaster; + if (!caster) + return; + + int ChangeType = m_spellInfo->EffectMiscValue[effIndex]; + switch (ChangeType) + { + case 0: // intact + if (gameObjTarget->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED)) + gameObjTarget->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); + if (gameObjTarget->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED)) + gameObjTarget->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED); + break; + case 1: // damaged + gameObjTarget->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); + break; + case 2: // destroyed + gameObjTarget->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED); + break; + case 3: // rebuild + gameObjTarget->Rebuild(); + break; + } + } +} + void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const *properties) { Unit *caster = m_originalCaster; |