aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSnapperRy <snapperryen@gmail.com>2016-10-15 21:23:43 +0200
committerSnapperRy <snapperryen@gmail.com>2016-10-15 21:23:43 +0200
commit94c41c92b35e20c47462113ad88b3d382dd9c44d (patch)
tree8abf54ef6759d9adddae03d94df6ef52d5b0326f /src
parenta5347ea743dd012ebf99641d814462298f6a5e24 (diff)
Script/Quest: Arelion's Mistress.
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Outland/zone_hellfire_peninsula.cpp117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
index 90bf8bb1948..f4ab0c60145 100644
--- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
+++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
@@ -892,6 +892,122 @@ public:
}
};
+enum Aledis
+{
+ SAY_CHALLENGE = 0,
+ SAY_DEFEATED = 1,
+ EVENT_TALK = 1,
+ EVENT_ATTACK = 2,
+ EVENT_EVADE = 3,
+ EVENT_FIREBALL = 4,
+ EVENT_FROSTNOVA = 5,
+ SPELL_FIREBALL = 20823,
+ SPELL_FROSTNOVA = 11831
+};
+
+class npc_magister_aledis : public CreatureScript
+{
+public:
+ npc_magister_aledis() : CreatureScript("npc_magister_aledis") { }
+
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
+ {
+ CloseGossipMenuFor(player);
+ creature->StopMoving();
+ ENSURE_AI(npc_magister_aledis::npc_magister_aledisAI, creature->AI())->StartFight(player);
+ return true;
+ }
+
+ struct npc_magister_aledisAI : public ScriptedAI
+ {
+ npc_magister_aledisAI(Creature* creature) : ScriptedAI(creature) { }
+
+ void StartFight(Player* player)
+ {
+ me->Dismount();
+ me->SetFacingToObject(player, true);
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ _playerGUID = player->GetGUID();
+ _events.ScheduleEvent(EVENT_TALK, Seconds(2));
+ }
+
+ void Reset() override
+ {
+ me->RestoreFaction();
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+ me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ }
+
+ void DamageTaken(Unit* /*attacker*/, uint32 &damage) override
+ {
+ if (damage > me->GetHealth() || me->HealthBelowPctDamaged(20, damage))
+ {
+ damage = 0;
+
+ _events.Reset();
+ me->RestoreFaction();
+ me->RemoveAllAuras();
+ me->DeleteThreatList();
+ me->CombatStop(true);
+ me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ Talk(SAY_DEFEATED);
+
+ _events.ScheduleEvent(EVENT_EVADE, Minutes(1));
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_TALK:
+ Talk(SAY_CHALLENGE);
+ _events.ScheduleEvent(EVENT_ATTACK, Seconds(2));
+ break;
+ case EVENT_ATTACK:
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->setFaction(FACTION_HOSTILE);
+ me->CombatStart(ObjectAccessor::GetPlayer(*me, _playerGUID));
+ _events.ScheduleEvent(EVENT_FIREBALL, 1);
+ _events.ScheduleEvent(EVENT_FROSTNOVA, Seconds(5));
+ break;
+ case EVENT_FIREBALL:
+ DoCast(SPELL_FIREBALL);
+ _events.ScheduleEvent(EVENT_FIREBALL, Seconds(10));
+ break;
+ case EVENT_FROSTNOVA:
+ DoCastAOE(SPELL_FROSTNOVA);
+ _events.ScheduleEvent(EVENT_FROSTNOVA, Seconds(20));
+ break;
+ case EVENT_EVADE:
+ EnterEvadeMode();
+ break;
+ }
+ }
+
+ if (!UpdateVictim())
+ return;
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ EventMap _events;
+ ObjectGuid _playerGUID;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_magister_aledisAI(creature);
+ }
+};
+
void AddSC_hellfire_peninsula()
{
new npc_aeranas();
@@ -900,4 +1016,5 @@ void AddSC_hellfire_peninsula()
new npc_fel_guard_hound();
new npc_colonel_jules();
new npc_barada();
+ new npc_magister_aledis();
}