mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-20 01:15:35 +01:00
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:
1
sql/updates/world/3.3.5/2016_05_04_00_world.sql
Normal file
1
sql/updates/world/3.3.5/2016_05_04_00_world.sql
Normal file
@@ -0,0 +1 @@
|
||||
DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=70157 AND `spell_effect`=69700 AND `type`=2;
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user