aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Outland/TempestKeep
diff options
context:
space:
mode:
authorKandera <KanderaDev@gmail.com>2012-02-18 12:12:49 +0100
committerQAston <qaston@gmail.com>2012-02-18 12:12:49 +0100
commitc517806a23751dd92d6a064b7f721507f182bc75 (patch)
treee74b5c99a83b78eae49d8c085de37c0c077d5e74 /src/server/scripts/Outland/TempestKeep
parentd55c8c7cc422fb75a669c2e337c02690266ca7af (diff)
Scripts/Spells: Convert code from Spell::EffectDummy to spell scripts.
Diffstat (limited to 'src/server/scripts/Outland/TempestKeep')
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp67
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp55
2 files changed, 113 insertions, 9 deletions
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
index 218c5a122f1..4917fb25153 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
@@ -23,7 +23,6 @@ SDComment:
SDCategory: Tempest Keep, The Eye
EndScriptData */
-#include "ScriptPCH.h"
#include "the_eye.h"
enum eEnums
@@ -40,6 +39,7 @@ enum eEnums
SPELL_ARCANE_MISSILES = 33031,
SPELL_WRATH_OF_THE_ASTROMANCER = 42783,
+ SPELL_WRATH_OF_THE_ASTROMANCER_DOT = 42784,
SPELL_BLINDING_LIGHT = 33009,
SPELL_FEAR = 34322,
SPELL_VOID_BOLT = 39329,
@@ -491,9 +491,74 @@ class mob_solarium_priest : public CreatureScript
return new mob_solarium_priestAI (Creature);
}
};
+
+class spell_astromancer_wrath_of_the_astromancer : public SpellScriptLoader
+{
+ public:
+ spell_astromancer_wrath_of_the_astromancer() : SpellScriptLoader("spell_astromancer_wrath_of_the_astromancer") { }
+
+ class spell_astromancer_wrath_of_the_astromancer_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_astromancer_wrath_of_the_astromancer_SpellScript);
+
+ bool Validate(SpellInfo const* /*SpellEntry*/)
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_WRATH_OF_THE_ASTROMANCER_DOT))
+ return false;
+ return true;
+ }
+
+ bool Load()
+ {
+ _targetCount = 0;
+ return true;
+ }
+
+ void CountTargets(std::list<Unit*>& targetList)
+ {
+ _targetCount = targetList.size();
+ }
+
+ void HandleDummy(SpellEffIndex /* effIndex */)
+ {
+ if (Unit* caster = GetOriginalCaster())
+ if (Unit* target = GetHitUnit())
+ {
+ if (!target->isAlive() || !_targetCount)
+ return;
+
+ int32 damage = 10000 / _targetCount;
+
+ SpellNonMeleeDamage damageInfo(caster, target, GetSpellInfo()->Id, GetSpellInfo()->SchoolMask);
+ damageInfo.damage = damage;
+
+ caster->CalcAbsorbResist(target, GetSpellInfo()->GetSchoolMask(), DOT, damage, &damageInfo.absorb, &damageInfo.resist, GetSpellInfo());
+ caster->DealDamageMods(target, damageInfo.damage, &damageInfo.absorb);
+ caster->SendSpellNonMeleeDamageLog(&damageInfo);
+ caster->DealSpellDamage(&damageInfo, false);
+ }
+ }
+
+ private:
+ int32 _targetCount;
+
+ void Register()
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_astromancer_wrath_of_the_astromancer_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnUnitTargetSelect += SpellUnitTargetFn(spell_astromancer_wrath_of_the_astromancer_SpellScript::CountTargets, EFFECT_0, TARGET_DEST_CASTER_RADIUS);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_astromancer_wrath_of_the_astromancer_SpellScript();
+ }
+};
+
void AddSC_boss_high_astromancer_solarian()
{
new boss_high_astromancer_solarian();
new mob_solarium_priest();
+ new spell_astromancer_wrath_of_the_astromancer();
}
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp
index ed818fb13be..3579a7d697b 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp
@@ -22,20 +22,22 @@
enum Spells
{
- SPELL_POSITIVE_CHARGE = 39090,
+ SPELL_POSITIVE_POLARITY = 39088,
SPELL_POSITIVE_CHARGE_STACK = 39089,
+ SPELL_POSITIVE_CHARGE = 39090,
+ SPELL_NEGATIVE_POLARITY = 39091,
+ SPELL_NEGATIVE_CHARGE_STACK = 39092,
SPELL_NEGATIVE_CHARGE = 39093,
- SPELL_NEGATIVE_CHARGE_STACK = 39092
};
-class spell_capacitus_polarity_shift : public SpellScriptLoader
+class spell_capacitus_polarity_charge : public SpellScriptLoader
{
public:
- spell_capacitus_polarity_shift() : SpellScriptLoader("spell_capacitus_polarity_shift") { }
+ spell_capacitus_polarity_charge() : SpellScriptLoader("spell_capacitus_polarity_charge") { }
- class spell_capacitus_polarity_shift_SpellScript : public SpellScript
+ class spell_capacitus_polarity_charge_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_capacitus_polarity_shift_SpellScript);
+ PrepareSpellScript(spell_capacitus_polarity_charge_SpellScript);
bool Validate(SpellInfo const* /*spell*/)
{
@@ -85,8 +87,44 @@ class spell_capacitus_polarity_shift : public SpellScriptLoader
void Register()
{
- OnEffectHitTarget += SpellEffectFn(spell_capacitus_polarity_shift_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
- OnUnitTargetSelect += SpellUnitTargetFn(spell_capacitus_polarity_shift_SpellScript::HandleTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
+ OnEffectHitTarget += SpellEffectFn(spell_capacitus_polarity_charge_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ OnUnitTargetSelect += SpellUnitTargetFn(spell_capacitus_polarity_charge_SpellScript::HandleTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_capacitus_polarity_charge_SpellScript();
+ }
+};
+
+class spell_capacitus_polarity_shift : public SpellScriptLoader
+{
+ public:
+ spell_capacitus_polarity_shift() : SpellScriptLoader("spell_capacitus_polarity_shift") { }
+
+ class spell_capacitus_polarity_shift_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_capacitus_polarity_shift_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/)
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_POLARITY) || !sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_POLARITY))
+ return false;
+ return true;
+ }
+
+ void HandleDummy(SpellEffIndex /* effIndex */)
+ {
+ Unit* target = GetHitUnit();
+ Unit* caster = GetCaster();
+
+ target->CastSpell(target, roll_chance_i(50) ? SPELL_POSITIVE_POLARITY : SPELL_NEGATIVE_POLARITY, true, NULL, NULL, caster->GetGUID());
+ }
+
+ void Register()
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_capacitus_polarity_shift_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
@@ -98,5 +136,6 @@ class spell_capacitus_polarity_shift : public SpellScriptLoader
void AddSC_boss_mechano_lord_capacitus()
{
+ new spell_capacitus_polarity_charge();
new spell_capacitus_polarity_shift();
}