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:
Shauren
2010-10-24 21:27:02 +02:00
parent 07fa1bcbdf
commit d03aeab9ad
26 changed files with 1879 additions and 87 deletions

View File

@@ -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)
{

View File

@@ -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

View File

@@ -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();

View File

@@ -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);

View File

@@ -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));

View File

@@ -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)

View File

@@ -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()

View File

@@ -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);

View File

@@ -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

View File

@@ -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