aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp23
-rw-r--r--src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp91
-rw-r--r--src/bindings/scripts/scripts/zone/gruuls_lair/instance_gruuls_lair.cpp67
3 files changed, 104 insertions, 77 deletions
diff --git a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp
index e6f12fd852b..a651c117d7a 100644
--- a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp
+++ b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp
@@ -77,14 +77,7 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
Reverberation_Timer= 60000+45000;
if(pInstance)
- {
pInstance->SetData(DATA_GRUULEVENT, NOT_STARTED);
-
- GameObject* Door = NULL;
- Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GRUULDOOR));
- if(Door)
- Door->SetGoState(0);
- }
}
void JustDied(Unit* Killer)
@@ -92,14 +85,7 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
DoScriptText(SAY_DEATH, m_creature);
if(pInstance)
- {
- pInstance->SetData(DATA_GRUULEVENT, DONE);
-
- GameObject* Door = NULL;
- Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GRUULDOOR));
- if(Door)
- Door->SetGoState(0);
- }
+ pInstance->SetData(DATA_GRUULEVENT, DONE);
}
void Aggro(Unit *who)
@@ -108,14 +94,7 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
DoZoneInCombat();
if(pInstance)
- {
pInstance->SetData(DATA_GRUULEVENT, IN_PROGRESS);
-
- GameObject* Door = NULL;
- Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GRUULDOOR));
- if(Door)
- Door->SetGoState(1);
- }
}
void KilledUnit()
diff --git a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp
index cb20e606800..bf6d62c8f84 100644
--- a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp
+++ b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp
@@ -65,6 +65,44 @@ EndScriptData */
#define SPELL_SPELLSHIELD 33054
#define SPELL_BLAST_WAVE 33061
+bool AllBossDied(ScriptedInstance* pInstance, Creature* m_creature)
+{
+ if(!pInstance || !m_creature)
+ return false;
+
+ uint64 MaulgarGUID = 0;
+ uint64 KigglerGUID = 0;
+ uint64 BlindeyeGUID = 0;
+ uint64 OlmGUID = 0;
+ uint64 KroshGUID = 0;
+
+ Creature* Maulgar = NULL;
+ Creature* Kiggler = NULL;
+ Creature* Blindeye = NULL;
+ Creature* Olm = NULL;
+ Creature* Krosh = NULL;
+
+ MaulgarGUID = pInstance->GetData64(DATA_MAULGAR);
+ KigglerGUID = pInstance->GetData64(DATA_KIGGLERTHECRAZED);
+ BlindeyeGUID = pInstance->GetData64(DATA_BLINDEYETHESEER);
+ OlmGUID = pInstance->GetData64(DATA_OLMTHESUMMONER);
+ KroshGUID = pInstance->GetData64(DATA_KROSHFIREHAND);
+
+ Maulgar = ((Creature*)Unit::GetUnit((*m_creature), MaulgarGUID));
+ Kiggler = ((Creature*)Unit::GetUnit((*m_creature), KigglerGUID));
+ Blindeye = ((Creature*)Unit::GetUnit((*m_creature), BlindeyeGUID));
+ Olm = ((Creature*)Unit::GetUnit((*m_creature), OlmGUID));
+ Krosh = ((Creature*)Unit::GetUnit((*m_creature), KroshGUID));
+
+ if(!Maulgar || !Kiggler || !Blindeye || !Olm || !Krosh)
+ return false;
+
+ if(!Maulgar->isAlive() && !Kiggler->isAlive() && !Blindeye->isAlive() && !Olm->isAlive() && !Krosh->isAlive())
+ return true;
+
+ return false;
+}
+
//High King Maulgar AI
struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
{
@@ -132,15 +170,8 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
{
DoScriptText(SAY_DEATH, m_creature);
- if (pInstance)
- {
+ if(CheckAllBossDied(pInstance, m_creature))
pInstance->SetData(DATA_MAULGAREVENT, DONE);
-
- GameObject* Door = NULL;
- Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_MAULGARDOOR));
- if(Door)
- Door->SetGoState(0);
- }
}
void AddDeath()
@@ -301,17 +332,20 @@ struct TRINITY_DLL_DECL boss_olm_the_summonerAI : public ScriptedAI
}
}
- void JustDied(Unit* Killer)
- {
- if(pInstance)
+ void JustDied(Unit* Killer)
+ {
+ if(pInstance)
{
Creature *Maulgar = NULL;
Maulgar = (Creature*)(Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_MAULGAR)));
if(Maulgar)
((boss_high_king_maulgarAI*)Maulgar->AI())->AddDeath();
+
+ if(CheckAllBossDied(pInstance, m_creature))
+ pInstance->SetData(DATA_MAULGAREVENT, DONE);
}
- }
+ }
void UpdateAI(const uint32 diff)
{
@@ -402,17 +436,20 @@ struct TRINITY_DLL_DECL boss_kiggler_the_crazedAI : public ScriptedAI
}
}
- void JustDied(Unit* Killer)
- {
- if(pInstance)
+ void JustDied(Unit* Killer)
+ {
+ if(pInstance)
{
Creature *Maulgar = NULL;
Maulgar = (Creature*)(Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_MAULGAR)));
if(Maulgar)
((boss_high_king_maulgarAI*)Maulgar->AI())->AddDeath();
+
+ if(CheckAllBossDied(pInstance, m_creature))
+ pInstance->SetData(DATA_MAULGAREVENT, DONE);
}
- }
+ }
void UpdateAI(const uint32 diff)
{
@@ -505,17 +542,20 @@ struct TRINITY_DLL_DECL boss_blindeye_the_seerAI : public ScriptedAI
}
}
- void JustDied(Unit* Killer)
- {
- if(pInstance)
+ void JustDied(Unit* Killer)
+ {
+ if(pInstance)
{
Creature *Maulgar = NULL;
Maulgar = (Creature*)(Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_MAULGAR)));
if(Maulgar)
((boss_high_king_maulgarAI*)Maulgar->AI())->AddDeath();
+
+ if(CheckAllBossDied(pInstance, m_creature))
+ pInstance->SetData(DATA_MAULGAREVENT, DONE);
}
- }
+ }
void UpdateAI(const uint32 diff)
{
@@ -593,17 +633,20 @@ struct TRINITY_DLL_DECL boss_krosh_firehandAI : public ScriptedAI
}
}
- void JustDied(Unit* Killer)
- {
- if(pInstance)
+ void JustDied(Unit* Killer)
+ {
+ if(pInstance)
{
Creature *Maulgar = NULL;
Maulgar = (Creature*)(Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_MAULGAR)));
if(Maulgar)
((boss_high_king_maulgarAI*)Maulgar->AI())->AddDeath();
+
+ if(CheckAllBossDied(pInstance, m_creature))
+ pInstance->SetData(DATA_MAULGAREVENT, DONE);
}
- }
+ }
void UpdateAI(const uint32 diff)
{
diff --git a/src/bindings/scripts/scripts/zone/gruuls_lair/instance_gruuls_lair.cpp b/src/bindings/scripts/scripts/zone/gruuls_lair/instance_gruuls_lair.cpp
index 61c7e71ea2a..61997f07e8b 100644
--- a/src/bindings/scripts/scripts/zone/gruuls_lair/instance_gruuls_lair.cpp
+++ b/src/bindings/scripts/scripts/zone/gruuls_lair/instance_gruuls_lair.cpp
@@ -42,10 +42,10 @@ struct TRINITY_DLL_DECL instance_gruuls_lair : public ScriptedInstance
uint64 BlindeyeTheSeer;
uint64 OlmTheSummoner;
uint64 KroshFirehand;
- uint64 Maulgar;
+ uint64 Maulgar;
- uint64 MaulgarDoor;
- uint64 GruulDoor;
+ uint64 MaulgarDoor;
+ uint64 GruulDoor;
void Initialize()
{
@@ -54,11 +54,10 @@ struct TRINITY_DLL_DECL instance_gruuls_lair : public ScriptedInstance
BlindeyeTheSeer = 0;
OlmTheSummoner = 0;
KroshFirehand = 0;
- Maulgar = 0;
-
- MaulgarDoor = 0;
- GruulDoor = 0;
+ Maulgar = 0;
+ MaulgarDoor = 0;
+ GruulDoor = 0;
for(uint8 i = 0; i < ENCOUNTERS; i++)
Encounters[i] = NOT_STARTED;
@@ -77,21 +76,24 @@ struct TRINITY_DLL_DECL instance_gruuls_lair : public ScriptedInstance
switch(creature_entry)
{
case 18835: KigglerTheCrazed = creature->GetGUID(); break;
- case 18836: BlindeyeTheSeer = creature->GetGUID(); break;
- case 18834: OlmTheSummoner = creature->GetGUID(); break;
- case 18832: KroshFirehand = creature->GetGUID(); break;
- case 18831: Maulgar = creature->GetGUID();break;
+ case 18836: BlindeyeTheSeer = creature->GetGUID(); break;
+ case 18834: OlmTheSummoner = creature->GetGUID(); break;
+ case 18832: KroshFirehand = creature->GetGUID(); break;
+ case 18831: Maulgar = creature->GetGUID(); break;
}
}
- void OnObjectCreate(GameObject* go)
+ void OnObjectCreate(GameObject* go)
{
- switch(go->GetEntry())
- {
- case 184468: MaulgarDoor = go->GetGUID();break;
- case 184662: GruulDoor = go->GetGUID();break;
- }
- }
+ switch(go->GetEntry())
+ {
+ case 184468:
+ MaulgarDoor = go->GetGUID();
+ if(Encounters[0] == DONE) HandleGameObject(NULL, true, go);
+ break;
+ case 184662: GruulDoor = go->GetGUID(); break;
+ }
+ }
void SetData64(uint32 type, uint64 data)
{
@@ -103,14 +105,14 @@ struct TRINITY_DLL_DECL instance_gruuls_lair : public ScriptedInstance
{
switch(identifier)
{
- case DATA_MAULGAREVENT_TANK: return MaulgarEvent_Tank;
- case DATA_KIGGLERTHECRAZED: return KigglerTheCrazed;
- case DATA_BLINDEYETHESEER: return BlindeyeTheSeer;
- case DATA_OLMTHESUMMONER: return OlmTheSummoner;
- case DATA_KROSHFIREHAND: return KroshFirehand;
- case DATA_MAULGARDOOR: return MaulgarDoor;
- case DATA_GRUULDOOR: return GruulDoor;
- case DATA_MAULGAR: return Maulgar;
+ case DATA_MAULGAREVENT_TANK: return MaulgarEvent_Tank;
+ case DATA_KIGGLERTHECRAZED: return KigglerTheCrazed;
+ case DATA_BLINDEYETHESEER: return BlindeyeTheSeer;
+ case DATA_OLMTHESUMMONER: return OlmTheSummoner;
+ case DATA_KROSHFIREHAND: return KroshFirehand;
+ case DATA_MAULGARDOOR: return MaulgarDoor;
+ case DATA_GRUULDOOR: return GruulDoor;
+ case DATA_MAULGAR: return Maulgar;
}
return 0;
}
@@ -120,13 +122,16 @@ struct TRINITY_DLL_DECL instance_gruuls_lair : public ScriptedInstance
switch(type)
{
case DATA_MAULGAREVENT:
+ if(data == DONE) HandleGameObject(MaulgarDoor, true);
Encounters[0] = data; break;
case DATA_GRUULEVENT:
+ if(data == IN_PROGRESS) HandleGameObject(GruulDoor, true);
+ else HandleGameObject(GruulDoor, false);
Encounters[1] = data; break;
}
- if(data == DONE)
- SaveToDB();
+ if(data == DONE)
+ SaveToDB();
}
uint32 GetData(uint32 type)
@@ -134,13 +139,12 @@ struct TRINITY_DLL_DECL instance_gruuls_lair : public ScriptedInstance
switch(type)
{
case DATA_MAULGAREVENT: return Encounters[0];
- case DATA_GRUULEVENT: return Encounters[1];
+ case DATA_GRUULEVENT: return Encounters[1];
}
return 0;
}
-
- const char* Save()
+ const char* Save()
{
OUT_SAVE_INST_DATA;
std::ostringstream stream;
@@ -173,6 +177,7 @@ struct TRINITY_DLL_DECL instance_gruuls_lair : public ScriptedInstance
OUT_LOAD_INST_DATA_COMPLETE;
}
};
+
InstanceData* GetInstanceData_instance_gruuls_lair(Map* map)
{
return new instance_gruuls_lair(map);