diff options
author | Tartalo <none@none> | 2010-02-16 21:13:40 +0100 |
---|---|---|
committer | Tartalo <none@none> | 2010-02-16 21:13:40 +0100 |
commit | 7fd7fcce93b4215c258e535a072e36da0e1867b0 (patch) | |
tree | 5b667f04ed91c2b87d8b97f172cf1ff95e993d47 /src | |
parent | e22594dac8959c2832a7dfb60e6cb14c1db9c784 (diff) |
Frozen Halls, Forge of Souls: Boss Bronjahm script
--HG--
branch : trunk
Diffstat (limited to 'src')
4 files changed, 194 insertions, 2 deletions
diff --git a/src/scripts/CMakeLists.txt b/src/scripts/CMakeLists.txt index 05007138ca7..6fc29306a27 100644 --- a/src/scripts/CMakeLists.txt +++ b/src/scripts/CMakeLists.txt @@ -327,6 +327,7 @@ SET(scripts_STAT_SRCS northrend/draktharon_keep/boss_tharon_ja.cpp northrend/draktharon_keep/drak_tharon_keep.h northrend/frozen_halls/forge_of_souls/instance_forge_of_souls.cpp + northrend/frozen_halls/forge_of_souls/boss_bronjahm.cpp northrend/frozen_halls/forge_of_souls/forge_of_souls.h northrend/frozen_halls/halls_of_reflection/instance_halls_of_reflection.cpp northrend/frozen_halls/halls_of_reflection/halls_of_reflection.h diff --git a/src/scripts/northrend/frozen_halls/forge_of_souls/boss_bronjahm.cpp b/src/scripts/northrend/frozen_halls/forge_of_souls/boss_bronjahm.cpp new file mode 100644 index 00000000000..fe515516a68 --- /dev/null +++ b/src/scripts/northrend/frozen_halls/forge_of_souls/boss_bronjahm.cpp @@ -0,0 +1,186 @@ +/* Copyright (C) 2006 - 2010 TrinityCore <https://www.trinitycore.org/> + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "ScriptedPch.h" +#include "forge_of_souls.h" + +enum Spells +{ + SPELL_MAGIC_S_BANE = 68793, + SPELL_MAGIC_S_BANE_H = 69050, + SPELL_CORRUPT_SOUL = 68839, + SPELL_CONSUME_SOUL = 68858, + SPELL_CONSUME_SOUL_H = 69047, + SPELL_TELEPORT = 68988, + SPELL_FEAR = 68950, + SPELL_SOULSTORM = 68872, + SPELL_SOULSTORM_H = 69049, + SPELL_SHADOW_BOLT = 70043 +}; +enum CombatPhases +{ + PHASE_1, + PHASE_2 +}; +/*enum Adds +{ + CREATURE_CORRUPTED_SOUL_FRAGMENT = 36535 +};*/ +struct boss_bronjahmAI : public ScriptedAI +{ + boss_bronjahmAI(Creature *c) : ScriptedAI(c) + { + pInstance = m_creature->GetInstanceData(); + } + + uint32 uiFearTimer; + uint32 uiShadowBoltTimer; + uint32 uiMagicsBaneTimer; + uint32 uiCorruptSoulTimer; + + CombatPhases Phase; + + ScriptedInstance* pInstance; + + void Reset() + { + Phase = PHASE_1; + + uiFearTimer = urand(8000,12000); + uiShadowBoltTimer = 2000; + uiMagicsBaneTimer = urand(8000,15000); + uiCorruptSoulTimer = urand(15000,25000); + + if (pInstance) + pInstance->SetData(DATA_BRONJAHM_EVENT, NOT_STARTED); + } + + void EnterCombat(Unit* who) + { + //DoScriptText(SAY_AGGRO, m_creature); + + if (pInstance) + pInstance->SetData(DATA_BRONJAHM_EVENT, IN_PROGRESS); + } + + void JustDied(Unit* killer) + { + //DoScriptText(SAY_DEATH, m_creature); + + if (pInstance) + pInstance->SetData(DATA_BRONJAHM_EVENT, DONE); + } + + void UpdateAI(const uint32 diff) + { + //Return since we have no target + if (!UpdateVictim()) + return; + + switch (Phase) + { + case PHASE_1: + if (uiCorruptSoulTimer <= diff) + { + if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,1)) + DoCast(pTarget,SPELL_CORRUPT_SOUL); + uiCorruptSoulTimer = urand(15000,25000); + } else uiCorruptSoulTimer -= diff; + break; + case PHASE_2: + if (!me->HasAura(SPELL_SOULSTORM) || !me->HasAura(SPELL_SOULSTORM_H)) + DoCast(m_creature, DUNGEON_MODE(SPELL_SOULSTORM,SPELL_SOULSTORM_H)); + if (uiFearTimer <= diff) + { + if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,1)) + DoCast(m_creature->getVictim(),SPELL_FEAR); + uiFearTimer = urand(8000,12000); + } else uiFearTimer -= diff; + break; + } + + if (HealthBelowPct(30)) + DoCast(m_creature,SPELL_TELEPORT); + + if (uiShadowBoltTimer <= diff) + { + if (m_creature->IsWithinMeleeRange(m_creature->getVictim())) + DoCastVictim(SPELL_SHADOW_BOLT); + uiShadowBoltTimer = 2000; + } else uiShadowBoltTimer -= diff; + + if (uiMagicsBaneTimer <= diff) + { + DoCastVictim(DUNGEON_MODE(SPELL_MAGIC_S_BANE,SPELL_MAGIC_S_BANE_H)); + uiMagicsBaneTimer = urand(8000,15000); + } else uiMagicsBaneTimer -= diff; + + DoMeleeAttackIfReady(); + } +}; + +CreatureAI* GetAI_boss_bronjahm(Creature* pCreature) +{ + return new boss_bronjahmAI(pCreature); +} + +struct mob_corrupted_soul_fragmentAI : public ScriptedAI +{ + mob_corrupted_soul_fragmentAI(Creature *c) : ScriptedAI(c) + { + pInstance = m_creature->GetInstanceData(); + } + + ScriptedInstance* pInstance; + + void Reset() + { + SetCombatMovement(false); + if (pInstance) + if (Creature* pBronjham = Unit::GetCreature(*m_creature,pInstance->GetData64(DATA_BRONJAHM))) + m_creature->GetMotionMaster()->MoveChase(pBronjham); + + } + + void MovementInform(uint32 type, uint32 id) + { + if (pInstance) + if (Creature* pBronjham = Unit::GetCreature(*m_creature,pInstance->GetData64(DATA_BRONJAHM))) + DoCast(pBronjham,DUNGEON_MODE(SPELL_CONSUME_SOUL,SPELL_CONSUME_SOUL_H)); + } + + void UpdateAI(const uint32 diff) {} +}; + +CreatureAI* GetAI_mob_corrupted_soul_fragment(Creature* pCreature) +{ + return new mob_corrupted_soul_fragmentAI(pCreature); +} + +void AddSC_boss_bronjahm() +{ + Script *newscript; + + newscript = new Script; + newscript->Name = "mob_corruptel_soul_fragment"; + newscript->GetAI = &GetAI_mob_corrupted_soul_fragment; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "boss_bronjahm"; + newscript->GetAI = &GetAI_boss_bronjahm; + newscript->RegisterSelf(); +}
\ No newline at end of file diff --git a/src/scripts/northrend/frozen_halls/forge_of_souls/forge_of_souls.h b/src/scripts/northrend/frozen_halls/forge_of_souls/forge_of_souls.h index d50716c9e39..e48d5934cb8 100644 --- a/src/scripts/northrend/frozen_halls/forge_of_souls/forge_of_souls.h +++ b/src/scripts/northrend/frozen_halls/forge_of_souls/forge_of_souls.h @@ -5,6 +5,10 @@ enum Data DATA_BRONJAHM_EVENT, DATA_DEVOURER_EVENT }; +enum Data64 +{ + DATA_BRONJAHM +}; enum Creatures { CREATURE_BRONJAHM = 36497, diff --git a/src/scripts/northrend/frozen_halls/forge_of_souls/instance_forge_of_souls.cpp b/src/scripts/northrend/frozen_halls/forge_of_souls/instance_forge_of_souls.cpp index 2ac41f59c8f..a7aea8e21a1 100644 --- a/src/scripts/northrend/frozen_halls/forge_of_souls/instance_forge_of_souls.cpp +++ b/src/scripts/northrend/frozen_halls/forge_of_souls/instance_forge_of_souls.cpp @@ -72,16 +72,17 @@ struct instance_forge_of_souls : public ScriptedInstance return 0; } -/* + uint64 GetData64(uint32 identifier) { switch(identifier) { + case DATA_BRONJAHM: return uiBronjahm; } return 0; } -*/ + std::string GetSaveData() { OUT_SAVE_INST_DATA; |