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:
@@ -94,7 +94,7 @@ class CreatureAI : public UnitAI
|
||||
virtual void EnterCombat(Unit* /*enemy*/) {}
|
||||
|
||||
// Called at any Damage to any victim (before damage apply)
|
||||
virtual void DamageDealt(Unit * /*done_to*/, uint32 & /*damage*/) { }
|
||||
virtual void DamageDealt(Unit * /*done_to*/, uint32 & /*damage*/, DamageEffectType /*damagetype*/) { }
|
||||
|
||||
// Called at any Damage from any attacker (before damage apply)
|
||||
// Note: it for recalculation damage or special reaction at damage
|
||||
|
||||
@@ -98,7 +98,7 @@ void SmartAI::SpellHitTarget(Unit* /*target*/, const SpellEntry* /*pSpell*/)
|
||||
{
|
||||
}
|
||||
|
||||
void SmartAI::DamageTaken(Unit* /*done_by*/, uint32& /*damage*/)
|
||||
void SmartAI::DamageTaken(Unit* /*done_by*/, uint32& /*damage*/, DamageEffectType /*damagetype*/)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -289,7 +289,7 @@ class SmartAI : public CreatureAI
|
||||
void SpellHitTarget(Unit* target, const SpellEntry*);
|
||||
|
||||
// Called at any Damage from any attacker (before damage apply)
|
||||
void DamageTaken(Unit* done_by, uint32& damage);
|
||||
void DamageTaken(Unit* done_by, uint32& damage, DamageEffectType damagetype);
|
||||
|
||||
// Called when the creature receives heal
|
||||
void HealReceived(Unit* done_by, uint32& addhealth);
|
||||
|
||||
@@ -549,7 +549,7 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa
|
||||
pVictim->ToCreature()->AI()->DamageTaken(this, damage);
|
||||
|
||||
if (GetTypeId() == TYPEID_UNIT && this->ToCreature()->IsAIEnabled)
|
||||
this->ToCreature()->AI()->DamageDealt(pVictim, damage);
|
||||
this->ToCreature()->AI()->DamageDealt(pVictim, damage, damagetype);
|
||||
|
||||
if (damagetype != NODAMAGE)
|
||||
{
|
||||
@@ -7930,6 +7930,13 @@ bool Unit::HandleAuraProc(Unit * pVictim, uint32 damage, Aura * triggeredByAura,
|
||||
RemoveAuraFromStack(71564);
|
||||
*handled = true;
|
||||
break;
|
||||
case 71756:
|
||||
case 72782:
|
||||
case 72783:
|
||||
case 72784:
|
||||
RemoveAuraFromStack(dummySpell->Id);
|
||||
*handled = true;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_PALADIN:
|
||||
|
||||
@@ -5259,7 +5259,6 @@ void ObjectMgr::ValidateSpellScripts()
|
||||
SpellEntry const * spellEntry = sSpellStore.LookupEntry(itr->first);
|
||||
std::vector<std::pair<SpellScriptLoader *, SpellScriptsMap::iterator> > SpellScriptLoaders;
|
||||
sScriptMgr.CreateSpellScriptLoaders(itr->first, SpellScriptLoaders);
|
||||
SpellScriptsMap::iterator bitr;
|
||||
itr = mSpellScripts.upper_bound(itr->first);
|
||||
|
||||
for (std::vector<std::pair<SpellScriptLoader *, SpellScriptsMap::iterator> >::iterator sitr = SpellScriptLoaders.begin(); sitr != SpellScriptLoaders.end(); ++sitr)
|
||||
|
||||
@@ -448,6 +448,7 @@ void AddSC_boss_deathbringer_saurfang();
|
||||
void AddSC_boss_festergut();
|
||||
void AddSC_boss_rotface();
|
||||
void AddSC_boss_professor_putricide();
|
||||
void AddSC_boss_blood_prince_council();
|
||||
void AddSC_icecrown_citadel_teleport();
|
||||
void AddSC_instance_icecrown_citadel();
|
||||
|
||||
@@ -1108,6 +1109,7 @@ void AddNorthrendScripts()
|
||||
AddSC_boss_festergut();
|
||||
AddSC_boss_rotface();
|
||||
AddSC_boss_professor_putricide();
|
||||
AddSC_boss_blood_prince_council();
|
||||
AddSC_icecrown_citadel_teleport();
|
||||
AddSC_instance_icecrown_citadel();
|
||||
|
||||
|
||||
@@ -2245,9 +2245,16 @@ void AuraEffect::TriggerSpell(Unit * target, Unit * caster) const
|
||||
return;
|
||||
}
|
||||
// Tear of Azzinoth Summon Channel - it's not really supposed to do anything,and this only prevents the console spam
|
||||
case 39857: triggerSpellId = 39856; break;
|
||||
case 39857:
|
||||
triggerSpellId = 39856;
|
||||
break;
|
||||
// Personalized Weather
|
||||
case 46736: triggerSpellId = 46737; break;
|
||||
case 46736:
|
||||
triggerSpellId = 46737;
|
||||
break;
|
||||
// Ball of Flames Visual
|
||||
case 71706:
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2207,7 +2207,7 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
|
||||
dist = (float)target->GetSpellRadiusForTarget(target, sSpellRadiusStore.LookupEntry(m_spellInfo->EffectRadiusIndex[i]));
|
||||
if (dist < objSize)
|
||||
dist = objSize;
|
||||
else if (cur == TARGET_DEST_CASTER_RANDOM)
|
||||
else if (cur == TARGET_DEST_TARGET_RANDOM)
|
||||
dist = objSize + (dist - objSize) * (float)rand_norm();
|
||||
|
||||
switch(cur)
|
||||
|
||||
@@ -3928,6 +3928,13 @@ void SpellMgr::LoadSpellCustomAttr()
|
||||
spellInfo->EffectImplicitTargetB[0] = TARGET_UNIT_TARGET_ENEMY;
|
||||
count++;
|
||||
break;
|
||||
case 71708: // Empowered Flare
|
||||
case 72785: // Empowered Flare
|
||||
case 72786: // Empowered Flare
|
||||
case 72787: // Empowered Flare
|
||||
spellInfo->AttributesEx3 |= SPELL_ATTR_EX3_NO_DONE_BONUS;
|
||||
count++;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -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