aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp1
-rw-r--r--src/server/scripts/Kalimdor/CMakeLists.txt1
-rw-r--r--src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp160
-rw-r--r--src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp4
-rw-r--r--src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.h21
5 files changed, 177 insertions, 10 deletions
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index a4ee553e9f7..ff95248430f 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -342,6 +342,7 @@ void AddSC_wailing_caverns(); //Wailing caverns
void AddSC_instance_wailing_caverns();
void AddSC_zulfarrak(); //Zul'Farrak generic
void AddSC_instance_zulfarrak(); //Zul'Farrak instance script
+void AddSC_boss_zum_rah();
void AddSC_ashenvale();
void AddSC_azshara();
diff --git a/src/server/scripts/Kalimdor/CMakeLists.txt b/src/server/scripts/Kalimdor/CMakeLists.txt
index 6a54d777c1e..752f8d3a2af 100644
--- a/src/server/scripts/Kalimdor/CMakeLists.txt
+++ b/src/server/scripts/Kalimdor/CMakeLists.txt
@@ -20,6 +20,7 @@ set(scripts_STAT_SRCS
Kalimdor/ZulFarrak/zulfarrak.h
Kalimdor/ZulFarrak/zulfarrak.cpp
Kalimdor/ZulFarrak/instance_zulfarrak.cpp
+ Kalimdor/ZulFarrak/boss_zum_rah.cpp
Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp
Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h
Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp
diff --git a/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp b/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp
new file mode 100644
index 00000000000..bc31fd118be
--- /dev/null
+++ b/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp
@@ -0,0 +1,160 @@
+/*
+* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+Name: Boss_Zum_Rah
+Category: Tanaris, ZulFarrak
+*/
+
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "zulfarrak.h"
+
+enum Says
+{
+ SAY_SANCT_INVADE = 0,
+ SAY_WARD = 1,
+ SAY_KILL = 2
+};
+
+enum Spells
+{
+ SPELL_SHADOW_BOLT = 12739,
+ SPELL_SHADOWBOLT_VOLLEY = 15245,
+ SPELL_WARD_OF_ZUM_RAH = 11086,
+ SPELL_HEALING_WAVE = 12491
+};
+
+enum Events
+{
+ EVENT_SHADOW_BOLT = 1,
+ EVENT_SHADOWBOLT_VOLLEY = 2,
+ EVENT_WARD_OF_ZUM_RAH = 3,
+ EVENT_HEALING_WAVE = 4
+};
+
+enum Faction
+{
+ ZUMRAH_FRIENDLY_FACTION = 35
+};
+
+class boss_zum_rah : public CreatureScript
+{
+public:
+ boss_zum_rah() : CreatureScript("boss_zum_rah") { }
+
+ struct boss_zum_rahAI : public BossAI
+ {
+ boss_zum_rahAI(Creature* creature) : BossAI(creature, DATA_ZUM_RAH) { }
+
+ void Reset() OVERRIDE
+ {
+ me->setFaction(ZUMRAH_FRIENDLY_FACTION); // areatrigger sets faction to enemy
+ _ward80 = false;
+ _ward40 = false;
+ _heal30 = false;
+ }
+
+ void EnterCombat(Unit* /*who*/) OVERRIDE
+ {
+ Talk(SAY_SANCT_INVADE);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, 1000);
+ events.ScheduleEvent(EVENT_SHADOWBOLT_VOLLEY, 10000);
+ }
+
+ void JustDied(Unit* /*killer*/) OVERRIDE
+ {
+ if (instance)
+ instance->SetData(DATA_ZUM_RAH, DONE);
+ }
+
+ void KilledUnit(Unit* /*victim*/) OVERRIDE
+ {
+ Talk(SAY_KILL);
+ }
+
+ void UpdateAI(uint32 diff) OVERRIDE
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_SHADOW_BOLT:
+ DoCastVictim(SPELL_SHADOW_BOLT);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, 4000);
+ break;
+ case EVENT_WARD_OF_ZUM_RAH:
+ DoCast(me,SPELL_WARD_OF_ZUM_RAH);
+ break;
+ case EVENT_HEALING_WAVE:
+ DoCast(me,SPELL_HEALING_WAVE);
+ break;
+ case EVENT_SHADOWBOLT_VOLLEY:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_SHADOWBOLT_VOLLEY);
+ events.ScheduleEvent(EVENT_SHADOWBOLT_VOLLEY, 9000);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (!_ward80 && HealthBelowPct(80))
+ {
+ _ward80 = true;
+ Talk(SAY_WARD);
+ events.ScheduleEvent(EVENT_WARD_OF_ZUM_RAH, 1000);
+ }
+
+ if (!_ward40 && HealthBelowPct(40))
+ {
+ _ward40 = true;
+ Talk(SAY_WARD);
+ events.ScheduleEvent(EVENT_WARD_OF_ZUM_RAH, 1000);
+ }
+
+ if (!_heal30 && HealthBelowPct(30))
+ {
+ _heal30 = true;
+ events.ScheduleEvent(EVENT_HEALING_WAVE, 3000);
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ bool _ward80;
+ bool _ward40;
+ bool _heal30;
+
+ };
+
+ CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ {
+ return new boss_zum_rahAI(creature);
+ }
+};
+
+void AddSC_boss_zum_rah()
+{
+ new boss_zum_rah();
+}
diff --git a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp
index 8f5275be5cd..8e2d393e6a6 100644
--- a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp
+++ b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp
@@ -145,7 +145,7 @@ public:
{
switch (creature->GetEntry())
{
- case ENTRY_ZUMRAH:
+ case ENTRY_ZUM_RAH:
ZumrahGUID = creature->GetGUID();
break;
case ENTRY_BLY:
@@ -201,7 +201,7 @@ public:
{
switch (data)
{
- case ENTRY_ZUMRAH:
+ case ENTRY_ZUM_RAH:
return ZumrahGUID;
case ENTRY_BLY:
return BlyGUID;
diff --git a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.h b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.h
index f634d593f44..0d16c1d1ddd 100644
--- a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.h
+++ b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.h
@@ -7,19 +7,24 @@
enum zfEntries
{
- ENTRY_ZUMRAH = 7271,
- ENTRY_BLY = 7604,
- ENTRY_RAVEN = 7605,
- ENTRY_ORO = 7606,
- ENTRY_WEEGLI = 7607,
- ENTRY_MURTA = 7608,
+ ENTRY_ZUM_RAH = 7271,
+ ENTRY_BLY = 7604,
+ ENTRY_RAVEN = 7605,
+ ENTRY_ORO = 7606,
+ ENTRY_WEEGLI = 7607,
+ ENTRY_MURTA = 7608,
- GO_END_DOOR = 146084,
+ GO_END_DOOR = 146084,
- EVENT_PYRAMID = 1,
+ EVENT_PYRAMID = 1,
EVENT_GAHZRILLA
};
+enum DataTypes
+{
+ DATA_ZUM_RAH = 0
+};
+
enum zfPyramidPhases
{
PYRAMID_NOT_STARTED, //default