aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp3
-rw-r--r--src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp115
-rw-r--r--src/bindings/scripts/scripts/zone/nexus/nexus/boss_magus_telestra.cpp29
-rw-r--r--src/bindings/scripts/scripts/zone/nexus/nexus/boss_ormorok.cpp39
-rw-r--r--src/bindings/scripts/scripts/zone/nexus/nexus/def_nexus.h18
-rw-r--r--src/bindings/scripts/scripts/zone/nexus/nexus/instance_nexus.cpp95
6 files changed, 214 insertions, 85 deletions
diff --git a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp
index 5202e7550bb..d2469c53a8e 100644
--- a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp
+++ b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp
@@ -93,6 +93,9 @@ struct TRINITY_DLL_DECL boss_anomalusAI : public ScriptedAI
void EnterCombat(Unit* who)
{
DoScriptText(SAY_AGGRO, m_creature);
+
+ if(pInstance)
+ pInstance->SetData(DATA_ANOMALUS_EVENT, IN_PROGRESS);
}
void JustDied(Unit* killer)
diff --git a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp
index dbfd561ed78..3672f0ed6aa 100644
--- a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp
+++ b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp
@@ -26,6 +26,8 @@ EndScriptData */
enum
{
+ CONTAINMENT_SPHERES = 3,
+
ACHIEVEMENT_INTENSE_COLD = 2036,
//Spells
@@ -40,11 +42,11 @@ enum
SPELL_INTENSE_COLD_TRIGGERED = 48095,
//Yell
- SAY_AGGRO = -1576040,
- SAY_SLAY = -1576041,
- SAY_ENRAGE = -1576042,
- SAY_DEATH = -1576043,
- SAY_CRYSTAL_NOVA = -1576044
+ SAY_AGGRO = -1576040,
+ SAY_SLAY = -1576041,
+ SAY_ENRAGE = -1576042,
+ SAY_DEATH = -1576043,
+ SAY_CRYSTAL_NOVA = -1576044
};
struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
@@ -63,6 +65,8 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
uint32 TAIL_SWEEP_Timer;
bool Enrage;
+ uint64 ContainmentSphereGUIDs[CONTAINMENT_SPHERES];
+
uint32 CheckIntenseColdTimer;
bool MoreThanTwoIntenseCold; // needed for achievement: Intense Cold(2036)
@@ -76,46 +80,27 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
CheckIntenseColdTimer = 2000;
MoreThanTwoIntenseCold = false;
- m_creature->RemoveAurasDueToSpell(SPELL_INTENSE_COLD);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
- if (pInstance && pInstance->GetData(DATA_KERISTRASZA_FREED) == DONE)
- {
- m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
- m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- }else{
- m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
- m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- m_creature->CastSpell(m_creature, SPELL_FROZEN_PRISON, false);
- }
- }
- void MoveInLineOfSight(Unit *who)
- {
- if (pInstance && pInstance->GetData(DATA_KERISTRASZA_FREED) != DONE && pInstance->GetData(DATA_MAGUS_TELESTRA_EVENT) == DONE &&
- pInstance->GetData(DATA_ANOMALUS_EVENT) == DONE && pInstance->GetData(DATA_ORMOROK_EVENT) == DONE &&
- m_creature->IsHostileTo(who) && m_creature->IsWithinDist(who, 15.0f, false))
- {
- pInstance->SetData(DATA_KERISTRASZA_FREED, DONE);
- }
- if (pInstance && pInstance->GetData(DATA_KERISTRASZA_FREED) == DONE)
- {
- m_creature->RemoveAurasDueToSpell(SPELL_FROZEN_PRISON);
- m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
- m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- ScriptedAI::MoveInLineOfSight(who);
- }
+ RemovePrison(CheckContainmentSpheres());
+
+ if(pInstance)
+ pInstance->SetData(DATA_KERISTRASZA_EVENT, NOT_STARTED);
}
void EnterCombat(Unit* who)
{
DoScriptText(SAY_AGGRO, m_creature);
- DoCast(m_creature, SPELL_INTENSE_COLD);
+ DoCastAOE(SPELL_INTENSE_COLD);
+
+ if(pInstance)
+ pInstance->SetData(DATA_KERISTRASZA_EVENT, IN_PROGRESS);
}
void JustDied(Unit* killer)
{
DoScriptText(SAY_DEATH, m_creature);
-
+
if(HeroicMode && !MoreThanTwoIntenseCold)
{
AchievementEntry const *AchievIntenseCold = GetAchievementStore()->LookupEntry(ACHIEVEMENT_INTENSE_COLD);
@@ -130,6 +115,9 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
}
}
}
+
+ if(pInstance)
+ pInstance->SetData(DATA_KERISTRASZA_EVENT, DONE);
}
void KilledUnit(Unit *victim)
@@ -137,6 +125,44 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
DoScriptText(SAY_SLAY, m_creature);
}
+ bool CheckContainmentSpheres(bool remove_prison = false)
+ {
+ ContainmentSphereGUIDs[0] = pInstance->GetData64(ANOMALUS_CONTAINMET_SPHERE);
+ ContainmentSphereGUIDs[1] = pInstance->GetData64(ORMOROKS_CONTAINMET_SPHERE);
+ ContainmentSphereGUIDs[2] = pInstance->GetData64(TELESTRAS_CONTAINMET_SPHERE);
+
+ GameObject *ContainmentSpheres[CONTAINMENT_SPHERES];
+
+ for(uint8 i = 0; i < CONTAINMENT_SPHERES; i++)
+ {
+ ContainmentSpheres[i] = pInstance->instance->GetGameObject(ContainmentSphereGUIDs[i]);
+ if(!ContainmentSpheres[i])
+ return false;
+ if(ContainmentSpheres[i]->GetGoState() != GO_STATE_ACTIVE)
+ return false;
+ }
+ if(remove_prison)
+ RemovePrison(true);
+ return true;
+ }
+
+ void RemovePrison(bool remove)
+ {
+ if(remove)
+ {
+ m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
+ m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ if(m_creature->HasAura(SPELL_FROZEN_PRISON))
+ m_creature->RemoveAurasDueToSpell(SPELL_FROZEN_PRISON);
+ }
+ else
+ {
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ m_creature->CastSpell(m_creature, SPELL_FROZEN_PRISON, false);
+ }
+ }
+
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
@@ -200,12 +226,33 @@ CreatureAI* GetAI_boss_keristrasza(Creature *_Creature)
return new boss_keristraszaAI (_Creature);
}
+bool GOHello_containment_sphere(Player *pPlayer, GameObject *pGO)
+{
+ ScriptedInstance *pInstance = pGO->GetInstanceData();
+
+ Creature *Keristrasza = Unit::GetCreature(*pGO, pInstance->GetData64(DATA_KERISTRASZA));
+ if(Keristrasza && Keristrasza->isAlive())
+ {
+ // maybe these are hacks :(
+ pGO->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
+ pGO->SetGoState(GO_STATE_ACTIVE);
+
+ CAST_AI(boss_keristraszaAI, Keristrasza->AI())->CheckContainmentSpheres(true);
+ }
+ return true;
+}
+
void AddSC_boss_keristrasza()
{
Script *newscript;
newscript = new Script;
- newscript->Name="boss_keristrasza";
+ newscript->Name = "boss_keristrasza";
newscript->GetAI = &GetAI_boss_keristrasza;
newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "containment_sphere";
+ newscript->pGOHello = &GOHello_containment_sphere;
+ newscript->RegisterSelf();
}
diff --git a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_magus_telestra.cpp b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_magus_telestra.cpp
index 5d4cea91049..b3bfee11a66 100644
--- a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_magus_telestra.cpp
+++ b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_magus_telestra.cpp
@@ -62,7 +62,6 @@ struct TRINITY_DLL_DECL boss_magus_telestraAI : public ScriptedAI
boss_magus_telestraAI(Creature* c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
- Reset();
HeroicMode = c->GetMap()->IsHeroic();
}
@@ -111,6 +110,22 @@ struct TRINITY_DLL_DECL boss_magus_telestraAI : public ScriptedAI
void EnterCombat(Unit* who)
{
DoScriptText(SAY_AGGRO, m_creature);
+
+ if(pInstance)
+ pInstance->SetData(DATA_MAGUS_TELESTRA_EVENT, IN_PROGRESS);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoScriptText(SAY_DEATH, m_creature);
+
+ if (pInstance)
+ pInstance->SetData(DATA_MAGUS_TELESTRA_EVENT, DONE);
+ }
+
+ void KilledUnit(Unit *victim)
+ {
+ DoScriptText(SAY_KILL, m_creature);
}
uint64 SplitPersonality(uint32 entry)
@@ -284,18 +299,6 @@ struct TRINITY_DLL_DECL boss_magus_telestraAI : public ScriptedAI
DoMeleeAttackIfReady();
}
-
- void JustDied(Unit* killer)
- {
- DoScriptText(SAY_DEATH, m_creature);
- if (pInstance)
- pInstance->SetData(DATA_MAGUS_TELESTRA_EVENT, DONE);
- }
-
- void KilledUnit(Unit *victim)
- {
- DoScriptText(SAY_KILL, m_creature);
- }
};
CreatureAI* GetAI_boss_magus_telestra(Creature *_Creature)
diff --git a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_ormorok.cpp b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_ormorok.cpp
index 1cda12197a2..8e4164d2966 100644
--- a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_ormorok.cpp
+++ b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_ormorok.cpp
@@ -58,7 +58,6 @@ struct TRINITY_DLL_DECL boss_ormorokAI : public ScriptedAI
boss_ormorokAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
- Reset();
HeroicMode = c->GetMap()->IsHeroic();
}
@@ -88,6 +87,7 @@ struct TRINITY_DLL_DECL boss_ormorokAI : public ScriptedAI
SPELL_SUMMON_CRYSTALLINE_TANGLER_Timer = 17000;
Frenzy = false;
CrystalSpikes = false;
+
if(pInstance)
pInstance->SetData(DATA_ORMOROK_EVENT, NOT_STARTED);
}
@@ -95,6 +95,22 @@ struct TRINITY_DLL_DECL boss_ormorokAI : public ScriptedAI
void EnterCombat(Unit* who)
{
DoScriptText(SAY_AGGRO, m_creature);
+
+ if (pInstance)
+ pInstance->SetData(DATA_ORMOROK_EVENT, IN_PROGRESS);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoScriptText(SAY_DEATH, m_creature);
+
+ if (pInstance)
+ pInstance->SetData(DATA_ORMOROK_EVENT, DONE);
+ }
+
+ void KilledUnit(Unit *victim)
+ {
+ DoScriptText(SAY_KILL, m_creature);
}
void UpdateAI(const uint32 diff)
@@ -195,26 +211,12 @@ struct TRINITY_DLL_DECL boss_ormorokAI : public ScriptedAI
DoMeleeAttackIfReady();
}
-
- void JustDied(Unit* killer)
- {
- DoScriptText(SAY_DEATH, m_creature);
- if (pInstance)
- pInstance->SetData(DATA_ORMOROK_EVENT, DONE);
- }
-
- void KilledUnit(Unit *victim)
- {
- DoScriptText(SAY_KILL, m_creature);
- }
-
};
struct TRINITY_DLL_DECL mob_crystal_spikeAI : public Scripted_NoMovementAI
{
mob_crystal_spikeAI(Creature *c) : Scripted_NoMovementAI(c)
{
- Reset();
HeroicMode = c->GetMap()->IsHeroic();
}
@@ -251,10 +253,7 @@ struct TRINITY_DLL_DECL mob_crystal_spikeAI : public Scripted_NoMovementAI
struct TRINITY_DLL_DECL mob_crystalline_tanglerAI : public ScriptedAI
{
- mob_crystalline_tanglerAI(Creature *c) : ScriptedAI(c)
- {
- Reset();
- }
+ mob_crystalline_tanglerAI(Creature *c) : ScriptedAI(c) {}
uint32 SPELL_ROOTS_Timer;
@@ -297,7 +296,7 @@ void AddSC_boss_ormorok()
newscript = new Script;
newscript->Name="boss_ormorok";
- newscript->GetAI = GetAI_boss_ormorok;
+ newscript->GetAI = &GetAI_boss_ormorok;
newscript->RegisterSelf();
newscript = new Script;
diff --git a/src/bindings/scripts/scripts/zone/nexus/nexus/def_nexus.h b/src/bindings/scripts/scripts/zone/nexus/nexus/def_nexus.h
index 59fb3528f69..678e44e5bbe 100644
--- a/src/bindings/scripts/scripts/zone/nexus/nexus/def_nexus.h
+++ b/src/bindings/scripts/scripts/zone/nexus/nexus/def_nexus.h
@@ -1,11 +1,19 @@
#ifndef DEF_NEXUS_H
#define DEF_NEXUS_H
-#define DATA_MAGUS_TELESTRA_EVENT 1
-#define DATA_ANOMALUS_EVENT 2
-#define DATA_ORMOROK_EVENT 3
-#define DATA_KERISTRASZA_FREED 4
+enum
+{
+ DATA_MAGUS_TELESTRA_EVENT,
+ DATA_ANOMALUS_EVENT,
+ DATA_ORMOROK_EVENT,
+ DATA_KERISTRASZA_EVENT,
-#define DATA_ANOMALUS 5
+ DATA_ANOMALUS,
+ DATA_KERISTRASZA,
+
+ ANOMALUS_CONTAINMET_SPHERE,
+ ORMOROKS_CONTAINMET_SPHERE,
+ TELESTRAS_CONTAINMET_SPHERE
+};
#endif
diff --git a/src/bindings/scripts/scripts/zone/nexus/nexus/instance_nexus.cpp b/src/bindings/scripts/scripts/zone/nexus/nexus/instance_nexus.cpp
index f46d503a6b4..b7e3862b3ad 100644
--- a/src/bindings/scripts/scripts/zone/nexus/nexus/instance_nexus.cpp
+++ b/src/bindings/scripts/scripts/zone/nexus/nexus/instance_nexus.cpp
@@ -28,12 +28,19 @@ EndScriptData */
struct TRINITY_DLL_DECL instance_nexus : public ScriptedInstance
{
- instance_nexus(Map *Map) : ScriptedInstance(Map) {Initialize();};
+ instance_nexus(Map *Map) : ScriptedInstance(Map) { Initialize(); }
- std::string strInstData;
- uint64 Anomalus;
uint32 Encounters[NUMBER_OF_ENCOUNTERS];
+ uint64 Anomalus;
+ uint64 Keristrasza;
+
+ uint64 AnomalusContainmentSphere;
+ uint64 OrmoroksContainmentSphere;
+ uint64 TelestrasContainmentSphere;
+
+ std::string strInstData;
+
void Initialize()
{
Anomalus = 0;
@@ -56,6 +63,7 @@ struct TRINITY_DLL_DECL instance_nexus : public ScriptedInstance
switch(pCreature->GetEntry())
{
case 26763: Anomalus = pCreature->GetGUID(); break;
+ case 26723: Keristrasza = pCreature->GetGUID(); break;
case 26800:
{
//26799
@@ -99,14 +107,32 @@ struct TRINITY_DLL_DECL instance_nexus : public ScriptedInstance
}
}
- uint64 GetData64(uint32 uiIdentifier)
+ void OnGameObjectCreate(GameObject *go, bool add)
{
- switch(uiIdentifier)
+ switch(go->GetEntry())
{
- case DATA_ANOMALUS:
- return Anomalus;
+ case 188527:
+ {
+ AnomalusContainmentSphere = go->GetGUID();
+ if(Encounters[1] == DONE)
+ go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
+ break;
+ }
+ case 188528:
+ {
+ OrmoroksContainmentSphere = go->GetGUID();
+ if(Encounters[2] == DONE)
+ go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
+ break;
+ }
+ case 188526:
+ {
+ TelestrasContainmentSphere = go->GetGUID();
+ if(Encounters[0] == DONE)
+ go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
+ break;
+ }
}
- return 0;
}
uint32 GetData(uint32 identifier)
@@ -116,7 +142,7 @@ struct TRINITY_DLL_DECL instance_nexus : public ScriptedInstance
case DATA_MAGUS_TELESTRA_EVENT: return Encounters[0];
case DATA_ANOMALUS_EVENT: return Encounters[1];
case DATA_ORMOROK_EVENT: return Encounters[2];
- case DATA_KERISTRASZA_FREED: return Encounters[3];
+ case DATA_KERISTRASZA_EVENT: return Encounters[3];
}
return 0;
}
@@ -125,10 +151,40 @@ struct TRINITY_DLL_DECL instance_nexus : public ScriptedInstance
{
switch(identifier)
{
- case DATA_MAGUS_TELESTRA_EVENT: Encounters[0] = data; break;
- case DATA_ANOMALUS_EVENT: Encounters[1] = data; break;
- case DATA_ORMOROK_EVENT: Encounters[2] = data; break;
- case DATA_KERISTRASZA_FREED: Encounters[3] = data; break;
+ case DATA_MAGUS_TELESTRA_EVENT:
+ {
+ if(data == DONE)
+ {
+ GameObject *Sphere = instance->GetGameObject(TelestrasContainmentSphere);
+ if(Sphere)
+ Sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
+ }
+ Encounters[0] = data;
+ break;
+ }
+ case DATA_ANOMALUS_EVENT:
+ {
+ if(data == DONE)
+ {
+ GameObject *Sphere = instance->GetGameObject(AnomalusContainmentSphere);
+ if(Sphere)
+ Sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
+ }
+ Encounters[1] = data;
+ break;
+ }
+ case DATA_ORMOROK_EVENT:
+ {
+ if(data == DONE)
+ {
+ GameObject *Sphere = instance->GetGameObject(OrmoroksContainmentSphere);
+ if(Sphere)
+ Sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
+ }
+ Encounters[2] = data;
+ break;
+ }
+ case DATA_KERISTRASZA_EVENT: Encounters[3] = data; break;
}
if (data == DONE)
@@ -146,6 +202,19 @@ struct TRINITY_DLL_DECL instance_nexus : public ScriptedInstance
}
}
+ uint64 GetData64(uint32 uiIdentifier)
+ {
+ switch(uiIdentifier)
+ {
+ case DATA_ANOMALUS: return Anomalus;
+ case DATA_KERISTRASZA: return Keristrasza;
+ case ANOMALUS_CONTAINMET_SPHERE: return AnomalusContainmentSphere;
+ case ORMOROKS_CONTAINMET_SPHERE: return OrmoroksContainmentSphere;
+ case TELESTRAS_CONTAINMET_SPHERE: return TelestrasContainmentSphere;
+ }
+ return 0;
+ }
+
std::string GetSaveData()
{
return strInstData;