Scripts/Icecrown Citadel: Sindragosa - Ice Tomb should always deal damage to all other ice tombs too

Closes #7808
Merges #16863
This commit is contained in:
Kito
2016-05-04 17:18:57 +02:00
committed by Shauren
parent d82534a7bb
commit 033f4cddea
2 changed files with 24 additions and 26 deletions

View File

@@ -0,0 +1 @@
DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=70157 AND `spell_effect`=69700 AND `type`=2;

View File

@@ -604,6 +604,7 @@ class npc_ice_tomb : public CreatureScript
_trappedPlayerGUID.Clear();
player->RemoveAurasDueToSpell(SPELL_ICE_TOMB_DAMAGE);
player->RemoveAurasDueToSpell(SPELL_ASPHYXIATION);
player->RemoveAurasDueToSpell(SPELL_ICE_TOMB_UNTARGETABLE);
}
}
@@ -1284,9 +1285,9 @@ class spell_sindragosa_ice_tomb : public SpellScriptLoader
public:
spell_sindragosa_ice_tomb() : SpellScriptLoader("spell_sindragosa_ice_tomb_trap") { }
class spell_sindragosa_ice_tomb_SpellScript : public SpellScript
class spell_sindragosa_ice_tomb_AuraScript : public AuraScript
{
PrepareSpellScript(spell_sindragosa_ice_tomb_SpellScript);
PrepareAuraScript(spell_sindragosa_ice_tomb_AuraScript);
bool Validate(SpellInfo const* /*spell*/) override
{
@@ -1297,46 +1298,42 @@ class spell_sindragosa_ice_tomb : public SpellScriptLoader
return true;
}
void SummonTomb()
void PeriodicTick(AuraEffect const* aurEff)
{
Position pos = GetHitUnit()->GetPosition();
if (TempSummon* summon = GetCaster()->SummonCreature(NPC_ICE_TOMB, pos))
PreventDefaultAction();
if (aurEff->GetTickNumber() == 1)
{
summon->AI()->SetGUID(GetHitUnit()->GetGUID(), DATA_TRAPPED_PLAYER);
if (GameObject* go = summon->SummonGameObject(GO_ICE_BLOCK, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 0))
if (Unit* caster = GetCaster())
{
go->SetSpellId(SPELL_ICE_TOMB_DAMAGE);
summon->AddGameObject(go);
Position pos = GetTarget()->GetPosition();
if (TempSummon* summon = caster->SummonCreature(NPC_ICE_TOMB, pos))
{
summon->AI()->SetGUID(GetTarget()->GetGUID(), DATA_TRAPPED_PLAYER);
GetTarget()->CastSpell(GetTarget(), SPELL_ICE_TOMB_UNTARGETABLE);
if (GameObject* go = summon->SummonGameObject(GO_ICE_BLOCK, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 0))
{
go->SetSpellId(SPELL_ICE_TOMB_DAMAGE);
summon->AddGameObject(go);
}
}
}
}
}
void Register() override
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
AfterHit += SpellHitFn(spell_sindragosa_ice_tomb_SpellScript::SummonTomb);
}
};
class spell_sindragosa_ice_tomb_AuraScript : public AuraScript
{
PrepareAuraScript(spell_sindragosa_ice_tomb_AuraScript);
void PeriodicTick(AuraEffect const* /*aurEff*/)
{
PreventDefaultAction();
GetTarget()->RemoveAurasDueToSpell(SPELL_ICE_TOMB_UNTARGETABLE);
}
void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_sindragosa_ice_tomb_AuraScript::PeriodicTick, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
AfterEffectRemove += AuraEffectRemoveFn(spell_sindragosa_ice_tomb_AuraScript::HandleRemove, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
}
};
SpellScript* GetSpellScript() const override
{
return new spell_sindragosa_ice_tomb_SpellScript();
}
AuraScript* GetAuraScript() const override
{
return new spell_sindragosa_ice_tomb_AuraScript();