aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/Northrend/IsleOfConquest/boss_ioc_horde_alliance.cpp145
-rw-r--r--src/server/scripts/Northrend/IsleOfConquest/isle_of_conquest.cpp352
2 files changed, 210 insertions, 287 deletions
diff --git a/src/server/scripts/Northrend/IsleOfConquest/boss_ioc_horde_alliance.cpp b/src/server/scripts/Northrend/IsleOfConquest/boss_ioc_horde_alliance.cpp
index cc4d51a482f..e3d89c1fc22 100644
--- a/src/server/scripts/Northrend/IsleOfConquest/boss_ioc_horde_alliance.cpp
+++ b/src/server/scripts/Northrend/IsleOfConquest/boss_ioc_horde_alliance.cpp
@@ -35,102 +35,91 @@ enum BossEvents
EVENT_CHECK_RANGE = 4
};
-class boss_ioc_horde_alliance : public CreatureScript
+struct boss_ioc_horde_alliance : public ScriptedAI
{
-public:
- boss_ioc_horde_alliance() : CreatureScript("boss_ioc_horde_alliance") { }
+ boss_ioc_horde_alliance(Creature* creature) : ScriptedAI(creature) { }
- struct boss_ioc_horde_allianceAI : public ScriptedAI
+ void Reset() override
{
- boss_ioc_horde_allianceAI(Creature* creature) : ScriptedAI(creature) { }
+ _events.Reset();
+
+ uint32 _npcGuard;
+ if (me->GetEntry() == NPC_HIGH_COMMANDER_HALFORD_WYRMBANE)
+ _npcGuard = NPC_SEVEN_TH_LEGION_INFANTRY;
+ else
+ _npcGuard = NPC_KOR_KRON_GUARD;
+
+ std::list<Creature*> guardsList;
+ me->GetCreatureListWithEntryInGrid(guardsList, _npcGuard, 100.0f);
+ for (std::list<Creature*>::const_iterator itr = guardsList.begin(); itr != guardsList.end(); ++itr)
+ (*itr)->Respawn();
+ };
- void Reset() override
- {
- _events.Reset();
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_BRUTAL_STRIKE, 5s);
+ _events.ScheduleEvent(EVENT_DAGGER_THROW, 7s);
+ _events.ScheduleEvent(EVENT_CHECK_RANGE, 1s);
+ _events.ScheduleEvent(EVENT_CRUSHING_LEAP, 15s);
+ }
- uint32 _npcGuard;
- if (me->GetEntry() == NPC_HIGH_COMMANDER_HALFORD_WYRMBANE)
- _npcGuard = NPC_SEVEN_TH_LEGION_INFANTRY;
- else
- _npcGuard = NPC_KOR_KRON_GUARD;
+ void SpellHit(WorldObject* caster, SpellInfo const* /*spellInfo*/) override
+ {
+ Unit* unitCaster = caster->ToUnit();
+ if (!unitCaster)
+ return;
- std::list<Creature*> guardsList;
- me->GetCreatureListWithEntryInGrid(guardsList, _npcGuard, 100.0f);
- for (std::list<Creature*>::const_iterator itr = guardsList.begin(); itr != guardsList.end(); ++itr)
- (*itr)->Respawn();
- };
+ if (unitCaster->IsVehicle())
+ Unit::Kill(me, unitCaster);
+ }
- void JustEngagedWith(Unit* /*who*/) override
- {
- _events.ScheduleEvent(EVENT_BRUTAL_STRIKE, 5s);
- _events.ScheduleEvent(EVENT_DAGGER_THROW, 7s);
- _events.ScheduleEvent(EVENT_CHECK_RANGE, 1s);
- _events.ScheduleEvent(EVENT_CRUSHING_LEAP, 15s);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void SpellHit(WorldObject* caster, SpellInfo const* /*spellInfo*/) override
- {
- Unit* unitCaster = caster->ToUnit();
- if (!unitCaster)
- return;
+ _events.Update(diff);
- if (unitCaster->IsVehicle())
- Unit::Kill(me, unitCaster);
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void UpdateAI(uint32 diff) override
+ while (uint32 eventId = _events.ExecuteEvent())
{
- if (!UpdateVictim())
- return;
-
- _events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = _events.ExecuteEvent())
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_BRUTAL_STRIKE:
- DoCastVictim(SPELL_BRUTAL_STRIKE);
- _events.ScheduleEvent(EVENT_BRUTAL_STRIKE, 5s);
- break;
- case EVENT_DAGGER_THROW:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
- DoCast(target, SPELL_DAGGER_THROW);
- _events.ScheduleEvent(EVENT_DAGGER_THROW, 7s);
- break;
- case EVENT_CRUSHING_LEAP:
- DoCastVictim(SPELL_CRUSHING_LEAP);
- _events.ScheduleEvent(EVENT_CRUSHING_LEAP, 25s);
- break;
- case EVENT_CHECK_RANGE:
- if (me->GetDistance(me->GetHomePosition()) > 25.0f)
- DoCast(me, SPELL_RAGE);
- else
- me->RemoveAurasDueToSpell(SPELL_RAGE);
- _events.ScheduleEvent(EVENT_CHECK_RANGE, 1s);
- break;
- default:
- break;
- }
+ case EVENT_BRUTAL_STRIKE:
+ DoCastVictim(SPELL_BRUTAL_STRIKE);
+ _events.ScheduleEvent(EVENT_BRUTAL_STRIKE, 5s);
+ break;
+ case EVENT_DAGGER_THROW:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
+ DoCast(target, SPELL_DAGGER_THROW);
+ _events.ScheduleEvent(EVENT_DAGGER_THROW, 7s);
+ break;
+ case EVENT_CRUSHING_LEAP:
+ DoCastVictim(SPELL_CRUSHING_LEAP);
+ _events.ScheduleEvent(EVENT_CRUSHING_LEAP, 25s);
+ break;
+ case EVENT_CHECK_RANGE:
+ if (me->GetDistance(me->GetHomePosition()) > 25.0f)
+ DoCast(me, SPELL_RAGE);
+ else
+ me->RemoveAurasDueToSpell(SPELL_RAGE);
+ _events.ScheduleEvent(EVENT_CHECK_RANGE, 1s);
+ break;
+ default:
+ break;
}
-
- DoMeleeAttackIfReady();
}
- private:
- EventMap _events;
- };
-
- CreatureAI* GetAI(Creature* creature) const
- {
- return new boss_ioc_horde_allianceAI(creature);
+ DoMeleeAttackIfReady();
}
+
+private:
+ EventMap _events;
};
void AddSC_boss_ioc_horde_alliance()
{
- new boss_ioc_horde_alliance();
+ RegisterCreatureAI(boss_ioc_horde_alliance);
}
diff --git a/src/server/scripts/Northrend/IsleOfConquest/isle_of_conquest.cpp b/src/server/scripts/Northrend/IsleOfConquest/isle_of_conquest.cpp
index 0f54e0dbc56..7a9a7ce3594 100644
--- a/src/server/scripts/Northrend/IsleOfConquest/isle_of_conquest.cpp
+++ b/src/server/scripts/Northrend/IsleOfConquest/isle_of_conquest.cpp
@@ -31,50 +31,39 @@
// TO-DO: This should be done with SmartAI, but yet it does not correctly support vehicles's AIs.
// Even adding ReactState Passive we still have issues using SmartAI.
-class npc_four_car_garage : public CreatureScript
+struct npc_four_car_garage : public NullCreatureAI
{
- public:
- npc_four_car_garage() : CreatureScript("npc_four_car_garage") { }
+ npc_four_car_garage(Creature* creature) : NullCreatureAI(creature) { }
- struct npc_four_car_garageAI : public NullCreatureAI
+ void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
+ {
+ if (apply)
{
- npc_four_car_garageAI(Creature* creature) : NullCreatureAI(creature) { }
+ uint32 spellId = 0;
- void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
+ switch (me->GetEntry())
{
- if (apply)
- {
- uint32 spellId = 0;
-
- switch (me->GetEntry())
- {
- case NPC_DEMOLISHER:
- spellId = SPELL_DRIVING_CREDIT_DEMOLISHER;
- break;
- case NPC_GLAIVE_THROWER_A:
- case NPC_GLAIVE_THROWER_H:
- spellId = SPELL_DRIVING_CREDIT_GLAIVE;
- break;
- case NPC_SIEGE_ENGINE_H:
- case NPC_SIEGE_ENGINE_A:
- spellId = SPELL_DRIVING_CREDIT_SIEGE;
- break;
- case NPC_CATAPULT:
- spellId = SPELL_DRIVING_CREDIT_CATAPULT;
- break;
- default:
- return;
- }
-
- me->CastSpell(who, spellId, true);
- }
+ case NPC_DEMOLISHER:
+ spellId = SPELL_DRIVING_CREDIT_DEMOLISHER;
+ break;
+ case NPC_GLAIVE_THROWER_A:
+ case NPC_GLAIVE_THROWER_H:
+ spellId = SPELL_DRIVING_CREDIT_GLAIVE;
+ break;
+ case NPC_SIEGE_ENGINE_H:
+ case NPC_SIEGE_ENGINE_A:
+ spellId = SPELL_DRIVING_CREDIT_SIEGE;
+ break;
+ case NPC_CATAPULT:
+ spellId = SPELL_DRIVING_CREDIT_CATAPULT;
+ break;
+ default:
+ return;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_four_car_garageAI(creature);
+ me->CastSpell(who, spellId, true);
}
+ }
};
enum Events
@@ -88,127 +77,94 @@ enum Texts
SAY_ONBOARD = 0
};
-class npc_ioc_gunship_captain : public CreatureScript
+struct npc_ioc_gunship_captain : public ScriptedAI
{
- public:
- npc_ioc_gunship_captain() : CreatureScript("npc_ioc_gunship_captain") { }
+ npc_ioc_gunship_captain(Creature* creature) : ScriptedAI(creature) { }
- struct npc_ioc_gunship_captainAI : public ScriptedAI
+ void DoAction(int32 action) override
+ {
+ if (action == ACTION_GUNSHIP_READY)
{
- npc_ioc_gunship_captainAI(Creature* creature) : ScriptedAI(creature) { }
-
- void DoAction(int32 action) override
- {
- if (action == ACTION_GUNSHIP_READY)
- {
- DoCast(me, SPELL_SIMPLE_TELEPORT);
- _events.ScheduleEvent(EVENT_TALK, 3s);
- }
- }
+ DoCast(me, SPELL_SIMPLE_TELEPORT);
+ _events.ScheduleEvent(EVENT_TALK, 3s);
+ }
+ }
- void UpdateAI(uint32 diff) override
+ void UpdateAI(uint32 diff) override
+ {
+ _events.Update(diff);
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
{
- _events.Update(diff);
- while (uint32 eventId = _events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_TALK:
- _events.ScheduleEvent(EVENT_DESPAWN, 1s);
- Talk(SAY_ONBOARD);
- DoCast(me, SPELL_TELEPORT_VISUAL_ONLY);
- break;
- case EVENT_DESPAWN:
- if (BattlegroundMap* iocMap = me->GetMap()->ToBattlegroundMap())
- if (Battleground* bgIoC = iocMap->GetBG())
- bgIoC->DelCreature(BG_IC_NPC_GUNSHIP_CAPTAIN_1);
- break;
- default:
- break;
- }
- }
+ case EVENT_TALK:
+ _events.ScheduleEvent(EVENT_DESPAWN, 1s);
+ Talk(SAY_ONBOARD);
+ DoCast(me, SPELL_TELEPORT_VISUAL_ONLY);
+ break;
+ case EVENT_DESPAWN:
+ if (BattlegroundMap* iocMap = me->GetMap()->ToBattlegroundMap())
+ if (Battleground* bgIoC = iocMap->GetBG())
+ bgIoC->DelCreature(BG_IC_NPC_GUNSHIP_CAPTAIN_1);
+ break;
+ default:
+ break;
}
-
- private:
- EventMap _events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_ioc_gunship_captainAI(creature);
}
+ }
+
+private:
+ EventMap _events;
};
// 66630 - Alliance Gunship Portal
// 66637 - Horde Gunship Portal
-class spell_ioc_gunship_portal : public SpellScriptLoader
+class spell_ioc_gunship_portal : public SpellScript
{
- public:
- spell_ioc_gunship_portal() : SpellScriptLoader("spell_ioc_gunship_portal") { }
-
- class spell_ioc_gunship_portal_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_ioc_gunship_portal_SpellScript);
-
- bool Load() override
- {
- return GetCaster()->GetTypeId() == TYPEID_PLAYER;
- }
-
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- Player* caster = GetCaster()->ToPlayer();
- /*
- * HACK: GetWorldLocation() returns real position and not transportposition.
- * ServertoClient: SMSG_MOVE_TELEPORT (0x0B39)
- * counter: 45
- * Tranpsort Guid: Full: xxxx Type: MOTransport Low: xxx
- * Transport Position X: 0 Y: 0 Z: 0 O: 0
- * Position: X: 7.305609 Y: -0.095246 Z: 34.51022 O: 0
- */
- caster->TeleportTo(GetHitCreature()->GetWorldLocation(), TELE_TO_NOT_LEAVE_TRANSPORT);
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_ioc_gunship_portal_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_ioc_gunship_portal_SpellScript();
- }
+ PrepareSpellScript(spell_ioc_gunship_portal);
+
+ bool Load() override
+ {
+ return GetCaster()->GetTypeId() == TYPEID_PLAYER;
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Player* caster = GetCaster()->ToPlayer();
+ /*
+ * HACK: GetWorldLocation() returns real position and not transportposition.
+ * ServertoClient: SMSG_MOVE_TELEPORT (0x0B39)
+ * counter: 45
+ * Tranpsort Guid: Full: xxxx Type: MOTransport Low: xxx
+ * Transport Position X: 0 Y: 0 Z: 0 O: 0
+ * Position: X: 7.305609 Y: -0.095246 Z: 34.51022 O: 0
+ */
+ caster->TeleportTo(GetHitCreature()->GetWorldLocation(), TELE_TO_NOT_LEAVE_TRANSPORT);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_ioc_gunship_portal::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
};
// 66656 - Parachute
-class spell_ioc_parachute_ic : public SpellScriptLoader
+class spell_ioc_parachute_ic : public AuraScript
{
- public:
- spell_ioc_parachute_ic() : SpellScriptLoader("spell_ioc_parachute_ic") { }
-
- class spell_ioc_parachute_ic_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_ioc_parachute_ic_AuraScript);
-
- void HandleTriggerSpell(AuraEffect const* /*aurEff*/)
- {
- PreventDefaultAction();
- if (Player* target = GetTarget()->ToPlayer())
- if (target->m_movementInfo.GetFallTime() > 2000 && !target->GetTransport())
- target->CastSpell(target, SPELL_PARACHUTE_IC, true);
- }
-
- void Register() override
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_ioc_parachute_ic_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_ioc_parachute_ic_AuraScript();
- }
+ PrepareAuraScript(spell_ioc_parachute_ic);
+
+ void HandleTriggerSpell(AuraEffect const* /*aurEff*/)
+ {
+ PreventDefaultAction();
+ if (Player* target = GetTarget()->ToPlayer())
+ if (target->m_movementInfo.GetFallTime() > 2000 && !target->GetTransport())
+ target->CastSpell(target, SPELL_PARACHUTE_IC, true);
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_ioc_parachute_ic::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
+ }
};
class StartLaunchEvent : public BasicEvent
@@ -239,33 +195,22 @@ class StartLaunchEvent : public BasicEvent
};
// 66218 - Launch
-class spell_ioc_launch : public SpellScriptLoader
+class spell_ioc_launch : public SpellScript
{
- public:
- spell_ioc_launch() : SpellScriptLoader("spell_ioc_launch") { }
+ PrepareSpellScript(spell_ioc_launch);
- class spell_ioc_launch_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_ioc_launch_SpellScript);
+ void Launch()
+ {
+ if (!GetCaster()->ToCreature() || !GetExplTargetDest())
+ return;
- void Launch()
- {
- if (!GetCaster()->ToCreature() || !GetExplTargetDest())
- return;
+ GetCaster()->ToCreature()->m_Events.AddEvent(new StartLaunchEvent(*GetExplTargetDest(), GetHitPlayer()->GetGUID()), GetCaster()->ToCreature()->m_Events.CalculateTime(2500ms));
+ }
- GetCaster()->ToCreature()->m_Events.AddEvent(new StartLaunchEvent(*GetExplTargetDest(), GetHitPlayer()->GetGUID()), GetCaster()->ToCreature()->m_Events.CalculateTime(2500ms));
- }
-
- void Register() override
- {
- AfterHit += SpellHitFn(spell_ioc_launch_SpellScript::Launch);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_ioc_launch_SpellScript();
- }
+ void Register() override
+ {
+ AfterHit += SpellHitFn(spell_ioc_launch::Launch);
+ }
};
enum SeaforiumBombSpells
@@ -278,54 +223,43 @@ enum SeaforiumBombSpells
// 66672 - Huge Seaforium Blast
// 66676 - Seaforium Blast
-class spell_ioc_seaforium_blast_credit : public SpellScriptLoader
+class spell_ioc_seaforium_blast_credit : public SpellScript
{
- public:
- spell_ioc_seaforium_blast_credit() : SpellScriptLoader("spell_ioc_seaforium_blast_credit") { }
-
- class spell_ioc_seaforium_blast_credit_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_ioc_seaforium_blast_credit_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_A_BOMB_INABLE_CREDIT, SPELL_A_BOMB_INATION_CREDIT });
- }
-
- void HandleAchievementCredit(SpellEffIndex /*effIndex*/)
- {
- uint32 _creditSpell = 0;
- Unit* caster = GetOriginalCaster();
- if (!caster)
- return;
-
- if (GetSpellInfo()->Id == SPELL_SEAFORIUM_BLAST)
- _creditSpell = SPELL_A_BOMB_INABLE_CREDIT;
- else if (GetSpellInfo()->Id == SPELL_HUGE_SEAFORIUM_BLAST)
- _creditSpell = SPELL_A_BOMB_INATION_CREDIT;
-
- if (GetHitGObj() && GetHitGObj()->IsDestructibleBuilding())
- caster->CastSpell(caster, _creditSpell, true);
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_ioc_seaforium_blast_credit_SpellScript::HandleAchievementCredit, EFFECT_1, SPELL_EFFECT_GAMEOBJECT_DAMAGE);
- }
- };
-
- SpellScript* GetSpellScript() const
- {
- return new spell_ioc_seaforium_blast_credit_SpellScript();
- }
+ PrepareSpellScript(spell_ioc_seaforium_blast_credit);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_A_BOMB_INABLE_CREDIT, SPELL_A_BOMB_INATION_CREDIT });
+ }
+
+ void HandleAchievementCredit(SpellEffIndex /*effIndex*/)
+ {
+ uint32 _creditSpell = 0;
+ Unit* caster = GetOriginalCaster();
+ if (!caster)
+ return;
+
+ if (GetSpellInfo()->Id == SPELL_SEAFORIUM_BLAST)
+ _creditSpell = SPELL_A_BOMB_INABLE_CREDIT;
+ else if (GetSpellInfo()->Id == SPELL_HUGE_SEAFORIUM_BLAST)
+ _creditSpell = SPELL_A_BOMB_INATION_CREDIT;
+
+ if (GetHitGObj() && GetHitGObj()->IsDestructibleBuilding())
+ caster->CastSpell(caster, _creditSpell, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_ioc_seaforium_blast_credit::HandleAchievementCredit, EFFECT_1, SPELL_EFFECT_GAMEOBJECT_DAMAGE);
+ }
};
void AddSC_isle_of_conquest()
{
- new npc_four_car_garage();
- new npc_ioc_gunship_captain();
- new spell_ioc_gunship_portal();
- new spell_ioc_parachute_ic();
- new spell_ioc_launch();
- new spell_ioc_seaforium_blast_credit();
+ RegisterCreatureAI(npc_four_car_garage);
+ RegisterCreatureAI(npc_ioc_gunship_captain);
+ RegisterSpellScript(spell_ioc_gunship_portal);
+ RegisterSpellScript(spell_ioc_parachute_ic);
+ RegisterSpellScript(spell_ioc_launch);
+ RegisterSpellScript(spell_ioc_seaforium_blast_credit);
}