diff options
author | Lopin <Lopin@TwinStar.cz> | 2011-05-30 20:16:12 +0200 |
---|---|---|
committer | Supabad <Supabad.trinity@gmail.com> | 2011-05-30 20:24:57 +0200 |
commit | 8f5440b864b64236deb89f2c7a89162e917e4668 (patch) | |
tree | 8dae22bf0dc5b12da7721c1f8dc3af859632648f /src | |
parent | 91b572d6693be64d0ff9b7fff501d4db3a535fff (diff) |
Scripts/Ulduar:
* Fixed opening of Hodir's doors
* Fixed despawning of Toasty Fires and its spawning
* Immunity provided by Toasty Fire buff will now working
* Added instance Ulduar check for AIs ( like in Icecrown Citadel or Ruby Sanctum )
* Removed few redudant immunities
Diffstat (limited to 'src')
13 files changed, 68 insertions, 31 deletions
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_algalon.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_algalon.cpp index da07f861a8d..fee78783528 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_algalon.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_algalon.cpp @@ -76,7 +76,7 @@ public: CreatureAI* GetAI(Creature* pCreature) const { - return new boss_algalonAI(pCreature); + return GetUlduarAI<boss_algalonAI>(pCreature); } struct boss_algalonAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp index 6a10cad3470..b739e41150c 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp @@ -204,7 +204,7 @@ public: CreatureAI* GetAI(Creature* pCreature) const { - return new boss_steelbreakerAI (pCreature); + return GetUlduarAI<boss_steelbreakerAI>(pCreature); } struct boss_steelbreakerAI : public ScriptedAI @@ -350,7 +350,7 @@ public: CreatureAI* GetAI(Creature* pCreature) const { - return new boss_runemaster_molgeimAI (pCreature); + return GetUlduarAI<boss_runemaster_molgeimAI>(pCreature); } struct boss_runemaster_molgeimAI : public ScriptedAI @@ -591,7 +591,7 @@ public: CreatureAI* GetAI(Creature* pCreature) const { - return new boss_stormcaller_brundirAI (pCreature); + return GetUlduarAI<boss_stormcaller_brundirAI>(pCreature); } struct boss_stormcaller_brundirAI : public ScriptedAI diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp index 3f2ae24dc0d..0661cc42d16 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp @@ -238,9 +238,6 @@ class boss_flame_leviathan : public CreatureScript Shutout = true; Unbroken = true; - // need to have correct immunities set in db - me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true); - me->ApplySpellImmune(0, IMMUNITY_ID, 49560, true); //deathgrip me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); me->SetReactState(REACT_PASSIVE); } @@ -572,7 +569,7 @@ class boss_flame_leviathan : public CreatureScript CreatureAI* GetAI(Creature* creature) const { - return new boss_flame_leviathanAI(creature); + return GetUlduarAI<boss_flame_leviathanAI>(creature); } }; diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp index 3ba72c46df5..a633674075b 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp @@ -339,7 +339,7 @@ class boss_freya : public CreatureScript Creature* Elder[3]; for (uint8 n = 0; n < 3; ++n) { - Elder[n] = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_BRIGHTLEAF + n) : 0); + Elder[n] = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_BRIGHTLEAF + n)); if (Elder[n] && Elder[n]->isAlive()) { Elder[n]->setFaction(35); @@ -359,7 +359,7 @@ class boss_freya : public CreatureScript Creature* Elder[3]; for (uint8 n = 0; n < 3; ++n) { - Elder[n] = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_BRIGHTLEAF + n) : 0); + Elder[n] = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_BRIGHTLEAF + n)); if (Elder[n] && Elder[n]->isAlive()) { me->AddAura(SPELL_DRAINED_OF_POWER, Elder[n]); @@ -663,7 +663,7 @@ class boss_freya : public CreatureScript CreatureAI* GetAI(Creature* creature) const { - return new boss_freyaAI(creature); + return GetUlduarAI<boss_freyaAI>(creature); } }; @@ -780,7 +780,7 @@ class boss_elder_brightleaf : public CreatureScript CreatureAI* GetAI(Creature* creature) const { - return new boss_elder_brightleafAI(creature); + return GetUlduarAI<boss_elder_brightleafAI>(creature); } }; @@ -901,7 +901,7 @@ class boss_elder_stonebark : public CreatureScript CreatureAI* GetAI(Creature* creature) const { - return new boss_elder_stonebarkAI(creature); + return GetUlduarAI<boss_elder_stonebarkAI>(creature); } }; @@ -1009,7 +1009,7 @@ class boss_elder_ironbranch : public CreatureScript CreatureAI* GetAI(Creature* creature) const { - return new boss_elder_ironbranchAI(creature); + return GetUlduarAI<boss_elder_ironbranchAI>(creature); } }; diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp index 83311dbdbbd..52a2f220260 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp @@ -300,7 +300,7 @@ class boss_general_vezax : public CreatureScript CreatureAI* GetAI(Creature* creature) const { - return new boss_general_vezaxAI(creature); + return GetUlduarAI<boss_general_vezaxAI>(creature); } }; diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_hodir.cpp index d39ef1f3656..97f5670e787 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_hodir.cpp @@ -97,6 +97,7 @@ enum HodirNPC NPC_SNOWPACKED_ICICLE = 33174, NPC_ICICLE = 33169, NPC_ICICLE_SNOWDRIFT = 33173, + NPC_TOASTY_FIRE = 33342, }; enum HodirGameObjects @@ -353,7 +354,7 @@ class boss_hodir : public CreatureScript me->RemoveAllAttackers(); me->AttackStop(); me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE); + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE); me->InterruptNonMeleeSpells(true); me->StopMoving(); me->GetMotionMaster()->Clear(); @@ -484,7 +485,7 @@ class boss_hodir : public CreatureScript CreatureAI* GetAI(Creature* creature) const { - return new boss_hodirAI (creature); + return GetUlduarAI<boss_hodirAI>(creature); }; }; @@ -783,7 +784,7 @@ class npc_hodir_mage : public CreatureScript struct npc_hodir_mageAI : public ScriptedAI { - npc_hodir_mageAI(Creature* creature) : ScriptedAI(creature) + npc_hodir_mageAI(Creature* creature) : ScriptedAI(creature), summons(me) { instance = me->GetInstanceScript(); } @@ -791,10 +792,23 @@ class npc_hodir_mage : public CreatureScript void Reset() { events.Reset(); + summons.DespawnAll(); events.ScheduleEvent(EVENT_CONJURE_FIRE, urand(10000, 12500)); events.ScheduleEvent(EVENT_MELT_ICE, 5000); } + void JustSummoned(Creature* summoned) + { + if (summoned->GetEntry() == NPC_TOASTY_FIRE) + summons.Summon(summoned); + } + + void SummonedCreatureDespawn(Creature* summoned) + { + if (summoned->GetEntry() == NPC_TOASTY_FIRE) + summons.remove(summoned->GetGUID()); + } + void UpdateAI(uint32 const diff) { if (!UpdateVictim() || me->HasUnitState(UNIT_STAT_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED)) @@ -810,8 +824,10 @@ class npc_hodir_mage : public CreatureScript switch (eventId) { case EVENT_CONJURE_FIRE: + if (summons.size() >= RAID_MODE(2, 4)) + break; DoCast(me, SPELL_CONJURE_FIRE, true); - events.ScheduleEvent(EVENT_CONJURE_FIRE, urand(35000, 40000)); + events.ScheduleEvent(EVENT_CONJURE_FIRE, urand(15000, 20000)); break; case EVENT_MELT_ICE: if (Creature* FlashFreeze = me->FindNearestCreature(NPC_FLASH_FREEZE, 50.0f, true)) @@ -833,6 +849,7 @@ class npc_hodir_mage : public CreatureScript private: InstanceScript* instance; EventMap events; + SummonList summons; }; CreatureAI* GetAI(Creature* creature) const @@ -851,8 +868,6 @@ class npc_toasty_fire : public CreatureScript npc_toasty_fireAI(Creature* creature) : ScriptedAI(creature) { me->SetDisplayId(me->GetCreatureInfo()->Modelid2); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED); - me->SetReactState(REACT_PASSIVE); } void Reset() diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_ignis.cpp index b7a832e4cbc..5faa94ed5c8 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_ignis.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_ignis.cpp @@ -118,16 +118,14 @@ public: CreatureAI* GetAI(Creature* pCreature) const { - return new boss_ignis_AI (pCreature); + return GetUlduarAI<boss_ignis_AI>(pCreature); } struct boss_ignis_AI : public BossAI { boss_ignis_AI(Creature *pCreature) : BossAI(pCreature, BOSS_IGNIS), vehicle(me->GetVehicleKit()) { - assert(vehicle); - me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true); - me->ApplySpellImmune(0, IMMUNITY_ID, 49560, true); // Death Grip jump effect + ASSERT(vehicle); } Vehicle *vehicle; diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_kologarn.cpp index 675bb1002b2..7121f139d50 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_kologarn.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_kologarn.cpp @@ -97,7 +97,7 @@ class boss_kologarn : public CreatureScript CreatureAI* GetAI(Creature* pCreature) const { - return new boss_kologarnAI (pCreature); + return GetUlduarAI<boss_kologarnAI>(pCreature); } struct boss_kologarnAI : public BossAI diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp index ec8655f688c..789c17b1b1f 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp @@ -315,8 +315,6 @@ class boss_razorscale : public CreatureScript { // Do not let Razorscale be affected by Battle Shout buff me->ApplySpellImmune(0, IMMUNITY_ID, (SPELL_BATTLE_SHOUT), true); - me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true); - me->ApplySpellImmune(0, IMMUNITY_ID, 49560, true); // Death Grip } Phases phase; @@ -569,7 +567,7 @@ class boss_razorscale : public CreatureScript CreatureAI* GetAI(Creature* creature) const { - return new boss_razorscaleAI(creature); + return GetUlduarAI<boss_razorscaleAI>(creature); } }; diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_thorim.cpp index 30865ac6605..f8a474f3810 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_thorim.cpp @@ -48,7 +48,7 @@ public: CreatureAI* GetAI(Creature* pCreature) const { - return new boss_thorimAI(pCreature); + return GetUlduarAI<boss_thorimAI>(pCreature); } struct boss_thorimAI : public BossAI diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_xt002.cpp index d7f6a64ffcb..de46497d2b2 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_xt002.cpp @@ -171,7 +171,7 @@ public: CreatureAI* GetAI(Creature* pCreature) const { - return new boss_xt002_AI(pCreature); + return GetUlduarAI<boss_xt002_AI>(pCreature); } struct boss_xt002_AI : public BossAI diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp index b5592076165..4cd4d374872 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp @@ -73,6 +73,8 @@ public: uint64 ThorimChestGUID; uint64 HodirChestGUID; uint64 FreyaChestGUID; + uint64 HodirDoorGUID; + uint64 HodirIceDoorGUID; uint32 TeamInInstance; @@ -106,6 +108,8 @@ public: FreyaChestGUID = 0; LeviathanGateGUID = 0; VezaxDoorGUID = 0; + HodirDoorGUID = 0; + HodirIceDoorGUID = 0; TeamInInstance = 0; memset(Encounter, 0, sizeof(Encounter)); @@ -328,6 +332,12 @@ public: case GO_MOLE_MACHINE: if (GetBossState(BOSS_RAZORSCALE) == IN_PROGRESS) gameObject->SetGoState(GO_STATE_ACTIVE); + case GO_HODIR_DOOR: + HodirDoorGUID = gameObject->GetGUID(); + break; + case GO_HODIR_ICE_DOOR: + HodirIceDoorGUID = gameObject->GetGUID(); + break; } } @@ -404,8 +414,12 @@ public: break; case BOSS_HODIR: if (state == DONE) + { if (GameObject* gameObject = instance->GetGameObject(HodirChestGUID)) gameObject->SetRespawnTime(gameObject->GetRespawnDelay()); + HandleGameObject(HodirDoorGUID, true); + HandleGameObject(HodirIceDoorGUID, true); + } break; case BOSS_THORIM: if (state == DONE) diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h index 0ee05274aa3..c7050c98a7f 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h +++ b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h @@ -18,6 +18,8 @@ #ifndef DEF_ULDUAR_H #define DEF_ULDUAR_H +#define UlduarScriptName "instance_ulduar" + enum UlduarBosses { MAX_ENCOUNTER = 20, @@ -129,6 +131,8 @@ enum UlduarGameObjects GO_RAZOR_HARPOON_3 = 194543, GO_RAZOR_HARPOON_4 = 194519, GO_RAZOR_BROKEN_HARPOON = 194565, + GO_HODIR_DOOR = 194634, + GO_HODIR_ICE_DOOR = 194441, }; enum UlduarTowerEvents @@ -157,4 +161,15 @@ enum UlduarAchievementCriteria ACHIEVEMENT_CRITERIA_QUICK_SHAVE_25 = 10063, }; +template<class AI> +CreatureAI* GetUlduarAI(Creature* creature) +{ + if (InstanceMap* instance = creature->GetMap()->ToInstanceMap()) + if (instance->GetInstanceScript()) + if (instance->GetScriptId() == GetScriptId(UlduarScriptName)) + return new AI(creature); + + return NULL; +} + #endif |