aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/CMakeLists.txt1
-rw-r--r--src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/boss_krikthir_the_gatewatcher.cpp398
-rw-r--r--src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/instance_azjol_nerub.cpp20
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_krystallus.cpp116
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp48
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_sjonnir.cpp169
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/def_halls_of_stone.h22
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/halls_of_stone.cpp691
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/instance_halls_of_stone.cpp223
-rw-r--r--src/bindings/scripts/system/ScriptLoader.cpp14
10 files changed, 1629 insertions, 73 deletions
diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt
index 7f718f7c582..7aed9945245 100644
--- a/src/bindings/scripts/CMakeLists.txt
+++ b/src/bindings/scripts/CMakeLists.txt
@@ -359,6 +359,7 @@ SET(trinityscript_LIB_SRCS
scripts/northrend/ulduar/halls_of_stone/boss_krystallus.cpp
scripts/northrend/ulduar/halls_of_stone/boss_sjonnir.cpp
scripts/northrend/ulduar/halls_of_stone/def_halls_of_stone.h
+ scripts/northrend/ulduar/halls_of_stone/halls_of_stone.cpp
scripts/northrend/ulduar/halls_of_lightning/instance_halls_of_lightning.cpp
scripts/northrend/ulduar/halls_of_lightning/boss_bjarngrim.cpp
scripts/northrend/ulduar/halls_of_lightning/boss_ionar.cpp
diff --git a/src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/boss_krikthir_the_gatewatcher.cpp b/src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/boss_krikthir_the_gatewatcher.cpp
index 358575fe3db..536addeace4 100644
--- a/src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/boss_krikthir_the_gatewatcher.cpp
+++ b/src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/boss_krikthir_the_gatewatcher.cpp
@@ -63,7 +63,35 @@ enum Yells
SAY_SWARM_2 = -1601008,
SAY_PREFIGHT_1 = -1601009,
SAY_PREFIGHT_2 = -1601010,
- SAY_PREFIGHT_3 = -1601011
+ SAY_PREFIGHT_3 = -1601011,
+
+ //npc spells
+
+ H_SPELL_ACID_SPLASH = 59363,
+ SPELL_ACID_SPLASH = 52446,
+
+ SPELL_CHARGE = 16979,//maybe is another spell
+ SPELL_BACKSTAB = 52540,
+
+ SPELL_SHADOW_BOLT = 52534,
+ H_SPELL_SHADOW_BOLT = 59357,
+ SPELL_SHADOW_NOVA = 52535,
+ H_SPELL_SHADOW_NOVA = 59358,
+
+ SPELL_STRIKE = 52532,
+ SPELL_CLEAVE = 49806,
+
+ SPELL_ENRAGE = 52470,
+
+ SPELL_INFECTED_BITE = 52469,
+ H_SPELL_INFECTED_BITE = 59364,
+ SPELL_WEB_WRAP = 52086,//the spell is not working propperly
+
+ SPELL_BLINDING_WEBS = 52524,
+ H_SPELL_BLINDING_WEBS = 59365,
+
+ SPELL_POSION_SPRAY = 52493,
+ H_SPELL_POSION_SPRAY = 59366,
};
@@ -173,7 +201,11 @@ struct TRINITY_DLL_DECL boss_krik_thirAI : public ScriptedAI
if (victim == m_creature)
return;
- DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), m_creature);
+ switch (rand()%2)
+ {
+ case 0: DoScriptText(SAY_SLAY_1, m_creature); break;
+ case 1: DoScriptText(SAY_SLAY_1, m_creature); break;
+ }
}
void JustSummoned(Creature* summoned)
@@ -183,11 +215,338 @@ struct TRINITY_DLL_DECL boss_krik_thirAI : public ScriptedAI
}
};
+struct TRINITY_DLL_DECL npc_skittering_infectorAI : public ScriptedAI
+{
+ npc_skittering_infectorAI(Creature *c) : ScriptedAI(c) {}
+
+ void JustDied(Unit* killer)
+ { //The spell is not working propperly
+ DoCast(m_creature->getVictim(),HeroicMode ? H_SPELL_ACID_SPLASH : SPELL_ACID_SPLASH,true);
+ }
+
+};
+
+struct TRINITY_DLL_DECL npc_anub_ar_skirmisherAI : public ScriptedAI
+{
+ npc_anub_ar_skirmisherAI(Creature *c) : ScriptedAI(c) {}
+
+ uint32 ChargeTimer;
+ uint32 BackstabTimer;
+
+ void Reset()
+ {
+ ChargeTimer = 15000;
+ BackstabTimer = 7000;
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if(ChargeTimer < diff)
+ {
+ Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0);
+ while (target && target->GetTypeId() != TYPEID_PLAYER)
+ target = SelectUnit(SELECT_TARGET_RANDOM,0);
+ if (target)
+ {
+ DoResetThreat();
+ m_creature->AddThreat(target,1.0f);
+ DoCast(target,SPELL_CHARGE,true);
+ }
+
+ ChargeTimer = 15000;
+ }else ChargeTimer -= diff;
+
+ if(BackstabTimer < diff)
+ {
+ DoCast(m_creature->getVictim(),SPELL_BACKSTAB);
+
+ BackstabTimer = 7000;
+ }else BackstabTimer -= diff;
+
+ DoMeleeAttackIfReady();
+
+ }
+};
+
+struct TRINITY_DLL_DECL npc_anub_ar_shadowcasterAI : public ScriptedAI
+{
+ npc_anub_ar_shadowcasterAI(Creature *c) : ScriptedAI(c) {}
+
+ uint32 ShadowBoltTimer;
+ uint32 ShadowNovaTimer;
+
+ void Reset()
+ {
+ ShadowBoltTimer = 6000;
+ ShadowNovaTimer = 20000;
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if(ShadowBoltTimer < diff)
+ {
+ Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0);
+ while (target && target->GetTypeId() != TYPEID_PLAYER)
+ target = SelectUnit(SELECT_TARGET_RANDOM,0);
+
+ if (target)
+ DoCast(target, HeroicMode ? H_SPELL_SHADOW_BOLT : SPELL_SHADOW_BOLT,true);
+
+ ShadowBoltTimer = 6000;
+ }else ShadowBoltTimer -= diff;
+
+ if(ShadowNovaTimer < diff)
+ {
+
+ DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_SHADOW_NOVA : SPELL_SHADOW_NOVA,true);
+
+ ShadowNovaTimer = 20000;
+ }else ShadowNovaTimer -= diff;
+
+ DoMeleeAttackIfReady();
+ }
+};
+
+struct TRINITY_DLL_DECL npc_anub_ar_warriorAI : public ScriptedAI
+{
+ npc_anub_ar_warriorAI(Creature *c) : ScriptedAI(c){}
+
+ uint32 CleaveTimer;
+ uint32 StrikeTimer;
+
+ void Reset()
+ {
+ CleaveTimer = 15000;
+ StrikeTimer = 6000;
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if(StrikeTimer < diff)
+ {
+
+ m_creature->CastSpell(m_creature->getVictim(),SPELL_STRIKE,true);
+
+ StrikeTimer = 6000;
+ }else StrikeTimer -= diff;
+
+ if(CleaveTimer < diff)
+ {
+
+ m_creature->CastSpell(m_creature->getVictim(), SPELL_CLEAVE ,true);
+
+ CleaveTimer = 15000;
+ }else CleaveTimer -= diff;
+
+ DoMeleeAttackIfReady();
+
+ }
+
+};
+
+struct TRINITY_DLL_DECL npc_watcher_gashraAI : public ScriptedAI
+{
+ npc_watcher_gashraAI(Creature *c) : ScriptedAI(c) {}
+
+ uint32 WebWrapTimer;
+ uint32 InfectedBiteTimer;
+
+ void Reset()
+ {
+ WebWrapTimer = 12000;
+ InfectedBiteTimer = 5000;
+ }
+
+
+ void EnterCombat(Unit* who)
+ {
+
+ m_creature->CastSpell(m_creature,SPELL_ENRAGE,true);
+
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if(WebWrapTimer < diff)
+ {
+ Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0);
+ while (target && target->GetTypeId() != TYPEID_PLAYER)
+ target = SelectUnit(SELECT_TARGET_RANDOM,0);
+ if (target)
+ m_creature->CastSpell(target, SPELL_WEB_WRAP,true);
+
+ WebWrapTimer = 15000;
+ }else WebWrapTimer -= diff;
+
+ if(InfectedBiteTimer < diff)
+ {
+
+ DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_INFECTED_BITE : SPELL_INFECTED_BITE,true);
+
+ InfectedBiteTimer = 6000;
+ }else InfectedBiteTimer -= diff;
+
+ DoMeleeAttackIfReady();
+ }
+};
+
+struct TRINITY_DLL_DECL npc_watcher_narjilAI : public ScriptedAI
+{
+ npc_watcher_narjilAI(Creature *c) : ScriptedAI(c) {}
+
+ uint32 WebWrapTimer;
+ uint32 InfectedBiteTimer;
+ uint32 BlindingWebsTimer;
+
+ void Reset()
+ {
+ WebWrapTimer = 16000;
+ InfectedBiteTimer = 12000;
+ BlindingWebsTimer = 10000;
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if(WebWrapTimer < diff)
+ {
+ Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0);
+ while (target && target->GetTypeId() != TYPEID_PLAYER)
+ target = SelectUnit(SELECT_TARGET_RANDOM,0);
+ if (target)
+ DoCast(target, SPELL_WEB_WRAP,true);
+
+ WebWrapTimer = 16000;
+ }else WebWrapTimer -= diff;
+
+ if(InfectedBiteTimer < diff)
+ {
+
+ DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_INFECTED_BITE : SPELL_INFECTED_BITE,true);
+
+ InfectedBiteTimer = 12000;
+ }else InfectedBiteTimer -= diff;
+
+ if(BlindingWebsTimer < diff)
+ {
+
+ DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_BLINDING_WEBS : SPELL_BLINDING_WEBS, true);
+
+ BlindingWebsTimer = 10000;
+ }else BlindingWebsTimer -= diff;
+
+ DoMeleeAttackIfReady();
+ }
+};
+
+struct TRINITY_DLL_DECL npc_watcher_silthikAI : public ScriptedAI
+{
+ npc_watcher_silthikAI(Creature *c) : ScriptedAI(c) {}
+
+ uint32 WebWrapTimer;
+ uint32 InfectedBiteTimer;
+ uint32 PosionSprayTimer;
+
+ void Reset()
+ {
+ WebWrapTimer = 12000;
+ InfectedBiteTimer = 8000;
+ PosionSprayTimer = 5000;
+ }
+
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if(WebWrapTimer < diff)
+ {
+ Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0);
+ while (target && target->GetTypeId() != TYPEID_PLAYER)
+ target = SelectUnit(SELECT_TARGET_RANDOM,0);
+ if (target)
+ DoCast(target, SPELL_WEB_WRAP,true);
+
+ WebWrapTimer = 12000;
+ }else WebWrapTimer -= diff;
+
+ if(InfectedBiteTimer < diff)
+ {
+
+ DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_INFECTED_BITE : SPELL_INFECTED_BITE,true);
+
+ InfectedBiteTimer = 8000;
+ }else InfectedBiteTimer -= diff;
+
+ if(PosionSprayTimer < diff)
+ {
+
+ DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_POSION_SPRAY : SPELL_POSION_SPRAY ,true);
+
+ PosionSprayTimer = 5000;
+ }else PosionSprayTimer -= diff;
+
+ DoMeleeAttackIfReady();
+
+ }
+};
+
CreatureAI* GetAI_boss_krik_thir(Creature* pCreature)
{
return new boss_krik_thirAI (pCreature);
}
+CreatureAI* GetAI_npc_anub_ar_skirmisher (Creature* pCreature)
+{
+ return new npc_anub_ar_skirmisherAI (pCreature);
+}
+
+CreatureAI* GetAI_npc_skittering_infector (Creature* pCreature)
+{
+ return new npc_skittering_infectorAI (pCreature);
+}
+
+CreatureAI* GetAI_npc_anub_ar_shadowcaster (Creature* pCreature)
+{
+ return new npc_anub_ar_shadowcasterAI (pCreature);
+}
+
+CreatureAI* GetAI_npc_anub_ar_warrior (Creature* pCreature)
+{
+ return new npc_anub_ar_warriorAI (pCreature);
+}
+
+CreatureAI* GetAI_npc_watcher_gashra (Creature* pCreature)
+{
+ return new npc_watcher_gashraAI (pCreature);
+}
+
+CreatureAI* GetAI_npc_watcher_narjil (Creature* pCreature)
+{
+ return new npc_watcher_narjilAI (pCreature);
+}
+
+CreatureAI* GetAI_npc_watcher_silthik (Creature* pCreature)
+{
+ return new npc_watcher_silthikAI (pCreature);
+}
+
+
void AddSC_boss_krik_thir()
{
Script *newscript;
@@ -196,4 +555,39 @@ void AddSC_boss_krik_thir()
newscript->Name="boss_krik_thir";
newscript->GetAI = &GetAI_boss_krik_thir;
newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name="npc_skittering_infector";
+ newscript->GetAI = &GetAI_npc_skittering_infector;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name="npc_anub_ar_skirmisher";
+ newscript->GetAI = &GetAI_npc_anub_ar_skirmisher;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name="npc_anub_ar_shadowcaster";
+ newscript->GetAI = &GetAI_npc_anub_ar_shadowcaster;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name="npc_watcher_gashra";
+ newscript->GetAI = &GetAI_npc_watcher_gashra;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name="npc_anub_ar_warrior";
+ newscript->GetAI = &GetAI_npc_anub_ar_warrior;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name="npc_watcher_silthik";
+ newscript->GetAI = &GetAI_npc_watcher_silthik;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name="npc_watcher_narjil";
+ newscript->GetAI = &GetAI_npc_watcher_narjil;
+ newscript->RegisterSelf();
}
diff --git a/src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/instance_azjol_nerub.cpp b/src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/instance_azjol_nerub.cpp
index bac772acc6f..5a2159345e5 100644
--- a/src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/instance_azjol_nerub.cpp
+++ b/src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/instance_azjol_nerub.cpp
@@ -41,6 +41,8 @@ struct TRINITY_DLL_DECL instance_azjol_nerub : public ScriptedInstance
uint64 m_uiKrikthir;
uint64 m_uiHadronox;
uint64 m_uiAnubarak;
+
+ uint64 m_uiKrikthirDoor;
uint32 m_auiEncounter[MAX_ENCOUNTER];
@@ -51,6 +53,7 @@ struct TRINITY_DLL_DECL instance_azjol_nerub : public ScriptedInstance
m_uiKrikthir = 0;
m_uiHadronox = 0;
m_uiAnubarak =0;
+ m_uiKrikthirDoor = 0;
}
bool IsEncounterInProgress() const
@@ -72,6 +75,18 @@ struct TRINITY_DLL_DECL instance_azjol_nerub : public ScriptedInstance
}
}
+
+ void OnGameObjectCreate(GameObject* pGo, bool add)
+ {
+ switch (pGo->GetEntry())
+ {
+ case 192395:
+ m_uiKrikthirDoor = pGo->GetGUID();
+ if (m_auiEncounter[0] == DONE)
+ HandleGameObject(NULL,true,pGo);
+ break;
+ }
+ }
uint64 GetData64(uint32 identifier)
{
@@ -90,7 +105,10 @@ struct TRINITY_DLL_DECL instance_azjol_nerub : public ScriptedInstance
switch(type)
{
case DATA_KRIKTHIR_THE_GATEWATCHER_EVENT:
- m_auiEncounter[0] = data;break;
+ m_auiEncounter[0] = data;
+ if (data == DONE)
+ HandleGameObject(m_uiKrikthirDoor,true);
+ break;
case DATA_HADRONOX_EVENT:
m_auiEncounter[1] = data; break;
case DATA_ANUBARAK_EVENT:
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_krystallus.cpp b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_krystallus.cpp
index 35f10fee50c..3ca96886189 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_krystallus.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_krystallus.cpp
@@ -10,46 +10,126 @@ Script Data End */
update creature_template set scriptname = 'boss_krystallus' where entry = '';
*** SQL END ***/
#include "precompiled.h"
+#include "def_halls_of_stone.h"
-//Spells
-#define SPELL_BOULDER_TOSS 50843
-#define SPELL_BOULDER_TOSS_2 59742
-#define SPELL_GROUND_SPIKE 59750
-#define SPELL_SHATTER 50810
-#define SPELL_SHATTER_2 61546
-#define SPELL_STOMP 48131
-#define SPELL_STOMP_2 59744
+enum Spells
+{
+ SPELL_BOULDER_TOSS = 50843,
+ H_SPELL_BOULDER_TOSS = 59742,
+ SPELL_GROUND_SPIKE = 59750,
+ SPELL_GROUND_SLAM = 50827,
+ SPELL_SHATTER = 50810,
+ H_SPELL_SHATTER = 61546,
+ SPELL_STOMP = 48131,
+ H_SPELL_STOMP = 59744
+};
-//not in db
-//Yell
-#define SAY_AGGRO -1599000
-#define SAY_KILL -1599001
-#define SAY_DEATH -1599002
-#define SAY_SHATTER -1599003
+enum Yells
+{
+ SAY_AGGRO = -1603007,
+ SAY_KILL = -1603008,
+ SAY_DEATH = -1603009,
+ SAY_SHATTER = -1603010
+};
struct TRINITY_DLL_DECL boss_krystallusAI : public ScriptedAI
{
- boss_krystallusAI(Creature *c) : ScriptedAI(c) {}
+ boss_krystallusAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = c->GetInstanceData();
+ }
+
+ uint32 uiBoulderTossTimer;
+ uint32 uiGroundSpikeTimer;
+ uint32 uiGroundSlamTimer;
+ uint32 uiShatterTimer;
+ uint32 uiStompTimer;
+
+ bool bIsSlam;
+
+ ScriptedInstance* pInstance;
- void Reset() {}
+ void Reset()
+ {
+ bIsSlam = false;
+
+ uiBoulderTossTimer = 3000 + rand()%6000;
+ uiGroundSpikeTimer = 9000 + rand()%5000;
+ uiGroundSlamTimer = 15000 + rand()%3000;
+ uiStompTimer = 20000 + rand()%9000;
+ uiShatterTimer = 0;
+
+ if (pInstance)
+ pInstance->SetData(DATA_KRYSTALLUS_EVENT, NOT_STARTED);
+ }
void EnterCombat(Unit* who)
{
DoScriptText(SAY_AGGRO, m_creature);
+
+ if (pInstance)
+ pInstance->SetData(DATA_KRYSTALLUS_EVENT, IN_PROGRESS);
}
- void AttackStart(Unit* who) {}
- void MoveInLineOfSight(Unit* who) {}
+
void UpdateAI(const uint32 diff)
{
//Return since we have no target
if (!UpdateVictim())
return;
+
+ if (uiBoulderTossTimer < diff)
+ {
+ Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
+ while (pTarget && pTarget->GetTypeId() != TYPEID_PLAYER)
+ pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
+ if (pTarget)
+ DoCast(pTarget, HeroicMode ? H_SPELL_BOULDER_TOSS : SPELL_BOULDER_TOSS);
+ uiBoulderTossTimer = 9000 + rand()%6000;
+ } else uiBoulderTossTimer -= diff;
+
+ if (uiGroundSpikeTimer < diff)
+ {
+ Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
+ while (pTarget && pTarget->GetTypeId() != TYPEID_PLAYER)
+ pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
+ if (pTarget)
+ DoCast(pTarget, SPELL_GROUND_SPIKE);
+ uiBoulderTossTimer = 12000 + rand()%5000;
+ } else uiGroundSpikeTimer < diff;
+
+ if (uiStompTimer < diff)
+ {
+ DoCast(m_creature, HeroicMode ? H_SPELL_STOMP : SPELL_STOMP);
+ uiStompTimer = 20000 + rand()%9000;
+ } else uiStompTimer -= diff;
+
+ if (uiGroundSlamTimer < diff)
+ {
+ DoCast(m_creature, SPELL_GROUND_SLAM);
+ bIsSlam = true;
+ uiShatterTimer = 10000;
+ uiGroundSlamTimer = 15000 + rand()%3000;
+ } else uiGroundSlamTimer -= diff;
+
+ if (bIsSlam)
+ {
+ if(uiShatterTimer < diff)
+ {
+ DoCast(m_creature, HeroicMode ? H_SPELL_SHATTER : SPELL_SHATTER);
+ bIsSlam = false;
+ } else uiShatterTimer -= diff;
+ }
DoMeleeAttackIfReady();
}
+
void JustDied(Unit* killer)
{
DoScriptText(SAY_DEATH, m_creature);
+
+ if (pInstance)
+ pInstance->SetData(DATA_KRYSTALLUS_EVENT, DONE);
}
+
void KilledUnit(Unit *victim)
{
if (victim == m_creature)
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp
index 50462a4666c..01664ee0090 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp
@@ -10,24 +10,29 @@ Script Data End */
update creature_template set scriptname = 'boss_maiden_of_grief' where entry = '';
*** SQL END ***/
#include "precompiled.h"
+#include "def_halls_of_stone.h"
-//Spell
-#define SPELL_PARTING_SORROW 59723
-#define SPELL_STORM_OF_GRIEF_N 50752
-#define SPELL_STORM_OF_GRIEF_H 59772
-#define SPELL_SHOCK_OF_SORROW_N 50760
-#define SPELL_SHOCK_OF_SORROW_H 59726
-#define SPELL_PILLAR_OF_WOE_N 50761
-#define SPELL_PILLAR_OF_WOE_H 59727
-
-//Yell
-#define SAY_AGGRO -1603000
-#define SAY_SLAY_1 -1603001
-#define SAY_SLAY_2 -1603002
-#define SAY_SLAY_3 -1603003
-#define SAY_SLAY_4 -1603004
-#define SAY_DEATH -1603005
-#define SAY_STUN -1603006
+enum Spells
+{
+ SPELL_PARTING_SORROW = 59723,
+ SPELL_STORM_OF_GRIEF_N = 50752,
+ SPELL_STORM_OF_GRIEF_H = 59772,
+ SPELL_SHOCK_OF_SORROW_N = 50760,
+ SPELL_SHOCK_OF_SORROW_H = 59726,
+ SPELL_PILLAR_OF_WOE_N = 50761,
+ SPELL_PILLAR_OF_WOE_H = 59727
+};
+
+enum Yells
+{
+ SAY_AGGRO = -1603000,
+ SAY_SLAY_1 = -1603001,
+ SAY_SLAY_2 = -1603002,
+ SAY_SLAY_3 = -1603003,
+ SAY_SLAY_4 = -1603004,
+ SAY_DEATH = -1603005,
+ SAY_STUN = -1603006
+};
struct TRINITY_DLL_DECL boss_maiden_of_griefAI : public ScriptedAI
{
@@ -52,14 +57,16 @@ struct TRINITY_DLL_DECL boss_maiden_of_griefAI : public ScriptedAI
ShockOfSorrowTimer = 20000+rand()%5000;
PillarOfWoeTimer = 5000 + rand()%10000;
- //Missing support for instance data (and door?)
+ if (pInstance)
+ pInstance->SetData(DATA_MAIDEN_OF_GRIEF_EVENT, NOT_STARTED);
}
void EnterCombat(Unit* who)
{
DoScriptText(SAY_AGGRO, m_creature);
- //Missing support for instance data (and door?)
+ if (pInstance)
+ pInstance->SetData(DATA_MAIDEN_OF_GRIEF_EVENT, IN_PROGRESS);
}
void UpdateAI(const uint32 diff)
@@ -113,7 +120,8 @@ struct TRINITY_DLL_DECL boss_maiden_of_griefAI : public ScriptedAI
{
DoScriptText(SAY_DEATH, m_creature);
- //Missing support for instance data (and door?)
+ if (pInstance)
+ pInstance->SetData(DATA_MAIDEN_OF_GRIEF_EVENT, DONE);
}
void KilledUnit(Unit *victim)
{
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_sjonnir.cpp b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_sjonnir.cpp
index 181ebdc2d30..70f2fc41f6c 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_sjonnir.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_sjonnir.cpp
@@ -10,61 +10,172 @@ Script Data End */
update creature_template set scriptname = 'boss_sjonnir' where entry = '';
*** SQL END ***/
#include "precompiled.h"
+#include "def_halls_of_stone.h"
-//Spells
-#define SPELL_LIGHTING_RING_1 50840 //Periodic Trigger (interval 2s) spell = 50841
-#define SPELL_LIGHTING_RING_2 51849 //Periodic Trigger (interval 2s) spell = 50841
-#define SPELL_LIGHTING_RING_2 59848 //Periodic Trigger (interval 2s) spell = 59849
-#define SPELL_LIGHTING_RING_3 59861 //Periodic Trigger (interval 2s) spell = 59849
-#define SPELL_STATIC_CHARGE_1 50834 //Periodic Trigger 2s interval, spell =50835
-#define SPELL_STATIC_CHARGE_2 59846 //Periodic Trigger 2s interval, spell =50847
-#define SPELL_CHAIN_LIGHTING_1 50830
-#define SPELL_CHAIN_LIGHTING_2 59844
-#define SPELL_LIGHTING_SHIELD_1 50831
-#define SPELL_LIGHTING_SHIELD_2 59845
-#define SPELL_FRENZY 28747
+enum Spells
+{
+ SPELL_LIGHTING_RING = 51849, //Periodic Trigger (interval 2s) spell = 50841
+ H_SPELL_LIGHTING_RING = 59861, //Periodic Trigger (interval 2s) spell = 59849
+ SPELL_LIGHTING_RING_1 = 50840, //Periodic Trigger (interval 2s) spell = 50841
+ H_SPELL_LIGHTING_RING_1 = 59848, //Periodic Trigger (interval 2s) spell = 59849
+ SPELL_STATIC_CHARGE = 50834, //Periodic Trigger 2s interval, spell =50835
+ H_SPELL_STATIC_CHARGE = 59846, //Periodic Trigger 2s interval, spell =50847
+ SPELL_CHAIN_LIGHTING = 50830,
+ H_SPELL_CHAIN_LIGHTING = 59844,
+ SPELL_LIGHTING_SHIELD = 50831,
+ H_SPELL_LIGHTING_SHIELD = 59845,
+ SPELL_FRENZY = 28747
+};
+
+enum Yells
+{
+ SAY_AGGRO = -1603011,
+ SAY_SLAY_1 = -1603012,
+ SAY_SLAY_2 = -1603013,
+ SAY_SLAY_3 = -1603014,
+ SAY_DEATH = -1603015
+};
+
+#define EMOTE_GENERIC_FRENZY -1000002
-//not in db
-//Yell
-#define SAY_AGGRO -1599011
-#define SAY_SLAY_1 -1599012
-#define SAY_SLAY_2 -1599013
-#define SAY_SLAY_3 -1599014
-#define SAY_DEATH -1599015
+enum Creatures
+{
+ CREATURE_FORGED_IRON_TROGG = 27979,
+ CREATURE_MALFORMED_OOZE = 27981,
+ CREATURE_FORGED_IRON_DWARF = 27982
+};
+
+struct Locations
+{
+ float x, y, z;
+};
+
+static Locations PipeLocations[] =
+{
+ {1295.44, 734.07, 200.3}, //left
+ {1297.7, 595.6, 199.9} //right
+};
struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI
{
- boss_sjonnirAI(Creature *c) : ScriptedAI(c) {}
+ boss_sjonnirAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = c->GetInstanceData();
+ }
+
+ bool bIsFrenzy;
+
+ uint32 uiChainLightningTimer;
+ uint32 uiLightningShieldTimer;
+ uint32 uiStaticChargeTimer;
+ uint32 uiLightningRingTimer;
+ uint32 uiSummonTimer;
+ uint32 uiFrenzyTimer;
+
+ ScriptedInstance* pInstance;
- void Reset() {}
+ void Reset()
+ {
+ bIsFrenzy = false;
+
+ uiChainLightningTimer = 3000 + rand()%5000;
+ uiLightningShieldTimer = 20000 + rand()%5000;
+ uiStaticChargeTimer = 20000 + rand()%5000;
+ uiLightningRingTimer = 30000 + rand()%5000;
+ uiSummonTimer = 5000;
+ uiFrenzyTimer = 300000; //5 minutes
+
+ if (pInstance)
+ pInstance->SetData(DATA_SJONNIR_EVENT, NOT_STARTED);
+ }
+
void EnterCombat(Unit* who)
{
DoScriptText(SAY_AGGRO, m_creature);
+
+ if (pInstance)
+ pInstance->SetData(DATA_SJONNIR_EVENT, IN_PROGRESS);
}
- void AttackStart(Unit* who) {}
- void MoveInLineOfSight(Unit* who) {}
+
void UpdateAI(const uint32 diff)
{
//Return since we have no target
if (!UpdateVictim())
return;
+
+ if (uiChainLightningTimer < diff)
+ {
+ Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
+ while (pTarget && pTarget->GetTypeId() != TYPEID_PLAYER)
+ pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
+ if (pTarget)
+ DoCast(pTarget, HeroicMode ? H_SPELL_CHAIN_LIGHTING : SPELL_CHAIN_LIGHTING);
+ uiChainLightningTimer = 10000 + rand()%5000;
+ } else uiChainLightningTimer -= diff;
+
+ if (uiLightningShieldTimer < diff)
+ {
+ DoCast(m_creature, HeroicMode ? H_SPELL_LIGHTING_SHIELD : SPELL_LIGHTING_SHIELD);
+ uiLightningShieldTimer -= diff;
+ }
+
+ if (uiStaticChargeTimer < diff)
+ {
+ DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_STATIC_CHARGE : SPELL_STATIC_CHARGE);
+ uiStaticChargeTimer = 20000 + rand()%5000;
+ } uiStaticChargeTimer -= diff;
+
+ if (uiLightningRingTimer < diff)
+ {
+ if (m_creature->IsNonMeleeSpellCasted(false))
+ m_creature->InterruptNonMeleeSpells(false);
+ DoCast(m_creature, HeroicMode ? H_SPELL_LIGHTING_RING : SPELL_LIGHTING_RING);
+ uiLightningRingTimer = 30000 + rand()%5000;
+ } else uiLightningRingTimer -= diff;
+
+ if (uiSummonTimer < diff)
+ {
+ uint32 uiSummonPipe = rand()%2;
+ m_creature->SummonCreature(RAND(CREATURE_FORGED_IRON_DWARF,CREATURE_FORGED_IRON_TROGG,CREATURE_MALFORMED_OOZE),
+ PipeLocations[uiSummonPipe].x, PipeLocations[uiSummonPipe].y, PipeLocations[uiSummonPipe].z, 0.0f,
+ TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
+ uiSummonTimer = 20000;
+ } else uiSummonTimer -= diff;
+
+ if (!bIsFrenzy)
+ {
+ if (uiFrenzyTimer < diff)
+ {
+ DoCast(m_creature, SPELL_FRENZY);
+ bIsFrenzy = true;
+ }
+ else uiFrenzyTimer -= diff;
+ }
DoMeleeAttackIfReady();
}
+
+ void JustSummoned(Creature* summon)
+ {
+ Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
+ while (pTarget && pTarget->GetTypeId() != TYPEID_PLAYER)
+ pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
+ if (pTarget)
+ summon->AI()->AttackStart(pTarget);
+ }
+
void JustDied(Unit* killer)
{
DoScriptText(SAY_DEATH, m_creature);
+
+ if (pInstance)
+ pInstance->SetData(DATA_SJONNIR_EVENT, DONE);
}
void KilledUnit(Unit *victim)
{
if (victim == m_creature)
return;
- switch(rand()%3)
- {
- case 0: DoScriptText(SAY_SLAY_1, m_creature);break;
- case 1: DoScriptText(SAY_SLAY_2, m_creature);break;
- case 2: DoScriptText(SAY_SLAY_3, m_creature);break;
- }
+ DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2,SAY_SLAY_3), m_creature);
}
};
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/def_halls_of_stone.h b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/def_halls_of_stone.h
index ade934ad921..0e5d59ae6d5 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/def_halls_of_stone.h
+++ b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/def_halls_of_stone.h
@@ -1,4 +1,24 @@
#ifndef DEF_HALLS_OF_STONE_H
#define DEF_HALLS_OF_STONE_H
-
+enum Data
+{
+ DATA_KRYSTALLUS_EVENT,
+ DATA_MAIDEN_OF_GRIEF_EVENT,
+ DATA_SJONNIR_EVENT,
+ DATA_BRANN_EVENT
+};
+enum Data64
+{
+ DATA_KRYSTALLUS,
+ DATA_MAIDEN_OF_GRIEF,
+ DATA_SJONNIR,
+ DATA_KADDRAK,
+ DATA_MARNAK,
+ DATA_ABEDNEUM,
+ DATA_GO_TRIBUNAL_CONSOLE,
+ DATA_GO_KADDRAK,
+ DATA_GO_MARNAK,
+ DATA_GO_ABEDNEUM,
+ DATA_GO_SKY_FLOOR
+};
#endif
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/halls_of_stone.cpp b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/halls_of_stone.cpp
new file mode 100644
index 00000000000..b0450e83dbb
--- /dev/null
+++ b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/halls_of_stone.cpp
@@ -0,0 +1,691 @@
+#include "precompiled.h"
+#include "escort_ai.h"
+#include "def_halls_of_stone.h"
+
+enum Texts
+{
+ SAY_KILL_1 = -1603012,
+ SAY_KILL_2 = -1603013,
+ SAY_KILL_3 = -1603014,
+ SAY_LOW_HEALTH = -1603015,
+ SAY_DEATH = -1603016,
+ SAY_PLAYER_DEATH_1 = -1603017,
+ SAY_PLAYER_DEATH_2 = -1603018,
+ SAY_PLAYER_DEATH_3 = -1603019,
+ SAY_ESCORT_START = -1603020,
+
+ SAY_SPAWN_DWARF = -1603021,
+ SAY_SPAWN_TROGG = -1603022,
+ SAY_SPAWN_OOZE = -1603023,
+ SAY_SPAWN_EARTHEN = -1603024,
+
+ SAY_EVENT_INTRO_1 = -1603025,
+ SAY_EVENT_INTRO_2 = -1603026,
+ SAY_EVENT_INTRO_3_ABED = -1603027,
+
+ SAY_EVENT_A_1 = -1603028,
+ SAY_EVENT_A_2_KADD = -1603029,
+ SAY_EVENT_A_3 = -1603030,
+
+ SAY_EVENT_B_1 = -1603031,
+ SAY_EVENT_B_2_MARN = -1603032,
+ SAY_EVENT_B_3 = -1603033,
+
+ SAY_EVENT_C_1 = -1603034,
+ SAY_EVENT_C_2_ABED = -1603035,
+ SAY_EVENT_C_3 = -1603036,
+
+ SAY_EVENT_D_1 = -1603037,
+ SAY_EVENT_D_2_ABED = -1603038,
+ SAY_EVENT_D_3 = -1603039,
+ SAY_EVENT_D_4_ABED = -1603040,
+
+ SAY_EVENT_END_01 = -1603041,
+ SAY_EVENT_END_02 = -1603042,
+ SAY_EVENT_END_03_ABED = -1603043,
+ SAY_EVENT_END_04 = -1603044,
+ SAY_EVENT_END_05_ABED = -1603045,
+ SAY_EVENT_END_06 = -1603046,
+ SAY_EVENT_END_07_ABED = -1603047,
+ SAY_EVENT_END_08 = -1603048,
+ SAY_EVENT_END_09_KADD = -1603049,
+ SAY_EVENT_END_10 = -1603050,
+ SAY_EVENT_END_11_KADD = -1603051,
+ SAY_EVENT_END_12 = -1603052,
+ SAY_EVENT_END_13_KADD = -1603053,
+ SAY_EVENT_END_14 = -1603054,
+ SAY_EVENT_END_15_MARN = -1603055,
+ SAY_EVENT_END_16 = -1603056,
+ SAY_EVENT_END_17_MARN = -1603057,
+ SAY_EVENT_END_18 = -1603058,
+ SAY_EVENT_END_19_MARN = -1603059,
+ SAY_EVENT_END_20 = -1603060,
+ SAY_EVENT_END_21_ABED = -1603061,
+
+ SAY_VICTORY_SJONNIR_1 = -1603062,
+ SAY_VICTORY_SJONNIR_2 = -1603063,
+
+ SAY_ENTRANCE_MEET = -1603064,
+
+ TEXT_ID_START = 13100,
+ TEXT_ID_PROGRESS = 13101
+};
+
+enum Creatures
+{
+ CREATURE_TRIBUNAL_OF_THE_AGES = 28234,
+ CREATURE_BRANN_BRONZEBEARD = 28070,
+ CREATURE_DARK_MATTER_TARGET = 28237,
+ CREATURE_SEARING_GAZE_TARGET = 28265,
+ CREATURE_DARK_RUNE_PROTECTOR = 27983,
+ CREATURE_DARK_RUNE_STORMCALLER = 27984,
+ CREATURE_IRON_GOLEM_CUSTODIAN = 27985,
+ CREATURE_KADDRAK = 30898
+};
+
+enum Spells
+{
+ SPELL_STEALTH = 58506,
+ //Kadrak
+ SPELL_GLARE_OF_THE_TRIBUNAL = 50988,
+ H_SPELL_GLARE_OF_THE_TRIBUNAL = 59868,
+ //Marnak
+ SPELL_DARK_MATTER = 51012,
+ H_SPELL_DARK_MATTER = 59868,
+ //Abedneum
+ SPELL_SEARING_GAZE = 51136,
+ H_SPELL_SEARING_GAZE = 59867
+};
+
+enum Quests
+{
+ QUEST_HALLS_OF_STONE = 13207
+};
+
+#define GOSSIP_ITEM_START "Brann, it would be our honor!"
+#define GOSSIP_ITEM_PROGRESS "Let's move Brann, enough of the history lessons!"
+
+struct Locations
+{
+ float x, y, z;
+};
+
+static Locations SpawnLocations[]=
+{
+ {946.992, 397.016, 208.374},
+ {960.748, 382.944, 208.374},
+};
+
+struct TRINITY_DLL_DECL mob_tribuna_controllerAI : public ScriptedAI
+{
+ mob_tribuna_controllerAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = c->GetInstanceData();
+ SetCombatMovement(false);
+ }
+
+ ScriptedInstance* pInstance;
+
+ uint32 uiKaddrakEncounterTimer;
+ uint32 uiMarnakEncounterTimer;
+ uint32 uiAbedneumEncounterTimer;
+
+ bool bKaddrakActivated;
+ bool bMarnakActivated;
+ bool bAbedneumActivated;
+
+ std::list<Creature*> lKaddrakGUIDList;
+
+ void Reset()
+ {
+ uiKaddrakEncounterTimer = 1500;
+ uiMarnakEncounterTimer = 10000;
+ uiAbedneumEncounterTimer = 10000;
+
+ bKaddrakActivated = false;
+ bMarnakActivated = false;
+ bAbedneumActivated = false;
+
+ lKaddrakGUIDList.clear();
+ }
+
+ void UpdateFacesList()
+ {
+ /*GetCreatureListWithEntryInGrid(lKaddrakGUIDList, m_creature, CREATURE_KADDRAK, 50.0f);
+ if (!lKaddrakGUIDList.empty())
+ {
+ uint32 uiPositionCounter = 0;
+ for(std::list<Creature*>::iterator itr = lKaddrakGUIDList.begin(); itr != lKaddrakGUIDList.end(); ++itr)
+ {
+ if ((*itr)->isAlive())
+ {
+ if (uiPositionCounter == 0)
+ {
+ (*itr)->GetMap()->CreatureRelocation((*itr), 927.265, 333.200, 218.780, (*itr)->GetOrientation());
+ (*itr)->SendMonsterMove(927.265, 333.200, 218.780, 0, (*itr)->GetMovementFlags(), 1);
+ }
+ else
+ {
+ (*itr)->GetMap()->CreatureRelocation((*itr), 921.745, 328.076, 218.780, (*itr)->GetOrientation());
+ (*itr)->SendMonsterMove(921.745, 328.076, 218.780, 0, (*itr)->GetMovementFlags(), 1);
+ }
+ }
+ ++uiPositionCounter;
+ }
+ }*/
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if(bKaddrakActivated)
+ {
+ if (uiKaddrakEncounterTimer < diff)
+ {
+ Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
+ while (pTarget && pTarget->GetTypeId() != TYPEID_PLAYER)
+ pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
+ if (pTarget && !lKaddrakGUIDList.empty())
+ for(std::list<Creature*>::iterator itr = lKaddrakGUIDList.begin(); itr != lKaddrakGUIDList.end(); ++itr)
+ if ((*itr)->isAlive())
+ (*itr)->CastSpell(pTarget, HeroicMode ? H_SPELL_GLARE_OF_THE_TRIBUNAL : SPELL_GLARE_OF_THE_TRIBUNAL, true);
+ uiKaddrakEncounterTimer = 1500;
+ } else uiKaddrakEncounterTimer -= diff;
+ }
+ if (bMarnakActivated)
+ {
+ if (uiMarnakEncounterTimer < diff)
+ {
+ Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
+ while (pTarget && pTarget->GetTypeId() != TYPEID_PLAYER)
+ pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
+ if (pTarget)
+ {
+ if (Creature* pSummon = m_creature->SummonCreature(CREATURE_DARK_MATTER_TARGET, pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 1000))
+ {
+ pSummon->SetDisplayId(11686);
+ pSummon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ pSummon->CastSpell(pTarget, HeroicMode ? H_SPELL_DARK_MATTER : SPELL_DARK_MATTER, true);
+ }
+ }
+ uiMarnakEncounterTimer = 30000 + rand()%1000;
+ } else uiMarnakEncounterTimer -= diff;
+ }
+ if (bAbedneumActivated)
+ {
+ if (uiAbedneumEncounterTimer < diff)
+ {
+ Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
+ while (pTarget && pTarget->GetTypeId() != TYPEID_PLAYER)
+ pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
+ if (pTarget)
+ {
+ if (Creature* pSummon = m_creature->SummonCreature(CREATURE_SEARING_GAZE_TARGET, pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 1000))
+ {
+ pSummon->SetDisplayId(11686);
+ pSummon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ pSummon->CastSpell(pTarget, HeroicMode ? H_SPELL_SEARING_GAZE : SPELL_SEARING_GAZE, true);
+ }
+ }
+ uiAbedneumEncounterTimer = 30000 + rand()%1000;
+ } else uiAbedneumEncounterTimer -= diff;
+ }
+ }
+};
+
+struct TRINITY_DLL_DECL npc_brann_hosAI : public npc_escortAI
+{
+ npc_brann_hosAI(Creature *c) : npc_escortAI(c)
+ {
+ pInstance = c->GetInstanceData();
+ }
+
+ uint32 uiStep;
+ uint32 uiPhaseTimer;
+
+ uint64 uiControllerGUID;
+ std::list<uint64> lDwarfGUIDList;
+
+ ScriptedInstance* pInstance;
+
+ bool bIsBattle;
+ bool bIsLowHP;
+
+ void Reset()
+ {
+ if (!IsBeingEscorted)
+ {
+ bIsLowHP = false;
+ bIsBattle = false;
+ uiStep = 0;
+ uiPhaseTimer = 0;
+ uiControllerGUID = 0;
+
+ DespawnDwarf();
+
+ if (pInstance)
+ pInstance->SetData(DATA_BRANN_EVENT, NOT_STARTED);
+ }
+ }
+
+ void DespawnDwarf()
+ {
+ if (lDwarfGUIDList.empty())
+ return;
+ for (std::list<uint64>::iterator itr = lDwarfGUIDList.begin(); itr != lDwarfGUIDList.end(); ++itr)
+ {
+ Creature* pTemp = Unit::GetCreature(*m_creature, pInstance ? (*itr) : 0);
+ if (pTemp && pTemp->isAlive())
+ pTemp->ForcedDespawn();
+ }
+ lDwarfGUIDList.clear();
+ }
+
+ void WaypointReached(uint32 uiPointId)
+ {
+ switch(uiPointId)
+ {
+ case 7:
+ if (Creature* pCreature = GetClosestCreatureWithEntry(m_creature, CREATURE_TRIBUNAL_OF_THE_AGES, 100.0f))
+ {
+ if (!pCreature->isAlive())
+ pCreature->Respawn();
+ ((mob_tribuna_controllerAI*)pCreature->AI())->UpdateFacesList();
+ uiControllerGUID = pCreature->GetGUID();
+ }
+ break;
+ case 13:
+ DoScriptText(SAY_EVENT_INTRO_1, m_creature);
+ IsOnHold = true;
+ SetRun(true);
+ JumpToNextStep(20000);
+ break;
+ case 17:
+ DoScriptText(SAY_EVENT_INTRO_2, m_creature);
+ if (pInstance)
+ pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_TRIBUNAL_CONSOLE),true);
+ m_creature->SetStandState(UNIT_STAND_STATE_KNEEL);
+ IsOnHold = true;
+ JumpToNextStep(8500);
+ break;
+ case 18:
+ IsOnHold = true;
+ break;
+ }
+ }
+
+ void SpawnDwarf(uint32 uiType)
+ {
+ switch(uiType)
+ {
+ case 1:
+ {
+ uint32 uiSpawnNumber = (HeroicMode ? 3 : 2);
+ for (uint8 i = 0; i < uiSpawnNumber; ++i)
+ m_creature->SummonCreature(CREATURE_DARK_RUNE_PROTECTOR, SpawnLocations[0].x, SpawnLocations[0].y, SpawnLocations[0].z, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
+ m_creature->SummonCreature(CREATURE_DARK_RUNE_STORMCALLER, SpawnLocations[0].x, SpawnLocations[0].y, SpawnLocations[0].z, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
+ break;
+ }
+ case 2:
+ for (uint8 i = 0; i < 2; ++i)
+ m_creature->SummonCreature(CREATURE_DARK_RUNE_STORMCALLER, SpawnLocations[1].x, SpawnLocations[1].y, SpawnLocations[1].z, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
+ break;
+ case 3:
+ m_creature->SummonCreature(CREATURE_IRON_GOLEM_CUSTODIAN, SpawnLocations[1].x, SpawnLocations[1].y, SpawnLocations[1].z, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
+ break;
+ }
+ }
+
+ void JustSummoned(Creature* pSummoned)
+ {
+ lDwarfGUIDList.push_back(pSummoned->GetGUID());
+ pSummoned->AddThreat(m_creature, 0.0f);
+ pSummoned->AI()->AttackStart(m_creature);
+ }
+
+ void JumpToNextStep(uint32 uiTimer)
+ {
+ uiPhaseTimer = uiTimer;
+ uiStep++;
+ }
+
+ void StartWP()
+ {
+ m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ IsOnHold = false;
+ uiStep = 1;
+ }
+
+ void UpdateEscortAI(const uint32 uiDiff)
+ {
+ if (uiPhaseTimer < uiDiff)
+ {
+ switch(uiStep)
+ {
+ case 1:
+ if (pInstance)
+ {
+ if (pInstance->GetData(DATA_BRANN_EVENT) != NOT_STARTED)
+ return;
+ pInstance->SetData(DATA_BRANN_EVENT, IN_PROGRESS);
+ }
+ bIsBattle = false;
+ DoScriptText(SAY_ESCORT_START, m_creature);
+ JumpToNextStep(0);
+ break;
+ case 3:
+ IsOnHold = false;
+ JumpToNextStep(0);
+ break;
+ case 5:
+ if (pInstance)
+ if (Creature* pTemp = (Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM))))
+ DoScriptText(SAY_EVENT_INTRO_3_ABED, pTemp);
+ JumpToNextStep(8500);
+ break;
+ case 6:
+ DoScriptText(SAY_EVENT_A_1, m_creature);
+ JumpToNextStep(6500);
+ break;
+ case 7:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_KADDRAK)))
+ DoScriptText(SAY_EVENT_A_2_KADD, pTemp);
+ JumpToNextStep(12500);
+ break;
+ case 8:
+ DoScriptText(SAY_EVENT_A_3, m_creature);
+ if (pInstance)
+ pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_KADDRAK),true);
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, uiControllerGUID))
+ ((mob_tribuna_controllerAI*)pTemp->AI())->bKaddrakActivated = true;
+ JumpToNextStep(5000);
+ break;
+ case 9:
+ SpawnDwarf(1);
+ JumpToNextStep(20000);
+ break;
+ case 10:
+ DoScriptText(SAY_EVENT_B_1, m_creature);
+ JumpToNextStep(6000);
+ break;
+ case 11:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_MARNAK)))
+ DoScriptText(SAY_EVENT_B_2_MARN, pTemp);
+ SpawnDwarf(1);
+ JumpToNextStep(20000);
+ break;
+ case 12:
+ DoScriptText(SAY_EVENT_B_3, m_creature);
+ if (pInstance)
+ pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_MARNAK),true);
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, uiControllerGUID))
+ ((mob_tribuna_controllerAI*)pTemp->AI())->bMarnakActivated = true;
+ JumpToNextStep(10000);
+ break;
+ case 13:
+ SpawnDwarf(1);
+ JumpToNextStep(10000);
+ break;
+ case 14:
+ SpawnDwarf(2);
+ JumpToNextStep(20000);
+ break;
+ case 15:
+ DoScriptText(SAY_EVENT_C_1, m_creature);
+ SpawnDwarf(1);
+ JumpToNextStep(10000);
+ break;
+ case 16:
+ SpawnDwarf(2);
+ JumpToNextStep(20000);
+ break;
+ case 17:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))
+ DoScriptText(SAY_EVENT_C_2_ABED, pTemp);
+ SpawnDwarf(1);
+ JumpToNextStep(20000);
+ break;
+ case 18:
+ DoScriptText(SAY_EVENT_C_3, m_creature);
+ if (pInstance)
+ pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_ABEDNEUM),true);
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, uiControllerGUID))
+ ((mob_tribuna_controllerAI*)pTemp->AI())->bAbedneumActivated = true;
+ JumpToNextStep(5000);
+ break;
+ case 19:
+ SpawnDwarf(2);
+ JumpToNextStep(10000);
+ break;
+ case 20:
+ SpawnDwarf(1);
+ JumpToNextStep(15000);
+ break;
+ case 21:
+ DoScriptText(SAY_EVENT_D_1, m_creature);
+ SpawnDwarf(3);
+ JumpToNextStep(20000);
+ break;
+ case 22:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))
+ DoScriptText(SAY_EVENT_D_2_ABED, pTemp);
+ SpawnDwarf(1);
+ JumpToNextStep(5000);
+ break;
+ case 23:
+ SpawnDwarf(2);
+ JumpToNextStep(15000);
+ break;
+ case 24:
+ DoScriptText(SAY_EVENT_D_3, m_creature);
+ SpawnDwarf(3);
+ JumpToNextStep(5000);
+ break;
+ case 25:
+ SpawnDwarf(1);
+ JumpToNextStep(5000);
+ break;
+ case 26:
+ SpawnDwarf(2);
+ JumpToNextStep(10000);
+ break;
+ case 27:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))
+ DoScriptText(SAY_EVENT_D_4_ABED, pTemp);
+ SpawnDwarf(1);
+ JumpToNextStep(10000);
+ break;
+ case 28:
+ DoScriptText(SAY_EVENT_END_01, m_creature);
+ m_creature->SetStandState(UNIT_STAND_STATE_STAND);
+ if (pInstance)
+ pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_SKY_FLOOR),true);
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, uiControllerGUID))
+ pTemp->DealDamage(pTemp, pTemp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ bIsBattle = true;
+ IsOnHold = false;
+ JumpToNextStep(6500);
+ break;
+ case 29:
+ DoScriptText(SAY_EVENT_END_02, m_creature);
+ JumpToNextStep(5500);
+ break;
+ case 30:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))
+ DoScriptText(SAY_EVENT_END_03_ABED, pTemp);
+ JumpToNextStep(8500);
+ break;
+ case 31:
+ DoScriptText(SAY_EVENT_END_04, m_creature);
+ JumpToNextStep(11500);
+ break;
+ case 32:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))
+ DoScriptText(SAY_EVENT_END_05_ABED, pTemp);
+ JumpToNextStep(11500);
+ break;
+ case 33:
+ DoScriptText(SAY_EVENT_END_06, m_creature);
+ JumpToNextStep(4500);
+ break;
+ case 34:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))
+ DoScriptText(SAY_EVENT_END_07_ABED, pTemp);
+ JumpToNextStep(22500);
+ break;
+ case 35:
+ DoScriptText(SAY_EVENT_END_08, m_creature);
+ JumpToNextStep(7500);
+ break;
+ case 36:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_KADDRAK)))
+ DoScriptText(SAY_EVENT_END_09_KADD, pTemp);
+ JumpToNextStep(18500);
+ break;
+ case 37:
+ DoScriptText(SAY_EVENT_END_10, m_creature);
+ JumpToNextStep(5500);
+ break;
+ case 38:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_KADDRAK)))
+ DoScriptText(SAY_EVENT_END_11_KADD, pTemp);
+ JumpToNextStep(20500);
+ break;
+ case 39:
+ DoScriptText(SAY_EVENT_END_12, m_creature);
+ JumpToNextStep(2500);
+ break;
+ case 40:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_KADDRAK)))
+ DoScriptText(SAY_EVENT_END_13_KADD, pTemp);
+ JumpToNextStep(19500);
+ break;
+ case 41:
+ DoScriptText(SAY_EVENT_END_14, m_creature);
+ JumpToNextStep(10500);
+ break;
+ case 42:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_MARNAK)))
+ DoScriptText(SAY_EVENT_END_15_MARN, pTemp);
+ JumpToNextStep(6500);
+ break;
+ case 43:
+ DoScriptText(SAY_EVENT_END_16, m_creature);
+ JumpToNextStep(6500);
+ break;
+ case 44:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_MARNAK)))
+ DoScriptText(SAY_EVENT_END_17_MARN, pTemp);
+ JumpToNextStep(25500);
+ break;
+ case 45:
+ DoScriptText(SAY_EVENT_END_18, m_creature);
+ JumpToNextStep(23500);
+ break;
+ case 46:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_MARNAK)))
+ DoScriptText(SAY_EVENT_END_19_MARN, pTemp);
+ JumpToNextStep(3500);
+ break;
+ case 47:
+ DoScriptText(SAY_EVENT_END_20, m_creature);
+ JumpToNextStep(8500);
+ break;
+ case 48:
+ if (pInstance)
+ if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))
+ DoScriptText(SAY_EVENT_END_21_ABED, pTemp);
+ JumpToNextStep(5500);
+ break;
+ case 49:
+ {
+ if (pInstance)
+ {
+ pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_KADDRAK),true);
+ pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_MARNAK),true);
+ pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_ABEDNEUM),true);
+ pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_SKY_FLOOR),true);
+ pInstance->SetData(DATA_BRANN_EVENT, DONE);
+ }
+ Player* pPlayer = GetPlayerForEscort();
+ if (pPlayer)
+ pPlayer->GroupEventHappens(QUEST_HALLS_OF_STONE, m_creature);
+ m_creature->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ m_creature->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+ JumpToNextStep(180000);
+ break;
+ }
+ case 50:
+ IsOnHold = false;
+ break;
+ }
+ } else uiPhaseTimer -= uiDiff;
+
+ if (!bIsLowHP && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 30)
+ {
+ DoScriptText(SAY_LOW_HEALTH, m_creature);
+ bIsLowHP = true;
+ } else if (bIsLowHP && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) > 30)
+ bIsLowHP = false;
+ }
+};
+
+bool GossipHello_npc_brann_hos(Player* pPlayer, Creature* pCreature)
+{
+ if (pCreature->isQuestGiver())
+ pPlayer->PrepareQuestMenu(pCreature->GetGUID());
+
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_START, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ pPlayer->SEND_GOSSIP_MENU(TEXT_ID_START, pCreature->GetGUID());
+}
+
+bool GossipSelect_npc_brann_hos(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
+{
+ if (uiAction == GOSSIP_ACTION_INFO_DEF+1 || uiAction == GOSSIP_ACTION_INFO_DEF+2)
+ {
+ pPlayer->CLOSE_GOSSIP_MENU();
+ ((npc_brann_hosAI*)pCreature->AI())->StartWP();
+ }
+
+ return true;
+}
+
+CreatureAI* GetAI_mob_tribuna_controller(Creature* pCreature)
+{
+ return new mob_tribuna_controllerAI(pCreature);
+}
+
+CreatureAI* GetAI_npc_brann_hos(Creature* pCreature)
+{
+ return new npc_brann_hosAI(pCreature);
+}
+
+void AddSC_halls_of_stone()
+{
+ Script *newscript;
+
+ newscript = new Script;
+ newscript->Name = "npc_brann_hos";
+ newscript->GetAI = &GetAI_npc_brann_hos;
+ newscript->pGossipHello = &GossipHello_npc_brann_hos;
+ newscript->pGossipSelect = &GossipSelect_npc_brann_hos;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "mob_tribuna_controller";
+ newscript->GetAI = &GetAI_mob_tribuna_controller;
+ newscript->RegisterSelf();
+} \ No newline at end of file
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/instance_halls_of_stone.cpp b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/instance_halls_of_stone.cpp
index fa2dd83637f..44872cede03 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/instance_halls_of_stone.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/instance_halls_of_stone.cpp
@@ -1,9 +1,232 @@
#include "precompiled.h"
#include "def_halls_of_stone.h"
+#define MAX_ENCOUNTER 4
+
+/* Halls of Stone encounters:
+0- Krystallus
+1- Maiden of Grief
+2- Escort Event
+3- Sjonnir The Ironshaper
+*/
+
struct TRINITY_DLL_DECL instance_halls_of_stone : public ScriptedInstance
{
instance_halls_of_stone(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
+
+ uint64 uiMaidenOfGrief;
+ uint64 uiKrystallus;
+ uint64 uiSjonnir;
+
+ uint64 uiKaddrak;
+ uint64 uiAbedneum;
+ uint64 uiMarnak;
+ uint64 uiBrann;
+
+ uint64 uiMaidenOfGriefDoor;
+ uint64 uiSjonnirDoor;
+ uint64 uiBrannDoor;
+ uint64 uiTribunalConsole;
+ uint64 uiTribunalChest;
+ uint64 uiTribunalSkyFloor;
+ uint64 uiKaddrakGo;
+ uint64 uiAbedneumGo;
+ uint64 uiMarnakGo;
+
+ uint32 m_auiEncounter[MAX_ENCOUNTER];
+
+ std::string str_data;
+
+ void Initialize()
+ {
+ uiMaidenOfGrief = 0;
+ uiKrystallus = 0;
+ uiSjonnir = 0;
+
+ uiKaddrak = 0;
+ uiMarnak = 0;
+ uiAbedneum = 0;
+ uiBrann = 0;
+
+ uiMaidenOfGriefDoor = 0;
+ uiSjonnirDoor = 0;
+ uiBrannDoor = 0;
+ uiKaddrakGo = 0;
+ uiMarnakGo = 0;
+ uiAbedneumGo = 0;
+ uiTribunalConsole = 0;
+ uiTribunalChest = 0;
+ uiTribunalSkyFloor = 0;
+
+ for(uint8 i = 0; i < MAX_ENCOUNTER; ++i)
+ m_auiEncounter[i] = NOT_STARTED;
+ }
+
+ void OnCreatureCreate(Creature* pCreature, bool add)
+ {
+ switch(pCreature->GetEntry())
+ {
+ case 27975: uiMaidenOfGrief = pCreature->GetGUID(); break;
+ case 27977: uiKrystallus = pCreature->GetGUID(); break;
+ case 27978: uiSjonnir = pCreature->GetGUID(); break;
+ case 30897: uiMarnak = pCreature->GetGUID(); break;
+ case 30898: uiKaddrak = pCreature->GetGUID(); break;
+ case 30099: uiAbedneum = pCreature->GetGUID(); break;
+ case 28070: uiBrann = pCreature->GetGUID(); break;
+ }
+ }
+
+ void OnGameObjectCreate(GameObject* pGo, bool add)
+ {
+ switch(pGo->GetEntry())
+ {
+ case 191669:
+ uiAbedneumGo = pGo->GetGUID();
+ break;
+ case 192170:
+ uiMarnakGo = pGo->GetGUID();
+ break;
+ case 192171:
+ uiKaddrakGo = pGo->GetGUID();
+ break;
+ case 191292:
+ uiMaidenOfGriefDoor = pGo->GetGUID();
+ if (m_auiEncounter[0] == DONE)
+ pGo->SetGoState(GO_STATE_ACTIVE);
+ else
+ pGo->SetGoState(GO_STATE_READY);
+ break;
+ case 191295:
+ uiBrannDoor = pGo->GetGUID();
+ if (m_auiEncounter[1] == DONE)
+ pGo->SetGoState(GO_STATE_ACTIVE);
+ else
+ pGo->SetGoState(GO_STATE_READY);
+ break;
+ case 191296:
+ uiSjonnirDoor = pGo->GetGUID();
+ if (m_auiEncounter[2] == DONE)
+ pGo->SetGoState(GO_STATE_ACTIVE);
+ else
+ pGo->SetGoState(GO_STATE_READY);
+ break;
+ case 193907:
+ uiTribunalConsole = pGo->GetGUID();
+ break;
+ case 190586:
+ uiTribunalChest = pGo->GetGUID();
+ break;
+ case 191527:
+ uiTribunalSkyFloor = pGo->GetGUID();
+ break;
+ }
+ }
+
+ void SetData(uint32 type, uint32 data)
+ {
+ switch(type)
+ {
+ case DATA_MAIDEN_OF_GRIEF_EVENT:
+ m_auiEncounter[1] = data;
+ if (m_auiEncounter[1] == DONE)
+ HandleGameObject(uiBrannDoor,true);
+ break;
+ case DATA_KRYSTALLUS_EVENT:
+ m_auiEncounter[0] = data;
+ if (m_auiEncounter[0] == DONE)
+ HandleGameObject(uiMaidenOfGriefDoor,true);
+ break;
+ case DATA_SJONNIR_EVENT:
+ m_auiEncounter[3] = data;
+ break;
+ case DATA_BRANN_EVENT:
+ m_auiEncounter[2] = data;
+ if (m_auiEncounter[2] == DONE)
+ HandleGameObject(uiSjonnirDoor,true);
+ break;
+ }
+
+ if (data == DONE)
+ SaveToDB();
+ }
+
+ uint32 GetData(uint32 type)
+ {
+ switch(type)
+ {
+ case DATA_MAIDEN_OF_GRIEF_EVENT: return m_auiEncounter[0];
+ case DATA_KRYSTALLUS_EVENT: return m_auiEncounter[1];
+ case DATA_SJONNIR_EVENT: return m_auiEncounter[2];
+ case DATA_BRANN_EVENT: return m_auiEncounter[3];
+ }
+
+ return 0;
+ }
+
+ uint64 GetData64(uint32 identifier)
+ {
+ switch(identifier)
+ {
+ case DATA_MAIDEN_OF_GRIEF: return uiMaidenOfGrief;
+ case DATA_KRYSTALLUS: return uiKrystallus;
+ case DATA_SJONNIR: return uiSjonnir;
+ case DATA_KADDRAK: return uiKaddrak;
+ case DATA_MARNAK: return uiMarnak;
+ case DATA_ABEDNEUM: return uiAbedneum;
+ case DATA_GO_TRIBUNAL_CONSOLE: return uiTribunalConsole;
+ case DATA_GO_KADDRAK: return uiKaddrakGo;
+ case DATA_GO_ABEDNEUM: return uiAbedneumGo;
+ case DATA_GO_MARNAK: return uiMarnakGo;
+ case DATA_GO_SKY_FLOOR: return uiTribunalSkyFloor;
+ }
+
+ return 0;
+ }
+
+ std::string GetSaveData()
+ {
+ OUT_SAVE_INST_DATA;
+
+ std::ostringstream saveStream;
+ saveStream << "H S " << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3];
+
+ str_data = saveStream.str();
+
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return str_data;
+ }
+
+ void Load(const char* in)
+ {
+ if (!in)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
+
+ OUT_LOAD_INST_DATA(in);
+
+ char dataHead1, dataHead2;
+ uint16 data0, data1, data2, data3;
+
+ std::istringstream loadStream(in);
+ loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3;
+
+ if (dataHead1 == 'H' && dataHead2 == 'S')
+ {
+ m_auiEncounter[0] = data0;
+ m_auiEncounter[1] = data1;
+ m_auiEncounter[2] = data2;
+ m_auiEncounter[3] = data3;
+
+ for(uint8 i = 0; i < MAX_ENCOUNTER; ++i)
+ if (m_auiEncounter[i] == IN_PROGRESS)
+ m_auiEncounter[i] = NOT_STARTED;
+
+ } else OUT_LOAD_INST_DATA_FAIL;
+
+ OUT_LOAD_INST_DATA_COMPLETE;
+ }
};
InstanceData* GetInstanceData_instance_halls_of_stone(Map* pMap)
diff --git a/src/bindings/scripts/system/ScriptLoader.cpp b/src/bindings/scripts/system/ScriptLoader.cpp
index 8c06c9206b7..977cb40c45a 100644
--- a/src/bindings/scripts/system/ScriptLoader.cpp
+++ b/src/bindings/scripts/system/ScriptLoader.cpp
@@ -267,8 +267,9 @@ extern void AddSC_boss_drakkari_colossus();
extern void AddSC_boss_gal_darah();
extern void AddSC_boss_eck();
extern void AddSC_instance_gundrak();
+extern void AddSC_boss_krik_thir(); //Azjol-Nerub
+extern void AddSC_instance_azjol_nerub();
extern void AddSC_instance_ahnkahet(); //Azjol-Nerub Ahn'kahet
-extern void AddSC_boss_krik_thir();
extern void AddSC_boss_taldaram();
extern void AddSC_boss_elder_nadox();
extern void AddSC_boss_volazj();
@@ -301,6 +302,10 @@ extern void AddSC_boss_ionar();
extern void AddSC_boss_volkhan();
extern void AddSC_instance_halls_of_lightning();
extern void AddSC_boss_maiden_of_grief(); //Ulduar Halls of Stone
+extern void AddSC_boss_krystallus();
+extern void AddSC_boss_sjonnir();
+extern void AddSC_instance_halls_of_stone();
+extern void AddSC_halls_of_stone();
extern void AddSC_boss_auriaya(); //Ulduar Ulduar
extern void AddSC_boss_flame_leviathan();
extern void AddSC_boss_ignis();
@@ -685,7 +690,8 @@ void AddScripts()
AddSC_boss_elder_nadox();
AddSC_boss_volazj();
AddSC_instance_ahnkahet();
- AddSC_boss_krik_thir(); //Azjol-Nerub Azjol-Nerub
+ AddSC_boss_krik_thir(); //Azjol-Nerub Azjol-Nerub
+ AddSC_instance_azjol_nerub();
AddSC_boss_anubrekhan(); //Naxxramas
AddSC_boss_maexxna();
AddSC_boss_patchwerk();
@@ -715,6 +721,10 @@ void AddScripts()
AddSC_boss_volkhan();
AddSC_instance_halls_of_lightning();
AddSC_boss_maiden_of_grief(); //Ulduar Halls of Stone
+ AddSC_boss_krystallus();
+ AddSC_boss_sjonnir();
+ AddSC_instance_halls_of_stone();
+ AddSC_halls_of_stone();
AddSC_boss_auriaya(); //Ulduar Ulduar
AddSC_boss_flame_leviathan();
AddSC_boss_ignis();