aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLopin <Lopin@TwinStar.cz>2011-05-30 20:16:12 +0200
committerSupabad <Supabad.trinity@gmail.com>2011-05-30 20:24:57 +0200
commit8f5440b864b64236deb89f2c7a89162e917e4668 (patch)
tree8dae22bf0dc5b12da7721c1f8dc3af859632648f /src
parent91b572d6693be64d0ff9b7fff501d4db3a535fff (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')
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_algalon.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp6
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp5
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp12
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_hodir.cpp27
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_ignis.cpp6
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_kologarn.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_thorim.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_xt002.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp14
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h15
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