aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp443
1 files changed, 194 insertions, 249 deletions
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
index 029e24396e2..da662adc8cc 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
@@ -31,90 +31,79 @@ uint32 ForgeSearch[3] =
GO_GLOWING_ANVIL_3
};
-class npc_dragonflayer_forge_master : public CreatureScript
+struct npc_dragonflayer_forge_master : public ScriptedAI
{
- public:
- npc_dragonflayer_forge_master() : CreatureScript("npc_dragonflayer_forge_master") { }
-
- struct npc_dragonflayer_forge_masterAI : public ScriptedAI
+ npc_dragonflayer_forge_master(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = creature->GetInstanceScript();
+ _forgeId = 0;
+ }
+
+ void Reset() override
+ {
+ if (!_forgeId)
+ _forgeId = GetForgeMasterType();
+
+ if (!me->IsAlive())
+ return;
+
+ if (_forgeId)
+ _instance->SetData(DATA_FORGE_1 + _forgeId - 1, NOT_STARTED);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ if (!_forgeId)
+ _forgeId = GetForgeMasterType();
+
+ if (_forgeId)
+ _instance->SetData(DATA_FORGE_1 + _forgeId - 1, DONE);
+ }
+
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ if (!_forgeId)
+ _forgeId = GetForgeMasterType();
+
+ if (_forgeId)
+ _instance->SetData(DATA_FORGE_1 + _forgeId - 1, IN_PROGRESS);
+
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
+ }
+
+ void UpdateAI(uint32 /*diff*/) override
+ {
+ if (!_forgeId)
+ _forgeId = GetForgeMasterType();
+
+ if (!UpdateVictim())
+ return;
+
+ DoMeleeAttackIfReady();
+ }
+
+private:
+ uint8 GetForgeMasterType()
+ {
+ float diff = 30.0f;
+ uint8 id = 0;
+
+ for (uint8 i = 0; i < 3; ++i)
{
- npc_dragonflayer_forge_masterAI(Creature* creature) : ScriptedAI(creature)
- {
- _instance = creature->GetInstanceScript();
- _forgeId = 0;
- }
-
- void Reset() override
- {
- if (!_forgeId)
- _forgeId = GetForgeMasterType();
-
- if (!me->IsAlive())
- return;
-
- if (_forgeId)
- _instance->SetData(DATA_FORGE_1 + _forgeId - 1, NOT_STARTED);
- }
-
- void JustDied(Unit* /*killer*/) override
- {
- if (!_forgeId)
- _forgeId = GetForgeMasterType();
-
- if (_forgeId)
- _instance->SetData(DATA_FORGE_1 + _forgeId - 1, DONE);
- }
-
- void JustEngagedWith(Unit* /*who*/) override
+ if (GameObject* go = me->FindNearestGameObject(ForgeSearch[i], 30))
{
- if (!_forgeId)
- _forgeId = GetForgeMasterType();
-
- if (_forgeId)
- _instance->SetData(DATA_FORGE_1 + _forgeId - 1, IN_PROGRESS);
-
- me->SetEmoteState(EMOTE_ONESHOT_NONE);
- }
-
- void UpdateAI(uint32 /*diff*/) override
- {
- if (!_forgeId)
- _forgeId = GetForgeMasterType();
-
- if (!UpdateVictim())
- return;
-
- DoMeleeAttackIfReady();
- }
-
- private:
- uint8 GetForgeMasterType()
- {
- float diff = 30.0f;
- uint8 id = 0;
-
- for (uint8 i = 0; i < 3; ++i)
+ if (me->IsWithinDist(go, diff, false))
{
- if (GameObject* go = me->FindNearestGameObject(ForgeSearch[i], 30))
- {
- if (me->IsWithinDist(go, diff, false))
- {
- id = i + 1;
- diff = me->GetDistance2d(go);
- }
- }
+ id = i + 1;
+ diff = me->GetDistance2d(go);
}
- return id > 0 && id < 4 ? id : 0;
}
-
- InstanceScript* _instance;
- uint8 _forgeId;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUtgardeKeepAI<npc_dragonflayer_forge_masterAI>(creature);
}
+ return id > 0 && id < 4 ? id : 0;
+ }
+
+ InstanceScript* _instance;
+ uint8 _forgeId;
};
enum TickingTimeBomb
@@ -122,36 +111,25 @@ enum TickingTimeBomb
SPELL_TICKING_TIME_BOMB_EXPLODE = 59687
};
-class spell_ticking_time_bomb : public SpellScriptLoader
+class spell_ticking_time_bomb : public AuraScript
{
- public:
- spell_ticking_time_bomb() : SpellScriptLoader("spell_ticking_time_bomb") { }
-
- class spell_ticking_time_bomb_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_ticking_time_bomb_AuraScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_TICKING_TIME_BOMB_EXPLODE });
- }
-
- void HandleOnEffectRemove(AuraEffect const* /* aurEff */, AuraEffectHandleModes /* mode */)
- {
- if (GetCaster() == GetTarget())
- GetTarget()->CastSpell(GetTarget(), SPELL_TICKING_TIME_BOMB_EXPLODE, true);
- }
-
- void Register() override
- {
- OnEffectRemove += AuraEffectRemoveFn(spell_ticking_time_bomb_AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_ticking_time_bomb_AuraScript();
- }
+ PrepareAuraScript(spell_ticking_time_bomb);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_TICKING_TIME_BOMB_EXPLODE });
+ }
+
+ void HandleOnEffectRemove(AuraEffect const* /* aurEff */, AuraEffectHandleModes /* mode */)
+ {
+ if (GetCaster() == GetTarget())
+ GetTarget()->CastSpell(GetTarget(), SPELL_TICKING_TIME_BOMB_EXPLODE, true);
+ }
+
+ void Register() override
+ {
+ OnEffectRemove += AuraEffectRemoveFn(spell_ticking_time_bomb::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
};
enum Fixate
@@ -159,35 +137,24 @@ enum Fixate
SPELL_FIXATE_TRIGGER = 40415
};
-class spell_fixate : public SpellScriptLoader
+class spell_fixate : public SpellScript
{
- public:
- spell_fixate() : SpellScriptLoader("spell_fixate") { }
-
- class spell_fixate_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_fixate_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_FIXATE_TRIGGER });
- }
-
- void HandleScriptEffect(SpellEffIndex /*effIndex*/)
- {
- GetHitUnit()->CastSpell(GetCaster(), SPELL_FIXATE_TRIGGER, true);
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_fixate_SpellScript::HandleScriptEffect, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_fixate_SpellScript();
- }
+ PrepareSpellScript(spell_fixate);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_FIXATE_TRIGGER });
+ }
+
+ void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->CastSpell(GetCaster(), SPELL_FIXATE_TRIGGER, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_fixate::HandleScriptEffect, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
};
enum SecondWind
@@ -196,47 +163,36 @@ enum SecondWind
};
// 42770 - Second Wind
-class spell_uk_second_wind : public SpellScriptLoader
+class spell_uk_second_wind : public AuraScript
{
- public:
- spell_uk_second_wind() : SpellScriptLoader("spell_uk_second_wind") { }
-
- class spell_uk_second_wind_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_uk_second_wind_AuraScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_SECOND_WIND_TRIGGER });
- }
-
- bool CheckProc(ProcEventInfo& eventInfo)
- {
- SpellInfo const* spellInfo = eventInfo.GetSpellInfo();
- if (!spellInfo)
- return false;
-
- return (spellInfo->GetAllEffectsMechanicMask() & ((1 << MECHANIC_ROOT) | (1 << MECHANIC_STUN))) != 0;
- }
-
- void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
- {
- PreventDefaultAction();
- Unit* caster = eventInfo.GetActionTarget();
- caster->CastSpell(caster, SPELL_SECOND_WIND_TRIGGER, aurEff);
- }
-
- void Register() override
- {
- DoCheckProc += AuraCheckProcFn(spell_uk_second_wind_AuraScript::CheckProc);
- OnEffectProc += AuraEffectProcFn(spell_uk_second_wind_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_uk_second_wind_AuraScript();
- }
+ PrepareAuraScript(spell_uk_second_wind);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_SECOND_WIND_TRIGGER });
+ }
+
+ bool CheckProc(ProcEventInfo& eventInfo)
+ {
+ SpellInfo const* spellInfo = eventInfo.GetSpellInfo();
+ if (!spellInfo)
+ return false;
+
+ return (spellInfo->GetAllEffectsMechanicMask() & ((1 << MECHANIC_ROOT) | (1 << MECHANIC_STUN))) != 0;
+ }
+
+ void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
+ {
+ PreventDefaultAction();
+ Unit* caster = eventInfo.GetActionTarget();
+ caster->CastSpell(caster, SPELL_SECOND_WIND_TRIGGER, aurEff);
+ }
+
+ void Register() override
+ {
+ DoCheckProc += AuraCheckProcFn(spell_uk_second_wind::CheckProc);
+ OnEffectProc += AuraEffectProcFn(spell_uk_second_wind::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
+ }
};
enum EnslavedProtoDrake
@@ -259,95 +215,84 @@ enum EnslavedProtoDrake
const Position protodrakeCheckPos = {206.24f, -190.28f, 200.11f, 0.f};
-class npc_enslaved_proto_drake : public CreatureScript
+struct npc_enslaved_proto_drake : public ScriptedAI
{
- public:
- npc_enslaved_proto_drake() : CreatureScript("npc_enslaved_proto_drake") { }
+ npc_enslaved_proto_drake(Creature* creature) : ScriptedAI(creature)
+ {
+ _setData = false;
+ }
+
+ void Reset() override
+ {
+ _events.Reset();
+ _events.ScheduleEvent(EVENT_REND, 2s, 3s);
+ _events.ScheduleEvent(EVENT_FLAME_BREATH, 5500ms, 7s);
+ _events.ScheduleEvent(EVENT_KNOCKAWAY, 3500ms, 6s);
+ }
+
+ void MovementInform(uint32 type, uint32 id) override
+ {
+ if (type == WAYPOINT_MOTION_TYPE && id == POINT_LAST)
+ {
+ me->SetAnimTier(AnimTier::Ground);
+ }
+ }
- struct npc_enslaved_proto_drakeAI : public ScriptedAI
+ void SetData(uint32 type, uint32 data) override
+ {
+ if (type == TYPE_PROTODRAKE_AT && data == DATA_PROTODRAKE_MOVE && !_setData && me->GetDistance(protodrakeCheckPos) < 5.0f)
{
- npc_enslaved_proto_drakeAI(Creature* creature) : ScriptedAI(creature)
- {
- _setData = false;
- }
+ _setData = true;
+ me->SetAnimTier(AnimTier::Fly);
+ me->GetMotionMaster()->MovePath(PATH_PROTODRAKE, false);
+ }
+ }
- void Reset() override
- {
- _events.Reset();
- _events.ScheduleEvent(EVENT_REND, 2s, 3s);
- _events.ScheduleEvent(EVENT_FLAME_BREATH, 5500ms, 7s);
- _events.ScheduleEvent(EVENT_KNOCKAWAY, 3500ms, 6s);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void MovementInform(uint32 type, uint32 id) override
- {
- if (type == WAYPOINT_MOTION_TYPE && id == POINT_LAST)
- {
- me->SetAnimTier(AnimTier::Ground);
- }
- }
+ _events.Update(diff);
- void SetData(uint32 type, uint32 data) override
- {
- if (type == TYPE_PROTODRAKE_AT && data == DATA_PROTODRAKE_MOVE && !_setData && me->GetDistance(protodrakeCheckPos) < 5.0f)
- {
- _setData = true;
- me->SetAnimTier(AnimTier::Fly);
- me->GetMotionMaster()->MovePath(PATH_PROTODRAKE, false);
- }
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void UpdateAI(uint32 diff) override
+ while (uint32 eventid = _events.ExecuteEvent())
+ {
+ switch (eventid)
{
- if (!UpdateVictim())
- return;
-
- _events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventid = _events.ExecuteEvent())
- {
- switch (eventid)
- {
- case EVENT_REND:
- DoCast(SPELL_REND);
- _events.ScheduleEvent(EVENT_REND, 15s, 20s);
- break;
- case EVENT_FLAME_BREATH:
- DoCast(SPELL_FLAME_BREATH);
- _events.ScheduleEvent(EVENT_FLAME_BREATH, 11s, 12s);
- break;
- case EVENT_KNOCKAWAY:
- DoCast(SPELL_KNOCK_AWAY);
- _events.ScheduleEvent(EVENT_KNOCKAWAY, 7s, 8500ms);
- break;
- default:
- break;
- }
- }
-
- DoMeleeAttackIfReady();
+ case EVENT_REND:
+ DoCast(SPELL_REND);
+ _events.ScheduleEvent(EVENT_REND, 15s, 20s);
+ break;
+ case EVENT_FLAME_BREATH:
+ DoCast(SPELL_FLAME_BREATH);
+ _events.ScheduleEvent(EVENT_FLAME_BREATH, 11s, 12s);
+ break;
+ case EVENT_KNOCKAWAY:
+ DoCast(SPELL_KNOCK_AWAY);
+ _events.ScheduleEvent(EVENT_KNOCKAWAY, 7s, 8500ms);
+ break;
+ default:
+ break;
}
+ }
- private:
- bool _setData;
- EventMap _events;
+ DoMeleeAttackIfReady();
+ }
- };
+private:
+ bool _setData;
+ EventMap _events;
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUtgardeKeepAI<npc_enslaved_proto_drakeAI>(creature);
- }
};
void AddSC_utgarde_keep()
{
- new npc_dragonflayer_forge_master();
- new npc_enslaved_proto_drake();
- new spell_ticking_time_bomb();
- new spell_fixate();
- new spell_uk_second_wind();
+ RegisterUtgardeKeepCreatureAI(npc_dragonflayer_forge_master);
+ RegisterUtgardeKeepCreatureAI(npc_enslaved_proto_drake);
+ RegisterSpellScript(spell_ticking_time_bomb);
+ RegisterSpellScript(spell_fixate);
+ RegisterSpellScript(spell_uk_second_wind);
}