mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-18 19:35:42 +00:00
refactor(Scripts/SunwellPlateau): Spell Scripts registry macros (#19223)
This commit is contained in:
@@ -406,118 +406,90 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class spell_madrigosa_activate_barrier : public SpellScriptLoader
|
||||
class spell_madrigosa_activate_barrier : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_madrigosa_activate_barrier() : SpellScriptLoader("spell_madrigosa_activate_barrier") { }
|
||||
PrepareSpellScript(spell_madrigosa_activate_barrier);
|
||||
|
||||
class spell_madrigosa_activate_barrier_SpellScript : public SpellScript
|
||||
void HandleActivateObject(SpellEffIndex effIndex)
|
||||
{
|
||||
PrepareSpellScript(spell_madrigosa_activate_barrier_SpellScript);
|
||||
|
||||
void HandleActivateObject(SpellEffIndex effIndex)
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (GameObject* go = GetHitGObj())
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (GameObject* go = GetHitGObj())
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
if (Map* map = go->GetMap())
|
||||
{
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
if (Map* map = go->GetMap())
|
||||
{
|
||||
Map::PlayerList const& PlayerList = map->GetPlayers();
|
||||
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
||||
if (i->GetSource())
|
||||
{
|
||||
UpdateData data;
|
||||
WorldPacket pkt;
|
||||
go->BuildValuesUpdateBlockForPlayer(&data, i->GetSource());
|
||||
data.BuildPacket(pkt);
|
||||
i->GetSource()->GetSession()->SendPacket(&pkt);
|
||||
}
|
||||
}
|
||||
Map::PlayerList const& PlayerList = map->GetPlayers();
|
||||
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
||||
if (i->GetSource())
|
||||
{
|
||||
UpdateData data;
|
||||
WorldPacket pkt;
|
||||
go->BuildValuesUpdateBlockForPlayer(&data, i->GetSource());
|
||||
data.BuildPacket(pkt);
|
||||
i->GetSource()->GetSession()->SendPacket(&pkt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_madrigosa_activate_barrier_SpellScript::HandleActivateObject, EFFECT_0, SPELL_EFFECT_ACTIVATE_OBJECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void Register() override
|
||||
{
|
||||
return new spell_madrigosa_activate_barrier_SpellScript();
|
||||
OnEffectHitTarget += SpellEffectFn(spell_madrigosa_activate_barrier::HandleActivateObject, EFFECT_0, SPELL_EFFECT_ACTIVATE_OBJECT);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_madrigosa_deactivate_barrier : public SpellScriptLoader
|
||||
class spell_madrigosa_deactivate_barrier : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_madrigosa_deactivate_barrier() : SpellScriptLoader("spell_madrigosa_deactivate_barrier") { }
|
||||
PrepareSpellScript(spell_madrigosa_deactivate_barrier);
|
||||
|
||||
class spell_madrigosa_deactivate_barrier_SpellScript : public SpellScript
|
||||
void HandleActivateObject(SpellEffIndex effIndex)
|
||||
{
|
||||
PrepareSpellScript(spell_madrigosa_deactivate_barrier_SpellScript);
|
||||
|
||||
void HandleActivateObject(SpellEffIndex effIndex)
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (GameObject* go = GetHitGObj())
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (GameObject* go = GetHitGObj())
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
if (Map* map = go->GetMap())
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
if (Map* map = go->GetMap())
|
||||
{
|
||||
Map::PlayerList const& PlayerList = map->GetPlayers();
|
||||
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
||||
if (i->GetSource())
|
||||
{
|
||||
UpdateData data;
|
||||
WorldPacket pkt;
|
||||
go->BuildValuesUpdateBlockForPlayer(&data, i->GetSource());
|
||||
data.BuildPacket(pkt);
|
||||
i->GetSource()->GetSession()->SendPacket(&pkt);
|
||||
}
|
||||
}
|
||||
Map::PlayerList const& PlayerList = map->GetPlayers();
|
||||
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
||||
if (i->GetSource())
|
||||
{
|
||||
UpdateData data;
|
||||
WorldPacket pkt;
|
||||
go->BuildValuesUpdateBlockForPlayer(&data, i->GetSource());
|
||||
data.BuildPacket(pkt);
|
||||
i->GetSource()->GetSession()->SendPacket(&pkt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_madrigosa_deactivate_barrier_SpellScript::HandleActivateObject, EFFECT_0, SPELL_EFFECT_ACTIVATE_OBJECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void Register() override
|
||||
{
|
||||
return new spell_madrigosa_deactivate_barrier_SpellScript();
|
||||
OnEffectHitTarget += SpellEffectFn(spell_madrigosa_deactivate_barrier::HandleActivateObject, EFFECT_0, SPELL_EFFECT_ACTIVATE_OBJECT);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_brutallus_burn : public SpellScriptLoader
|
||||
class spell_brutallus_burn : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_brutallus_burn() : SpellScriptLoader("spell_brutallus_burn") { }
|
||||
PrepareSpellScript(spell_brutallus_burn);
|
||||
|
||||
class spell_brutallus_burn_SpellScript : public SpellScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareSpellScript(spell_brutallus_burn_SpellScript);
|
||||
return ValidateSpellInfo({ SPELL_BURN_DAMAGE });
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (Unit* target = GetHitUnit())
|
||||
if (!target->HasAura(SPELL_BURN_DAMAGE))
|
||||
target->CastSpell(target, SPELL_BURN_DAMAGE, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_brutallus_burn_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
return new spell_brutallus_burn_SpellScript();
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (Unit* target = GetHitUnit())
|
||||
if (!target->HasAura(SPELL_BURN_DAMAGE))
|
||||
target->CastSpell(target, SPELL_BURN_DAMAGE, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_brutallus_burn::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -545,9 +517,9 @@ void AddSC_boss_brutallus()
|
||||
{
|
||||
new boss_brutallus();
|
||||
new npc_madrigosa();
|
||||
new spell_madrigosa_activate_barrier();
|
||||
new spell_madrigosa_deactivate_barrier();
|
||||
new spell_brutallus_burn();
|
||||
RegisterSpellScript(spell_madrigosa_activate_barrier);
|
||||
RegisterSpellScript(spell_madrigosa_deactivate_barrier);
|
||||
RegisterSpellScript(spell_brutallus_burn);
|
||||
new AreaTrigger_at_sunwell_madrigosa();
|
||||
}
|
||||
|
||||
|
||||
@@ -366,132 +366,108 @@ public:
|
||||
};
|
||||
};
|
||||
|
||||
class spell_eredar_twins_apply_dark_touched : public SpellScriptLoader
|
||||
class spell_eredar_twins_apply_dark_touched : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_eredar_twins_apply_dark_touched() : SpellScriptLoader("spell_eredar_twins_apply_dark_touched") { }
|
||||
PrepareSpellScript(spell_eredar_twins_apply_dark_touched);
|
||||
|
||||
class spell_eredar_twins_apply_dark_touched_SpellScript : public SpellScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareSpellScript(spell_eredar_twins_apply_dark_touched_SpellScript);
|
||||
return ValidateSpellInfo({ SPELL_DARK_TOUCHED });
|
||||
}
|
||||
|
||||
void HandleApplyTouch()
|
||||
{
|
||||
if (Player* target = GetHitPlayer())
|
||||
target->CastSpell(target, SPELL_DARK_TOUCHED, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterHit += SpellHitFn(spell_eredar_twins_apply_dark_touched_SpellScript::HandleApplyTouch);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void HandleApplyTouch()
|
||||
{
|
||||
return new spell_eredar_twins_apply_dark_touched_SpellScript();
|
||||
if (Player* target = GetHitPlayer())
|
||||
target->CastSpell(target, SPELL_DARK_TOUCHED, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterHit += SpellHitFn(spell_eredar_twins_apply_dark_touched::HandleApplyTouch);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_eredar_twins_apply_flame_touched : public SpellScriptLoader
|
||||
class spell_eredar_twins_apply_flame_touched : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_eredar_twins_apply_flame_touched() : SpellScriptLoader("spell_eredar_twins_apply_flame_touched") { }
|
||||
PrepareSpellScript(spell_eredar_twins_apply_flame_touched);
|
||||
|
||||
class spell_eredar_twins_apply_flame_touched_SpellScript : public SpellScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareSpellScript(spell_eredar_twins_apply_flame_touched_SpellScript);
|
||||
return ValidateSpellInfo({ SPELL_FLAME_TOUCHED });
|
||||
}
|
||||
|
||||
void HandleApplyTouch()
|
||||
{
|
||||
if (Player* target = GetHitPlayer())
|
||||
target->CastSpell(target, SPELL_FLAME_TOUCHED, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterHit += SpellHitFn(spell_eredar_twins_apply_flame_touched_SpellScript::HandleApplyTouch);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void HandleApplyTouch()
|
||||
{
|
||||
return new spell_eredar_twins_apply_flame_touched_SpellScript();
|
||||
if (Player* target = GetHitPlayer())
|
||||
target->CastSpell(target, SPELL_FLAME_TOUCHED, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterHit += SpellHitFn(spell_eredar_twins_apply_flame_touched::HandleApplyTouch);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_eredar_twins_handle_touch : public SpellScriptLoader
|
||||
class spell_eredar_twins_handle_touch : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_eredar_twins_handle_touch() : SpellScriptLoader("spell_eredar_twins_handle_touch") { }
|
||||
PrepareSpellScript(spell_eredar_twins_handle_touch);
|
||||
|
||||
class spell_eredar_twins_handle_touch_SpellScript : public SpellScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareSpellScript(spell_eredar_twins_handle_touch_SpellScript);
|
||||
return ValidateSpellInfo({ SPELL_DARK_FLAME, SPELL_FLAME_TOUCHED, SPELL_DARK_TOUCHED });
|
||||
}
|
||||
|
||||
SpellCastResult CheckCast()
|
||||
SpellCastResult CheckCast()
|
||||
{
|
||||
if (GetCaster()->HasAura(SPELL_DARK_FLAME))
|
||||
return SPELL_FAILED_DONT_REPORT;
|
||||
|
||||
if (GetSpellInfo()->Id == SPELL_DARK_TOUCHED)
|
||||
{
|
||||
if (GetCaster()->HasAura(SPELL_DARK_FLAME))
|
||||
if (GetCaster()->HasAura(SPELL_FLAME_TOUCHED))
|
||||
{
|
||||
GetCaster()->RemoveAurasDueToSpell(SPELL_FLAME_TOUCHED);
|
||||
GetCaster()->CastSpell(GetCaster(), SPELL_DARK_FLAME, true);
|
||||
return SPELL_FAILED_DONT_REPORT;
|
||||
|
||||
if (GetSpellInfo()->Id == SPELL_DARK_TOUCHED)
|
||||
{
|
||||
if (GetCaster()->HasAura(SPELL_FLAME_TOUCHED))
|
||||
{
|
||||
GetCaster()->RemoveAurasDueToSpell(SPELL_FLAME_TOUCHED);
|
||||
GetCaster()->CastSpell(GetCaster(), SPELL_DARK_FLAME, true);
|
||||
return SPELL_FAILED_DONT_REPORT;
|
||||
}
|
||||
}
|
||||
else // if (m_spellInfo->Id == SPELL_FLAME_TOUCHED)
|
||||
{
|
||||
if (GetCaster()->HasAura(SPELL_DARK_TOUCHED))
|
||||
{
|
||||
GetCaster()->RemoveAurasDueToSpell(SPELL_DARK_TOUCHED);
|
||||
GetCaster()->CastSpell(GetCaster(), SPELL_DARK_FLAME, true);
|
||||
return SPELL_FAILED_DONT_REPORT;
|
||||
}
|
||||
}
|
||||
return SPELL_CAST_OK;
|
||||
}
|
||||
|
||||
void Register() override
|
||||
else // if (m_spellInfo->Id == SPELL_FLAME_TOUCHED)
|
||||
{
|
||||
OnCheckCast += SpellCheckCastFn(spell_eredar_twins_handle_touch_SpellScript::CheckCast);
|
||||
if (GetCaster()->HasAura(SPELL_DARK_TOUCHED))
|
||||
{
|
||||
GetCaster()->RemoveAurasDueToSpell(SPELL_DARK_TOUCHED);
|
||||
GetCaster()->CastSpell(GetCaster(), SPELL_DARK_FLAME, true);
|
||||
return SPELL_FAILED_DONT_REPORT;
|
||||
}
|
||||
}
|
||||
};
|
||||
return SPELL_CAST_OK;
|
||||
}
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void Register() override
|
||||
{
|
||||
return new spell_eredar_twins_handle_touch_SpellScript();
|
||||
OnCheckCast += SpellCheckCastFn(spell_eredar_twins_handle_touch::CheckCast);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_eredar_twins_blaze : public SpellScriptLoader
|
||||
class spell_eredar_twins_blaze : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_eredar_twins_blaze() : SpellScriptLoader("spell_eredar_twins_blaze") { }
|
||||
PrepareSpellScript(spell_eredar_twins_blaze);
|
||||
|
||||
class spell_eredar_twins_blaze_SpellScript : public SpellScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareSpellScript(spell_eredar_twins_blaze_SpellScript);
|
||||
return ValidateSpellInfo({ SPELL_BLAZE_SUMMON });
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (Unit* target = GetHitUnit())
|
||||
target->CastSpell(target, SPELL_BLAZE_SUMMON, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_eredar_twins_blaze_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void HandleScript(SpellEffIndex effIndex)
|
||||
{
|
||||
return new spell_eredar_twins_blaze_SpellScript();
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (Unit* target = GetHitUnit())
|
||||
target->CastSpell(target, SPELL_BLAZE_SUMMON, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_eredar_twins_blaze::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -520,10 +496,10 @@ void AddSC_boss_eredar_twins()
|
||||
{
|
||||
new boss_sacrolash();
|
||||
new boss_alythess();
|
||||
new spell_eredar_twins_apply_dark_touched();
|
||||
new spell_eredar_twins_apply_flame_touched();
|
||||
new spell_eredar_twins_handle_touch();
|
||||
new spell_eredar_twins_blaze();
|
||||
RegisterSpellScript(spell_eredar_twins_apply_dark_touched);
|
||||
RegisterSpellScript(spell_eredar_twins_apply_flame_touched);
|
||||
RegisterSpellScript(spell_eredar_twins_handle_touch);
|
||||
RegisterSpellScript(spell_eredar_twins_blaze);
|
||||
new AreaTrigger_at_sunwell_eredar_twins();
|
||||
}
|
||||
|
||||
|
||||
@@ -476,65 +476,53 @@ public:
|
||||
};
|
||||
};
|
||||
|
||||
class spell_felmyst_fog_of_corruption : public SpellScriptLoader
|
||||
class spell_felmyst_fog_of_corruption : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_felmyst_fog_of_corruption() : SpellScriptLoader("spell_felmyst_fog_of_corruption") { }
|
||||
PrepareSpellScript(spell_felmyst_fog_of_corruption);
|
||||
|
||||
class spell_felmyst_fog_of_corruption_SpellScript : public SpellScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareSpellScript(spell_felmyst_fog_of_corruption_SpellScript);
|
||||
return ValidateSpellInfo({ SPELL_FOG_OF_CORRUPTION_CHARM });
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (Unit* target = GetHitUnit())
|
||||
target->CastSpell(GetCaster(), SPELL_FOG_OF_CORRUPTION_CHARM, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_felmyst_fog_of_corruption_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
return new spell_felmyst_fog_of_corruption_SpellScript();
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (Unit* target = GetHitUnit())
|
||||
target->CastSpell(GetCaster(), SPELL_FOG_OF_CORRUPTION_CHARM, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_felmyst_fog_of_corruption::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_felmyst_fog_of_corruption_charm : public SpellScriptLoader
|
||||
class spell_felmyst_fog_of_corruption_charm_aura : public AuraScript
|
||||
{
|
||||
public:
|
||||
spell_felmyst_fog_of_corruption_charm() : SpellScriptLoader("spell_felmyst_fog_of_corruption_charm") { }
|
||||
PrepareAuraScript(spell_felmyst_fog_of_corruption_charm_aura);
|
||||
|
||||
class spell_felmyst_fog_of_corruption_charm_AuraScript : public AuraScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareAuraScript(spell_felmyst_fog_of_corruption_charm_AuraScript);
|
||||
return ValidateSpellInfo({ SPELL_FOG_OF_CORRUPTION_CHARM2, SPELL_FOG_OF_CORRUPTION_CHARM });
|
||||
}
|
||||
|
||||
void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetTarget()->CastSpell(GetTarget(), SPELL_FOG_OF_CORRUPTION_CHARM2, true);
|
||||
}
|
||||
|
||||
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetTarget()->RemoveAurasDueToSpell(SPELL_FOG_OF_CORRUPTION_CHARM);
|
||||
GetTarget()->RemoveAurasDueToSpell(SPELL_FOG_OF_CORRUPTION_CHARM2);
|
||||
Unit::Kill(GetCaster(), GetTarget(), false);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_felmyst_fog_of_corruption_charm_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_felmyst_fog_of_corruption_charm_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
return new spell_felmyst_fog_of_corruption_charm_AuraScript();
|
||||
GetTarget()->CastSpell(GetTarget(), SPELL_FOG_OF_CORRUPTION_CHARM2, true);
|
||||
}
|
||||
|
||||
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetTarget()->RemoveAurasDueToSpell(SPELL_FOG_OF_CORRUPTION_CHARM);
|
||||
GetTarget()->RemoveAurasDueToSpell(SPELL_FOG_OF_CORRUPTION_CHARM2);
|
||||
Unit::Kill(GetCaster(), GetTarget(), false);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_felmyst_fog_of_corruption_charm_aura::HandleApply, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_felmyst_fog_of_corruption_charm_aura::HandleRemove, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -551,29 +539,18 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class spell_felmyst_open_brutallus_back_doors : public SpellScriptLoader
|
||||
class spell_felmyst_open_brutallus_back_doors : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_felmyst_open_brutallus_back_doors() : SpellScriptLoader("spell_felmyst_open_brutallus_back_doors") { }
|
||||
PrepareSpellScript(spell_felmyst_open_brutallus_back_doors);
|
||||
|
||||
class spell_felmyst_open_brutallus_back_doors_SpellScript : public SpellScript
|
||||
void FilterTargets(std::list<WorldObject*>& unitList)
|
||||
{
|
||||
PrepareSpellScript(spell_felmyst_open_brutallus_back_doors_SpellScript);
|
||||
unitList.remove_if(DoorsGuidCheck());
|
||||
}
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& unitList)
|
||||
{
|
||||
unitList.remove_if(DoorsGuidCheck());
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_felmyst_open_brutallus_back_doors_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void Register() override
|
||||
{
|
||||
return new spell_felmyst_open_brutallus_back_doors_SpellScript();
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_felmyst_open_brutallus_back_doors::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -582,8 +559,8 @@ void AddSC_boss_felmyst()
|
||||
new boss_felmyst();
|
||||
new npc_demonic_vapor();
|
||||
new npc_demonic_vapor_trail();
|
||||
new spell_felmyst_fog_of_corruption();
|
||||
new spell_felmyst_fog_of_corruption_charm();
|
||||
new spell_felmyst_open_brutallus_back_doors();
|
||||
RegisterSpellScript(spell_felmyst_fog_of_corruption);
|
||||
RegisterSpellScript(spell_felmyst_fog_of_corruption_charm_aura);
|
||||
RegisterSpellScript(spell_felmyst_open_brutallus_back_doors);
|
||||
}
|
||||
|
||||
|
||||
@@ -633,140 +633,116 @@ private:
|
||||
Unit* _victim;
|
||||
};
|
||||
|
||||
class spell_kalecgos_spectral_blast_dummy : public SpellScriptLoader
|
||||
class spell_kalecgos_spectral_blast_dummy : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_kalecgos_spectral_blast_dummy() : SpellScriptLoader("spell_kalecgos_spectral_blast_dummy") { }
|
||||
PrepareSpellScript(spell_kalecgos_spectral_blast_dummy);
|
||||
|
||||
class spell_kalecgos_spectral_blast_dummy_SpellScript : public SpellScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareSpellScript(spell_kalecgos_spectral_blast_dummy_SpellScript);
|
||||
return ValidateSpellInfo({ SPELL_SPECTRAL_BLAST_PORTAL, SPELL_SPECTRAL_BLAST_AA, SPELL_TELEPORT_SPECTRAL });
|
||||
}
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
targets.remove_if(SpectralBlastCheck(GetCaster()->GetVictim()));
|
||||
Acore::Containers::RandomResize(targets, 1);
|
||||
}
|
||||
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (Unit* target = GetHitUnit())
|
||||
{
|
||||
target->CastSpell(target, SPELL_SPECTRAL_BLAST_PORTAL, true);
|
||||
target->CastSpell(target, SPELL_SPECTRAL_BLAST_AA, true);
|
||||
target->CastSpell(target, SPELL_TELEPORT_SPECTRAL, true);
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kalecgos_spectral_blast_dummy_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_kalecgos_spectral_blast_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
return new spell_kalecgos_spectral_blast_dummy_SpellScript();
|
||||
targets.remove_if(SpectralBlastCheck(GetCaster()->GetVictim()));
|
||||
Acore::Containers::RandomResize(targets, 1);
|
||||
}
|
||||
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (Unit* target = GetHitUnit())
|
||||
{
|
||||
target->CastSpell(target, SPELL_SPECTRAL_BLAST_PORTAL, true);
|
||||
target->CastSpell(target, SPELL_SPECTRAL_BLAST_AA, true);
|
||||
target->CastSpell(target, SPELL_TELEPORT_SPECTRAL, true);
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kalecgos_spectral_blast_dummy::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_kalecgos_spectral_blast_dummy::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_kalecgos_curse_of_boundless_agony : public SpellScriptLoader
|
||||
class spell_kalecgos_curse_of_boundless_agony_aura : public AuraScript
|
||||
{
|
||||
public:
|
||||
spell_kalecgos_curse_of_boundless_agony() : SpellScriptLoader("spell_kalecgos_curse_of_boundless_agony") { }
|
||||
PrepareAuraScript(spell_kalecgos_curse_of_boundless_agony_aura);
|
||||
|
||||
class spell_kalecgos_curse_of_boundless_agony_AuraScript : public AuraScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareAuraScript(spell_kalecgos_curse_of_boundless_agony_AuraScript);
|
||||
return ValidateSpellInfo({ SPELL_CURSE_OF_BOUNDLESS_AGONY_PLR });
|
||||
}
|
||||
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (InstanceScript* instance = GetUnitOwner()->GetInstanceScript())
|
||||
if (instance->IsEncounterInProgress())
|
||||
GetUnitOwner()->CastCustomSpell(SPELL_CURSE_OF_BOUNDLESS_AGONY_PLR, SPELLVALUE_MAX_TARGETS, 1, GetUnitOwner(), true);
|
||||
}
|
||||
|
||||
void OnPeriodic(AuraEffect const* aurEff)
|
||||
{
|
||||
if (aurEff->GetTickNumber() > 1 && aurEff->GetTickNumber() % 5 == 1)
|
||||
GetAura()->GetEffect(aurEff->GetEffIndex())->SetAmount(aurEff->GetAmount() * 2);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_kalecgos_curse_of_boundless_agony_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_kalecgos_curse_of_boundless_agony_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
return new spell_kalecgos_curse_of_boundless_agony_AuraScript();
|
||||
if (InstanceScript* instance = GetUnitOwner()->GetInstanceScript())
|
||||
if (instance->IsEncounterInProgress())
|
||||
GetUnitOwner()->CastCustomSpell(SPELL_CURSE_OF_BOUNDLESS_AGONY_PLR, SPELLVALUE_MAX_TARGETS, 1, GetUnitOwner(), true);
|
||||
}
|
||||
|
||||
void OnPeriodic(AuraEffect const* aurEff)
|
||||
{
|
||||
if (aurEff->GetTickNumber() > 1 && aurEff->GetTickNumber() % 5 == 1)
|
||||
GetAura()->GetEffect(aurEff->GetEffIndex())->SetAmount(aurEff->GetAmount() * 2);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_kalecgos_curse_of_boundless_agony_aura::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_kalecgos_curse_of_boundless_agony_aura::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_kalecgos_spectral_realm_dummy : public SpellScriptLoader
|
||||
class spell_kalecgos_spectral_realm_dummy : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_kalecgos_spectral_realm_dummy() : SpellScriptLoader("spell_kalecgos_spectral_realm_dummy") { }
|
||||
PrepareSpellScript(spell_kalecgos_spectral_realm_dummy);
|
||||
|
||||
class spell_kalecgos_spectral_realm_dummy_SpellScript : public SpellScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareSpellScript(spell_kalecgos_spectral_realm_dummy_SpellScript);
|
||||
return ValidateSpellInfo({ SPELL_SPECTRAL_EXHAUSTION, SPELL_TELEPORT_SPECTRAL });
|
||||
}
|
||||
|
||||
SpellCastResult CheckCast()
|
||||
{
|
||||
if (GetCaster()->HasAura(SPELL_SPECTRAL_EXHAUSTION))
|
||||
return SPELL_FAILED_CASTER_AURASTATE;
|
||||
|
||||
return SPELL_CAST_OK;
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
GetCaster()->CastSpell(GetCaster(), SPELL_TELEPORT_SPECTRAL, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnCheckCast += SpellCheckCastFn(spell_kalecgos_spectral_realm_dummy_SpellScript::CheckCast);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_kalecgos_spectral_realm_dummy_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
SpellCastResult CheckCast()
|
||||
{
|
||||
return new spell_kalecgos_spectral_realm_dummy_SpellScript();
|
||||
if (GetCaster()->HasAura(SPELL_SPECTRAL_EXHAUSTION))
|
||||
return SPELL_FAILED_CASTER_AURASTATE;
|
||||
|
||||
return SPELL_CAST_OK;
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
GetCaster()->CastSpell(GetCaster(), SPELL_TELEPORT_SPECTRAL, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnCheckCast += SpellCheckCastFn(spell_kalecgos_spectral_realm_dummy::CheckCast);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_kalecgos_spectral_realm_dummy::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_kalecgos_spectral_realm : public SpellScriptLoader
|
||||
class spell_kalecgos_spectral_realm_aura : public AuraScript
|
||||
{
|
||||
public:
|
||||
spell_kalecgos_spectral_realm() : SpellScriptLoader("spell_kalecgos_spectral_realm") { }
|
||||
PrepareAuraScript(spell_kalecgos_spectral_realm_aura);
|
||||
|
||||
class spell_kalecgos_spectral_realm_AuraScript : public AuraScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareAuraScript(spell_kalecgos_spectral_realm_AuraScript);
|
||||
return ValidateSpellInfo({ SPELL_SPECTRAL_EXHAUSTION, SPELL_TELEPORT_NORMAL_REALM });
|
||||
}
|
||||
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SPECTRAL_EXHAUSTION, true);
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_TELEPORT_NORMAL_REALM, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_kalecgos_spectral_realm_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_MOD_INVISIBILITY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
return new spell_kalecgos_spectral_realm_AuraScript();
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SPECTRAL_EXHAUSTION, true);
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_TELEPORT_NORMAL_REALM, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_kalecgos_spectral_realm_aura::OnRemove, EFFECT_1, SPELL_AURA_MOD_INVISIBILITY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -775,9 +751,9 @@ void AddSC_boss_kalecgos()
|
||||
new boss_kalecgos();
|
||||
new boss_sathrovarr();
|
||||
new boss_kalec();
|
||||
new spell_kalecgos_spectral_blast_dummy();
|
||||
new spell_kalecgos_curse_of_boundless_agony();
|
||||
new spell_kalecgos_spectral_realm_dummy();
|
||||
new spell_kalecgos_spectral_realm();
|
||||
RegisterSpellScript(spell_kalecgos_spectral_blast_dummy);
|
||||
RegisterSpellScript(spell_kalecgos_curse_of_boundless_agony_aura);
|
||||
RegisterSpellScript(spell_kalecgos_spectral_realm_dummy);
|
||||
RegisterSpellScript(spell_kalecgos_spectral_realm_aura);
|
||||
}
|
||||
|
||||
|
||||
@@ -1027,304 +1027,219 @@ public:
|
||||
};
|
||||
};
|
||||
|
||||
class spell_kiljaeden_shadow_spike : public SpellScriptLoader
|
||||
class spell_kiljaeden_shadow_spike_aura : public AuraScript
|
||||
{
|
||||
public:
|
||||
spell_kiljaeden_shadow_spike() : SpellScriptLoader("spell_kiljaeden_shadow_spike") { }
|
||||
PrepareAuraScript(spell_kiljaeden_shadow_spike_aura);
|
||||
|
||||
class spell_kiljaeden_shadow_spike_AuraScript : public AuraScript
|
||||
void HandlePeriodic(AuraEffect const* aurEff)
|
||||
{
|
||||
PrepareAuraScript(spell_kiljaeden_shadow_spike_AuraScript);
|
||||
PreventDefaultAction();
|
||||
if (Unit* target = GetUnitOwner()->GetAI()->SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true))
|
||||
GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true);
|
||||
}
|
||||
|
||||
void HandlePeriodic(AuraEffect const* aurEff)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
if (Unit* target = GetUnitOwner()->GetAI()->SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true))
|
||||
GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_kiljaeden_shadow_spike_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
void Register() override
|
||||
{
|
||||
return new spell_kiljaeden_shadow_spike_AuraScript();
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_kiljaeden_shadow_spike_aura::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_kiljaeden_sinister_reflection : public SpellScriptLoader
|
||||
class spell_kiljaeden_sinister_reflection : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_kiljaeden_sinister_reflection() : SpellScriptLoader("spell_kiljaeden_sinister_reflection") { }
|
||||
PrepareSpellScript(spell_kiljaeden_sinister_reflection);
|
||||
|
||||
class spell_kiljaeden_sinister_reflection_SpellScript : public SpellScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareSpellScript(spell_kiljaeden_sinister_reflection_SpellScript);
|
||||
return ValidateSpellInfo({ SPELL_SINISTER_REFLECTION_SUMMON, SPELL_SINISTER_REFLECTION_CLONE });
|
||||
}
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
targets.remove_if(Acore::UnitAuraCheck(true, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT));
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (Unit* target = GetHitUnit())
|
||||
{
|
||||
target->CastSpell(target, SPELL_SINISTER_REFLECTION_SUMMON, true);
|
||||
//target->CastSpell(target, SPELL_SINISTER_REFLECTION_CLONE, true);
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kiljaeden_sinister_reflection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_kiljaeden_sinister_reflection_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
return new spell_kiljaeden_sinister_reflection_SpellScript();
|
||||
targets.remove_if(Acore::UnitAuraCheck(true, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT));
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (Unit* target = GetHitUnit())
|
||||
{
|
||||
target->CastSpell(target, SPELL_SINISTER_REFLECTION_SUMMON, true);
|
||||
//target->CastSpell(target, SPELL_SINISTER_REFLECTION_CLONE, true);
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kiljaeden_sinister_reflection::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_kiljaeden_sinister_reflection::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_kiljaeden_sinister_reflection_clone : public SpellScriptLoader
|
||||
class spell_kiljaeden_sinister_reflection_clone : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_kiljaeden_sinister_reflection_clone() : SpellScriptLoader("spell_kiljaeden_sinister_reflection_clone") { }
|
||||
PrepareSpellScript(spell_kiljaeden_sinister_reflection_clone);
|
||||
|
||||
class spell_kiljaeden_sinister_reflection_clone_SpellScript : public SpellScript
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
PrepareSpellScript(spell_kiljaeden_sinister_reflection_clone_SpellScript);
|
||||
targets.sort(Acore::ObjectDistanceOrderPred(GetCaster()));
|
||||
WorldObject* target = targets.front();
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
targets.clear();
|
||||
if (target && target->GetTypeId() == TYPEID_UNIT)
|
||||
{
|
||||
targets.sort(Acore::ObjectDistanceOrderPred(GetCaster()));
|
||||
WorldObject* target = targets.front();
|
||||
|
||||
targets.clear();
|
||||
if (target && target->GetTypeId() == TYPEID_UNIT)
|
||||
{
|
||||
target->ToCreature()->AI()->SetData(1, GetCaster()->getClass());
|
||||
targets.push_back(target);
|
||||
}
|
||||
target->ToCreature()->AI()->SetData(1, GetCaster()->getClass());
|
||||
targets.push_back(target);
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kiljaeden_sinister_reflection_clone_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void Register() override
|
||||
{
|
||||
return new spell_kiljaeden_sinister_reflection_clone_SpellScript();
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kiljaeden_sinister_reflection_clone::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_kiljaeden_flame_dart : public SpellScriptLoader
|
||||
class spell_kiljaeden_flame_dart : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_kiljaeden_flame_dart() : SpellScriptLoader("spell_kiljaeden_flame_dart") { }
|
||||
PrepareSpellScript(spell_kiljaeden_flame_dart);
|
||||
|
||||
class spell_kiljaeden_flame_dart_SpellScript : public SpellScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareSpellScript(spell_kiljaeden_flame_dart_SpellScript);
|
||||
return ValidateSpellInfo({ SPELL_FLAME_DART_EXPLOSION });
|
||||
}
|
||||
|
||||
void HandleSchoolDamage(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Unit* target = GetHitUnit())
|
||||
target->CastSpell(target, SPELL_FLAME_DART_EXPLOSION, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_kiljaeden_flame_dart_SpellScript::HandleSchoolDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void HandleSchoolDamage(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
return new spell_kiljaeden_flame_dart_SpellScript();
|
||||
if (Unit* target = GetHitUnit())
|
||||
target->CastSpell(target, SPELL_FLAME_DART_EXPLOSION, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_kiljaeden_flame_dart::HandleSchoolDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_kiljaeden_darkness : public SpellScriptLoader
|
||||
class spell_kiljaeden_darkness_aura : public AuraScript
|
||||
{
|
||||
public:
|
||||
spell_kiljaeden_darkness() : SpellScriptLoader("spell_kiljaeden_darkness") { }
|
||||
PrepareAuraScript(spell_kiljaeden_darkness_aura);
|
||||
|
||||
class spell_kiljaeden_darkness_AuraScript : public AuraScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareAuraScript(spell_kiljaeden_darkness_AuraScript);
|
||||
return ValidateSpellInfo({ SPELL_DARKNESS_OF_A_THOUSAND_SOULS_DAMAGE });
|
||||
}
|
||||
|
||||
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (GetUnitOwner()->GetTypeId() == TYPEID_UNIT)
|
||||
GetUnitOwner()->ToCreature()->AI()->DoAction(ACTION_NO_KILL_TALK);
|
||||
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_DARKNESS_OF_A_THOUSAND_SOULS_DAMAGE, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_kiljaeden_darkness_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
return new spell_kiljaeden_darkness_AuraScript();
|
||||
if (GetUnitOwner()->GetTypeId() == TYPEID_UNIT)
|
||||
GetUnitOwner()->ToCreature()->AI()->DoAction(ACTION_NO_KILL_TALK);
|
||||
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_DARKNESS_OF_A_THOUSAND_SOULS_DAMAGE, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_kiljaeden_darkness_aura::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_kiljaeden_power_of_the_blue_flight : public SpellScriptLoader
|
||||
class spell_kiljaeden_power_of_the_blue_flight : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_kiljaeden_power_of_the_blue_flight() : SpellScriptLoader("spell_kiljaeden_power_of_the_blue_flight") { }
|
||||
PrepareSpellScript(spell_kiljaeden_power_of_the_blue_flight);
|
||||
|
||||
class spell_kiljaeden_power_of_the_blue_flight_SpellScript : public SpellScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareSpellScript(spell_kiljaeden_power_of_the_blue_flight_SpellScript);
|
||||
return ValidateSpellInfo({ SPELL_SUMMON_BLUE_DRAKE, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT });
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (Player* player = GetHitPlayer())
|
||||
{
|
||||
player->CastSpell(player, SPELL_SUMMON_BLUE_DRAKE, true);
|
||||
player->CastSpell(player, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT, true);
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_kiljaeden_power_of_the_blue_flight_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
return new spell_kiljaeden_power_of_the_blue_flight_SpellScript();
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (Player* player = GetHitPlayer())
|
||||
{
|
||||
player->CastSpell(player, SPELL_SUMMON_BLUE_DRAKE, true);
|
||||
player->CastSpell(player, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT, true);
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_kiljaeden_power_of_the_blue_flight::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_kiljaeden_vengeance_of_the_blue_flight : public SpellScriptLoader
|
||||
class spell_kiljaeden_vengeance_of_the_blue_flight_aura : public AuraScript
|
||||
{
|
||||
public:
|
||||
spell_kiljaeden_vengeance_of_the_blue_flight() : SpellScriptLoader("spell_kiljaeden_vengeance_of_the_blue_flight") { }
|
||||
PrepareAuraScript(spell_kiljaeden_vengeance_of_the_blue_flight_aura);
|
||||
|
||||
class spell_kiljaeden_vengeance_of_the_blue_flight_AuraScript : public AuraScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareAuraScript(spell_kiljaeden_vengeance_of_the_blue_flight_AuraScript);
|
||||
return ValidateSpellInfo({ SPELL_POSSESS_DRAKE_IMMUNITY });
|
||||
}
|
||||
|
||||
void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_POSSESS_DRAKE_IMMUNITY, true);
|
||||
}
|
||||
|
||||
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetUnitOwner()->RemoveAurasDueToSpell(SPELL_POSSESS_DRAKE_IMMUNITY);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_kiljaeden_vengeance_of_the_blue_flight_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_MOD_POSSESS, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectApply += AuraEffectApplyFn(spell_kiljaeden_vengeance_of_the_blue_flight_AuraScript::HandleApply, EFFECT_2, SPELL_AURA_MOD_PACIFY_SILENCE, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_kiljaeden_vengeance_of_the_blue_flight_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_MOD_POSSESS, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_kiljaeden_vengeance_of_the_blue_flight_AuraScript::HandleRemove, EFFECT_2, SPELL_AURA_MOD_PACIFY_SILENCE, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
return new spell_kiljaeden_vengeance_of_the_blue_flight_AuraScript();
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_POSSESS_DRAKE_IMMUNITY, true);
|
||||
}
|
||||
|
||||
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetUnitOwner()->RemoveAurasDueToSpell(SPELL_POSSESS_DRAKE_IMMUNITY);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_kiljaeden_vengeance_of_the_blue_flight_aura::HandleApply, EFFECT_0, SPELL_AURA_MOD_POSSESS, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectApply += AuraEffectApplyFn(spell_kiljaeden_vengeance_of_the_blue_flight_aura::HandleApply, EFFECT_2, SPELL_AURA_MOD_PACIFY_SILENCE, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_kiljaeden_vengeance_of_the_blue_flight_aura::HandleRemove, EFFECT_0, SPELL_AURA_MOD_POSSESS, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_kiljaeden_vengeance_of_the_blue_flight_aura::HandleRemove, EFFECT_2, SPELL_AURA_MOD_PACIFY_SILENCE, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_kiljaeden_armageddon_periodic : public SpellScriptLoader
|
||||
class spell_kiljaeden_armageddon_periodic_aura : public AuraScript
|
||||
{
|
||||
public:
|
||||
spell_kiljaeden_armageddon_periodic() : SpellScriptLoader("spell_kiljaeden_armageddon_periodic") { }
|
||||
PrepareAuraScript(spell_kiljaeden_armageddon_periodic_aura);
|
||||
|
||||
class spell_kiljaeden_armageddon_periodic_AuraScript : public AuraScript
|
||||
void HandlePeriodic(AuraEffect const* aurEff)
|
||||
{
|
||||
PrepareAuraScript(spell_kiljaeden_armageddon_periodic_AuraScript);
|
||||
PreventDefaultAction();
|
||||
if (Unit* target = GetUnitOwner()->GetAI()->SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true))
|
||||
GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true);
|
||||
}
|
||||
|
||||
void HandlePeriodic(AuraEffect const* aurEff)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
if (Unit* target = GetUnitOwner()->GetAI()->SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true))
|
||||
GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_kiljaeden_armageddon_periodic_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
void Register() override
|
||||
{
|
||||
return new spell_kiljaeden_armageddon_periodic_AuraScript();
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_kiljaeden_armageddon_periodic_aura::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_kiljaeden_armageddon_missile : public SpellScriptLoader
|
||||
class spell_kiljaeden_armageddon_missile : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_kiljaeden_armageddon_missile() : SpellScriptLoader("spell_kiljaeden_armageddon_missile") { }
|
||||
PrepareSpellScript(spell_kiljaeden_armageddon_missile);
|
||||
|
||||
class spell_kiljaeden_armageddon_missile_SpellScript : public SpellScript
|
||||
void SetDest(SpellDestination& dest)
|
||||
{
|
||||
PrepareSpellScript(spell_kiljaeden_armageddon_missile_SpellScript);
|
||||
Position const offset = { 0.0f, 0.0f, -20.0f, 0.0f };
|
||||
dest.RelocateOffset(offset);
|
||||
}
|
||||
|
||||
void SetDest(SpellDestination& dest)
|
||||
{
|
||||
Position const offset = { 0.0f, 0.0f, -20.0f, 0.0f };
|
||||
dest.RelocateOffset(offset);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_kiljaeden_armageddon_missile_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void Register() override
|
||||
{
|
||||
return new spell_kiljaeden_armageddon_missile_SpellScript();
|
||||
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_kiljaeden_armageddon_missile::SetDest, EFFECT_0, TARGET_DEST_CASTER);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_kiljaeden_dragon_breath : public SpellScriptLoader
|
||||
class spell_kiljaeden_dragon_breath : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_kiljaeden_dragon_breath() : SpellScriptLoader("spell_kiljaeden_dragon_breath") { }
|
||||
PrepareSpellScript(spell_kiljaeden_dragon_breath);
|
||||
|
||||
class spell_kiljaeden_dragon_breath_SpellScript : public SpellScript
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
PrepareSpellScript(spell_kiljaeden_dragon_breath_SpellScript);
|
||||
targets.remove_if(Acore::UnitAuraCheck(true, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT));
|
||||
}
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
targets.remove_if(Acore::UnitAuraCheck(true, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kiljaeden_dragon_breath_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_CONE_ALLY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void Register() override
|
||||
{
|
||||
return new spell_kiljaeden_dragon_breath_SpellScript();
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kiljaeden_dragon_breath::FilterTargets, EFFECT_ALL, TARGET_UNIT_CONE_ALLY);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1333,15 +1248,15 @@ void AddSC_boss_kiljaeden()
|
||||
new npc_kiljaeden_controller();
|
||||
new boss_kiljaeden();
|
||||
new npc_kalecgos_kj();
|
||||
new spell_kiljaeden_shadow_spike();
|
||||
new spell_kiljaeden_sinister_reflection();
|
||||
new spell_kiljaeden_sinister_reflection_clone();
|
||||
new spell_kiljaeden_flame_dart();
|
||||
new spell_kiljaeden_darkness();
|
||||
new spell_kiljaeden_power_of_the_blue_flight();
|
||||
new spell_kiljaeden_vengeance_of_the_blue_flight();
|
||||
new spell_kiljaeden_armageddon_periodic();
|
||||
new spell_kiljaeden_armageddon_missile();
|
||||
new spell_kiljaeden_dragon_breath();
|
||||
RegisterSpellScript(spell_kiljaeden_shadow_spike_aura);
|
||||
RegisterSpellScript(spell_kiljaeden_sinister_reflection);
|
||||
RegisterSpellScript(spell_kiljaeden_sinister_reflection_clone);
|
||||
RegisterSpellScript(spell_kiljaeden_flame_dart);
|
||||
RegisterSpellScript(spell_kiljaeden_darkness_aura);
|
||||
RegisterSpellScript(spell_kiljaeden_power_of_the_blue_flight);
|
||||
RegisterSpellScript(spell_kiljaeden_vengeance_of_the_blue_flight_aura);
|
||||
RegisterSpellScript(spell_kiljaeden_armageddon_periodic_aura);
|
||||
RegisterSpellScript(spell_kiljaeden_armageddon_missile);
|
||||
RegisterSpellScript(spell_kiljaeden_dragon_breath);
|
||||
}
|
||||
|
||||
|
||||
@@ -326,183 +326,148 @@ public:
|
||||
};
|
||||
};
|
||||
|
||||
class spell_muru_summon_blood_elves_periodic : public SpellScriptLoader
|
||||
class spell_muru_summon_blood_elves_periodic_aura : public AuraScript
|
||||
{
|
||||
public:
|
||||
spell_muru_summon_blood_elves_periodic() : SpellScriptLoader("spell_muru_summon_blood_elves_periodic") { }
|
||||
PrepareAuraScript(spell_muru_summon_blood_elves_periodic_aura);
|
||||
|
||||
class spell_muru_summon_blood_elves_periodic_AuraScript : public AuraScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareAuraScript(spell_muru_summon_blood_elves_periodic_AuraScript);
|
||||
return ValidateSpellInfo({ SPELL_SUMMON_FURY_MAGE1, SPELL_SUMMON_FURY_MAGE2, SPELL_SUMMON_BERSERKER1, SPELL_SUMMON_BERSERKER2 });
|
||||
}
|
||||
|
||||
void HandleApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
// first tick after 10 seconds
|
||||
GetAura()->GetEffect(aurEff->GetEffIndex())->SetPeriodicTimer(10000);
|
||||
}
|
||||
|
||||
void OnPeriodic(AuraEffect const* /*aurEff*/)
|
||||
{
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_FURY_MAGE1, true);
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_FURY_MAGE2, true);
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER1, true);
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER2, true);
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER1, true);
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER2, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_muru_summon_blood_elves_periodic_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_muru_summon_blood_elves_periodic_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
void HandleApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
return new spell_muru_summon_blood_elves_periodic_AuraScript();
|
||||
// first tick after 10 seconds
|
||||
GetAura()->GetEffect(aurEff->GetEffIndex())->SetPeriodicTimer(10000);
|
||||
}
|
||||
|
||||
void OnPeriodic(AuraEffect const* /*aurEff*/)
|
||||
{
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_FURY_MAGE1, true);
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_FURY_MAGE2, true);
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER1, true);
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER2, true);
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER1, true);
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER2, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_muru_summon_blood_elves_periodic_aura::HandleApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_muru_summon_blood_elves_periodic_aura::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_muru_darkness : public SpellScriptLoader
|
||||
class spell_muru_darkness_aura : public AuraScript
|
||||
{
|
||||
public:
|
||||
spell_muru_darkness() : SpellScriptLoader("spell_muru_darkness") { }
|
||||
PrepareAuraScript(spell_muru_darkness_aura);
|
||||
|
||||
class spell_muru_darkness_AuraScript : public AuraScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareAuraScript(spell_muru_darkness_AuraScript);
|
||||
return ValidateSpellInfo({ SPELL_SUMMON_DARK_FIEND });
|
||||
}
|
||||
|
||||
void OnPeriodic(AuraEffect const* aurEff)
|
||||
{
|
||||
if (aurEff->GetTickNumber() == 3)
|
||||
for (uint8 i = 0; i < 8; ++i)
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_DARK_FIEND + i, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_muru_darkness_AuraScript::OnPeriodic, EFFECT_2, SPELL_AURA_PERIODIC_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
void OnPeriodic(AuraEffect const* aurEff)
|
||||
{
|
||||
return new spell_muru_darkness_AuraScript();
|
||||
if (aurEff->GetTickNumber() == 3)
|
||||
for (uint8 i = 0; i < 8; ++i)
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_DARK_FIEND + i, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_muru_darkness_aura::OnPeriodic, EFFECT_2, SPELL_AURA_PERIODIC_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_entropius_negative_energy : public SpellScriptLoader
|
||||
class spell_entropius_negative_energy : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_entropius_negative_energy() : SpellScriptLoader("spell_entropius_negative_energy") { }
|
||||
PrepareSpellScript(spell_entropius_negative_energy);
|
||||
|
||||
class spell_entropius_negative_energy_SpellScript : public SpellScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareSpellScript(spell_entropius_negative_energy_SpellScript);
|
||||
return ValidateSpellInfo({ SPELL_NEGATIVE_ENERGY_CHAIN });
|
||||
}
|
||||
|
||||
bool Load() override
|
||||
{
|
||||
return GetCaster()->GetTypeId() == TYPEID_UNIT;
|
||||
}
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
Acore::Containers::RandomResize(targets, GetCaster()->GetAI()->GetData(DATA_NEGATIVE_ENERGY_TARGETS));
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (Unit* target = GetHitUnit())
|
||||
GetCaster()->CastSpell(target, SPELL_NEGATIVE_ENERGY_CHAIN, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_entropius_negative_energy_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_entropius_negative_energy_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
bool Load() override
|
||||
{
|
||||
return new spell_entropius_negative_energy_SpellScript();
|
||||
return GetCaster()->GetTypeId() == TYPEID_UNIT;
|
||||
}
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
Acore::Containers::RandomResize(targets, GetCaster()->GetAI()->GetData(DATA_NEGATIVE_ENERGY_TARGETS));
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (Unit* target = GetHitUnit())
|
||||
GetCaster()->CastSpell(target, SPELL_NEGATIVE_ENERGY_CHAIN, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_entropius_negative_energy::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_entropius_negative_energy::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_entropius_void_zone_visual : public SpellScriptLoader
|
||||
class spell_entropius_void_zone_visual_aura : public AuraScript
|
||||
{
|
||||
public:
|
||||
spell_entropius_void_zone_visual() : SpellScriptLoader("spell_entropius_void_zone_visual") { }
|
||||
PrepareAuraScript(spell_entropius_void_zone_visual_aura);
|
||||
|
||||
class spell_entropius_void_zone_visual_AuraScript : public AuraScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareAuraScript(spell_entropius_void_zone_visual_AuraScript);
|
||||
return ValidateSpellInfo({ SPELL_SUMMON_DARK_FIEND_ENTROPIUS });
|
||||
}
|
||||
|
||||
void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
SetDuration(3000);
|
||||
}
|
||||
|
||||
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_DARK_FIEND_ENTROPIUS, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_entropius_void_zone_visual_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_entropius_void_zone_visual_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
return new spell_entropius_void_zone_visual_AuraScript();
|
||||
SetDuration(3000);
|
||||
}
|
||||
|
||||
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_DARK_FIEND_ENTROPIUS, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_entropius_void_zone_visual_aura::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_entropius_void_zone_visual_aura::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_entropius_black_hole_effect : public SpellScriptLoader
|
||||
class spell_entropius_black_hole_effect : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_entropius_black_hole_effect() : SpellScriptLoader("spell_entropius_black_hole_effect") { }
|
||||
PrepareSpellScript(spell_entropius_black_hole_effect);
|
||||
|
||||
class spell_entropius_black_hole_effect_SpellScript : public SpellScript
|
||||
void HandlePull(SpellEffIndex effIndex)
|
||||
{
|
||||
PrepareSpellScript(spell_entropius_black_hole_effect_SpellScript);
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
Unit* target = GetHitUnit();
|
||||
if (!target)
|
||||
return;
|
||||
|
||||
void HandlePull(SpellEffIndex effIndex)
|
||||
Position pos;
|
||||
if (target->GetDistance(GetCaster()) < 5.0f)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
Unit* target = GetHitUnit();
|
||||
if (!target)
|
||||
return;
|
||||
|
||||
Position pos;
|
||||
if (target->GetDistance(GetCaster()) < 5.0f)
|
||||
{
|
||||
float o = frand(0, 2 * M_PI);
|
||||
pos.Relocate(GetCaster()->GetPositionX() + 4.0f * cos(o), GetCaster()->GetPositionY() + 4.0f * std::sin(o), GetCaster()->GetPositionZ() + frand(10.0f, 15.0f));
|
||||
}
|
||||
else
|
||||
pos.Relocate(GetCaster()->GetPositionX(), GetCaster()->GetPositionY(), GetCaster()->GetPositionZ() + 1.0f);
|
||||
|
||||
float speedXY = float(GetSpellInfo()->Effects[effIndex].MiscValue) * 0.1f;
|
||||
float speedZ = target->GetDistance(pos) / speedXY * 0.5f * Movement::gravity;
|
||||
|
||||
target->GetMotionMaster()->MoveJump(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), speedXY, speedZ);
|
||||
float o = frand(0, 2 * M_PI);
|
||||
pos.Relocate(GetCaster()->GetPositionX() + 4.0f * cos(o), GetCaster()->GetPositionY() + 4.0f * std::sin(o), GetCaster()->GetPositionZ() + frand(10.0f, 15.0f));
|
||||
}
|
||||
else
|
||||
pos.Relocate(GetCaster()->GetPositionX(), GetCaster()->GetPositionY(), GetCaster()->GetPositionZ() + 1.0f);
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_entropius_black_hole_effect_SpellScript::HandlePull, EFFECT_0, SPELL_EFFECT_PULL_TOWARDS_DEST);
|
||||
}
|
||||
};
|
||||
float speedXY = float(GetSpellInfo()->Effects[effIndex].MiscValue) * 0.1f;
|
||||
float speedZ = target->GetDistance(pos) / speedXY * 0.5f * Movement::gravity;
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
target->GetMotionMaster()->MoveJump(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), speedXY, speedZ);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
return new spell_entropius_black_hole_effect_SpellScript();
|
||||
OnEffectHitTarget += SpellEffectFn(spell_entropius_black_hole_effect::HandlePull, EFFECT_0, SPELL_EFFECT_PULL_TOWARDS_DEST);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -512,10 +477,10 @@ void AddSC_boss_muru()
|
||||
new boss_entropius();
|
||||
new npc_singularity();
|
||||
|
||||
new spell_muru_summon_blood_elves_periodic();
|
||||
new spell_muru_darkness();
|
||||
new spell_entropius_negative_energy();
|
||||
new spell_entropius_void_zone_visual();
|
||||
new spell_entropius_black_hole_effect();
|
||||
RegisterSpellScript(spell_muru_summon_blood_elves_periodic_aura);
|
||||
RegisterSpellScript(spell_muru_darkness_aura);
|
||||
RegisterSpellScript(spell_entropius_negative_energy);
|
||||
RegisterSpellScript(spell_entropius_void_zone_visual_aura);
|
||||
RegisterSpellScript(spell_entropius_black_hole_effect);
|
||||
}
|
||||
|
||||
|
||||
@@ -271,37 +271,31 @@ enum cataclysmBreath
|
||||
SPELL_WITHERED_TOUCH = 46300
|
||||
};
|
||||
|
||||
class spell_cataclysm_breath : public SpellScriptLoader
|
||||
class spell_cataclysm_breath : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_cataclysm_breath() : SpellScriptLoader("spell_cataclysm_breath") { }
|
||||
PrepareSpellScript(spell_cataclysm_breath);
|
||||
|
||||
class spell_cataclysm_breath_SpellScript : public SpellScript
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
PrepareSpellScript(spell_cataclysm_breath_SpellScript);
|
||||
return ValidateSpellInfo({ SPELL_CORROSIVE_POISON, SPELL_FEVERED_FATIGUE, SPELL_HEX, SPELL_NECROTIC_POISON, SPELL_PIERCING_SHADOW, SPELL_SHRINK, SPELL_WAVERING_WILL, SPELL_WITHERED_TOUCH });
|
||||
}
|
||||
|
||||
void HandleAfterCast()
|
||||
{
|
||||
if (Unit* target = GetExplTargetUnit())
|
||||
for (uint8 i = 0; i < 4; ++i)
|
||||
GetCaster()->CastSpell(target, RAND(SPELL_CORROSIVE_POISON, SPELL_FEVERED_FATIGUE, SPELL_HEX, SPELL_NECROTIC_POISON, SPELL_PIERCING_SHADOW, SPELL_SHRINK, SPELL_WAVERING_WILL, SPELL_WITHERED_TOUCH), true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterCast += SpellCastFn(spell_cataclysm_breath_SpellScript::HandleAfterCast);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
void HandleAfterCast()
|
||||
{
|
||||
return new spell_cataclysm_breath_SpellScript();
|
||||
if (Unit* target = GetExplTargetUnit())
|
||||
for (uint8 i = 0; i < 4; ++i)
|
||||
GetCaster()->CastSpell(target, RAND(SPELL_CORROSIVE_POISON, SPELL_FEVERED_FATIGUE, SPELL_HEX, SPELL_NECROTIC_POISON, SPELL_PIERCING_SHADOW, SPELL_SHRINK, SPELL_WAVERING_WILL, SPELL_WITHERED_TOUCH), true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterCast += SpellCastFn(spell_cataclysm_breath::HandleAfterCast);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_instance_sunwell_plateau()
|
||||
{
|
||||
new instance_sunwell_plateau();
|
||||
new spell_cataclysm_breath();
|
||||
RegisterSpellScript(spell_cataclysm_breath);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user