*Ulduar teleporter, and updates, by BonDit. Thanks AniRB.
*Fixed some typos in last commit. --HG-- branch : trunk
This commit is contained in:
1 parent
8d6defa7ee
commit
279d93360f
19 files changed
+665
-92
No files matched your search
@@ -1154,6 +1154,7 @@ UPDATE `creature_template` SET `ScriptName`='boss_stormcaller_brundir' WHERE `en
|
||||
UPDATE `creature_template` SET `ScriptName`='mob_lightning_elemental' WHERE `entry`=32958;
|
||||
UPDATE `creature_template` SET `ScriptName`='mob_rune_of_summoning' WHERE `entry`=33051;
|
||||
UPDATE `creature_template` SET `ScriptName`='boss_kologarn' WHERE `entry`=32930;
|
||||
UPDATE `gameobject_template` SET `ScriptName`='ulduar_teleporter' WHERE `entry`=194569;
|
||||
|
||||
/* UN'GORO CRATER */
|
||||
UPDATE `creature_template` SET `ScriptName`='npc_ame' WHERE `entry`=9623;
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
UPDATE `gameobject_template` SET `ScriptName`='ulduar_teleporter' WHERE `entry`=194569;
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
DATA_ASSEMBLY,
|
||||
DATA_STEELBREAKER,
|
||||
DATA_RUNEMASTER_MOLGEIM,
|
||||
DATA_STORMCALLER_BRUNDIR
|
||||
|
||||
};
|
||||
#endif
|
||||
@@ -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,59 +94,221 @@ 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(identifier)
|
||||
switch(pGo->GetEntry())
|
||||
{
|
||||
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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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:
|
||||
return m_auiEncounter[type];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case DATA_ASSEMBLY:
|
||||
m_auiEncounter[BOSS_ASSEMBLY] = data;
|
||||
break;
|
||||
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)
|
||||
{
|
||||
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 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;
|
||||
}
|
||||
|
||||
const char* Save()
|
||||
{
|
||||
return m_strInstData.c_str();
|
||||
}
|
||||
|
||||
void Load(const char* strIn)
|
||||
{
|
||||
if (!strIn)
|
||||
{
|
||||
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)
|
||||
{
|
||||
@@ -113,4 +322,4 @@ void AddSC_instance_ulduar()
|
||||
newscript->Name = "instance_ulduar";
|
||||
newscript->GetInstanceData = &GetInstanceData_instance_ulduar;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user