diff options
Diffstat (limited to 'src')
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 { |