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
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
UPDATE `spell_linked_spell` SET `spell_trigger`=62821 WHERE `spell_trigger`=65280;
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
UPDATE `creature_template` SET `unit_flags`=4,`flags_extra`=2 where `entry`=33342;
|
||||||
@@ -76,7 +76,7 @@ public:
|
|||||||
|
|
||||||
CreatureAI* GetAI(Creature* pCreature) const
|
CreatureAI* GetAI(Creature* pCreature) const
|
||||||
{
|
{
|
||||||
return new boss_algalonAI(pCreature);
|
return GetUlduarAI<boss_algalonAI>(pCreature);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct boss_algalonAI : public ScriptedAI
|
struct boss_algalonAI : public ScriptedAI
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ public:
|
|||||||
|
|
||||||
CreatureAI* GetAI(Creature* pCreature) const
|
CreatureAI* GetAI(Creature* pCreature) const
|
||||||
{
|
{
|
||||||
return new boss_steelbreakerAI (pCreature);
|
return GetUlduarAI<boss_steelbreakerAI>(pCreature);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct boss_steelbreakerAI : public ScriptedAI
|
struct boss_steelbreakerAI : public ScriptedAI
|
||||||
@@ -350,7 +350,7 @@ public:
|
|||||||
|
|
||||||
CreatureAI* GetAI(Creature* pCreature) const
|
CreatureAI* GetAI(Creature* pCreature) const
|
||||||
{
|
{
|
||||||
return new boss_runemaster_molgeimAI (pCreature);
|
return GetUlduarAI<boss_runemaster_molgeimAI>(pCreature);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct boss_runemaster_molgeimAI : public ScriptedAI
|
struct boss_runemaster_molgeimAI : public ScriptedAI
|
||||||
@@ -591,7 +591,7 @@ public:
|
|||||||
|
|
||||||
CreatureAI* GetAI(Creature* pCreature) const
|
CreatureAI* GetAI(Creature* pCreature) const
|
||||||
{
|
{
|
||||||
return new boss_stormcaller_brundirAI (pCreature);
|
return GetUlduarAI<boss_stormcaller_brundirAI>(pCreature);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct boss_stormcaller_brundirAI : public ScriptedAI
|
struct boss_stormcaller_brundirAI : public ScriptedAI
|
||||||
|
|||||||
@@ -238,9 +238,6 @@ class boss_flame_leviathan : public CreatureScript
|
|||||||
Shutout = true;
|
Shutout = true;
|
||||||
Unbroken = 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->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
|
||||||
me->SetReactState(REACT_PASSIVE);
|
me->SetReactState(REACT_PASSIVE);
|
||||||
}
|
}
|
||||||
@@ -572,7 +569,7 @@ class boss_flame_leviathan : public CreatureScript
|
|||||||
|
|
||||||
CreatureAI* GetAI(Creature* creature) const
|
CreatureAI* GetAI(Creature* creature) const
|
||||||
{
|
{
|
||||||
return new boss_flame_leviathanAI(creature);
|
return GetUlduarAI<boss_flame_leviathanAI>(creature);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -339,7 +339,7 @@ class boss_freya : public CreatureScript
|
|||||||
Creature* Elder[3];
|
Creature* Elder[3];
|
||||||
for (uint8 n = 0; n < 3; ++n)
|
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())
|
if (Elder[n] && Elder[n]->isAlive())
|
||||||
{
|
{
|
||||||
Elder[n]->setFaction(35);
|
Elder[n]->setFaction(35);
|
||||||
@@ -359,7 +359,7 @@ class boss_freya : public CreatureScript
|
|||||||
Creature* Elder[3];
|
Creature* Elder[3];
|
||||||
for (uint8 n = 0; n < 3; ++n)
|
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())
|
if (Elder[n] && Elder[n]->isAlive())
|
||||||
{
|
{
|
||||||
me->AddAura(SPELL_DRAINED_OF_POWER, Elder[n]);
|
me->AddAura(SPELL_DRAINED_OF_POWER, Elder[n]);
|
||||||
@@ -663,7 +663,7 @@ class boss_freya : public CreatureScript
|
|||||||
|
|
||||||
CreatureAI* GetAI(Creature* creature) const
|
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
|
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
|
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
|
CreatureAI* GetAI(Creature* creature) const
|
||||||
{
|
{
|
||||||
return new boss_elder_ironbranchAI(creature);
|
return GetUlduarAI<boss_elder_ironbranchAI>(creature);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -300,7 +300,7 @@ class boss_general_vezax : public CreatureScript
|
|||||||
|
|
||||||
CreatureAI* GetAI(Creature* creature) const
|
CreatureAI* GetAI(Creature* creature) const
|
||||||
{
|
{
|
||||||
return new boss_general_vezaxAI(creature);
|
return GetUlduarAI<boss_general_vezaxAI>(creature);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ enum HodirNPC
|
|||||||
NPC_SNOWPACKED_ICICLE = 33174,
|
NPC_SNOWPACKED_ICICLE = 33174,
|
||||||
NPC_ICICLE = 33169,
|
NPC_ICICLE = 33169,
|
||||||
NPC_ICICLE_SNOWDRIFT = 33173,
|
NPC_ICICLE_SNOWDRIFT = 33173,
|
||||||
|
NPC_TOASTY_FIRE = 33342,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum HodirGameObjects
|
enum HodirGameObjects
|
||||||
@@ -353,7 +354,7 @@ class boss_hodir : public CreatureScript
|
|||||||
me->RemoveAllAttackers();
|
me->RemoveAllAttackers();
|
||||||
me->AttackStop();
|
me->AttackStop();
|
||||||
me->SetReactState(REACT_PASSIVE);
|
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->InterruptNonMeleeSpells(true);
|
||||||
me->StopMoving();
|
me->StopMoving();
|
||||||
me->GetMotionMaster()->Clear();
|
me->GetMotionMaster()->Clear();
|
||||||
@@ -484,7 +485,7 @@ class boss_hodir : public CreatureScript
|
|||||||
|
|
||||||
CreatureAI* GetAI(Creature* creature) const
|
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
|
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();
|
instance = me->GetInstanceScript();
|
||||||
}
|
}
|
||||||
@@ -791,10 +792,23 @@ class npc_hodir_mage : public CreatureScript
|
|||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
events.Reset();
|
events.Reset();
|
||||||
|
summons.DespawnAll();
|
||||||
events.ScheduleEvent(EVENT_CONJURE_FIRE, urand(10000, 12500));
|
events.ScheduleEvent(EVENT_CONJURE_FIRE, urand(10000, 12500));
|
||||||
events.ScheduleEvent(EVENT_MELT_ICE, 5000);
|
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)
|
void UpdateAI(uint32 const diff)
|
||||||
{
|
{
|
||||||
if (!UpdateVictim() || me->HasUnitState(UNIT_STAT_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED))
|
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)
|
switch (eventId)
|
||||||
{
|
{
|
||||||
case EVENT_CONJURE_FIRE:
|
case EVENT_CONJURE_FIRE:
|
||||||
|
if (summons.size() >= RAID_MODE(2, 4))
|
||||||
|
break;
|
||||||
DoCast(me, SPELL_CONJURE_FIRE, true);
|
DoCast(me, SPELL_CONJURE_FIRE, true);
|
||||||
events.ScheduleEvent(EVENT_CONJURE_FIRE, urand(35000, 40000));
|
events.ScheduleEvent(EVENT_CONJURE_FIRE, urand(15000, 20000));
|
||||||
break;
|
break;
|
||||||
case EVENT_MELT_ICE:
|
case EVENT_MELT_ICE:
|
||||||
if (Creature* FlashFreeze = me->FindNearestCreature(NPC_FLASH_FREEZE, 50.0f, true))
|
if (Creature* FlashFreeze = me->FindNearestCreature(NPC_FLASH_FREEZE, 50.0f, true))
|
||||||
@@ -833,6 +849,7 @@ class npc_hodir_mage : public CreatureScript
|
|||||||
private:
|
private:
|
||||||
InstanceScript* instance;
|
InstanceScript* instance;
|
||||||
EventMap events;
|
EventMap events;
|
||||||
|
SummonList summons;
|
||||||
};
|
};
|
||||||
|
|
||||||
CreatureAI* GetAI(Creature* creature) const
|
CreatureAI* GetAI(Creature* creature) const
|
||||||
@@ -851,8 +868,6 @@ class npc_toasty_fire : public CreatureScript
|
|||||||
npc_toasty_fireAI(Creature* creature) : ScriptedAI(creature)
|
npc_toasty_fireAI(Creature* creature) : ScriptedAI(creature)
|
||||||
{
|
{
|
||||||
me->SetDisplayId(me->GetCreatureInfo()->Modelid2);
|
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()
|
void Reset()
|
||||||
|
|||||||
@@ -118,16 +118,14 @@ public:
|
|||||||
|
|
||||||
CreatureAI* GetAI(Creature* pCreature) const
|
CreatureAI* GetAI(Creature* pCreature) const
|
||||||
{
|
{
|
||||||
return new boss_ignis_AI (pCreature);
|
return GetUlduarAI<boss_ignis_AI>(pCreature);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct boss_ignis_AI : public BossAI
|
struct boss_ignis_AI : public BossAI
|
||||||
{
|
{
|
||||||
boss_ignis_AI(Creature *pCreature) : BossAI(pCreature, BOSS_IGNIS), vehicle(me->GetVehicleKit())
|
boss_ignis_AI(Creature *pCreature) : BossAI(pCreature, BOSS_IGNIS), vehicle(me->GetVehicleKit())
|
||||||
{
|
{
|
||||||
assert(vehicle);
|
ASSERT(vehicle);
|
||||||
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
|
|
||||||
me->ApplySpellImmune(0, IMMUNITY_ID, 49560, true); // Death Grip jump effect
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Vehicle *vehicle;
|
Vehicle *vehicle;
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ class boss_kologarn : public CreatureScript
|
|||||||
|
|
||||||
CreatureAI* GetAI(Creature* pCreature) const
|
CreatureAI* GetAI(Creature* pCreature) const
|
||||||
{
|
{
|
||||||
return new boss_kologarnAI (pCreature);
|
return GetUlduarAI<boss_kologarnAI>(pCreature);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct boss_kologarnAI : public BossAI
|
struct boss_kologarnAI : public BossAI
|
||||||
|
|||||||
@@ -315,8 +315,6 @@ class boss_razorscale : public CreatureScript
|
|||||||
{
|
{
|
||||||
// Do not let Razorscale be affected by Battle Shout buff
|
// Do not let Razorscale be affected by Battle Shout buff
|
||||||
me->ApplySpellImmune(0, IMMUNITY_ID, (SPELL_BATTLE_SHOUT), true);
|
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;
|
Phases phase;
|
||||||
@@ -569,7 +567,7 @@ class boss_razorscale : public CreatureScript
|
|||||||
|
|
||||||
CreatureAI* GetAI(Creature* creature) const
|
CreatureAI* GetAI(Creature* creature) const
|
||||||
{
|
{
|
||||||
return new boss_razorscaleAI(creature);
|
return GetUlduarAI<boss_razorscaleAI>(creature);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ public:
|
|||||||
|
|
||||||
CreatureAI* GetAI(Creature* pCreature) const
|
CreatureAI* GetAI(Creature* pCreature) const
|
||||||
{
|
{
|
||||||
return new boss_thorimAI(pCreature);
|
return GetUlduarAI<boss_thorimAI>(pCreature);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct boss_thorimAI : public BossAI
|
struct boss_thorimAI : public BossAI
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ public:
|
|||||||
|
|
||||||
CreatureAI* GetAI(Creature* pCreature) const
|
CreatureAI* GetAI(Creature* pCreature) const
|
||||||
{
|
{
|
||||||
return new boss_xt002_AI(pCreature);
|
return GetUlduarAI<boss_xt002_AI>(pCreature);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct boss_xt002_AI : public BossAI
|
struct boss_xt002_AI : public BossAI
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ public:
|
|||||||
uint64 ThorimChestGUID;
|
uint64 ThorimChestGUID;
|
||||||
uint64 HodirChestGUID;
|
uint64 HodirChestGUID;
|
||||||
uint64 FreyaChestGUID;
|
uint64 FreyaChestGUID;
|
||||||
|
uint64 HodirDoorGUID;
|
||||||
|
uint64 HodirIceDoorGUID;
|
||||||
|
|
||||||
uint32 TeamInInstance;
|
uint32 TeamInInstance;
|
||||||
|
|
||||||
@@ -106,6 +108,8 @@ public:
|
|||||||
FreyaChestGUID = 0;
|
FreyaChestGUID = 0;
|
||||||
LeviathanGateGUID = 0;
|
LeviathanGateGUID = 0;
|
||||||
VezaxDoorGUID = 0;
|
VezaxDoorGUID = 0;
|
||||||
|
HodirDoorGUID = 0;
|
||||||
|
HodirIceDoorGUID = 0;
|
||||||
TeamInInstance = 0;
|
TeamInInstance = 0;
|
||||||
|
|
||||||
memset(Encounter, 0, sizeof(Encounter));
|
memset(Encounter, 0, sizeof(Encounter));
|
||||||
@@ -328,6 +332,12 @@ public:
|
|||||||
case GO_MOLE_MACHINE:
|
case GO_MOLE_MACHINE:
|
||||||
if (GetBossState(BOSS_RAZORSCALE) == IN_PROGRESS)
|
if (GetBossState(BOSS_RAZORSCALE) == IN_PROGRESS)
|
||||||
gameObject->SetGoState(GO_STATE_ACTIVE);
|
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;
|
break;
|
||||||
case BOSS_HODIR:
|
case BOSS_HODIR:
|
||||||
if (state == DONE)
|
if (state == DONE)
|
||||||
|
{
|
||||||
if (GameObject* gameObject = instance->GetGameObject(HodirChestGUID))
|
if (GameObject* gameObject = instance->GetGameObject(HodirChestGUID))
|
||||||
gameObject->SetRespawnTime(gameObject->GetRespawnDelay());
|
gameObject->SetRespawnTime(gameObject->GetRespawnDelay());
|
||||||
|
HandleGameObject(HodirDoorGUID, true);
|
||||||
|
HandleGameObject(HodirIceDoorGUID, true);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case BOSS_THORIM:
|
case BOSS_THORIM:
|
||||||
if (state == DONE)
|
if (state == DONE)
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
#ifndef DEF_ULDUAR_H
|
#ifndef DEF_ULDUAR_H
|
||||||
#define DEF_ULDUAR_H
|
#define DEF_ULDUAR_H
|
||||||
|
|
||||||
|
#define UlduarScriptName "instance_ulduar"
|
||||||
|
|
||||||
enum UlduarBosses
|
enum UlduarBosses
|
||||||
{
|
{
|
||||||
MAX_ENCOUNTER = 20,
|
MAX_ENCOUNTER = 20,
|
||||||
@@ -129,6 +131,8 @@ enum UlduarGameObjects
|
|||||||
GO_RAZOR_HARPOON_3 = 194543,
|
GO_RAZOR_HARPOON_3 = 194543,
|
||||||
GO_RAZOR_HARPOON_4 = 194519,
|
GO_RAZOR_HARPOON_4 = 194519,
|
||||||
GO_RAZOR_BROKEN_HARPOON = 194565,
|
GO_RAZOR_BROKEN_HARPOON = 194565,
|
||||||
|
GO_HODIR_DOOR = 194634,
|
||||||
|
GO_HODIR_ICE_DOOR = 194441,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum UlduarTowerEvents
|
enum UlduarTowerEvents
|
||||||
@@ -157,4 +161,15 @@ enum UlduarAchievementCriteria
|
|||||||
ACHIEVEMENT_CRITERIA_QUICK_SHAVE_25 = 10063,
|
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
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user