aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormaximius <none@none>2009-10-16 12:44:00 -0700
committermaximius <none@none>2009-10-16 12:44:00 -0700
commit279d93360f70e58a6a9994b58dd148ca9699c72b (patch)
treec84538118fcb5322c7440af7d05892d271a7b2cf /src
parent8d6defa7ee8c90770ced9320940ed12130377c87 (diff)
*Ulduar teleporter, and updates, by BonDit. Thanks AniRB.
*Fixed some typos in last commit. --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/CMakeLists.txt1
-rw-r--r--src/bindings/scripts/VC90/90ScriptDev2.vcproj4
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_assembly_of_iron.cpp12
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_auriaya.cpp12
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp11
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_freya.cpp68
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_hodir.cpp69
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_ignis.cpp10
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp11
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_razorscale.cpp10
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_thorim.cpp68
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_xt002.cpp19
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/def_ulduar.h62
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/instance_ulduar.cpp281
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/ulduar/ulduar_teleporter.cpp92
-rw-r--r--src/bindings/scripts/system/ScriptLoader.cpp2
-rw-r--r--src/game/SpellEffects.cpp4
17 files changed, 653 insertions, 83 deletions
diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt
index 7aed9945245..fcd9e9719f3 100644
--- a/src/bindings/scripts/CMakeLists.txt
+++ b/src/bindings/scripts/CMakeLists.txt
@@ -380,6 +380,7 @@ SET(trinityscript_LIB_SRCS
scripts/northrend/ulduar/ulduar/boss_thorim.cpp
scripts/northrend/ulduar/ulduar/boss_xt002.cpp
scripts/northrend/ulduar/ulduar/boss_yoggsaron.cpp
+ scripts/northrend/ulduar/ulduar/ulduar_teleporter.cpp
scripts/northrend/ulduar/ulduar/def_ulduar.h
scripts/northrend/ulduar/ulduar/instance_ulduar.cpp
scripts/northrend/utgarde_keep/utgarde_keep/instance_utgarde_keep.cpp
diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj
index b1360ed2c4e..0c33ac760bf 100644
--- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj
+++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj
@@ -2073,6 +2073,10 @@
RelativePath="..\scripts\northrend\ulduar\ulduar\boss_yoggsaron.cpp"
>
</File>
+ <File
+ RelativePath="..\scripts\northrend\ulduar\ulduar\ulduar_teleporter.cpp"
+ >
+ </File>
<File
RelativePath="..\scripts\northrend\ulduar\ulduar\def_ulduar.h"
>
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_assembly_of_iron.cpp b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_assembly_of_iron.cpp
index 7d54eddd9f7..aceaca2231c 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_assembly_of_iron.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_assembly_of_iron.cpp
@@ -126,7 +126,7 @@ struct TRINITY_DLL_DECL boss_steelbreakerAI : public ScriptedAI
phase = 0;
m_creature->RemoveAllAuras();
if(pInstance)
- pInstance->SetData(DATA_ASSEMBLY, NOT_STARTED);
+ pInstance->SetData(TYPE_ASSEMBLY, NOT_STARTED);
}
EventMap events;
@@ -174,7 +174,7 @@ struct TRINITY_DLL_DECL boss_steelbreakerAI : public ScriptedAI
void JustDied(Unit* Killer)
{
if(IsEncounterComplete(pInstance, m_creature) && pInstance)
- pInstance->SetData(DATA_ASSEMBLY, DONE);
+ pInstance->SetData(TYPE_ASSEMBLY, DONE);
}
void KilledUnit(Unit *who)
@@ -235,7 +235,7 @@ struct TRINITY_DLL_DECL boss_runemaster_molgeimAI : public ScriptedAI
void Reset()
{
if(pInstance)
- pInstance->SetData(DATA_ASSEMBLY, NOT_STARTED);
+ pInstance->SetData(TYPE_ASSEMBLY, NOT_STARTED);
events.Reset();
m_creature->RemoveAllAuras();
phase = 0;
@@ -286,7 +286,7 @@ struct TRINITY_DLL_DECL boss_runemaster_molgeimAI : public ScriptedAI
void JustDied(Unit* Killer)
{
if(IsEncounterComplete(pInstance, m_creature) && pInstance)
- pInstance->SetData(DATA_ASSEMBLY, DONE);
+ pInstance->SetData(TYPE_ASSEMBLY, DONE);
}
void SpellHit(Unit *from, const SpellEntry *spell)
@@ -399,7 +399,7 @@ struct TRINITY_DLL_DECL boss_stormcaller_brundirAI : public ScriptedAI
void Reset()
{
if(pInstance)
- pInstance->SetData(DATA_ASSEMBLY, NOT_STARTED);
+ pInstance->SetData(TYPE_ASSEMBLY, NOT_STARTED);
m_creature->RemoveAllAuras();
events.Reset();
phase = 0;
@@ -455,7 +455,7 @@ struct TRINITY_DLL_DECL boss_stormcaller_brundirAI : public ScriptedAI
void JustDied(Unit* Killer)
{
if(IsEncounterComplete(pInstance, m_creature) && pInstance)
- pInstance->SetData(DATA_ASSEMBLY, DONE);
+ pInstance->SetData(TYPE_ASSEMBLY, DONE);
}
void SpellHit(Unit *from, const SpellEntry *spell)
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_auriaya.cpp b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_auriaya.cpp
index ed6948449c8..e4dedac54ac 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_auriaya.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_auriaya.cpp
@@ -27,9 +27,14 @@
#define SAY_AGGRO -2615016
#define SAY_SLAY_1 -2615017
-struct TRINITY_DLL_DECL boss_auriaya_AI : public ScriptedAI
+struct TRINITY_DLL_DECL boss_auriaya_AI : public BossAI
{
- boss_auriaya_AI(Creature *c) : ScriptedAI(c) {}
+ boss_auriaya_AI(Creature *pCreature) : BossAI(pCreature, TYPE_AURIAYA)
+ {
+ m_pInstance = pCreature->GetInstanceData();
+ }
+
+ ScriptedInstance* m_pInstance;
uint32 TERRIFYING_SCREECH_Timer;
uint32 SONIC_BOOM_Timer;
@@ -52,6 +57,9 @@ struct TRINITY_DLL_DECL boss_auriaya_AI : public ScriptedAI
void JustDied(Unit *victim)
{
DoScriptText(SAY_SLAY_1, m_creature);
+
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_AURIAYA, DONE);
}
void MoveInLineOfSight(Unit* who) {}
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp
index e2dda84fdd8..3ee39e402fe 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp
@@ -72,11 +72,14 @@ enum Seats
struct TRINITY_DLL_DECL boss_flame_leviathanAI : public BossAI
{
- boss_flame_leviathanAI(Creature *c) : BossAI(c, BOSS_LEVIATHAN), vehicle(me->GetVehicleKit())
+ boss_flame_leviathanAI(Creature *pCreature) : BossAI(pCreature, TYPE_LEVIATHAN), vehicle(me->GetVehicleKit())
{
+ m_pInstance = pCreature->GetInstanceData();
assert(vehicle);
}
+ ScriptedInstance* m_pInstance;
+
Vehicle *vehicle;
void Reset()
@@ -107,6 +110,12 @@ struct TRINITY_DLL_DECL boss_flame_leviathanAI : public BossAI
AttackStart(target);
}
+ void JustDied(Unit *victim)
+ {
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_LEVIATHAN, DONE);
+ }
+
void SpellHit(Unit *caster, const SpellEntry *spell)
{
if(spell->Id == 62472)
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_freya.cpp b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_freya.cpp
index a736b2db12a..ac0b23c1b7a 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_freya.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_freya.cpp
@@ -18,3 +18,71 @@
#include "precompiled.h"
#include "def_ulduar.h"
+
+/*
+#define SAY_AGGRO -1
+#define SAY_SLAY -1
+*/
+
+struct TRINITY_DLL_DECL boss_freyaAI : public BossAI
+{
+ boss_freyaAI(Creature* pCreature) : BossAI(pCreature, TYPE_FREYA)
+ {
+ m_pInstance = pCreature->GetInstanceData();
+ Reset();
+ }
+
+ ScriptedInstance* m_pInstance;
+
+ void Reset()
+ {
+ }
+
+ void KilledUnit(Unit *victim)
+ {
+ }
+
+ void JustDied(Unit *victim)
+ {
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_FREYA, DONE);
+ }
+
+ void Aggro(Unit* pWho)
+ {
+// DoScriptText(SAY_AGGRO, m_creature);
+ m_creature->SetInCombatWithZone();
+
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_FREYA, IN_PROGRESS);
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!UpdateVictim())
+ return;
+//SPELLS TODO:
+
+//
+ DoMeleeAttackIfReady();
+
+ EnterEvadeIfOutOfCombatArea(diff);
+
+ }
+
+};
+
+CreatureAI* GetAI_boss_freya(Creature* pCreature)
+{
+ return new boss_freyaAI(pCreature);
+}
+
+void AddSC_boss_freya()
+{
+ Script *newscript;
+ newscript = new Script;
+ newscript->Name = "boss_freya";
+ newscript->GetAI = &GetAI_boss_freya;
+ newscript->RegisterSelf();
+
+}
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_hodir.cpp b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_hodir.cpp
index a736b2db12a..c05d30d83ba 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_hodir.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_hodir.cpp
@@ -18,3 +18,72 @@
#include "precompiled.h"
#include "def_ulduar.h"
+
+/*
+#define SAY_AGGRO -1
+#define SAY_SLAY -1
+*/
+
+struct TRINITY_DLL_DECL boss_hodirAI : public BossAI
+{
+ boss_hodirAI(Creature *pCreature) : BossAI(pCreature, TYPE_HODIR)
+ {
+ m_pInstance = pCreature->GetInstanceData();
+ Reset();
+ }
+
+ ScriptedInstance* m_pInstance;
+
+ void Reset()
+ {
+ }
+
+ void KilledUnit(Unit *victim)
+ {
+ }
+
+ void JustDied(Unit *victim)
+ {
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_HODIR, DONE);
+ }
+
+ void Aggro(Unit* pWho)
+ {
+// DoScriptText(SAY_AGGRO, m_creature);
+ m_creature->SetInCombatWithZone();
+
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_HODIR, IN_PROGRESS);
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!UpdateVictim())
+ return;
+//SPELLS TODO:
+
+//
+ DoMeleeAttackIfReady();
+
+ EnterEvadeIfOutOfCombatArea(diff);
+
+ }
+
+};
+
+CreatureAI* GetAI_boss_hodir(Creature* pCreature)
+{
+ return new boss_hodirAI(pCreature);
+}
+
+void AddSC_boss_hodir()
+{
+ Script *newscript;
+ newscript = new Script;
+ newscript->Name = "boss_hodir";
+ newscript->GetAI = &GetAI_boss_hodir;
+ newscript->RegisterSelf();
+
+}
+
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_ignis.cpp b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_ignis.cpp
index 700875e40c7..8dfda95a987 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_ignis.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_ignis.cpp
@@ -27,9 +27,9 @@
#define SAY_AGGRO -10000002
#define SAY_SLAY -1000003
-struct TRINITY_DLL_DECL boss_ignis_AI : public ScriptedAI
+struct TRINITY_DLL_DECL boss_ignis_AI : public BossAI
{
- boss_ignis_AI(Creature *c) : ScriptedAI(c) {}
+ boss_ignis_AI(Creature *pCreature) : BossAI(pCreature, TYPE_IGNIS) {}
uint32 FLAME_JETS_Timer;
uint32 SCORCH_Timer;
@@ -65,8 +65,10 @@ struct TRINITY_DLL_DECL boss_ignis_AI : public ScriptedAI
if(m_creature->GetPositionY() < 150 || m_creature->GetPositionX() < 450) // Not Blizzlike, anti-exploit to prevent players from pulling bosses to vehicles.
{
- m_creature->SetHealth(m_creature->GetMaxHealth());
- DoCast(m_creature,SPELL_FLAME_JETS);
+ m_creature->RemoveAllAuras();
+ m_creature->DeleteThreatList();
+ m_creature->CombatStop(false);
+ m_creature->GetMotionMaster()->MoveTargetedHome();
}
if (FLAME_JETS_Timer < diff)
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp
index 86c1d884186..90e9b69e3ff 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp
@@ -39,14 +39,17 @@ enum Events
struct TRINITY_DLL_DECL boss_kologarnAI : public BossAI
{
- boss_kologarnAI(Creature *c) : BossAI(c, BOSS_KOLOGARN), vehicle(me->GetVehicleKit()),
+ boss_kologarnAI(Creature *pCreature) : BossAI(pCreature, TYPE_KOLOGARN), vehicle(me->GetVehicleKit()),
left(false), right(false)
{
+ m_pInstance = me->GetInstanceData();
assert(vehicle);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); // i think this is a hack, but there is no other way to disable his rotation
}
+ ScriptedInstance* m_pInstance;
+
Vehicle *vehicle;
bool left, right;
@@ -55,6 +58,12 @@ struct TRINITY_DLL_DECL boss_kologarnAI : public BossAI
me->Attack(who, true);
}
+ void JustDied(Unit *victim)
+ {
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_KOLOGARN, DONE);
+ }
+
void PassengerBoarded(Unit *who, int8 seatId, bool apply)
{
if(who->GetTypeId() == TYPEID_UNIT)
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_razorscale.cpp b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_razorscale.cpp
index c8247c5b91f..ad72abf43e6 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_razorscale.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_razorscale.cpp
@@ -66,9 +66,9 @@ static float SpawnLocations[4][3]=
{626.6, -271.5, 391.4},
};
-struct TRINITY_DLL_DECL boss_razorscaleAI : public ScriptedAI
+struct TRINITY_DLL_DECL boss_razorscaleAI : public BossAI
{
- boss_razorscaleAI(Creature* c) : ScriptedAI(c) {}
+ boss_razorscaleAI(Creature *pCreature) : BossAI(pCreature, TYPE_RAZORSCALE) {}
uint32 Phase;
@@ -126,8 +126,10 @@ struct TRINITY_DLL_DECL boss_razorscaleAI : public ScriptedAI
if(m_creature->GetPositionY() > -60 || m_creature->GetPositionX() < 450) // Not Blizzlike, anti-exploit to prevent players from pulling bosses to vehicles.
{
- m_creature->SetHealth(m_creature->GetMaxHealth());
- DoCast(m_creature->getVictim(), SPELL_FIREBALL);
+ m_creature->RemoveAllAuras();
+ m_creature->DeleteThreatList();
+ m_creature->CombatStop(false);
+ m_creature->GetMotionMaster()->MoveTargetedHome();
}
if (((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 99) && (Phase == 1))
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_thorim.cpp b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_thorim.cpp
index a736b2db12a..d0bd4c87c04 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_thorim.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_thorim.cpp
@@ -18,3 +18,71 @@
#include "precompiled.h"
#include "def_ulduar.h"
+
+/*
+#define SAY_AGGRO -1
+#define SAY_SLAY -1
+*/
+
+struct TRINITY_DLL_DECL boss_thorimAI : public BossAI
+{
+ boss_thorimAI(Creature* pCreature) : BossAI(pCreature, TYPE_THORIM)
+ {
+ m_pInstance = pCreature->GetInstanceData();
+ Reset();
+ }
+
+ ScriptedInstance* m_pInstance;
+
+ void Reset()
+ {
+ }
+
+ void KilledUnit(Unit *victim)
+ {
+ }
+
+ void JustDied(Unit *victim)
+ {
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_THORIM, DONE);
+ }
+
+ void Aggro(Unit* pWho)
+ {
+// DoScriptText(SAY_AGGRO, m_creature);
+ m_creature->SetInCombatWithZone();
+
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_THORIM, IN_PROGRESS);
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!UpdateVictim())
+ return;
+//SPELLS TODO:
+
+//
+ DoMeleeAttackIfReady();
+
+ EnterEvadeIfOutOfCombatArea(diff);
+
+ }
+
+};
+
+CreatureAI* GetAI_boss_thorim(Creature* pCreature)
+{
+ return new boss_thorimAI(pCreature);
+}
+
+void AddSC_boss_thorim()
+{
+ Script *newscript;
+ newscript = new Script;
+ newscript->Name = "boss_thorim";
+ newscript->GetAI = &GetAI_boss_thorim;
+ newscript->RegisterSelf();
+
+}
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_xt002.cpp b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_xt002.cpp
index df1b4e40e2e..e5889969716 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_xt002.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/boss_xt002.cpp
@@ -24,9 +24,15 @@
#define SAY_AGGRO -1000000
#define SAY_SLAY -1000001
-struct TRINITY_DLL_DECL boss_xt002_AI : public ScriptedAI
+
+struct TRINITY_DLL_DECL boss_xt002_AI : public BossAI
{
- boss_xt002_AI(Creature *c) : ScriptedAI(c) {}
+ boss_xt002_AI(Creature *pCreature) : BossAI(pCreature, TYPE_XT002)
+ {
+ m_pInstance = pCreature->GetInstanceData();
+ }
+
+ ScriptedInstance* m_pInstance;
uint32 SEARING_LIGHT_Timer;
uint32 SONIC_BOOM_Timer;
@@ -49,6 +55,9 @@ struct TRINITY_DLL_DECL boss_xt002_AI : public ScriptedAI
void JustDied(Unit *victim)
{
DoScriptText(SAY_SLAY, m_creature);
+
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_XT002, DONE);
}
void MoveInLineOfSight(Unit* who) {}
@@ -60,8 +69,10 @@ struct TRINITY_DLL_DECL boss_xt002_AI : public ScriptedAI
if(m_creature->GetPositionX() < 700) // Not Blizzlike, anti-exploit to prevent players from pulling bosses to vehicles.
{
- m_creature->SetHealth(m_creature->GetMaxHealth());
- DoCast(m_creature->getVictim(),SPELL_SONIC_BOOM);
+ m_creature->RemoveAllAuras();
+ m_creature->DeleteThreatList();
+ m_creature->CombatStop(false);
+ m_creature->GetMotionMaster()->MoveTargetedHome();
}
if (SEARING_LIGHT_Timer < diff)
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/def_ulduar.h b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/def_ulduar.h
index cf10a5cbdd0..5c301fc5dcd 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/def_ulduar.h
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/def_ulduar.h
@@ -19,31 +19,47 @@
#ifndef DEF_ULDUAR_H
#define DEF_ULDUAR_H
-enum Encounter
+enum eEnums
{
- BOSS_LEVIATHAN,
- BOSS_IGNIS,
- BOSS_RAZORSCALE,
- BOSS_XT002,
- BOSS_ASSEMBLY,
- BOSS_KOLOGARN,
- BOSS_AURIAYA,
- BOSS_MIMIRON,
- BOSS_HODIR,
- BOSS_THORIM,
- BOSS_FREYA,
- BOSS_VEZAX,
- BOSS_YOGGSARON,
- BOSS_ALGALON,
- MAX_ENCOUNTER
-};
+ MAX_ENCOUNTER = 14,
-enum
-{
- DATA_ASSEMBLY,
- DATA_STEELBREAKER,
- DATA_RUNEMASTER_MOLGEIM,
- DATA_STORMCALLER_BRUNDIR
+ TYPE_LEVIATHAN = 0,
+ TYPE_IGNIS = 1,
+ TYPE_RAZORSCALE = 2,
+ TYPE_XT002 = 3,
+ TYPE_ASSEMBLY = 4,
+ TYPE_KOLOGARN = 5,
+ TYPE_AURIAYA = 6,
+ TYPE_MIMIRON = 7,
+ TYPE_HODIR = 8,
+ TYPE_THORIM = 9,
+ TYPE_FREYA = 10,
+ TYPE_VEZAX = 11,
+ TYPE_YOGGSARON = 12,
+ TYPE_ALGALON = 13,
+ DATA_STEELBREAKER = 20,
+ DATA_MOLGEIM = 21,
+ DATA_BRUNDIR = 22,
+ DATA_RUNEMASTER_MOLGEIM = 23,
+ DATA_STORMCALLER_BRUNDIR = 24,
+
+ NPC_LEVIATHAN = 33113,
+ NPC_IGNIS = 33118,
+ NPC_RAZORSCALE = 33186,
+ NPC_XT002 = 33293,
+ NPC_STEELBREAKER = 32867,
+ NPC_MOLGEIM = 32927,
+ NPC_BRUNDIR = 32857,
+ NPC_KOLOGARN = 32930,
+ NPC_AURIAYA = 33515,
+ NPC_MIMIRON = 33350,
+ NPC_HODIR = 32845,
+ NPC_THORIM = 32865,
+ NPC_FREYA = 32906,
+ NPC_VEZAX = 33271,
+ NPC_YOGGSARON = 33288,
+ NPC_ALGALON = 32871
};
+
#endif
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/instance_ulduar.cpp b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/instance_ulduar.cpp
index d7d95f59a6e..a321c03f49b 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/instance_ulduar.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/instance_ulduar.cpp
@@ -19,26 +19,73 @@
#include "precompiled.h"
#include "def_ulduar.h"
+enum eEnums
+{
+ GO_Kologarn_CHEST_HERO = 195047,
+ GO_Kologarn_CHEST = 195046,
+ GO_Thorim_CHEST_HERO = 194315,
+ GO_Thorim_CHEST = 194314,
+ GO_Hodir_CHEST_HERO = 194308,
+ GO_Hodir_CHEST = 194307,
+ GO_Freya_CHEST_HERO = 194325,
+ GO_Freya_CHEST = 194324,
+};
+
struct TRINITY_DLL_DECL instance_ulduar : public ScriptedInstance
{
- instance_ulduar(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
+ instance_ulduar(Map* pMap) : ScriptedInstance(pMap), KologarnChest(NULL), ThorimChest(NULL), HodirChest(NULL), FreyaChest(NULL) { Initialize(); };
uint32 m_auiEncounter[MAX_ENCOUNTER];
+ std::string m_strInstData;
- uint64 boss_assembly[3];
+ uint64 m_uiLeviathanGUID;
+ uint64 m_uiIgnisGUID;
+ uint64 m_uiRazorscaleGUID;
+ uint64 m_uiXT002GUID;
+ uint64 m_auiAssemblyGUIDs[3];
+ uint64 m_uiKologarnGUID;
+ uint64 m_uiAuriayaGUID;
+ uint64 m_uiMimironGUID;
+ uint64 m_uiHodirGUID;
+ uint64 m_uiThorimGUID;
+ uint64 m_uiFreyaGUID;
+ uint64 m_uiVezaxGUID;
+ uint64 m_uiYoggSaronGUID;
+ uint64 m_uiAlgalonGUID;
+
+ GameObject* KologarnChest, *ThorimChest, *HodirChest, *FreyaChest;
void Initialize()
{
- memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
+ m_uiLeviathanGUID = 0;
+ m_uiIgnisGUID = 0;
+ m_uiRazorscaleGUID = 0;
+ m_uiXT002GUID = 0;
+ m_uiKologarnGUID = 0;
+ m_uiAuriayaGUID = 0;
+ m_uiMimironGUID = 0;
+ m_uiHodirGUID = 0;
+ m_uiThorimGUID = 0;
+ m_uiFreyaGUID = 0;
+ m_uiVezaxGUID = 0;
+ m_uiYoggSaronGUID = 0;
+ m_uiAlgalonGUID = 0;
+ KologarnChest = 0;
+ ThorimChest = 0;
+ HodirChest = 0;
+ FreyaChest = 0;
- for(uint8 i = 0; i < 3; ++i)
- boss_assembly[i] = 0;
+ memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
+ memset(&m_auiAssemblyGUIDs, 0, sizeof(m_auiAssemblyGUIDs));
}
bool IsEncounterInProgress() const
{
for(uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- if (m_auiEncounter[i] == IN_PROGRESS) return true;
+ {
+ if (m_auiEncounter[i] == IN_PROGRESS)
+ return true;
+ }
return false;
}
@@ -47,60 +94,222 @@ struct TRINITY_DLL_DECL instance_ulduar : public ScriptedInstance
{
switch(pCreature->GetEntry())
{
- case 32867: boss_assembly[0] = pCreature->GetGUID(); break;
- case 32927: boss_assembly[1] = pCreature->GetGUID(); break;
- case 32857: boss_assembly[2] = pCreature->GetGUID(); break;
+ case NPC_LEVIATHAN:
+ m_uiLeviathanGUID = pCreature->GetGUID();
+ break;
+ case NPC_IGNIS:
+ m_uiIgnisGUID = pCreature->GetGUID();
+ break;
+ case NPC_RAZORSCALE:
+ m_uiRazorscaleGUID = pCreature->GetGUID();
+ break;
+ case NPC_XT002:
+ m_uiXT002GUID = pCreature->GetGUID();
+ break;
+
+ // Assembly of Iron
+ case NPC_STEELBREAKER:
+ m_auiAssemblyGUIDs[0] = pCreature->GetGUID();
+ break;
+ case NPC_MOLGEIM:
+ m_auiAssemblyGUIDs[1] = pCreature->GetGUID();
+ break;
+ case NPC_BRUNDIR:
+ m_auiAssemblyGUIDs[2] = pCreature->GetGUID();
+ break;
+
+ case NPC_KOLOGARN:
+ m_uiKologarnGUID = pCreature->GetGUID();
+ break;
+ case NPC_AURIAYA:
+ m_uiAuriayaGUID = pCreature->GetGUID();
+ break;
+ case NPC_MIMIRON:
+ m_uiMimironGUID = pCreature->GetGUID();
+ break;
+ case NPC_HODIR:
+ m_uiHodirGUID = pCreature->GetGUID();
+ break;
+ case NPC_THORIM:
+ m_uiThorimGUID = pCreature->GetGUID();
+ break;
+ case NPC_FREYA:
+ m_uiFreyaGUID = pCreature->GetGUID();
+ break;
+ case NPC_VEZAX:
+ m_uiVezaxGUID = pCreature->GetGUID();
+ break;
+ case NPC_YOGGSARON:
+ m_uiYoggSaronGUID = pCreature->GetGUID();
+ break;
+ case NPC_ALGALON:
+ m_uiAlgalonGUID = pCreature->GetGUID();
+ break;
}
}
- uint64 GetData64(uint32 identifier)
+ void OnGameObjectCreate(GameObject* pGo, bool add)
+ {
+ switch(pGo->GetEntry())
+ {
+ case GO_Kologarn_CHEST_HERO: KologarnChest = add ? pGo : NULL; break;
+ case GO_Kologarn_CHEST: KologarnChest = add ? pGo : NULL; break;
+ case GO_Thorim_CHEST_HERO: ThorimChest = add ? pGo : NULL; break;
+ case GO_Thorim_CHEST: ThorimChest = add ? pGo : NULL; break;
+ case GO_Hodir_CHEST_HERO: HodirChest = add ? pGo : NULL; break;
+ case GO_Hodir_CHEST: HodirChest = add ? pGo : NULL; break;
+ case GO_Freya_CHEST_HERO: FreyaChest = add ? pGo : NULL; break;
+ case GO_Freya_CHEST: FreyaChest = add ? pGo : NULL; break;
+ }
+ }
+
+ void SetData(uint32 type, uint32 data)
{
- switch(identifier)
+ switch(type)
+ {
+ case TYPE_LEVIATHAN:
+ case TYPE_IGNIS:
+ case TYPE_RAZORSCALE:
+ case TYPE_XT002:
+ case TYPE_ASSEMBLY:
+ case TYPE_KOLOGARN:
+ m_auiEncounter[TYPE_KOLOGARN] = data;
+ if (data == DONE && KologarnChest)
+ KologarnChest->SetRespawnTime(KologarnChest->GetRespawnDelay());
+ case TYPE_AURIAYA:
+ case TYPE_MIMIRON:
+ case TYPE_HODIR:
+ m_auiEncounter[TYPE_HODIR] = data;
+ if (data == DONE && HodirChest)
+ HodirChest->SetRespawnTime(HodirChest->GetRespawnDelay());
+ case TYPE_THORIM:
+ m_auiEncounter[TYPE_THORIM] = data;
+ if (data == DONE && ThorimChest)
+ ThorimChest->SetRespawnTime(ThorimChest->GetRespawnDelay());
+ case TYPE_FREYA:
+ m_auiEncounter[TYPE_FREYA] = data;
+ if (data == DONE && FreyaChest)
+ FreyaChest->SetRespawnTime(FreyaChest->GetRespawnDelay());
+ case TYPE_VEZAX:
+ case TYPE_YOGGSARON:
+ case TYPE_ALGALON:
+ m_auiEncounter[type] = data;
+ break;
+ }
+
+ if (data == DONE)
{
- case DATA_STEELBREAKER: return boss_assembly[0]; // Keep these three in current order
- case DATA_RUNEMASTER_MOLGEIM: return boss_assembly[1];
- case DATA_STORMCALLER_BRUNDIR: return boss_assembly[2];
- default: return 0;
+ OUT_SAVE_INST_DATA;
+
+ std::ostringstream saveStream;
+
+ for(uint8 i = 0; i < MAX_ENCOUNTER; ++i)
+ saveStream << m_auiEncounter[i] << " ";
+
+ m_strInstData = saveStream.str();
+
+ SaveToDB();
+ OUT_SAVE_INST_DATA_COMPLETE;
}
}
+ uint64 GetData64(uint32 data)
+ {
+ switch(data)
+ {
+ case TYPE_LEVIATHAN:
+ return m_uiLeviathanGUID;
+ case TYPE_IGNIS:
+ return m_uiIgnisGUID;
+ case TYPE_RAZORSCALE:
+ return m_uiRazorscaleGUID;
+ case TYPE_XT002:
+ return m_uiXT002GUID;
+ case TYPE_KOLOGARN:
+ return m_uiKologarnGUID;
+ case TYPE_AURIAYA:
+ return m_uiAuriayaGUID;
+ case TYPE_MIMIRON:
+ return m_uiMimironGUID;
+ case TYPE_HODIR:
+ return m_uiMimironGUID;
+ case TYPE_THORIM:
+ return m_uiThorimGUID;
+ case TYPE_FREYA:
+ return m_uiFreyaGUID;
+ case TYPE_VEZAX:
+ return m_uiVezaxGUID;
+ case TYPE_YOGGSARON:
+ return m_uiYoggSaronGUID;
+ case TYPE_ALGALON:
+ return m_uiAlgalonGUID;
+
+ // Assembly of Iron
+ case DATA_STEELBREAKER:
+ return m_auiAssemblyGUIDs[0];
+ case DATA_MOLGEIM:
+ return m_auiAssemblyGUIDs[1];
+ case DATA_BRUNDIR:
+ return m_auiAssemblyGUIDs[2];
+ }
+
+ return 0;
+ }
+
uint32 GetData(uint32 type)
{
switch(type)
{
- case BOSS_LEVIATHAN:
- case BOSS_IGNIS:
- case BOSS_RAZORSCALE:
- case BOSS_XT002:
- case BOSS_ASSEMBLY:
- case BOSS_KOLOGARN:
- case BOSS_AURIAYA:
- case BOSS_MIMIRON:
- case BOSS_HODIR:
- case BOSS_THORIM:
- case BOSS_FREYA:
- case BOSS_VEZAX:
- case BOSS_YOGGSARON:
- case BOSS_ALGALON:
+ case TYPE_LEVIATHAN:
+ case TYPE_IGNIS:
+ case TYPE_RAZORSCALE:
+ case TYPE_XT002:
+ case TYPE_ASSEMBLY:
+ case TYPE_KOLOGARN:
+ case TYPE_AURIAYA:
+ case TYPE_MIMIRON:
+ case TYPE_HODIR:
+ case TYPE_THORIM:
+ case TYPE_FREYA:
+ case TYPE_VEZAX:
+ case TYPE_YOGGSARON:
+ case TYPE_ALGALON:
return m_auiEncounter[type];
}
return 0;
}
- void SetData(uint32 type, uint32 data)
+ const char* Save()
{
- switch(type)
+ return m_strInstData.c_str();
+ }
+
+ void Load(const char* strIn)
+ {
+ if (!strIn)
{
- case DATA_ASSEMBLY:
- m_auiEncounter[BOSS_ASSEMBLY] = data;
- break;
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
}
+
+ OUT_LOAD_INST_DATA(strIn);
+
+ std::istringstream loadStream(strIn);
+
+ for(uint8 i = 0; i < MAX_ENCOUNTER; ++i)
+ {
+ loadStream >> m_auiEncounter[i];
+
+ if (m_auiEncounter[i] == IN_PROGRESS)
+ m_auiEncounter[i] = NOT_STARTED;
+ }
+
+ OUT_LOAD_INST_DATA_COMPLETE;
}
};
-
InstanceData* GetInstanceData_instance_ulduar(Map* pMap)
{
return new instance_ulduar(pMap);
@@ -113,4 +322,4 @@ void AddSC_instance_ulduar()
newscript->Name = "instance_ulduar";
newscript->GetInstanceData = &GetInstanceData_instance_ulduar;
newscript->RegisterSelf();
-} \ No newline at end of file
+}
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/ulduar/ulduar_teleporter.cpp b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/ulduar_teleporter.cpp
new file mode 100644
index 00000000000..19637c4961a
--- /dev/null
+++ b/src/bindings/scripts/scripts/northrend/ulduar/ulduar/ulduar_teleporter.cpp
@@ -0,0 +1,92 @@
+#include "precompiled.h"
+#include "def_ulduar.h"
+
+/*
+The teleporter appears to be active and stable.
+
+- Expedition Base Camp
+- Formation Grounds
+- Colossal Forge
+- Scrapyard
+- Antechamber of Ulduar
+- Shattered Walkway
+- Conservatory of Life
+*/
+
+#define BASE_CAMP 200
+#define GROUNDS 201
+#define FORGE 202
+#define SCRAPYARD 203
+#define ANTECHAMBER 204
+#define WALKWAY 205
+#define CONSERVATORY 206
+
+bool GoHello_ulduar_teleporter( Player *pPlayer, GameObject *pGO )
+{
+ ScriptedInstance *pInstance = (ScriptedInstance *) pGO->GetInstanceData();
+ if(!pInstance) return true;
+
+ pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Expedition Base Camp", GOSSIP_SENDER_MAIN, BASE_CAMP);
+ pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Formation Grounds", GOSSIP_SENDER_MAIN, GROUNDS);
+ if(pInstance->GetData(TYPE_LEVIATHAN) == DONE)
+ {
+ pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Colossal Forge", GOSSIP_SENDER_MAIN, FORGE);
+ if(pInstance->GetData(TYPE_XT002) == DONE)
+ {
+ pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Scrapyard", GOSSIP_SENDER_MAIN, SCRAPYARD);
+ pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Antechamber of Ulduar", GOSSIP_SENDER_MAIN, ANTECHAMBER);
+ if(pInstance->GetData(TYPE_KOLOGARN) == DONE)
+ {
+ pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Shattered Walkway", GOSSIP_SENDER_MAIN, WALKWAY);
+ if(pInstance->GetData(TYPE_AURIAYA) == DONE)
+ pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Conservatory of Life", GOSSIP_SENDER_MAIN, CONSERVATORY);
+ }
+ }
+ }
+ pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pGO->GetGUID());
+
+ return true;
+}
+
+bool GOSelect_ulduar_teleporter( Player *pPlayer, GameObject *pGO, uint32 sender, uint32 action )
+{
+ if(sender != GOSSIP_SENDER_MAIN) return true;
+ if(!pPlayer->getAttackers().empty()) return true;
+
+ switch(action)
+ {
+ case BASE_CAMP:
+ pPlayer->TeleportTo(603, -706.122, -92.6024, 429.876, 0);
+ pPlayer->CLOSE_GOSSIP_MENU(); break;
+ case GROUNDS:
+ pPlayer->TeleportTo(603, 131.248, -35.3802, 409.804, 0);
+ pPlayer->CLOSE_GOSSIP_MENU(); break;
+ case FORGE:
+ pPlayer->TeleportTo(603, 553.233, -12.3247, 409.679, 0);
+ pPlayer->CLOSE_GOSSIP_MENU(); break;
+ case SCRAPYARD:
+ pPlayer->TeleportTo(603, 926.292, -11.4635, 418.595, 0);
+ pPlayer->CLOSE_GOSSIP_MENU(); break;
+ case ANTECHAMBER:
+ pPlayer->TeleportTo(603, 1498.09, -24.246, 420.967, 0);
+ pPlayer->CLOSE_GOSSIP_MENU(); break;
+ case WALKWAY:
+ pPlayer->TeleportTo(603, 1859.45, -24.1, 448.9, 0);
+ pPlayer->CLOSE_GOSSIP_MENU(); break;
+ case CONSERVATORY:
+ pPlayer->TeleportTo(603, 2086.27, -24.3134, 421.239, 0);
+ pPlayer->CLOSE_GOSSIP_MENU(); break;
+ }
+
+ return true;
+}
+
+void AddSC_ulduar_teleporter()
+{
+ Script *newscript;
+ newscript = new Script;
+ newscript->Name = "ulduar_teleporter";
+ newscript->pGOHello = &GoHello_ulduar_teleporter;
+ newscript->pGOSelect = &GOSelect_ulduar_teleporter;
+ newscript->RegisterSelf();
+}
diff --git a/src/bindings/scripts/system/ScriptLoader.cpp b/src/bindings/scripts/system/ScriptLoader.cpp
index 78087da9629..b4906d4dc3d 100644
--- a/src/bindings/scripts/system/ScriptLoader.cpp
+++ b/src/bindings/scripts/system/ScriptLoader.cpp
@@ -313,6 +313,7 @@ extern void AddSC_boss_razorscale();
extern void AddSC_boss_xt002();
extern void AddSC_boss_kologarn();
extern void AddSC_boss_assembly_of_iron();
+extern void AddSC_ulduar_teleporter();
extern void AddSC_instance_ulduar();
extern void AddSC_boss_keleseth(); //Utgarde Keep
extern void AddSC_boss_skarvald_dalronn();
@@ -734,6 +735,7 @@ void AddScripts()
AddSC_boss_xt002();
AddSC_boss_assembly_of_iron();
AddSC_boss_kologarn();
+ AddSC_ulduar_teleporter();
AddSC_instance_ulduar();
AddSC_boss_keleseth(); //Utgarde Keep
AddSC_boss_skarvald_dalronn();
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index edddf7264ea..6dd1a6cc85a 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -1643,7 +1643,7 @@ void Spell::EffectDummy(uint32 i)
if (m_spellInfo->SpellFamilyFlags[1] & 0x20000 && i == 1)
{
int32 dmg = m_damage * damage / 100;
- m_caster->CastCustomSpell(unitTarget, 54171, &dmg , 0, 0, true);
+ m_caster->CastCustomSpell(unitTarget, 54171, &dmg, 0, 0, true);
return;
}
switch(m_spellInfo->SpellIconID)
@@ -1683,7 +1683,7 @@ void Spell::EffectDummy(uint32 i)
{
case 54171: //Divine Storm
{
- m_caster->CastCustomSpell(unitTarget, 54172, damage , 0, 0, true);
+ m_caster->CastCustomSpell(unitTarget, 54172, &damage, 0, 0, true);
}
case 20425: // Judgement of command
{