aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp83
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp18
-rw-r--r--src/server/scripts/Northrend/Naxxramas/naxxramas.h1
3 files changed, 102 insertions, 0 deletions
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
index 62b00a90dc6..deaa48af1b1 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
@@ -74,6 +74,7 @@ enum Event
EVENT_TRIGGER,
EVENT_PHASE,
+ EVENT_MORTAL_WOUND,
};
enum Spells
@@ -121,6 +122,10 @@ enum Spells
//death knight
SPELL_PLAGUE_STRIKE = 49921,
SPELL_HOWLING_BLAST = 51411,
+
+ // Abomination spells
+ SPELL_FRENZY = 28468,
+ SPELL_MORTAL_WOUND = 28467,
};
enum Creatures
@@ -709,8 +714,86 @@ public:
};
+class npc_kelthuzad_abomination : public CreatureScript
+{
+ public:
+ npc_kelthuzad_abomination() : CreatureScript("npc_kelthuzad_abomination") { }
+
+ struct npc_kelthuzad_abominationAI : public ScriptedAI
+ {
+ npc_kelthuzad_abominationAI(Creature* creature) : ScriptedAI(creature)
+ {
+ instance = me->GetInstanceScript();
+ }
+
+ InstanceScript* instance;
+ EventMap events;
+
+ void Reset()
+ {
+ events.Reset();
+ events.ScheduleEvent(EVENT_MORTAL_WOUND, urand(2000, 5000));
+ DoCast(me, SPELL_FRENZY, true);
+ }
+
+ void UpdateAI(uint32 const diff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_MORTAL_WOUND:
+ DoCastVictim(SPELL_MORTAL_WOUND, true);
+ events.ScheduleEvent(EVENT_MORTAL_WOUND, urand(10000, 15000));
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ void JustDied(Unit* /*who*/)
+ {
+ if (instance)
+ instance->SetData(DATA_ABOMINATION_KILLED, instance->GetData(DATA_ABOMINATION_KILLED) + 1);
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_kelthuzad_abominationAI(creature);
+ }
+};
+
+class achievement_just_cant_get_enough : public AchievementCriteriaScript
+{
+ public:
+ achievement_just_cant_get_enough() : AchievementCriteriaScript("achievement_just_cant_get_enough")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (InstanceScript* instance = target->GetInstanceScript())
+ if (instance->GetData(DATA_ABOMINATION_KILLED) >= 18)
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_kelthuzad()
{
new boss_kelthuzad();
new at_kelthuzad_center();
+ new npc_kelthuzad_abomination();
+ new achievement_just_cant_get_enough();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index f57a81f4296..722eb3ef37d 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -140,6 +140,8 @@ public:
uint64 uiKelthuzadTrigger;
uint64 uiPortals[4];
+ uint32 AbominationCount;
+
GOState gothikDoorState;
time_t minHorsemenDiedTime;
@@ -273,9 +275,25 @@ public:
maxHorsemenDiedTime = now;
}
break;
+ case DATA_ABOMINATION_KILLED:
+ AbominationCount = value;
+ break;
}
}
+ uint32 GetData(uint32 id)
+ {
+ switch (id)
+ {
+ case DATA_ABOMINATION_KILLED:
+ return AbominationCount;
+ default:
+ break;
+ }
+
+ return 0;
+ }
+
uint64 GetData64(uint32 id)
{
switch(id)
diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
index 86a7f67c11d..bb25ad691e0 100644
--- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h
+++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
@@ -48,6 +48,7 @@ enum Data
DATA_HORSEMEN1,
DATA_HORSEMEN2,
DATA_HORSEMEN3,
+ DATA_ABOMINATION_KILLED,
};
enum Data64