aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h1
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp657
2 files changed, 302 insertions, 356 deletions
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h
index d508da97427..e0b70b3fa36 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h
@@ -85,5 +85,6 @@ inline AI* GetAhnKahetAI(T* obj)
}
#define RegisterAhnKahetCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetAhnKahetAI)
+#define RegisterAhnKahetGameObjectAI(ai_name) RegisterGameObjectAIWithFactory(ai_name, GetAhnKahetAI)
#endif // AHNKAHET_H_
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
index cb8d8c1690b..b4c9312bf32 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
@@ -86,433 +86,378 @@ enum Events
EVENT_DESPAWN
};
-class boss_prince_taldaram : public CreatureScript
+struct boss_prince_taldaram : public BossAI
{
- public:
- boss_prince_taldaram() : CreatureScript("boss_prince_taldaram") { }
-
- struct boss_prince_taldaramAI : public BossAI
+ boss_prince_taldaram(Creature* creature) : BossAI(creature, DATA_PRINCE_TALDARAM)
+ {
+ me->SetDisableGravity(true);
+ _embraceTakenDamage = 0;
+ _initialCheckTimer = 3000;
+ }
+
+ void Reset() override
+ {
+ _Reset();
+ _flameSphereTargetGUID.Clear();
+ _embraceTargetGUID.Clear();
+ _embraceTakenDamage = 0;
+
+ if (!CheckSpheres())
+ me->SummonCreatureGroup(SUMMON_GROUP_CONTROLLERS);
+ }
+
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ Talk(SAY_AGGRO);
+ events.ScheduleEvent(EVENT_BLOODTHIRST, 10s);
+ events.ScheduleEvent(EVENT_VANISH, 25s, 35s);
+ events.ScheduleEvent(EVENT_CONJURE_FLAME_SPHERES, 5s);
+ }
+
+ void JustSummoned(Creature* summon) override
+ {
+ BossAI::JustSummoned(summon);
+
+ switch (summon->GetEntry())
{
- boss_prince_taldaramAI(Creature* creature) : BossAI(creature, DATA_PRINCE_TALDARAM)
- {
- me->SetDisableGravity(true);
- _embraceTakenDamage = 0;
- _initialCheckTimer = 3000;
- }
+ case NPC_FLAME_SPHERE_1:
+ case NPC_FLAME_SPHERE_2:
+ case NPC_FLAME_SPHERE_3:
+ summon->AI()->SetGUID(_flameSphereTargetGUID);
+ break;
+ case NPC_JEDOGA_CONTROLLER:
+ summon->CastSpell(me, SPELL_BEAM_VISUAL);
+ break;
+ default:
+ return;
+ }
+ }
- void Reset() override
+ void UpdateAI(uint32 diff) override
+ {
+ if (_initialCheckTimer)
+ {
+ if (_initialCheckTimer <= diff)
{
- _Reset();
- _flameSphereTargetGUID.Clear();
- _embraceTargetGUID.Clear();
- _embraceTakenDamage = 0;
-
- if (!CheckSpheres())
- me->SummonCreatureGroup(SUMMON_GROUP_CONTROLLERS);
+ CheckSpheres();
+ _initialCheckTimer = 0;
}
+ else
+ _initialCheckTimer -= diff;
+ }
- void JustEngagedWith(Unit* who) override
+ if (me->HasAura(SPELL_VANISH))
+ {
+ if (me->GetThreatManager().IsThreatListEmpty(true))
{
- BossAI::JustEngagedWith(who);
- Talk(SAY_AGGRO);
- events.ScheduleEvent(EVENT_BLOODTHIRST, 10s);
- events.ScheduleEvent(EVENT_VANISH, 25s, 35s);
- events.ScheduleEvent(EVENT_CONJURE_FLAME_SPHERES, 5s);
+ EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ return;
}
+ }
+ else
+ {
+ if (!UpdateVictim())
+ return;
+ }
- void JustSummoned(Creature* summon) override
- {
- BossAI::JustSummoned(summon);
+ events.Update(diff);
- switch (summon->GetEntry())
- {
- case NPC_FLAME_SPHERE_1:
- case NPC_FLAME_SPHERE_2:
- case NPC_FLAME_SPHERE_3:
- summon->AI()->SetGUID(_flameSphereTargetGUID);
- break;
- case NPC_JEDOGA_CONTROLLER:
- summon->CastSpell(me, SPELL_BEAM_VISUAL);
- break;
- default:
- return;
- }
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void UpdateAI(uint32 diff) override
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- if (_initialCheckTimer)
- {
- if (_initialCheckTimer <= diff)
- {
- CheckSpheres();
- _initialCheckTimer = 0;
- }
- else
- _initialCheckTimer -= diff;
- }
-
- if (me->HasAura(SPELL_VANISH))
- {
- if (me->GetThreatManager().IsThreatListEmpty(true))
+ case EVENT_BLOODTHIRST:
+ DoCast(me, SPELL_BLOODTHIRST);
+ events.ScheduleEvent(EVENT_BLOODTHIRST, 10s);
+ break;
+ case EVENT_CONJURE_FLAME_SPHERES:
+ // random target?
+ if (Unit* victim = me->GetVictim())
{
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
- return;
+ _flameSphereTargetGUID = victim->GetGUID();
+ DoCast(victim, SPELL_CONJURE_FLAME_SPHERE);
}
- }
- else
- {
- if (!UpdateVictim())
- return;
- }
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
+ events.ScheduleEvent(EVENT_CONJURE_FLAME_SPHERES, 15s);
+ break;
+ case EVENT_VANISH:
{
- switch (eventId)
+ if (me->GetThreatManager().GetThreatListSize() > 1)
{
- case EVENT_BLOODTHIRST:
- DoCast(me, SPELL_BLOODTHIRST);
- events.ScheduleEvent(EVENT_BLOODTHIRST, 10s);
- break;
- case EVENT_CONJURE_FLAME_SPHERES:
- // random target?
- if (Unit* victim = me->GetVictim())
- {
- _flameSphereTargetGUID = victim->GetGUID();
- DoCast(victim, SPELL_CONJURE_FLAME_SPHERE);
- }
- events.ScheduleEvent(EVENT_CONJURE_FLAME_SPHERES, 15s);
- break;
- case EVENT_VANISH:
- {
- if (me->GetThreatManager().GetThreatListSize() > 1)
- {
- if (Unit* embraceTarget = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
- _embraceTargetGUID = embraceTarget->GetGUID();
- Talk(SAY_VANISH);
- DoCast(me, SPELL_VANISH);
- events.DelayEvents(500ms);
- events.ScheduleEvent(EVENT_START_FEEDING, 2s);
- }
- events.ScheduleEvent(EVENT_VANISH, 25s, 35s);
- break;
- }
- case EVENT_START_FEEDING:
- me->RemoveAurasDueToSpell(SPELL_VANISH);
- if (Unit* embraceTarget = GetEmbraceTarget())
- {
- DoCast(embraceTarget, SPELL_SHADOWSTEP);
- DoCast(embraceTarget, SPELL_EMBRACE_OF_THE_VAMPYR);
- Talk(SAY_FEED);
- events.ScheduleEvent(EVENT_DONE_FEEDING, 20s);
- }
- break;
- case EVENT_DONE_FEEDING:
- _embraceTargetGUID.Clear();
- break;
- default:
- break;
+ if (Unit* embraceTarget = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
+ _embraceTargetGUID = embraceTarget->GetGUID();
+ Talk(SAY_VANISH);
+ DoCast(me, SPELL_VANISH);
+ events.DelayEvents(500ms);
+ events.ScheduleEvent(EVENT_START_FEEDING, 2s);
}
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ events.ScheduleEvent(EVENT_VANISH, 25s, 35s);
+ break;
}
-
- DoMeleeAttackIfReady();
- }
-
- void DamageTaken(Unit* /*doneBy*/, uint32& damage) override
- {
- Unit* embraceTarget = GetEmbraceTarget();
-
- if (embraceTarget && embraceTarget->IsAlive())
- {
- _embraceTakenDamage += damage;
- if (_embraceTakenDamage > DUNGEON_MODE<uint32>(DATA_EMBRACE_DMG, H_DATA_EMBRACE_DMG))
+ case EVENT_START_FEEDING:
+ me->RemoveAurasDueToSpell(SPELL_VANISH);
+ if (Unit* embraceTarget = GetEmbraceTarget())
{
- _embraceTargetGUID.Clear();
- me->CastStop();
+ DoCast(embraceTarget, SPELL_SHADOWSTEP);
+ DoCast(embraceTarget, SPELL_EMBRACE_OF_THE_VAMPYR);
+ Talk(SAY_FEED);
+ events.ScheduleEvent(EVENT_DONE_FEEDING, 20s);
}
- }
- }
-
- void JustDied(Unit* /*killer*/) override
- {
- Talk(SAY_DEATH);
- _JustDied();
- }
-
- void KilledUnit(Unit* victim) override
- {
- if (victim->GetTypeId() != TYPEID_PLAYER)
- return;
-
- if (victim->GetGUID() == _embraceTargetGUID)
+ break;
+ case EVENT_DONE_FEEDING:
_embraceTargetGUID.Clear();
-
- Talk(SAY_SLAY);
+ break;
+ default:
+ break;
}
- bool CheckSpheres()
- {
- for (uint8 i = 0; i < 2; ++i)
- if (!instance->GetData(DATA_SPHERE_1 + i))
- return false;
-
- RemovePrison();
- return true;
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+ }
- Unit* GetEmbraceTarget()
- {
- if (_embraceTargetGUID)
- return ObjectAccessor::GetUnit(*me, _embraceTargetGUID);
+ DoMeleeAttackIfReady();
+ }
- return nullptr;
- }
+ void DamageTaken(Unit* /*doneBy*/, uint32& damage) override
+ {
+ Unit* embraceTarget = GetEmbraceTarget();
- void RemovePrison()
+ if (embraceTarget && embraceTarget->IsAlive())
+ {
+ _embraceTakenDamage += damage;
+ if (_embraceTakenDamage > DUNGEON_MODE<uint32>(DATA_EMBRACE_DMG, H_DATA_EMBRACE_DMG))
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- summons.DespawnEntry(NPC_JEDOGA_CONTROLLER);
- me->RemoveAurasDueToSpell(SPELL_BEAM_VISUAL);
- me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), DATA_GROUND_POSITION_Z, me->GetOrientation());
- DoCast(SPELL_HOVER_FALL);
- me->SetDisableGravity(false);
- me->GetMotionMaster()->MoveLand(0, me->GetHomePosition());
- Talk(SAY_WARNING);
- if (GameObject* platform = instance->GetGameObject(DATA_PRINCE_TALDARAM_PLATFORM))
- instance->HandleGameObject(platform->GetGUID(), true);
+ _embraceTargetGUID.Clear();
+ me->CastStop();
}
-
- private:
- ObjectGuid _flameSphereTargetGUID;
- ObjectGuid _embraceTargetGUID;
- uint32 _embraceTakenDamage;
- uint32 _initialCheckTimer;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetAhnKahetAI<boss_prince_taldaramAI>(creature);
}
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ Talk(SAY_DEATH);
+ _JustDied();
+ }
+
+ void KilledUnit(Unit* victim) override
+ {
+ if (victim->GetTypeId() != TYPEID_PLAYER)
+ return;
+
+ if (victim->GetGUID() == _embraceTargetGUID)
+ _embraceTargetGUID.Clear();
+
+ Talk(SAY_SLAY);
+ }
+
+ bool CheckSpheres()
+ {
+ for (uint8 i = 0; i < 2; ++i)
+ if (!instance->GetData(DATA_SPHERE_1 + i))
+ return false;
+
+ RemovePrison();
+ return true;
+ }
+
+ Unit* GetEmbraceTarget()
+ {
+ if (_embraceTargetGUID)
+ return ObjectAccessor::GetUnit(*me, _embraceTargetGUID);
+
+ return nullptr;
+ }
+
+ void RemovePrison()
+ {
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ summons.DespawnEntry(NPC_JEDOGA_CONTROLLER);
+ me->RemoveAurasDueToSpell(SPELL_BEAM_VISUAL);
+ me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), DATA_GROUND_POSITION_Z, me->GetOrientation());
+ DoCast(SPELL_HOVER_FALL);
+ me->SetDisableGravity(false);
+ me->GetMotionMaster()->MoveLand(0, me->GetHomePosition());
+ Talk(SAY_WARNING);
+ if (GameObject* platform = instance->GetGameObject(DATA_PRINCE_TALDARAM_PLATFORM))
+ instance->HandleGameObject(platform->GetGUID(), true);
+ }
+
+private:
+ ObjectGuid _flameSphereTargetGUID;
+ ObjectGuid _embraceTargetGUID;
+ uint32 _embraceTakenDamage;
+ uint32 _initialCheckTimer;
};
// 30106, 31686, 31687 - Flame Sphere
-class npc_prince_taldaram_flame_sphere : public CreatureScript
+struct npc_prince_taldaram_flame_sphere : public ScriptedAI
{
- public:
- npc_prince_taldaram_flame_sphere() : CreatureScript("npc_prince_taldaram_flame_sphere") { }
-
- struct npc_prince_taldaram_flame_sphereAI : public ScriptedAI
+ npc_prince_taldaram_flame_sphere(Creature* creature) : ScriptedAI(creature)
+ {
+ }
+
+ void Reset() override
+ {
+ DoCast(me, SPELL_FLAME_SPHERE_SPAWN_EFFECT, true);
+ DoCast(me, SPELL_FLAME_SPHERE_VISUAL, true);
+
+ _flameSphereTargetGUID.Clear();
+ _events.Reset();
+ _events.ScheduleEvent(EVENT_START_MOVE, 3s);
+ _events.ScheduleEvent(EVENT_DESPAWN, 13s);
+ }
+
+ void SetGUID(ObjectGuid const& guid, int32 /*id*/) override
+ {
+ _flameSphereTargetGUID = guid;
+ }
+
+ void JustEngagedWith(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
+
+ void UpdateAI(uint32 diff) override
+ {
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
{
- npc_prince_taldaram_flame_sphereAI(Creature* creature) : ScriptedAI(creature)
- {
- }
-
- void Reset() override
- {
- DoCast(me, SPELL_FLAME_SPHERE_SPAWN_EFFECT, true);
- DoCast(me, SPELL_FLAME_SPHERE_VISUAL, true);
-
- _flameSphereTargetGUID.Clear();
- _events.Reset();
- _events.ScheduleEvent(EVENT_START_MOVE, 3s);
- _events.ScheduleEvent(EVENT_DESPAWN, 13s);
- }
-
- void SetGUID(ObjectGuid const& guid, int32 /*id*/) override
+ switch (eventId)
{
- _flameSphereTargetGUID = guid;
- }
-
- void JustEngagedWith(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* /*who*/) override { }
+ case EVENT_START_MOVE:
+ {
+ DoCast(me, SPELL_FLAME_SPHERE_PERIODIC, true);
- void UpdateAI(uint32 diff) override
- {
- _events.Update(diff);
+ /// @todo: find correct values
+ float angleOffset = 0.0f;
+ float distOffset = DATA_SPHERE_DISTANCE;
- while (uint32 eventId = _events.ExecuteEvent())
- {
- switch (eventId)
+ switch (me->GetEntry())
{
- case EVENT_START_MOVE:
- {
- DoCast(me, SPELL_FLAME_SPHERE_PERIODIC, true);
-
- /// @todo: find correct values
- float angleOffset = 0.0f;
- float distOffset = DATA_SPHERE_DISTANCE;
-
- switch (me->GetEntry())
- {
- case NPC_FLAME_SPHERE_1:
- break;
- case NPC_FLAME_SPHERE_2:
- angleOffset = DATA_SPHERE_ANGLE_OFFSET;
- break;
- case NPC_FLAME_SPHERE_3:
- angleOffset = -DATA_SPHERE_ANGLE_OFFSET;
- break;
- default:
- return;
- }
-
- Unit* sphereTarget = ObjectAccessor::GetUnit(*me, _flameSphereTargetGUID);
- if (!sphereTarget)
- return;
-
- float angle = me->GetAbsoluteAngle(sphereTarget) + angleOffset;
- float x = me->GetPositionX() + distOffset * std::cos(angle);
- float y = me->GetPositionY() + distOffset * std::sin(angle);
-
- /// @todo: correct speed
- me->GetMotionMaster()->MovePoint(0, x, y, me->GetPositionZ());
+ case NPC_FLAME_SPHERE_1:
break;
- }
- case EVENT_DESPAWN:
- DoCast(me, SPELL_FLAME_SPHERE_DEATH_EFFECT, true);
- me->DespawnOrUnsummon(1s);
+ case NPC_FLAME_SPHERE_2:
+ angleOffset = DATA_SPHERE_ANGLE_OFFSET;
break;
- default:
+ case NPC_FLAME_SPHERE_3:
+ angleOffset = -DATA_SPHERE_ANGLE_OFFSET;
break;
+ default:
+ return;
}
- }
- }
- private:
- EventMap _events;
- ObjectGuid _flameSphereTargetGUID;
- };
+ Unit* sphereTarget = ObjectAccessor::GetUnit(*me, _flameSphereTargetGUID);
+ if (!sphereTarget)
+ return;
+
+ float angle = me->GetAbsoluteAngle(sphereTarget) + angleOffset;
+ float x = me->GetPositionX() + distOffset * std::cos(angle);
+ float y = me->GetPositionY() + distOffset * std::sin(angle);
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetAhnKahetAI<npc_prince_taldaram_flame_sphereAI>(creature);
+ /// @todo: correct speed
+ me->GetMotionMaster()->MovePoint(0, x, y, me->GetPositionZ());
+ break;
+ }
+ case EVENT_DESPAWN:
+ DoCast(me, SPELL_FLAME_SPHERE_DEATH_EFFECT, true);
+ me->DespawnOrUnsummon(1s);
+ break;
+ default:
+ break;
+ }
}
+ }
+
+private:
+ EventMap _events;
+ ObjectGuid _flameSphereTargetGUID;
};
// 193093, 193094 - Ancient Nerubian Device
-class go_prince_taldaram_sphere : public GameObjectScript
+struct go_prince_taldaram_sphere : public GameObjectAI
{
- public:
- go_prince_taldaram_sphere() : GameObjectScript("go_prince_taldaram_sphere") { }
+ go_prince_taldaram_sphere(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
- struct go_prince_taldaram_sphereAI : public GameObjectAI
- {
- go_prince_taldaram_sphereAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
+ InstanceScript* instance;
- InstanceScript* instance;
+ bool OnGossipHello(Player* /*player*/) override
+ {
+ Creature* princeTaldaram = instance->GetCreature(DATA_PRINCE_TALDARAM);
+ if (princeTaldaram && princeTaldaram->IsAlive())
+ {
+ me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ me->SetGoState(GO_STATE_ACTIVE);
- bool OnGossipHello(Player* /*player*/) override
+ switch (me->GetEntry())
{
- Creature* princeTaldaram = instance->GetCreature(DATA_PRINCE_TALDARAM);
- if (princeTaldaram && princeTaldaram->IsAlive())
- {
- me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- me->SetGoState(GO_STATE_ACTIVE);
-
- switch (me->GetEntry())
- {
- case GO_SPHERE_1:
- instance->SetData(DATA_SPHERE_1, IN_PROGRESS);
- princeTaldaram->AI()->Talk(SAY_1);
- break;
- case GO_SPHERE_2:
- instance->SetData(DATA_SPHERE_2, IN_PROGRESS);
- princeTaldaram->AI()->Talk(SAY_1);
- break;
- }
-
- ENSURE_AI(boss_prince_taldaram::boss_prince_taldaramAI, princeTaldaram->AI())->CheckSpheres();
- }
- return true;
+ case GO_SPHERE_1:
+ instance->SetData(DATA_SPHERE_1, IN_PROGRESS);
+ princeTaldaram->AI()->Talk(SAY_1);
+ break;
+ case GO_SPHERE_2:
+ instance->SetData(DATA_SPHERE_2, IN_PROGRESS);
+ princeTaldaram->AI()->Talk(SAY_1);
+ break;
}
- };
- GameObjectAI* GetAI(GameObject* go) const override
- {
- return GetAhnKahetAI<go_prince_taldaram_sphereAI>(go);
+ ENSURE_AI(boss_prince_taldaram, princeTaldaram->AI())->CheckSpheres();
}
+ return true;
+ }
};
// 55931 - Conjure Flame Sphere
-class spell_prince_taldaram_conjure_flame_sphere : public SpellScriptLoader
+class spell_prince_taldaram_conjure_flame_sphere : public SpellScript
{
- public:
- spell_prince_taldaram_conjure_flame_sphere() : SpellScriptLoader("spell_prince_taldaram_conjure_flame_sphere") { }
-
- class spell_prince_taldaram_conjure_flame_sphere_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_prince_taldaram_conjure_flame_sphere_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_FLAME_SPHERE_SUMMON_1, SPELL_FLAME_SPHERE_SUMMON_2, SPELL_FLAME_SPHERE_SUMMON_3 });
- }
+ PrepareSpellScript(spell_prince_taldaram_conjure_flame_sphere);
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- Unit* caster = GetCaster();
- caster->CastSpell(caster, SPELL_FLAME_SPHERE_SUMMON_1, true);
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_FLAME_SPHERE_SUMMON_1, SPELL_FLAME_SPHERE_SUMMON_2, SPELL_FLAME_SPHERE_SUMMON_3 });
+ }
- if (caster->GetMap()->IsHeroic())
- {
- caster->CastSpell(caster, SPELL_FLAME_SPHERE_SUMMON_2, true);
- caster->CastSpell(caster, SPELL_FLAME_SPHERE_SUMMON_3, true);
- }
- }
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+ caster->CastSpell(caster, SPELL_FLAME_SPHERE_SUMMON_1, true);
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_prince_taldaram_conjure_flame_sphere_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const override
+ if (caster->GetMap()->IsHeroic())
{
- return new spell_prince_taldaram_conjure_flame_sphere_SpellScript();
+ caster->CastSpell(caster, SPELL_FLAME_SPHERE_SUMMON_2, true);
+ caster->CastSpell(caster, SPELL_FLAME_SPHERE_SUMMON_3, true);
}
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_prince_taldaram_conjure_flame_sphere::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
};
// 55895, 59511, 59512 - Flame Sphere Summon
-class spell_prince_taldaram_flame_sphere_summon : public SpellScriptLoader
+class spell_prince_taldaram_flame_sphere_summon : public SpellScript
{
- public:
- spell_prince_taldaram_flame_sphere_summon() : SpellScriptLoader("spell_prince_taldaram_flame_sphere_summon") { }
-
- class spell_prince_taldaram_flame_sphere_summon_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_prince_taldaram_flame_sphere_summon_SpellScript);
-
- void SetDest(SpellDestination& dest)
- {
- Position offset = { 0.0f, 0.0f, 5.5f, 0.0f };
- dest.RelocateOffset(offset);
- }
-
- void Register() override
- {
- OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_prince_taldaram_flame_sphere_summon_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_prince_taldaram_flame_sphere_summon_SpellScript();
- }
+ PrepareSpellScript(spell_prince_taldaram_flame_sphere_summon);
+
+ void SetDest(SpellDestination& dest)
+ {
+ Position offset = { 0.0f, 0.0f, 5.5f, 0.0f };
+ dest.RelocateOffset(offset);
+ }
+
+ void Register() override
+ {
+ OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_prince_taldaram_flame_sphere_summon::SetDest, EFFECT_0, TARGET_DEST_CASTER);
+ }
};
void AddSC_boss_taldaram()
{
- new boss_prince_taldaram();
- new npc_prince_taldaram_flame_sphere();
- new go_prince_taldaram_sphere();
- new spell_prince_taldaram_conjure_flame_sphere();
- new spell_prince_taldaram_flame_sphere_summon();
+ RegisterAhnKahetCreatureAI(boss_prince_taldaram);
+ RegisterAhnKahetCreatureAI(npc_prince_taldaram_flame_sphere);
+ RegisterAhnKahetGameObjectAI(go_prince_taldaram_sphere);
+ RegisterSpellScript(spell_prince_taldaram_conjure_flame_sphere);
+ RegisterSpellScript(spell_prince_taldaram_flame_sphere_summon);
}