diff options
-rw-r--r-- | src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp | 63 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp | 75 |
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) |