Scripts/Ulduar: fix mark of the faceless and add missing door handling
This commit is contained in:
1 parent
27bc3b1751
commit
5c5b78c77c
4 files changed
+119
-96
No files matched your search
@@ -0,0 +1,4 @@
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id` IN (63276,63278);
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(63276,'spell_general_vezax_mark_of_the_faceless'),
|
||||
(63278,'spell_general_vezax_mark_of_the_faceless_leech');
|
||||
@@ -39,7 +39,7 @@ enum VezaxEmotes
|
||||
EMOTE_SURGE_OF_DARKNESS = 8,
|
||||
|
||||
// Saronite Vapor
|
||||
EMOTE_VAPORS = 9
|
||||
EMOTE_VAPORS = 0
|
||||
};
|
||||
|
||||
enum VezaxSpells
|
||||
@@ -443,14 +443,21 @@ class npc_saronite_vapors : public CreatureScript
|
||||
}
|
||||
};
|
||||
|
||||
class spell_mark_of_the_faceless : public SpellScriptLoader
|
||||
class spell_general_vezax_mark_of_the_faceless : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_mark_of_the_faceless() : SpellScriptLoader("spell_mark_of_the_faceless") { }
|
||||
spell_general_vezax_mark_of_the_faceless() : SpellScriptLoader("spell_general_vezax_mark_of_the_faceless") { }
|
||||
|
||||
class spell_mark_of_the_faceless_AuraScript : public AuraScript
|
||||
class spell_general_vezax_mark_of_the_faceless_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_mark_of_the_faceless_AuraScript);
|
||||
PrepareAuraScript(spell_general_vezax_mark_of_the_faceless_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_MARK_OF_THE_FACELESS_DAMAGE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleEffectPeriodic(AuraEffect const* aurEff)
|
||||
{
|
||||
@@ -460,13 +467,42 @@ class spell_mark_of_the_faceless : public SpellScriptLoader
|
||||
|
||||
void Register() OVERRIDE
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mark_of_the_faceless_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_general_vezax_mark_of_the_faceless_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const OVERRIDE
|
||||
{
|
||||
return new spell_mark_of_the_faceless_AuraScript();
|
||||
return new spell_general_vezax_mark_of_the_faceless_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_general_vezax_mark_of_the_faceless_leech : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_general_vezax_mark_of_the_faceless_leech() : SpellScriptLoader("spell_general_vezax_mark_of_the_faceless_leech") { }
|
||||
|
||||
class spell_general_vezax_mark_of_the_faceless_leech_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_general_vezax_mark_of_the_faceless_leech_SpellScript);
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
targets.remove(GetExplTargetWorldObject());
|
||||
|
||||
if (targets.empty())
|
||||
FinishCast(SPELL_FAILED_NO_VALID_TARGETS);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_general_vezax_mark_of_the_faceless_leech_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_general_vezax_mark_of_the_faceless_leech_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -554,7 +590,8 @@ void AddSC_boss_general_vezax()
|
||||
new boss_general_vezax();
|
||||
new boss_saronite_animus();
|
||||
new npc_saronite_vapors();
|
||||
new spell_mark_of_the_faceless();
|
||||
new spell_general_vezax_mark_of_the_faceless();
|
||||
new spell_general_vezax_mark_of_the_faceless_leech();
|
||||
new spell_general_vezax_saronite_vapors();
|
||||
new achievement_shadowdodger();
|
||||
new achievement_smell_saronite();
|
||||
|
||||
@@ -24,15 +24,21 @@
|
||||
|
||||
static DoorData const doorData[] =
|
||||
{
|
||||
{GO_LEVIATHAN_DOOR, BOSS_LEVIATHAN, DOOR_TYPE_ROOM, BOUNDARY_S },
|
||||
{GO_XT_002_DOOR, BOSS_XT002, DOOR_TYPE_ROOM, BOUNDARY_S },
|
||||
{GO_YOGG_SARON_DOOR, BOSS_YOGG_SARON, DOOR_TYPE_ROOM, BOUNDARY_S },
|
||||
{GO_DOODAD_UL_SIGILDOOR_03, BOSS_ALGALON, DOOR_TYPE_ROOM, BOUNDARY_W },
|
||||
{GO_DOODAD_UL_UNIVERSEFLOOR_01, BOSS_ALGALON, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||
{GO_DOODAD_UL_UNIVERSEFLOOR_02, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_NONE },
|
||||
{GO_DOODAD_UL_UNIVERSEGLOBE01, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_NONE },
|
||||
{GO_DOODAD_UL_ULDUAR_TRAPDOOR_03, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_NONE },
|
||||
{0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||
{ GO_LEVIATHAN_DOOR, BOSS_LEVIATHAN, DOOR_TYPE_ROOM, BOUNDARY_S },
|
||||
{ GO_XT_002_DOOR, BOSS_XT002, DOOR_TYPE_ROOM, BOUNDARY_S },
|
||||
{ GO_IRON_COUNCIL_DOOR, BOSS_ASSEMBLY_OF_IRON, DOOR_TYPE_ROOM, BOUNDARY_N },
|
||||
{ GO_ARCHIVUM_DOOR, BOSS_ASSEMBLY_OF_IRON, DOOR_TYPE_PASSAGE, BOUNDARY_S },
|
||||
{ GO_HODIR_ENTRANCE, BOSS_HODIR, DOOR_TYPE_ROOM, BOUNDARY_E },
|
||||
{ GO_HODIR_DOOR, BOSS_HODIR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_HODIR_ICE_DOOR, BOSS_HODIR, DOOR_TYPE_PASSAGE, BOUNDARY_W },
|
||||
{ GO_VEZAX_DOOR, BOSS_VEZAX, DOOR_TYPE_PASSAGE, BOUNDARY_E },
|
||||
{ GO_YOGG_SARON_DOOR, BOSS_YOGG_SARON, DOOR_TYPE_ROOM, BOUNDARY_S },
|
||||
{ GO_DOODAD_UL_SIGILDOOR_03, BOSS_ALGALON, DOOR_TYPE_ROOM, BOUNDARY_W },
|
||||
{ GO_DOODAD_UL_UNIVERSEFLOOR_01, BOSS_ALGALON, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||
{ GO_DOODAD_UL_UNIVERSEFLOOR_02, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_NONE },
|
||||
{ GO_DOODAD_UL_UNIVERSEGLOBE01, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_NONE },
|
||||
{ GO_DOODAD_UL_ULDUAR_TRAPDOOR_03, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_NONE },
|
||||
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||
};
|
||||
|
||||
MinionData const minionData[] =
|
||||
@@ -46,7 +52,7 @@ MinionData const minionData[] =
|
||||
class instance_ulduar : public InstanceMapScript
|
||||
{
|
||||
public:
|
||||
instance_ulduar() : InstanceMapScript("instance_ulduar", 603) { }
|
||||
instance_ulduar() : InstanceMapScript(UlduarScriptName, 603) { }
|
||||
|
||||
struct instance_ulduar_InstanceMapScript : public InstanceScript
|
||||
{
|
||||
@@ -73,6 +79,7 @@ class instance_ulduar : public InstanceMapScript
|
||||
uint64 VoiceOfYoggSaronGUID;
|
||||
uint64 SaraGUID;
|
||||
uint64 BrainOfYoggSaronGUID;
|
||||
uint64 KeeperGUIDs[4];
|
||||
uint64 AlgalonGUID;
|
||||
uint64 BrannBronzebeardAlgGUID;
|
||||
|
||||
@@ -81,16 +88,10 @@ class instance_ulduar : public InstanceMapScript
|
||||
uint64 RazorHarpoonGUIDs[4];
|
||||
uint64 KologarnChestGUID;
|
||||
uint64 KologarnBridgeGUID;
|
||||
uint64 KologarnDoorGUID;
|
||||
uint64 ThorimChestGUID;
|
||||
uint64 HodirRareCacheGUID;
|
||||
uint64 HodirChestGUID;
|
||||
uint64 HodirDoorGUID;
|
||||
uint64 HodirIceDoorGUID;
|
||||
uint64 ArchivumDoorGUID;
|
||||
uint64 VezaxDoorGUID;
|
||||
uint64 BrainRoomDoorGUIDs[3];
|
||||
uint64 KeeperGUIDs[4];
|
||||
uint64 AlgalonSigilDoorGUID[3];
|
||||
uint64 AlgalonFloorGUID[2];
|
||||
uint64 AlgalonUniverseGUID;
|
||||
@@ -138,10 +139,6 @@ class instance_ulduar : public InstanceMapScript
|
||||
HodirRareCacheGUID = 0;
|
||||
HodirChestGUID = 0;
|
||||
LeviathanGateGUID = 0;
|
||||
VezaxDoorGUID = 0;
|
||||
HodirDoorGUID = 0;
|
||||
HodirIceDoorGUID = 0;
|
||||
ArchivumDoorGUID = 0;
|
||||
AlgalonUniverseGUID = 0;
|
||||
AlgalonTrapdoorGUID = 0;
|
||||
BrannBronzebeardAlgGUID = 0;
|
||||
@@ -458,9 +455,6 @@ class instance_ulduar : public InstanceMapScript
|
||||
if (GetBossState(BOSS_KOLOGARN) == DONE)
|
||||
HandleGameObject(0, false, gameObject);
|
||||
break;
|
||||
case GO_KOLOGARN_DOOR:
|
||||
KologarnDoorGUID = gameObject->GetGUID();
|
||||
break;
|
||||
case GO_THORIM_CHEST_HERO:
|
||||
case GO_THORIM_CHEST:
|
||||
ThorimChestGUID = gameObject->GetGUID();
|
||||
@@ -473,20 +467,21 @@ class instance_ulduar : public InstanceMapScript
|
||||
case GO_HODIR_CHEST:
|
||||
HodirChestGUID = gameObject->GetGUID();
|
||||
break;
|
||||
case GO_LEVIATHAN_DOOR:
|
||||
AddDoor(gameObject, true);
|
||||
break;
|
||||
case GO_LEVIATHAN_GATE:
|
||||
LeviathanGateGUID = gameObject->GetGUID();
|
||||
if (GetBossState(BOSS_LEVIATHAN) == DONE)
|
||||
gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
|
||||
break;
|
||||
case GO_LEVIATHAN_DOOR:
|
||||
case GO_XT_002_DOOR:
|
||||
AddDoor(gameObject, true);
|
||||
break;
|
||||
case GO_IRON_COUNCIL_DOOR:
|
||||
case GO_ARCHIVUM_DOOR:
|
||||
case GO_HODIR_ENTRANCE:
|
||||
case GO_HODIR_DOOR:
|
||||
case GO_HODIR_ICE_DOOR:
|
||||
case GO_VEZAX_DOOR:
|
||||
VezaxDoorGUID = gameObject->GetGUID();
|
||||
HandleGameObject(0, false, gameObject);
|
||||
case GO_YOGG_SARON_DOOR:
|
||||
AddDoor(gameObject, true);
|
||||
break;
|
||||
case GO_RAZOR_HARPOON_1:
|
||||
RazorHarpoonGUIDs[0] = gameObject->GetGUID();
|
||||
@@ -504,20 +499,6 @@ class instance_ulduar : public InstanceMapScript
|
||||
if (GetBossState(BOSS_RAZORSCALE) == IN_PROGRESS)
|
||||
gameObject->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_HODIR_DOOR:
|
||||
HodirDoorGUID = gameObject->GetGUID();
|
||||
break;
|
||||
case GO_HODIR_ICE_DOOR:
|
||||
HodirIceDoorGUID = gameObject->GetGUID();
|
||||
break;
|
||||
case GO_ARCHIVUM_DOOR:
|
||||
ArchivumDoorGUID = gameObject->GetGUID();
|
||||
if (GetBossState(BOSS_ASSEMBLY_OF_IRON) != DONE)
|
||||
HandleGameObject(ArchivumDoorGUID, false);
|
||||
break;
|
||||
case GO_YOGG_SARON_DOOR:
|
||||
AddDoor(gameObject, true);
|
||||
break;
|
||||
case GO_BRAIN_ROOM_DOOR_1:
|
||||
BrainRoomDoorGUIDs[0] = gameObject->GetGUID();
|
||||
break;
|
||||
@@ -566,6 +547,8 @@ class instance_ulduar : public InstanceMapScript
|
||||
case GO_GIFT_OF_THE_OBSERVER_25:
|
||||
GiftOfTheObserverGUID = gameObject->GetGUID();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -575,6 +558,13 @@ class instance_ulduar : public InstanceMapScript
|
||||
{
|
||||
case GO_LEVIATHAN_DOOR:
|
||||
case GO_XT_002_DOOR:
|
||||
case GO_IRON_COUNCIL_DOOR:
|
||||
case GO_ARCHIVUM_DOOR:
|
||||
case GO_HODIR_ENTRANCE:
|
||||
case GO_HODIR_DOOR:
|
||||
case GO_HODIR_ICE_DOOR:
|
||||
case GO_VEZAX_DOOR:
|
||||
case GO_YOGG_SARON_DOOR:
|
||||
case GO_DOODAD_UL_SIGILDOOR_03:
|
||||
case GO_DOODAD_UL_UNIVERSEFLOOR_01:
|
||||
case GO_DOODAD_UL_UNIVERSEFLOOR_02:
|
||||
@@ -659,7 +649,10 @@ class instance_ulduar : public InstanceMapScript
|
||||
case BOSS_IGNIS:
|
||||
case BOSS_RAZORSCALE:
|
||||
case BOSS_XT002:
|
||||
case BOSS_ASSEMBLY_OF_IRON:
|
||||
case BOSS_AURIAYA:
|
||||
case BOSS_VEZAX:
|
||||
case BOSS_YOGG_SARON:
|
||||
break;
|
||||
case BOSS_MIMIRON:
|
||||
if (state == DONE)
|
||||
@@ -669,16 +662,6 @@ class instance_ulduar : public InstanceMapScript
|
||||
if (state == DONE)
|
||||
instance->SummonCreature(NPC_FREYA_OBSERVATION_RING, ObservationRingKeepersPos[0]);
|
||||
break;
|
||||
case BOSS_ASSEMBLY_OF_IRON:
|
||||
if (state == DONE)
|
||||
HandleGameObject(ArchivumDoorGUID, true);
|
||||
break;
|
||||
case BOSS_VEZAX:
|
||||
if (state == DONE)
|
||||
HandleGameObject(VezaxDoorGUID, true);
|
||||
break;
|
||||
case BOSS_YOGG_SARON:
|
||||
break;
|
||||
case BOSS_KOLOGARN:
|
||||
if (state == DONE)
|
||||
{
|
||||
@@ -698,8 +681,6 @@ class instance_ulduar : public InstanceMapScript
|
||||
HodirRareCache->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
if (GameObject* HodirChest = instance->GetGameObject(HodirChestGUID))
|
||||
HodirChest->SetRespawnTime(HodirChest->GetRespawnDelay());
|
||||
HandleGameObject(HodirDoorGUID, true);
|
||||
HandleGameObject(HodirIceDoorGUID, true);
|
||||
|
||||
instance->SummonCreature(NPC_HODIR_OBSERVATION_RING, ObservationRingKeepersPos[1]);
|
||||
}
|
||||
|
||||
@@ -166,29 +166,46 @@ enum UlduarNPCs
|
||||
|
||||
enum UlduarGameObjects
|
||||
{
|
||||
GO_KOLOGARN_CHEST_HERO = 195047,
|
||||
GO_KOLOGARN_CHEST = 195046,
|
||||
GO_KOLOGARN_BRIDGE = 194232,
|
||||
GO_KOLOGARN_DOOR = 194553,
|
||||
GO_THORIM_CHEST_HERO = 194315,
|
||||
GO_THORIM_CHEST = 194314,
|
||||
GO_HODIR_RARE_CACHE_OF_WINTER = 194200,
|
||||
GO_HODIR_RARE_CACHE_OF_WINTER_HERO = 194201,
|
||||
GO_HODIR_CHEST_HERO = 194308,
|
||||
GO_HODIR_CHEST = 194307,
|
||||
// Leviathan
|
||||
GO_LEVIATHAN_DOOR = 194905,
|
||||
GO_LEVIATHAN_GATE = 194630,
|
||||
GO_XT_002_DOOR = 194631,
|
||||
GO_VEZAX_DOOR = 194750,
|
||||
|
||||
// Razorscale
|
||||
GO_MOLE_MACHINE = 194316,
|
||||
GO_RAZOR_HARPOON_1 = 194542,
|
||||
GO_RAZOR_HARPOON_2 = 194541,
|
||||
GO_RAZOR_HARPOON_3 = 194543,
|
||||
GO_RAZOR_HARPOON_4 = 194519,
|
||||
GO_RAZOR_BROKEN_HARPOON = 194565,
|
||||
|
||||
// XT-002
|
||||
GO_XT_002_DOOR = 194631,
|
||||
|
||||
// Assembly of Iron
|
||||
GO_IRON_COUNCIL_DOOR = 194554,
|
||||
GO_ARCHIVUM_DOOR = 194556,
|
||||
|
||||
// Kologarn
|
||||
GO_KOLOGARN_CHEST_HERO = 195047,
|
||||
GO_KOLOGARN_CHEST = 195046,
|
||||
GO_KOLOGARN_BRIDGE = 194232,
|
||||
GO_KOLOGARN_DOOR = 194553,
|
||||
|
||||
// Hodir
|
||||
GO_HODIR_ENTRANCE = 194442,
|
||||
GO_HODIR_DOOR = 194634,
|
||||
GO_HODIR_ICE_DOOR = 194441,
|
||||
GO_ARCHIVUM_DOOR = 194556,
|
||||
GO_HODIR_RARE_CACHE_OF_WINTER = 194200,
|
||||
GO_HODIR_RARE_CACHE_OF_WINTER_HERO = 194201,
|
||||
GO_HODIR_CHEST_HERO = 194308,
|
||||
GO_HODIR_CHEST = 194307,
|
||||
|
||||
// Thorim
|
||||
GO_THORIM_CHEST_HERO = 194315,
|
||||
GO_THORIM_CHEST = 194314,
|
||||
|
||||
// Vezax
|
||||
GO_VEZAX_DOOR = 194750,
|
||||
|
||||
// Yogg-Saron
|
||||
GO_YOGG_SARON_DOOR = 194773,
|
||||
@@ -327,26 +344,10 @@ enum YoggSaronIllusions
|
||||
STORMWIND_ILLUSION = 2,
|
||||
};
|
||||
|
||||
template<class AI>
|
||||
CreatureAI* GetUlduarAI(Creature* creature)
|
||||
template<class AI, class T>
|
||||
AI* GetUlduarAI(T* obj)
|
||||
{
|
||||
if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
|
||||
if (instance->GetInstanceScript())
|
||||
if (instance->GetScriptId() == sObjectMgr->GetScriptId(UlduarScriptName))
|
||||
return new AI(creature);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
template<class AI>
|
||||
GameObjectAI* GetUlduarAI(GameObject* go)
|
||||
{
|
||||
if (InstanceMap* instance = go->GetMap()->ToInstanceMap())
|
||||
if (instance->GetInstanceScript())
|
||||
if (instance->GetScriptId() == sObjectMgr->GetScriptId(UlduarScriptName))
|
||||
return new AI(go);
|
||||
|
||||
return NULL;
|
||||
return GetInstanceAI<AI, T>(obj, UlduarScriptName);
|
||||
}
|
||||
|
||||
class PlayerOrPetCheck
|
||||
|
||||
Reference in new issue
Block a user