aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp63
-rw-r--r--src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp75
2 files changed, 100 insertions, 38 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 e5fda84fa95..5202e7550bb 100644
--- a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp
+++ b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp
@@ -24,9 +24,13 @@ EndScriptData */
#include "precompiled.h"
#include "def_nexus.h"
+bool DeadChaoticRift; // needed for achievement: Chaos Theory(2037)
+
enum
{
-//Spells
+ ACHIEVEMENT_CHAOS_THEORY = 2037,
+
+ //Spells
SPELL_SPARK_N = 47751,
SPELL_SPARK_H = 57062,
SPELL_RIFT_SHIELD = 47748,
@@ -40,7 +44,7 @@ enum
SPELL_CHARGED_CHAOTIC_ENERGY_BURST = 47737,
SPELL_ARCANEFORM = 48019, //Chaotic Rift visual
-//Yell
+ //Yell
SAY_AGGRO = -1576010,
SAY_DEATH = -1576011,
SAY_RIFT = -1576012,
@@ -62,7 +66,6 @@ struct TRINITY_DLL_DECL boss_anomalusAI : public ScriptedAI
boss_anomalusAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
- Reset();
HeroicMode = c->GetMap()->IsHeroic();
}
@@ -81,6 +84,8 @@ struct TRINITY_DLL_DECL boss_anomalusAI : public ScriptedAI
SPELL_CREATE_RIFT_Timer = 25000;
ChaoticRiftGUID = 0;
+ DeadChaoticRift = false;
+
if(pInstance)
pInstance->SetData(DATA_ANOMALUS_EVENT, NOT_STARTED);
}
@@ -90,13 +95,34 @@ struct TRINITY_DLL_DECL boss_anomalusAI : public ScriptedAI
DoScriptText(SAY_AGGRO, m_creature);
}
+ void JustDied(Unit* killer)
+ {
+ DoScriptText(SAY_DEATH, m_creature);
+
+ if(HeroicMode && !DeadChaoticRift)
+ {
+ AchievementEntry const *AchievChaosTheory = GetAchievementStore()->LookupEntry(ACHIEVEMENT_CHAOS_THEORY);
+ if(AchievChaosTheory)
+ {
+ Map *map = m_creature->GetMap();
+ if(map && map->IsDungeon())
+ {
+ Map::PlayerList const &players = map->GetPlayers();
+ for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ itr->getSource()->CompletedAchievement(AchievChaosTheory);
+ }
+ }
+ }
+
+ if(pInstance)
+ pInstance->SetData(DATA_ANOMALUS_EVENT, DONE);
+ }
+
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
- {
return;
- }
-
+
if (m_creature->HasAura(SPELL_RIFT_SHIELD))
{
if (ChaoticRiftGUID)
@@ -187,21 +213,18 @@ struct TRINITY_DLL_DECL boss_anomalusAI : public ScriptedAI
DoMeleeAttackIfReady();
}
-
- void JustDied(Unit* killer)
- {
- DoScriptText(SAY_DEATH, m_creature);
- if (pInstance)
- pInstance->SetData(DATA_ANOMALUS_EVENT, DONE);
- }
};
+CreatureAI* GetAI_boss_anomalus(Creature *_Creature)
+{
+ return new boss_anomalusAI (_Creature);
+}
+
struct TRINITY_DLL_DECL mob_chaotic_riftAI : public Scripted_NoMovementAI
{
mob_chaotic_riftAI(Creature *c) : Scripted_NoMovementAI(c)
{
pInstance = c->GetInstanceData();
- Reset();
}
ScriptedInstance* pInstance;
@@ -219,12 +242,15 @@ struct TRINITY_DLL_DECL mob_chaotic_riftAI : public Scripted_NoMovementAI
DoCast(m_creature, SPELL_ARCANEFORM, false);
}
+ void JustDied(Unit *killer)
+ {
+ DeadChaoticRift = true;
+ }
+
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
- {
return;
- }
if (SPELL_CHAOTIC_ENERGY_BURST_Timer < diff)
{
@@ -257,11 +283,6 @@ CreatureAI* GetAI_mob_chaotic_rift(Creature *_Creature)
return new mob_chaotic_riftAI (_Creature);
}
-CreatureAI* GetAI_boss_anomalus(Creature *_Creature)
-{
- return new boss_anomalusAI (_Creature);
-}
-
void AddSC_boss_anomalus()
{
Script *newscript;
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 6bba503e777..dbfd561ed78 100644
--- a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp
+++ b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp
@@ -26,7 +26,9 @@ EndScriptData */
enum
{
-//Spells
+ ACHIEVEMENT_INTENSE_COLD = 2036,
+
+ //Spells
SPELL_FROZEN_PRISON = 47854,
SPELL_TAIL_SWEEP = 50155,
SPELL_CRYSTAL_CHAINS = 50997,
@@ -35,8 +37,9 @@ enum
SPELL_CRYSTALFIRE_BREATH_H = 57091,
SPELL_CRYSTALIZE = 48179,
SPELL_INTENSE_COLD = 48094,
+ SPELL_INTENSE_COLD_TRIGGERED = 48095,
-//Yell
+ //Yell
SAY_AGGRO = -1576040,
SAY_SLAY = -1576041,
SAY_ENRAGE = -1576042,
@@ -49,8 +52,7 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
boss_keristraszaAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
- HeroicMode = m_creature->GetMap()->IsHeroic();
- Reset();
+ HeroicMode = c->GetMap()->IsHeroic();
}
ScriptedInstance* pInstance;
@@ -61,12 +63,19 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
uint32 TAIL_SWEEP_Timer;
bool Enrage;
+ uint32 CheckIntenseColdTimer;
+ bool MoreThanTwoIntenseCold; // needed for achievement: Intense Cold(2036)
+
void Reset()
{
CRYSTALFIRE_BREATH_Timer = 14000;
CRYSTAL_CHAINS_CRYSTALIZE_Timer = HeroicMode ? 30000 : 11000;
TAIL_SWEEP_Timer = 5000;
Enrage = false;
+
+ 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)
@@ -103,13 +112,55 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
DoCast(m_creature, SPELL_INTENSE_COLD);
}
+ void JustDied(Unit* killer)
+ {
+ DoScriptText(SAY_DEATH, m_creature);
+
+ if(HeroicMode && !MoreThanTwoIntenseCold)
+ {
+ AchievementEntry const *AchievIntenseCold = GetAchievementStore()->LookupEntry(ACHIEVEMENT_INTENSE_COLD);
+ if(AchievIntenseCold)
+ {
+ Map *map = m_creature->GetMap();
+ if(map && map->IsDungeon())
+ {
+ Map::PlayerList const &players = map->GetPlayers();
+ for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ itr->getSource()->CompletedAchievement(AchievIntenseCold);
+ }
+ }
+ }
+ }
+
+ void KilledUnit(Unit *victim)
+ {
+ DoScriptText(SAY_SLAY, m_creature);
+ }
+
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
- {
return;
- }
-
+
+ if(CheckIntenseColdTimer < diff && !MoreThanTwoIntenseCold)
+ {
+ std::list<HostilReference*> ThreatList = m_creature->getThreatManager().getThreatList();
+ for(std::list<HostilReference*>::const_iterator itr = ThreatList.begin(); itr != ThreatList.end(); itr++)
+ {
+ Unit *target = Unit::GetUnit(*m_creature, (*itr)->getUnitGuid());
+ if(!target || target->GetTypeId() != TYPEID_PLAYER)
+ continue;
+
+ Aura *AuraIntenseCold = target->GetAura(SPELL_INTENSE_COLD_TRIGGERED);
+ if(AuraIntenseCold && AuraIntenseCold->GetStackAmount() > 2)
+ {
+ MoreThanTwoIntenseCold = true;
+ break;
+ }
+ }
+ CheckIntenseColdTimer = 2000;
+ }else CheckIntenseColdTimer -= diff;
+
if (!Enrage && (m_creature->GetHealth() < m_creature->GetMaxHealth() * 0.25))
{
DoScriptText(SAY_ENRAGE , m_creature);
@@ -142,16 +193,6 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
DoMeleeAttackIfReady();
}
-
- void JustDied(Unit* killer)
- {
- DoScriptText(SAY_DEATH, m_creature);
- }
-
- void KilledUnit(Unit *victim)
- {
- DoScriptText(SAY_SLAY, m_creature);
- }
};
CreatureAI* GetAI_boss_keristrasza(Creature *_Creature)