diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Scripting/ScriptLoader.cpp | 1 | ||||
-rw-r--r-- | src/server/scripts/Kalimdor/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp | 160 | ||||
-rw-r--r-- | src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.h | 21 |
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 |