aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/scripts/CMakeLists.txt1
-rw-r--r--src/scripts/northrend/frozen_halls/forge_of_souls/boss_bronjahm.cpp186
-rw-r--r--src/scripts/northrend/frozen_halls/forge_of_souls/forge_of_souls.h4
-rw-r--r--src/scripts/northrend/frozen_halls/forge_of_souls/instance_forge_of_souls.cpp5
-rw-r--r--win/VC90/game.vcproj4
5 files changed, 198 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;
diff --git a/win/VC90/game.vcproj b/win/VC90/game.vcproj
index a4377acf65f..c54c46012a2 100644
--- a/win/VC90/game.vcproj
+++ b/win/VC90/game.vcproj
@@ -3157,6 +3157,10 @@
>
</File>
<File
+ RelativePath="..\..\src\scripts\northrend\frozen_halls\forge_of_souls\boss_bronjahm.cpp"
+ >
+ </File>
+ <File
RelativePath="..\..\src\scripts\northrend\frozen_halls\forge_of_souls\instance_forge_of_souls.cpp"
>
</File>