aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2011_08_20_00_world_achievement_criteria_data.sql11
-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
4 files changed, 113 insertions, 0 deletions
diff --git a/sql/updates/world/2011_08_20_00_world_achievement_criteria_data.sql b/sql/updates/world/2011_08_20_00_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..50cc98f9661
--- /dev/null
+++ b/sql/updates/world/2011_08_20_00_world_achievement_criteria_data.sql
@@ -0,0 +1,11 @@
+UPDATE `creature_template` SET `AIName`='', `ScriptName`='npc_kelthuzad_abomination' WHERE `entry`=16428;
+
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=16428;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (7614, 7615) AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(7614,11,0,0,'achievement_just_cant_get_enough'),
+(7615,11,0,0,'achievement_just_cant_get_enough');
+
+DELETE FROM `disables` WHERE `entry` IN (7614, 7615);
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