aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMachiavelli <none@none>2010-12-26 23:35:12 +0100
committerMachiavelli <none@none>2010-12-26 23:35:12 +0100
commitf0d884ee20b48f0dd85820b57561c40e2bc4e480 (patch)
tree4cb1f282b09401273cc928b7380c77ffd93691d6
parent4881f3948d3d7feb1b0d147d8a20e16bc6df647b (diff)
Scripts/Ulduar: Implement script for General Vezax encounter.
Based on original patch by Lopin -- thank you! --HG-- branch : trunk
-rw-r--r--sql/scripts/world_script_texts.sql4
-rw-r--r--sql/scripts/world_scripts_full.sql3
-rw-r--r--sql/updates/10840_world_script_texts.sql7
-rw-r--r--sql/updates/10840_world_scriptname.sql3
-rwxr-xr-xsrc/server/game/Scripting/ScriptLoader.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp403
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp12
7 files changed, 425 insertions, 9 deletions
diff --git a/sql/scripts/world_script_texts.sql b/sql/scripts/world_script_texts.sql
index c8015b9b1ce..1766dba76e2 100644
--- a/sql/scripts/world_script_texts.sql
+++ b/sql/scripts/world_script_texts.sql
@@ -2580,6 +2580,7 @@ INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`
(33413,-1603287,'Golganneth, lend me your strengh! Grant my mortal allies the power of thunder!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15750,1,0,0,'Thorim SAY_YS_HELP'),
-- General Vezax
+ (33271,-1603289,'A cloud of saronite vapors coalesces nearby!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'General Vezax - Emote1'),
(33271,-1603290,'Your destruction will herald a new age of suffering!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15542,1,0,0,'Vezax SAY_AGGRO'),
(33271,-1603291,'You thought to stand before the legions of death... and survive?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15543,1,0,0,'Vezax SAY_SLAY_1'),
(33271,-1603292,'Defiance... a flaw of mortality.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15544,1,0,0,'Vezax SAY_SLAY_2'),
@@ -2587,6 +2588,9 @@ INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`
(33271,-1603294,'Oh, what horrors await....',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15546,1,0,0,'Vezax SAY_DEATH'),
(33271,-1603295,'Your defeat was inevitable!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15547,1,0,0,'Vezax SAY_BERSERK'),
(33271,-1603296,'Behold, now! Terror, absolute!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15548,1,0,0,'Vezax SAY_HARDMODE_ON'),
+ (33271,-1603297,'The saronite vapors mass and swirl violently, merging into a monstrous form!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'General Vezax - Emote2'),
+ (33271,-1603298,'A saronite barrier appears around General Vezax!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'General Vezax - Emote3'),
+ (33271,-1603299,'General Vezax roars and surges with dark might!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'General Vezax - Emote4');
-- XT002
(33293,-1603300,'New toys? For me? I promise I won''t break them this time!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15724,1,0,0,'XT002 SAY_AGGRO'),
diff --git a/sql/scripts/world_scripts_full.sql b/sql/scripts/world_scripts_full.sql
index 7454834d6c0..c6898e326d9 100644
--- a/sql/scripts/world_scripts_full.sql
+++ b/sql/scripts/world_scripts_full.sql
@@ -1528,6 +1528,9 @@ UPDATE `creature_template` SET `ScriptName`='mob_lightning_elemental' WHERE `ent
UPDATE `creature_template` SET `ScriptName`='mob_rune_of_summoning' WHERE `entry`=33051;
UPDATE `creature_template` SET `ScriptName`= 'mob_rune_of_power' WHERE entry = 33705;
UPDATE `creature_template` SET `ScriptName`='boss_kologarn' WHERE `entry`=32930;
+UPDATE `creature_template` SET `ScriptName`='boss_general_vezax' WHERE `entry`=33271;
+UPDATE `creature_template` SET `ScriptName`='npc_saronite_vapors' WHERE `entry`=33488;
+UPDATE `creature_template` SET `ScriptName`='npc_saronite_animus' WHERE `entry`=33524;
UPDATE `creature_template` SET `ScriptName`='boss_algalon' WHERE `entry`=32871;
UPDATE `creature_template` SET `ScriptName`='mob_collapsing_star' WHERE `entry`=32955;
UPDATE `gameobject_template` SET `ScriptName`='ulduar_teleporter' WHERE `entry`=194569;
diff --git a/sql/updates/10840_world_script_texts.sql b/sql/updates/10840_world_script_texts.sql
new file mode 100644
index 00000000000..180bea7f12e
--- /dev/null
+++ b/sql/updates/10840_world_script_texts.sql
@@ -0,0 +1,7 @@
+DELETE FROM `script_texts` WHERE `entry` IN (-1603289,-1603297,-1603298,-1603299);
+INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`,`content_loc2`,`content_loc3`,`content_loc4`,`content_loc5`,`content_loc6`,`content_loc7`,`content_loc8`,`sound`,`type`,`language`,`emote`,`comment`)
+VALUES
+(33271,-1603289,'A cloud of saronite vapors coalesces nearby!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'General Vezax - Emote1'),
+(33271,-1603297,'The saronite vapors mass and swirl violently, merging into a monstrous form!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'General Vezax - Emote2'),
+(33271,-1603298,'A saronite barrier appears around General Vezax!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'General Vezax - Emote3'),
+(33271,-1603299,'General Vezax roars and surges with dark might!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'General Vezax - Emote4');
diff --git a/sql/updates/10840_world_scriptname.sql b/sql/updates/10840_world_scriptname.sql
new file mode 100644
index 00000000000..d24da6225c5
--- /dev/null
+++ b/sql/updates/10840_world_scriptname.sql
@@ -0,0 +1,3 @@
+UPDATE `creature_template` SET `ScriptName`='boss_general_vezax' WHERE `entry`=33271; -- General Vezax
+UPDATE `creature_template` SET `ScriptName`='npc_saronite_vapors' WHERE `entry`=33488; -- Saronite Vapors
+UPDATE `creature_template` SET `ScriptName`='npc_saronite_animus' WHERE `entry`=33524; -- Saronite Animus
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index 78da1ad549d..ec534b6a26b 100755
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -418,6 +418,7 @@ void AddSC_boss_razorscale();
void AddSC_boss_xt002();
void AddSC_boss_kologarn();
void AddSC_boss_assembly_of_iron();
+void AddSC_boss_general_vezax();
void AddSC_ulduar_teleporter();
void AddSC_instance_ulduar();
void AddSC_boss_keleseth(); //Utgarde Keep
@@ -1101,6 +1102,7 @@ void AddNorthrendScripts()
AddSC_boss_ignis();
AddSC_boss_razorscale();
AddSC_boss_xt002();
+ AddSC_boss_general_vezax();
AddSC_boss_assembly_of_iron();
AddSC_boss_kologarn();
AddSC_ulduar_teleporter();
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp
index 7b573864ee0..a43d8d03d18 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp
@@ -18,13 +18,400 @@
#include "ScriptPCH.h"
#include "ulduar.h"
-enum Yells
+enum eYells
{
- SAY_AGGRO = -1603290,
- SAY_SLAY_1 = -1603291,
- SAY_SLAY_2 = -1603292,
- SAY_KITE = -1603293,
- SAY_DEATH = -1603294,
- SAY_BERSERK = -1603295,
- SAY_HARDMODE_ON = -1603296,
+ SAY_AGGRO = -1603290,
+ SAY_SLAY_1 = -1603291,
+ SAY_SLAY_2 = -1603292,
+ SAY_SURGE_OF_DARKNESS = -1603293,
+ SAY_DEATH = -1603294,
+ SAY_BERSERK = -1603295,
+ SAY_HARDMODE = -1603296,
};
+
+enum eEmotes
+{
+ EMOTE_VAPORS = -1603289,
+ EMOTE_ANIMUS = -1603297,
+ EMOTE_BARRIER = -1603298,
+ EMOTE_SURGE_OF_DARKNESS = -1603299,
+};
+
+enum eSpells
+{
+ SPELL_AURA_OF_DESPAIR = 62692,
+ SPELL_MARK_OF_THE_FACELESS = 63276,
+ SPELL_SARONITE_BARRIER = 63364,
+ SPELL_SEARING_FLAMES = 62661,
+ SPELL_SHADOW_CRASH = 62660,
+ SPELL_SHADOW_CRASH_HIT = 62659,
+ SPELL_SURGE_OF_DARKNESS = 62662,
+ SPELL_SARONITE_VAPORS = 63323,
+ SPELL_SUMMON_SARONITE_VAPORS = 63081,
+ SPELL_PROFOUND_OF_DARKNESS = 63420,
+ SPELL_BERSERK = 26662,
+
+ SPELL_SUMMON_SARONITE_ANIMUS = 63145,
+ SPELL_VISUAL_SARONITE_ANIMUS = 63319,
+ SPELL_PROFOUND_DARKNESS = 63420,
+
+ SPELL_CORRUPTED_RAGE = 68415,
+ SPELL_SHAMANTIC_RAGE = 30823,
+};
+
+enum eActions
+{
+ ACTION_VAPORS_SPAWN,
+ ACTION_VAPORS_DIE,
+ ACTION_ANIMUS_DIE,
+};
+
+enum eEvents
+{
+ EVENT_SHADOW_CRASH = 1,
+ EVENT_SEARING_FLAMES = 2,
+ EVENT_SURGE_OF_DARKNESS = 3,
+ EVENT_MARK_OF_THE_FACELESS = 4,
+ EVENT_SARONITE_VAPORS = 5,
+ EVENT_BERSERK = 6,
+};
+
+#define ACHIEVEMENT_SMELL_SARONITE RAID_MODE(3181, 3188)
+#define ACHIEVEMENT_SHADOWDODGER RAID_MODE(2996, 2997)
+
+class boss_general_vezax : public CreatureScript
+{
+public:
+ boss_general_vezax() : CreatureScript("boss_general_vezax") { }
+
+ CreatureAI* GetAI(Creature* pCreature) const
+ {
+ return new boss_general_vezaxAI(pCreature);
+ }
+
+ struct boss_general_vezaxAI : public BossAI
+ {
+ boss_general_vezaxAI(Creature *pCreature) : BossAI(pCreature, TYPE_VEZAX)
+ {
+ me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
+ me->ApplySpellImmune(0, IMMUNITY_ID, 49560, true); // Death Grip jump effect
+ }
+
+ bool bShadowDodger;
+ bool bSmellSaronite; /*HardMode*/
+ bool bAnimusDead; /*Check against getting a HardMode achievement before killing Saronite Animus*/
+ uint8 uiVaporCount;
+
+ void Reset()
+ {
+ _Reset();
+
+ events.Reset();
+ summons.DespawnAll();
+ me->ResetLootMode();
+ bShadowDodger = true;
+ bSmellSaronite = true;
+ bAnimusDead = false;
+ uiVaporCount = 0;
+ }
+
+ void EnterCombat(Unit * pWho)
+ {
+ _EnterCombat();
+
+ DoScriptText(SAY_AGGRO, me);
+ DoCast(me, SPELL_AURA_OF_DESPAIR);
+ CheckShamanisticRage();
+
+ events.Reset();
+ events.ScheduleEvent(EVENT_SHADOW_CRASH, urand(8000, 10000));
+ events.ScheduleEvent(EVENT_SEARING_FLAMES, 12000);
+ events.ScheduleEvent(EVENT_MARK_OF_THE_FACELESS, urand(35000, 40000));
+ events.ScheduleEvent(EVENT_SARONITE_VAPORS, 30000);
+ events.ScheduleEvent(EVENT_SURGE_OF_DARKNESS, 60000);
+ events.ScheduleEvent(EVENT_BERSERK, 600000);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(uiDiff);
+
+ if (me->HasUnitState(UNIT_STAT_CASTING))
+ return;
+
+ while (uint32 uiEventId = events.ExecuteEvent())
+ {
+ switch (uiEventId)
+ {
+ case EVENT_SHADOW_CRASH:
+ if (Unit * pTarget = GetPlayerAtMinimumRange(15.0f))
+ DoCast(pTarget, SPELL_SHADOW_CRASH);
+ events.ScheduleEvent(EVENT_SHADOW_CRASH, urand(8000, 12000));
+ break;
+ case EVENT_SEARING_FLAMES:
+ DoCastAOE(SPELL_SEARING_FLAMES);
+ events.ScheduleEvent(EVENT_SEARING_FLAMES, urand(14000, 17500));
+ break;
+ case EVENT_MARK_OF_THE_FACELESS:
+ Unit* pTarget;
+ /* He will not cast this on players within 15 yards of him.
+ However, if there are not at least 9 people outside of 15 yards
+ he will start casting it on players inside 15 yards melee and tank included.
+ */
+ if (!(pTarget = CheckPlayersInRange(RAID_MODE(4,9), 15.0f, 50.f)))
+ pTarget = SelectTarget(SELECT_TARGET_RANDOM);
+ DoCast(pTarget, SPELL_MARK_OF_THE_FACELESS);
+ events.ScheduleEvent(EVENT_MARK_OF_THE_FACELESS, urand(35000, 45000));
+ break;
+ case EVENT_SURGE_OF_DARKNESS:
+ DoScriptText(EMOTE_SURGE_OF_DARKNESS, me);
+ DoScriptText(SAY_SURGE_OF_DARKNESS, me);
+ DoCast(me, SPELL_SURGE_OF_DARKNESS);
+ events.ScheduleEvent(EVENT_SURGE_OF_DARKNESS, urand(50000, 70000));
+ break;
+ case EVENT_SARONITE_VAPORS:
+ DoCast(SPELL_SUMMON_SARONITE_VAPORS);
+ events.ScheduleEvent(EVENT_SARONITE_VAPORS, urand(30000, 35000));
+
+ if (++uiVaporCount == 6 && bSmellSaronite)
+ {
+ DoScriptText(SAY_HARDMODE, me);
+ DoScriptText(EMOTE_BARRIER, me);
+ summons.DespawnAll();
+ DoCast(me, SPELL_SARONITE_BARRIER);
+ DoCast(SPELL_SUMMON_SARONITE_ANIMUS);
+ me->AddLootMode(LOOT_MODE_HARD_MODE_1);
+ events.CancelEvent(EVENT_SARONITE_VAPORS);
+ events.CancelEvent(EVENT_SEARING_FLAMES);
+ }
+ break;
+ case EVENT_BERSERK:
+ DoScriptText(SAY_BERSERK, me);
+ DoCast(me, SPELL_BERSERK);
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ void SpellHitTarget(Unit * pWho, const SpellEntry * pSpell)
+ {
+ if (pWho && pWho->GetTypeId() == TYPEID_PLAYER && pSpell->Id == SPELL_SHADOW_CRASH_HIT)
+ bShadowDodger = false;
+ }
+
+ void KilledUnit(Unit * pWho)
+ {
+ DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me);
+ }
+
+ void JustDied(Unit * pWho)
+ {
+ _JustDied();
+
+ DoScriptText(SAY_DEATH, me);
+
+ if (instance)
+ {
+ if (bShadowDodger)
+ instance->DoCompleteAchievement(ACHIEVEMENT_SHADOWDODGER);
+
+ if (bSmellSaronite && bAnimusDead)
+ instance->DoCompleteAchievement(ACHIEVEMENT_SMELL_SARONITE);
+ }
+ }
+
+ void CheckShamanisticRage()
+ {
+ if (instance)
+ {
+ Map * pMap = me->GetMap();
+ if (pMap && pMap->IsDungeon())
+ {
+ /* If Shaman has Shamanistic Rage and use it during the fight, it will cast Corrupted Rage on him */
+ Map::PlayerList const &Players = pMap->GetPlayers();
+ for (Map::PlayerList::const_iterator itr = Players.begin(); itr != Players.end(); ++itr)
+ if (Player * pPlayer = itr->getSource())
+ if (pPlayer->HasSpell(SPELL_SHAMANTIC_RAGE))
+ pPlayer->CastSpell(pPlayer, SPELL_CORRUPTED_RAGE, false);
+ }
+ }
+ }
+
+ void DoAction(const int32 uiAction)
+ {
+ switch (uiAction)
+ {
+ case ACTION_VAPORS_DIE:
+ bSmellSaronite = false;
+ break;
+ case ACTION_ANIMUS_DIE:
+ me->RemoveAurasDueToSpell(SPELL_SARONITE_BARRIER);
+ events.ScheduleEvent(EVENT_SEARING_FLAMES, urand(7000, 12000));
+ bAnimusDead = true;
+ break;
+ }
+ }
+
+ /* Player Range Check
+ Purpose: If there are uiPlayersMin people within uiRangeMin, uiRangeMax: return a random players in that range.
+ If not, return NULL and allow other target selection
+ */
+ Unit * CheckPlayersInRange(uint32 uiPlayersMin, float uiRangeMin, float uiRangeMax)
+ {
+ Map * pMap = me->GetMap();
+ if (pMap && pMap->IsDungeon())
+ {
+ std::list<Player*> PlayerList;
+ Map::PlayerList const &Players = pMap->GetPlayers();
+ for (Map::PlayerList::const_iterator itr = Players.begin(); itr != Players.end(); ++itr)
+ {
+ if (Player * pPlayer = itr->getSource())
+ {
+ float uiDistance = pPlayer->GetDistance(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
+ if (uiRangeMin < uiDistance || uiDistance > uiRangeMax)
+ continue;
+
+ PlayerList.push_back(pPlayer);
+ }
+ }
+
+ if (PlayerList.empty())
+ return NULL;
+
+ size_t size = PlayerList.size();
+ if (size < uiPlayersMin)
+ return NULL;
+
+ std::list<Player*>::const_iterator itr = PlayerList.begin();
+ std::advance(itr, urand(0, size - 1));
+ return *itr;
+ }
+ else
+ return NULL;
+ }
+ };
+};
+
+class boss_saronite_animus : public CreatureScript
+{
+public:
+ boss_saronite_animus() : CreatureScript("npc_saronite_animus") { }
+
+ CreatureAI* GetAI(Creature* pCreature) const
+ {
+ return new boss_saronite_animusAI(pCreature);
+ }
+
+ struct boss_saronite_animusAI : public ScriptedAI
+ {
+ boss_saronite_animusAI(Creature *pCreature) : ScriptedAI(pCreature)
+ {
+ pInstance = pCreature->GetInstanceScript();
+ me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
+ me->ApplySpellImmune(0, IMMUNITY_ID, 49560, true); // Death Grip jump effect
+ DoScriptText(EMOTE_BARRIER, me);
+ }
+
+ InstanceScript * pInstance;
+
+ uint32 uiProfoundOfDarknessTimer;
+
+ void Reset()
+ {
+ DoCast(me, SPELL_VISUAL_SARONITE_ANIMUS);
+ uiProfoundOfDarknessTimer = 3000;
+ }
+
+ void JustDied(Unit * pWho)
+ {
+ if (Creature * pVezax = me->GetCreature(*me, pInstance ? pInstance->GetData64(TYPE_VEZAX) : 0))
+ pVezax->AI()->DoAction(ACTION_ANIMUS_DIE);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (uiProfoundOfDarknessTimer <= uiDiff)
+ {
+ DoCastAOE(SPELL_PROFOUND_DARKNESS);
+ uiProfoundOfDarknessTimer = 3000;
+ }
+ else
+ uiProfoundOfDarknessTimer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+};
+
+class npc_saronite_vapors : public CreatureScript
+{
+public:
+ npc_saronite_vapors() : CreatureScript("npc_saronite_vapors") { }
+
+ CreatureAI* GetAI(Creature* pCreature) const
+ {
+ return new npc_saronite_vaporsAI(pCreature);
+ }
+
+ struct npc_saronite_vaporsAI : public ScriptedAI
+ {
+ npc_saronite_vaporsAI(Creature *pCreature) : ScriptedAI(pCreature)
+ {
+ DoScriptText(EMOTE_VAPORS, me);
+ pInstance = pCreature->GetInstanceScript();
+ me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
+ me->ApplySpellImmune(0, IMMUNITY_ID, 49560, true); // Death Grip jump effect
+ me->SetReactState(REACT_PASSIVE);
+ uiRandomMoveTimer = 1000;
+ }
+
+ InstanceScript * pInstance;
+
+ uint32 uiRandomMoveTimer;
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (uiRandomMoveTimer <= uiDiff)
+ {
+ me->GetMotionMaster()->MoveRandom(30.0f);
+ uiRandomMoveTimer = urand(5000, 7500);
+ }
+ else
+ uiRandomMoveTimer -= uiDiff;
+ }
+
+ void DamageTaken(Unit * pWho, uint32 &uiDamage)
+ {
+ // This can't be on JustDied. In 63322 dummy handler caster needs to be this NPC
+ // if caster == target then damage mods will increase the damage taken
+ if (uiDamage >= me->GetHealth())
+ {
+ uiDamage = 0;
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_DISABLE_MOVE);
+ me->SetStandState(UNIT_STAND_STATE_DEAD);
+ me->SetHealth(me->GetMaxHealth());
+ me->RemoveAllAuras();
+ DoCast(me, SPELL_SARONITE_VAPORS);
+ me->ForcedDespawn(30000);
+
+ if (Creature * pVezax = me->GetCreature(*me, pInstance ? pInstance->GetData64(TYPE_VEZAX) : 0))
+ pVezax->AI()->DoAction(ACTION_VAPORS_DIE);
+ }
+ }
+ };
+};
+
+void AddSC_boss_general_vezax()
+{
+ new boss_general_vezax();
+ new boss_saronite_animus();
+ new npc_saronite_vapors();
+} \ No newline at end of file
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp
index 69e6dbf0521..fb3371d9871 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp
@@ -29,7 +29,8 @@ enum eGameObjects
GO_FREYA_CHEST_HERO = 194325,
GO_FREYA_CHEST = 194324,
GO_LEVIATHAN_DOOR = 194905,
- GO_LEVIATHAN_GATE = 194630
+ GO_LEVIATHAN_GATE = 194630,
+ GO_VEZAX_DOOR = 194750,
};
class instance_ulduar : public InstanceMapScript
@@ -67,6 +68,7 @@ public:
uint64 uiAlgalonGUID;
uint64 uiLeviathanDoor[7];
uint64 uiLeviathanGateGUID;
+ uint64 uiVezaxDoorGUID;
uint64 uiKologarnChestGUID;
uint64 uiThorimChestGUID;
@@ -94,6 +96,7 @@ public:
uiHodirChestGUID = 0;
uiFreyaChestGUID = 0;
uiLeviathanGateGUID = 0;
+ uiVezaxDoorGUID = 0;
flag = 0;
memset(&uiEncounter, 0, sizeof(uiEncounter));
@@ -205,6 +208,10 @@ public:
uiLeviathanGateGUID = go->GetGUID();
HandleGameObject(NULL, false, go);
break;
+ case GO_VEZAX_DOOR:
+ uiVezaxDoorGUID = go->GetGUID();
+ HandleGameObject(NULL, false, go);
+ break;
}
}
@@ -253,6 +260,9 @@ public:
case TYPE_AURIAYA:
case TYPE_MIMIRON:
case TYPE_VEZAX:
+ if (state == DONE)
+ HandleGameObject(uiVezaxDoorGUID, true);
+ break;
case TYPE_YOGGSARON:
break;
case TYPE_KOLOGARN: