mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 02:04:52 +01:00
Scripts/Icecrown Citadel: Added Blood Prince Council script
Scripts/Icecrown Citadel: Festergut will not cast Vile Gas on melee targets if there are at least 3 (25 man: 8) ranged targets Scripts/Icecrown Citadel: Festergut and Rotface gates will close with delay (when Putricide reaches the balcony) Scripts/Icecrown Citadel: Replaced ASSERT(instance) with code disabling the AI if not inside instance Core/Spells: Fixed TARGET_DEST_TARGET_RANDOM usage Core/Scripts: Extended DamageDealt in AI to accept damage type as 3rd parameter Scripts/Quests: Fixed quest "Unholy Infusion" (24749) --HG-- branch : trunk
This commit is contained in:
@@ -187,7 +187,7 @@ class boss_janalai : public CreatureScript
|
||||
// DoZoneInCombat();
|
||||
}
|
||||
|
||||
void DamageDealt(Unit *pTarget, uint32 &damage)
|
||||
void DamageDealt(Unit *pTarget, uint32 &damage, DamageEffectType /*damagetype*/)
|
||||
{
|
||||
if (isFlameBreathing)
|
||||
{
|
||||
|
||||
@@ -151,6 +151,7 @@ set(scripts_STAT_SRCS
|
||||
Northrend/IcecrownCitadel/boss_festergut.cpp
|
||||
Northrend/IcecrownCitadel/boss_rotface.cpp
|
||||
Northrend/IcecrownCitadel/boss_professor_putricide.cpp
|
||||
Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
|
||||
Northrend/zuldrak.cpp
|
||||
Northrend/icecrown.cpp
|
||||
Northrend/Gundrak/boss_slad_ran.cpp
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -233,12 +233,19 @@ class boss_deathbringer_saurfang : public CreatureScript
|
||||
{
|
||||
boss_deathbringer_saurfangAI(Creature* pCreature) : BossAI(pCreature, DATA_DEATHBRINGER_SAURFANG)
|
||||
{
|
||||
ASSERT(instance);
|
||||
ASSERT(pCreature->GetVehicleKit()); // we dont actually use it, just check if exists
|
||||
bIntroDone = false;
|
||||
uiFallenChampionCount = 0;
|
||||
}
|
||||
|
||||
void InitializeAI()
|
||||
{
|
||||
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
|
||||
me->IsAIEnabled = false;
|
||||
else if (!me->isDead())
|
||||
Reset();
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
|
||||
@@ -80,12 +80,19 @@ class boss_festergut : public CreatureScript
|
||||
{
|
||||
boss_festergutAI(Creature* pCreature) : BossAI(pCreature, DATA_FESTERGUT)
|
||||
{
|
||||
ASSERT(instance);
|
||||
uiMaxInoculatedStack = 0;
|
||||
uiInhaleCounter = 0;
|
||||
gasDummyGUID = 0;
|
||||
}
|
||||
|
||||
void InitializeAI()
|
||||
{
|
||||
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
|
||||
me->IsAIEnabled = false;
|
||||
else if (!me->isDead())
|
||||
Reset();
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
@@ -115,7 +122,6 @@ class boss_festergut : public CreatureScript
|
||||
DoScriptText(SAY_AGGRO, me);
|
||||
if (Creature* gasDummy = GetClosestCreatureWithEntry(me, NPC_GAS_DUMMY, 100.0f, true))
|
||||
gasDummyGUID = gasDummy->GetGUID();
|
||||
instance->SetBossState(DATA_FESTERGUT, IN_PROGRESS);
|
||||
if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
|
||||
professor->AI()->DoAction(ACTION_FESTERGUT_COMBAT);
|
||||
|
||||
@@ -202,10 +208,19 @@ class boss_festergut : public CreatureScript
|
||||
return;
|
||||
}
|
||||
case EVENT_VILE_GAS:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, -5.0f, true))
|
||||
{
|
||||
std::list<Unit*> targets;
|
||||
uint32 minTargets = RAID_MODE(3,8,3,8);
|
||||
SelectTargetList(targets, minTargets, SELECT_TARGET_RANDOM, -5.0f, true);
|
||||
float minDist = 0.0f;
|
||||
if (targets.size() >= minTargets)
|
||||
minDist = -5.0f;
|
||||
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, minDist, true))
|
||||
DoCast(target, SPELL_VILE_GAS);
|
||||
events.ScheduleEvent(EVENT_VILE_GAS, urand(28000, 35000));
|
||||
break;
|
||||
}
|
||||
case EVENT_GAS_SPORE:
|
||||
DoScriptText(EMOTE_WARN_GAS_SPORE, me);
|
||||
me->CastCustomSpell(SPELL_GAS_SPORE, SPELLVALUE_MAX_TARGETS, RAID_MODE<int32>(2,3,2,3), me);
|
||||
|
||||
@@ -160,11 +160,18 @@ class boss_lady_deathwhisper : public CreatureScript
|
||||
{
|
||||
boss_lady_deathwhisperAI(Creature* pCreature) : BossAI(pCreature, DATA_LADY_DEATHWHISPER)
|
||||
{
|
||||
ASSERT(instance);
|
||||
bIntroDone = false;
|
||||
uiDominateMindCount = RAID_MODE(0,1,1,3);
|
||||
}
|
||||
|
||||
void InitializeAI()
|
||||
{
|
||||
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
|
||||
me->IsAIEnabled = false;
|
||||
else if (!me->isDead())
|
||||
Reset();
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
me->SetPower(POWER_MANA, me->GetMaxPower(POWER_MANA));
|
||||
|
||||
@@ -81,7 +81,6 @@ class boss_lord_marrowgar : public CreatureScript
|
||||
{
|
||||
boss_lord_marrowgarAI(Creature *pCreature) : BossAI(pCreature, DATA_LORD_MARROWGAR)
|
||||
{
|
||||
ASSERT(instance);
|
||||
bIntroDone = false;
|
||||
uiBoneStormDuration = RAID_MODE(20000,30000,20000,30000);
|
||||
fBaseSpeed = pCreature->GetSpeedRate(MOVE_RUN);
|
||||
@@ -89,6 +88,14 @@ class boss_lord_marrowgar : public CreatureScript
|
||||
coldflameLastPos.Relocate(pCreature);
|
||||
}
|
||||
|
||||
void InitializeAI()
|
||||
{
|
||||
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
|
||||
me->IsAIEnabled = false;
|
||||
else if (!me->isDead())
|
||||
Reset();
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
me->SetSpeed(MOVE_RUN, fBaseSpeed, true);
|
||||
@@ -349,7 +356,7 @@ class npc_bone_spike : public CreatureScript
|
||||
void JustDied(Unit * /*killer*/)
|
||||
{
|
||||
events.Reset();
|
||||
if (Unit* trapped = Unit::GetUnit((*me), uiTrappedGUID))
|
||||
if (Player* trapped = ObjectAccessor::GetPlayer(*me, uiTrappedGUID))
|
||||
trapped->RemoveAurasDueToSpell(SPELL_IMPALED);
|
||||
}
|
||||
|
||||
@@ -364,7 +371,7 @@ class npc_bone_spike : public CreatureScript
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
Unit* trapped = Unit::GetUnit(*me, uiTrappedGUID);
|
||||
Player* trapped = ObjectAccessor::GetPlayer(*me, uiTrappedGUID);
|
||||
if ((trapped && trapped->isAlive() && !trapped->HasAura(SPELL_IMPALED)) || !trapped)
|
||||
me->Kill(me);
|
||||
|
||||
@@ -373,10 +380,11 @@ class npc_bone_spike : public CreatureScript
|
||||
instance->SetData(DATA_BONED_ACHIEVEMENT, uint32(false));
|
||||
}
|
||||
|
||||
void SetTrappedUnit(Unit* unit)
|
||||
void SetGUID(const uint64& guid, int32 /*type = 0*/)
|
||||
{
|
||||
unit->EnterVehicle(vehicle, 0);
|
||||
uiTrappedGUID = unit->GetGUID();
|
||||
uiTrappedGUID = guid;
|
||||
if (Player* target = ObjectAccessor::GetPlayer(*me, guid))
|
||||
target->EnterVehicle(vehicle, 0);
|
||||
}
|
||||
|
||||
void PassengerBoarded(Unit * who, int8 /*seatId*/, bool apply)
|
||||
@@ -460,9 +468,9 @@ class spell_marrowgar_bone_spike_graveyard : public SpellScriptLoader
|
||||
if (!target)
|
||||
break;
|
||||
yell = true;
|
||||
//marrowgarAI->DoCast(*itr, SPELL_IMPALE); // this is the proper spell but if we use it we dont have any way to assign a victim to it
|
||||
//GetCaster()->CastSpell(target, SPELL_IMPALE, true); // this is the proper spell but if we use it we dont have any way to assign a victim to it
|
||||
Creature* pBone = GetCaster()->SummonCreature(NPC_BONE_SPIKE, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_CORPSE_DESPAWN);
|
||||
CAST_AI(npc_bone_spike::npc_bone_spikeAI, pBone->AI())->SetTrappedUnit(target);
|
||||
pBone->AI()->SetGUID(target->GetGUID());
|
||||
}
|
||||
|
||||
if (yell)
|
||||
|
||||
@@ -75,6 +75,7 @@ enum eSpells
|
||||
SPELL_PLAGUE_SICKNESS = 70953,
|
||||
SPELL_UNBOUND_PLAGUE_PROTECTION = 70955,
|
||||
SPELL_MUTATED_PLAGUE = 72451,
|
||||
SPELL_UNHOLY_INFUSION_CREDIT = 71518,
|
||||
|
||||
// Slime Puddle
|
||||
SPELL_GROW_STACKER = 70345,
|
||||
@@ -181,15 +182,22 @@ class boss_professor_putricide : public CreatureScript
|
||||
boss_professor_putricideAI(Creature* pCreature) : BossAI(pCreature, DATA_PROFESSOR_PUTRICIDE),
|
||||
fBaseSpeed(pCreature->GetSpeedRate(MOVE_RUN)), bExperimentState(EXPERIMENT_STATE_OOZE)
|
||||
{
|
||||
ASSERT(instance);
|
||||
phase = ePhases(0);
|
||||
}
|
||||
|
||||
void InitializeAI()
|
||||
{
|
||||
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
|
||||
me->IsAIEnabled = false;
|
||||
else if (!me->isDead())
|
||||
Reset();
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
if (!(events.GetPhaseMask() & PHASE_MASK_NOT_SELF))
|
||||
instance->SetBossState(DATA_PROFESSOR_PUTRICIDE, NOT_STARTED);
|
||||
instance->SetData(DATA_NAUSEA___ACHIEVEMENT, uint32(true));
|
||||
instance->SetData(DATA_NAUSEA_ACHIEVEMENT, uint32(true));
|
||||
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
@@ -238,6 +246,7 @@ class boss_professor_putricide : public CreatureScript
|
||||
{
|
||||
DoScriptText(SAY_DEATH, me);
|
||||
instance->SetBossState(DATA_PROFESSOR_PUTRICIDE, DONE);
|
||||
DoCastAOE(SPELL_UNHOLY_INFUSION_CREDIT, true);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon)
|
||||
@@ -253,9 +262,6 @@ class boss_professor_putricide : public CreatureScript
|
||||
// no possible aura seen in sniff adding the aurastate
|
||||
summon->SetFlag(UNIT_FIELD_AURASTATE, 1 << (AURA_STATE_UNKNOWN22-1));
|
||||
summon->CastSpell(summon, SPELL_GASEOUS_BLOAT_PROC, true);
|
||||
// taunt immunity
|
||||
summon->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
|
||||
summon->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true);
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_GASEOUS_BLOAT_PROTECTION))
|
||||
{
|
||||
summon->AI()->AttackStart(target);
|
||||
@@ -269,9 +275,6 @@ class boss_professor_putricide : public CreatureScript
|
||||
// no possible aura seen in sniff adding the aurastate
|
||||
summon->SetFlag(UNIT_FIELD_AURASTATE, 1 << (AURA_STATE_UNKNOWN19-1));
|
||||
summon->CastSpell(summon, SPELL_OOZE_ERUPTION_SEARCH_PERIODIC, true);
|
||||
// taunt immunity
|
||||
summon->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
|
||||
summon->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true);
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_VOLATILE_OOZE_PROTECTION))
|
||||
{
|
||||
summon->AI()->AttackStart(target);
|
||||
@@ -320,12 +323,14 @@ class boss_professor_putricide : public CreatureScript
|
||||
switch (id)
|
||||
{
|
||||
case POINT_FESTERGUT:
|
||||
instance->SetBossState(DATA_FESTERGUT, IN_PROGRESS); // needed here for delayed gate close
|
||||
me->SetSpeed(MOVE_RUN, fBaseSpeed, true);
|
||||
DoAction(ACTION_FESTERGUT_GAS);
|
||||
if (Creature* festergut = Unit::GetCreature(*me, instance->GetData64(DATA_FESTERGUT)))
|
||||
festergut->CastSpell(festergut, SPELL_GASEOUS_BLIGHT_LARGE, false, NULL, NULL, festergut->GetGUID());
|
||||
break;
|
||||
case POINT_ROTFACE:
|
||||
instance->SetBossState(DATA_ROTFACE, IN_PROGRESS); // needed here for delayed gate close
|
||||
me->SetSpeed(MOVE_RUN, fBaseSpeed, true);
|
||||
DoAction(ACTION_ROTFACE_OOZE);
|
||||
events.ScheduleEvent(EVENT_ROTFACE_OOZE_FLOOD, 25000, 0, PHASE_ROTFACE);
|
||||
@@ -1271,7 +1276,7 @@ class spell_putricide_regurgitated_ooze : public SpellScriptLoader
|
||||
void ExtraEffect(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
|
||||
instance->SetData(DATA_NAUSEA___ACHIEVEMENT, uint32(false));
|
||||
instance->SetData(DATA_NAUSEA_ACHIEVEMENT, uint32(false));
|
||||
}
|
||||
|
||||
void Register()
|
||||
|
||||
@@ -86,11 +86,18 @@ class boss_rotface : public CreatureScript
|
||||
{
|
||||
boss_rotfaceAI(Creature* pCreature) : BossAI(pCreature, DATA_ROTFACE)
|
||||
{
|
||||
ASSERT(instance);
|
||||
infectionStage = 0;
|
||||
infectionCooldown = 14000;
|
||||
}
|
||||
|
||||
void InitializeAI()
|
||||
{
|
||||
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
|
||||
me->IsAIEnabled = false;
|
||||
else if (!me->isDead())
|
||||
Reset();
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
@@ -107,7 +114,6 @@ class boss_rotface : public CreatureScript
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, me);
|
||||
instance->SetBossState(DATA_ROTFACE, IN_PROGRESS);
|
||||
if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
|
||||
professor->AI()->DoAction(ACTION_ROTFACE_COMBAT);
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
#ifndef DEF_ICECROWN_CITADEL_H
|
||||
#define DEF_ICECROWN_CITADEL_H
|
||||
|
||||
static const char* ICCScriptName = "instance_icecrown_citadel";
|
||||
|
||||
enum eSharedSpells
|
||||
{
|
||||
SPELL_BERSERK = 26662,
|
||||
@@ -26,25 +28,29 @@ enum eSharedSpells
|
||||
|
||||
enum eData
|
||||
{
|
||||
DATA_LORD_MARROWGAR = 0,
|
||||
DATA_LADY_DEATHWHISPER = 1,
|
||||
DATA_GUNSHIP_EVENT = 2,
|
||||
DATA_DEATHBRINGER_SAURFANG = 3,
|
||||
DATA_FESTERGUT = 4,
|
||||
DATA_ROTFACE = 5,
|
||||
DATA_PROFESSOR_PUTRICIDE = 6,
|
||||
DATA_BLOOD_PRINCE_COUNCIL = 7,
|
||||
DATA_BLOOD_QUEEN_LANA_THEL = 8,
|
||||
DATA_VALITHRIA_DREAMWALKER = 9,
|
||||
DATA_SINDRAGOSA = 10,
|
||||
DATA_THE_LICH_KING = 11,
|
||||
DATA_LORD_MARROWGAR = 0,
|
||||
DATA_LADY_DEATHWHISPER = 1,
|
||||
DATA_GUNSHIP_EVENT = 2,
|
||||
DATA_DEATHBRINGER_SAURFANG = 3,
|
||||
DATA_FESTERGUT = 4,
|
||||
DATA_ROTFACE = 5,
|
||||
DATA_PROFESSOR_PUTRICIDE = 6,
|
||||
DATA_BLOOD_PRINCE_COUNCIL = 7,
|
||||
DATA_BLOOD_QUEEN_LANA_THEL = 8,
|
||||
DATA_VALITHRIA_DREAMWALKER = 9,
|
||||
DATA_SINDRAGOSA = 10,
|
||||
DATA_THE_LICH_KING = 11,
|
||||
|
||||
DATA_SAURFANG_EVENT_NPC = 12,
|
||||
|
||||
DATA_BONED_ACHIEVEMENT = 13,
|
||||
DATA_OOZE_DANCE_ACHIEVEMENT = 14,
|
||||
DATA_PUTRICIDE_TABLE = 15,
|
||||
DATA_NAUSEA___ACHIEVEMENT = 16,
|
||||
DATA_SAURFANG_EVENT_NPC = 12,
|
||||
DATA_BONED_ACHIEVEMENT = 13,
|
||||
DATA_OOZE_DANCE_ACHIEVEMENT = 14,
|
||||
DATA_PUTRICIDE_TABLE = 15,
|
||||
DATA_NAUSEA_ACHIEVEMENT = 16,
|
||||
DATA_ORB_WHISPERER_ACHIEVEMENT = 17,
|
||||
DATA_PRINCE_KELESETH_GUID = 18,
|
||||
DATA_PRINCE_TALDARAM_GUID = 19,
|
||||
DATA_PRINCE_VALANAR_GUID = 20,
|
||||
DATA_BLOOD_PRINCES_CONTROL = 21,
|
||||
};
|
||||
|
||||
#define MAX_ENCOUNTER 12
|
||||
@@ -110,30 +116,48 @@ enum eCreatures
|
||||
NPC_VOLATILE_OOZE = 37697,
|
||||
NPC_CHOKING_GAS_BOMB = 38159,
|
||||
NPC_TEAR_GAS_TARGET_STALKER = 38317,
|
||||
|
||||
// Blood Prince Council
|
||||
NPC_PRINCE_KELESETH = 37972,
|
||||
NPC_PRINCE_TALDARAM = 37973,
|
||||
NPC_PRINCE_VALANAR = 37970,
|
||||
NPC_BLOOD_ORB_CONTROLLER = 38008,
|
||||
NPC_FLOATING_TRIGGER = 30298,
|
||||
NPC_DARK_NUCLEUS = 38369,
|
||||
NPC_BALL_OF_FLAME = 38332,
|
||||
NPC_BALL_OF_INFERNO_FLAME = 38451,
|
||||
NPC_KINETIC_BOMB_TARGET = 38458,
|
||||
NPC_KINETIC_BOMB = 38454,
|
||||
NPC_SHOCK_VORTEX = 38422,
|
||||
};
|
||||
|
||||
enum eGameobjects
|
||||
{
|
||||
GO_DOODAD_ICECROWN_ICEWALL02 = 201910,
|
||||
GO_ICEWALL = 201911,
|
||||
GO_LORD_MARROWGAR_S_ENTRANCE = 201857,
|
||||
GO_ORATORY_OF_THE_DAMNED_ENTRANCE = 201563,
|
||||
GO_LADY_DEATHWHISPER_ELEVATOR = 202220,
|
||||
GO_SAURFANG_S_DOOR = 201825,
|
||||
GO_DEATHBRINGER_S_CACHE_10N = 202239,
|
||||
GO_DEATHBRINGER_S_CACHE_25N = 202240,
|
||||
GO_DEATHBRINGER_S_CACHE_10H = 202238,
|
||||
GO_DEATHBRINGER_S_CACHE_25H = 202241,
|
||||
GO_SCOURGE_TRANSPORTER_SAURFANG = 202244,
|
||||
GO_ORANGE_PLAGUE_MONSTER_ENTRANCE = 201371,
|
||||
GO_GREEN_PLAGUE_MONSTER_ENTRANCE = 201370,
|
||||
GO_SCIENTIST_AIRLOCK_DOOR_COLLISION = 201612,
|
||||
GO_SCIENTIST_AIRLOCK_DOOR_ORANGE = 201613,
|
||||
GO_SCIENTIST_AIRLOCK_DOOR_GREEN = 201614,
|
||||
GO_DOODAD_ICECROWN_ORANGETUBES02 = 201617,
|
||||
GO_DOODAD_ICECROWN_GREENTUBES02 = 201618,
|
||||
GO_SCIENTIST_ENTRANCE = 201372,
|
||||
GO_DRINK_ME = 201584,
|
||||
GO_DOODAD_ICECROWN_ICEWALL02 = 201910,
|
||||
GO_ICEWALL = 201911,
|
||||
GO_LORD_MARROWGAR_S_ENTRANCE = 201857,
|
||||
GO_ORATORY_OF_THE_DAMNED_ENTRANCE = 201563,
|
||||
GO_LADY_DEATHWHISPER_ELEVATOR = 202220,
|
||||
GO_SAURFANG_S_DOOR = 201825,
|
||||
GO_DEATHBRINGER_S_CACHE_10N = 202239,
|
||||
GO_DEATHBRINGER_S_CACHE_25N = 202240,
|
||||
GO_DEATHBRINGER_S_CACHE_10H = 202238,
|
||||
GO_DEATHBRINGER_S_CACHE_25H = 202241,
|
||||
GO_SCOURGE_TRANSPORTER_SAURFANG = 202244,
|
||||
GO_ORANGE_PLAGUE_MONSTER_ENTRANCE = 201371,
|
||||
GO_GREEN_PLAGUE_MONSTER_ENTRANCE = 201370,
|
||||
GO_SCIENTIST_AIRLOCK_DOOR_COLLISION = 201612,
|
||||
GO_SCIENTIST_AIRLOCK_DOOR_ORANGE = 201613,
|
||||
GO_SCIENTIST_AIRLOCK_DOOR_GREEN = 201614,
|
||||
GO_DOODAD_ICECROWN_ORANGETUBES02 = 201617,
|
||||
GO_DOODAD_ICECROWN_GREENTUBES02 = 201618,
|
||||
GO_SCIENTIST_ENTRANCE = 201372,
|
||||
GO_DRINK_ME = 201584,
|
||||
GO_CRIMSON_HALL_DOOR = 201376,
|
||||
GO_BLOOD_ELF_COUNCIL_DOOR = 201378,
|
||||
GO_BLOOD_ELF_COUNCIL_DOOR_RIGHT = 201377,
|
||||
GO_DOODAD_ICECROWN_BLOODPRINCE_DOOR_01 = 201746,
|
||||
GO_DOODAD_ICECROWN_GRATE_01 = 201755,
|
||||
};
|
||||
|
||||
enum eAchievementCriteria
|
||||
@@ -150,6 +174,10 @@ enum eAchievementCriteria
|
||||
CRITERIA_NAUSEA_25N = 12968,
|
||||
CRITERIA_NAUSEA_10H = 12988,
|
||||
CRITERIA_NAUSEA_25H = 12981,
|
||||
CRITERIA_ORB_WHISPERER_10N = 13033,
|
||||
CRITERIA_ORB_WHISPERER_25N = 12969,
|
||||
CRITERIA_ORB_WHISPERER_10H = 13034,
|
||||
CRITERIA_ORB_WHISPERER_25H = 13032,
|
||||
};
|
||||
|
||||
enum ePutricideActions
|
||||
|
||||
@@ -18,22 +18,27 @@
|
||||
#include "ScriptPCH.h"
|
||||
#include "icecrown_citadel.h"
|
||||
|
||||
static const DoorData doorData[8] =
|
||||
static const DoorData doorData[] =
|
||||
{
|
||||
{GO_LORD_MARROWGAR_S_ENTRANCE, DATA_LORD_MARROWGAR, DOOR_TYPE_ROOM, BOUNDARY_N },
|
||||
{GO_ICEWALL, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
|
||||
{GO_DOODAD_ICECROWN_ICEWALL02, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
|
||||
{GO_ORATORY_OF_THE_DAMNED_ENTRANCE, DATA_LADY_DEATHWHISPER, DOOR_TYPE_ROOM, BOUNDARY_N },
|
||||
{GO_ORANGE_PLAGUE_MONSTER_ENTRANCE, DATA_FESTERGUT, DOOR_TYPE_ROOM, BOUNDARY_E },
|
||||
{GO_GREEN_PLAGUE_MONSTER_ENTRANCE, DATA_ROTFACE, DOOR_TYPE_ROOM, BOUNDARY_E },
|
||||
{GO_SCIENTIST_ENTRANCE, DATA_PROFESSOR_PUTRICIDE, DOOR_TYPE_ROOM, BOUNDARY_E },
|
||||
{0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE} // END
|
||||
{GO_LORD_MARROWGAR_S_ENTRANCE, DATA_LORD_MARROWGAR, DOOR_TYPE_ROOM, BOUNDARY_N },
|
||||
{GO_ICEWALL, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
|
||||
{GO_DOODAD_ICECROWN_ICEWALL02, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
|
||||
{GO_ORATORY_OF_THE_DAMNED_ENTRANCE, DATA_LADY_DEATHWHISPER, DOOR_TYPE_ROOM, BOUNDARY_N },
|
||||
{GO_ORANGE_PLAGUE_MONSTER_ENTRANCE, DATA_FESTERGUT, DOOR_TYPE_ROOM, BOUNDARY_E },
|
||||
{GO_GREEN_PLAGUE_MONSTER_ENTRANCE, DATA_ROTFACE, DOOR_TYPE_ROOM, BOUNDARY_E },
|
||||
{GO_SCIENTIST_ENTRANCE, DATA_PROFESSOR_PUTRICIDE, DOOR_TYPE_ROOM, BOUNDARY_E },
|
||||
{GO_CRIMSON_HALL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_S },
|
||||
{GO_BLOOD_ELF_COUNCIL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE, BOUNDARY_W },
|
||||
{GO_BLOOD_ELF_COUNCIL_DOOR_RIGHT, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE, BOUNDARY_E },
|
||||
{GO_DOODAD_ICECROWN_BLOODPRINCE_DOOR_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_ROOM, BOUNDARY_S },
|
||||
{GO_DOODAD_ICECROWN_GRATE_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
|
||||
{0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE} // END
|
||||
};
|
||||
|
||||
class instance_icecrown_citadel : public InstanceMapScript
|
||||
{
|
||||
public:
|
||||
instance_icecrown_citadel() : InstanceMapScript("instance_icecrown_citadel", 631) { }
|
||||
instance_icecrown_citadel() : InstanceMapScript(ICCScriptName, 631) { }
|
||||
|
||||
struct instance_icecrown_citadel_InstanceMapScript : public InstanceScript
|
||||
{
|
||||
@@ -47,16 +52,19 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
uiSaurfangEventNPC = 0;
|
||||
uiDeathbringersCache = 0;
|
||||
uiSaurfangTeleport = 0;
|
||||
memset(uiPutricidePipes, 0, 2*sizeof(uint32));
|
||||
memset(uiPutricideGates, 0, 2*sizeof(uint32));
|
||||
memset(uiPutricidePipes, 0, 2*sizeof(uint64));
|
||||
memset(uiPutricideGates, 0, 2*sizeof(uint64));
|
||||
uiPutricideCollision = 0;
|
||||
uiFestergut = 0;
|
||||
uiRotface = 0;
|
||||
uiProfessorPutricide = 0;
|
||||
uiPutricideTable;
|
||||
uiPutricideTable = 0;
|
||||
memset(uiBloodCouncil, 0, 3*sizeof(uint64));
|
||||
uiBloodCouncilController = 0;
|
||||
isBonedEligible = true;
|
||||
isOozeDanceEligible = true;
|
||||
isNauseaEligible = true;
|
||||
isOrbWhispererEligible = true;
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature, bool /*add*/)
|
||||
@@ -123,6 +131,18 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
case NPC_PROFESSOR_PUTRICIDE:
|
||||
uiProfessorPutricide = creature->GetGUID();
|
||||
break;
|
||||
case NPC_PRINCE_KELESETH:
|
||||
uiBloodCouncil[0] = creature->GetGUID();
|
||||
break;
|
||||
case NPC_PRINCE_TALDARAM:
|
||||
uiBloodCouncil[1] = creature->GetGUID();
|
||||
break;
|
||||
case NPC_PRINCE_VALANAR:
|
||||
uiBloodCouncil[2] = creature->GetGUID();
|
||||
break;
|
||||
case NPC_BLOOD_ORB_CONTROLLER:
|
||||
uiBloodCouncilController = creature->GetGUID();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -139,6 +159,11 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
case GO_ORANGE_PLAGUE_MONSTER_ENTRANCE:
|
||||
case GO_GREEN_PLAGUE_MONSTER_ENTRANCE:
|
||||
case GO_SCIENTIST_ENTRANCE:
|
||||
case GO_CRIMSON_HALL_DOOR:
|
||||
case GO_BLOOD_ELF_COUNCIL_DOOR:
|
||||
case GO_BLOOD_ELF_COUNCIL_DOOR_RIGHT:
|
||||
case GO_DOODAD_ICECROWN_BLOODPRINCE_DOOR_01:
|
||||
case GO_DOODAD_ICECROWN_GRATE_01:
|
||||
AddDoor(pGo, add);
|
||||
break;
|
||||
case GO_LADY_DEATHWHISPER_ELEVATOR:
|
||||
@@ -218,7 +243,14 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
return uiProfessorPutricide;
|
||||
case DATA_PUTRICIDE_TABLE:
|
||||
return uiPutricideTable;
|
||||
break;
|
||||
case DATA_PRINCE_KELESETH_GUID:
|
||||
return uiBloodCouncil[0];
|
||||
case DATA_PRINCE_TALDARAM_GUID:
|
||||
return uiBloodCouncil[1];
|
||||
case DATA_PRINCE_VALANAR_GUID:
|
||||
return uiBloodCouncil[2];
|
||||
case DATA_BLOOD_PRINCES_CONTROL:
|
||||
return uiBloodCouncilController;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -290,13 +322,14 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
HandleGameObject(uiPutricidePipes[1], true);
|
||||
}
|
||||
break;
|
||||
case DATA_PROFESSOR_PUTRICIDE:
|
||||
case DATA_BLOOD_PRINCE_COUNCIL:
|
||||
case DATA_BLOOD_QUEEN_LANA_THEL:
|
||||
case DATA_VALITHRIA_DREAMWALKER:
|
||||
case DATA_SINDRAGOSA:
|
||||
case DATA_THE_LICH_KING:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -312,9 +345,12 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
case DATA_OOZE_DANCE_ACHIEVEMENT:
|
||||
isOozeDanceEligible = data ? true : false;
|
||||
break;
|
||||
case DATA_NAUSEA___ACHIEVEMENT:
|
||||
case DATA_NAUSEA_ACHIEVEMENT:
|
||||
isNauseaEligible = data ? true : false;
|
||||
break;
|
||||
case DATA_ORB_WHISPERER_ACHIEVEMENT:
|
||||
isOrbWhispererEligible = data ? true : false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -339,6 +375,11 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
case CRITERIA_NAUSEA_10H:
|
||||
case CRITERIA_NAUSEA_25H:
|
||||
return isNauseaEligible;
|
||||
case CRITERIA_ORB_WHISPERER_10N:
|
||||
case CRITERIA_ORB_WHISPERER_25N:
|
||||
case CRITERIA_ORB_WHISPERER_10H:
|
||||
case CRITERIA_ORB_WHISPERER_25H:
|
||||
return isOrbWhispererEligible;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -401,9 +442,12 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
uint64 uiRotface;
|
||||
uint64 uiProfessorPutricide;
|
||||
uint64 uiPutricideTable;
|
||||
uint64 uiBloodCouncil[3];
|
||||
uint64 uiBloodCouncilController;
|
||||
bool isBonedEligible;
|
||||
bool isOozeDanceEligible;
|
||||
bool isNauseaEligible;
|
||||
bool isOrbWhispererEligible;
|
||||
};
|
||||
|
||||
InstanceScript* GetInstanceScript(InstanceMap* pMap) const
|
||||
|
||||
Reference in New Issue
Block a user