Core/Spells: Implement SPELL_EFFECT_WMO_CHANGE, patch by Heisenberg

Closes issue 4984.

--HG--
branch : trunk
This commit is contained in:
Shocker
2010-12-01 20:59:05 +02:00
parent 651ff8565a
commit a23ae5c94c
2 changed files with 32 additions and 1 deletions

View File

@@ -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);

View File

@@ -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;