fix(Scripts/Naxxramas): refactored instance script
This commit is contained in:
parent
f6c4164765
commit
f1b0e611cf
@ -0,0 +1,8 @@
|
||||
-- update Mr. Bigglesworth script name
|
||||
UPDATE `creature_template` SET `ScriptName` = 'npc_mr_bigglesworth' WHERE (`entry` = 16998);
|
||||
|
||||
-- update Living Poison script name
|
||||
UPDATE `creature_template` SET `ScriptName` = 'npc_living_poison' WHERE (`entry` = 16027);
|
||||
|
||||
-- update Naxxramas Trigger script name
|
||||
UPDATE `creature_template` SET `ScriptName` = 'npc_naxxramas_trigger' WHERE (`entry` = 16082);
|
||||
@ -118,7 +118,7 @@ public:
|
||||
|
||||
Talk(SAY_SLAY);
|
||||
victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCRABS_5, true, nullptr, nullptr, me->GetGUID());
|
||||
instance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
|
||||
@ -83,8 +83,6 @@ public:
|
||||
BossAI::Reset();
|
||||
summons.DespawnAll();
|
||||
SummonHelpers();
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(instance->GetGuidData(DATA_FAERLINA_WEB)))
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
@ -114,9 +112,6 @@ public:
|
||||
else
|
||||
context.Repeat(30s);
|
||||
});
|
||||
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(instance->GetGuidData(DATA_FAERLINA_WEB)))
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who) override
|
||||
@ -137,15 +132,13 @@ public:
|
||||
if (!urand(0, 3))
|
||||
Talk(SAY_SLAY);
|
||||
|
||||
instance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
BossAI::JustDied(killer);
|
||||
Talk(SAY_DEATH);
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(instance->GetGuidData(DATA_FAERLINA_WEB)))
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
|
||||
void SpellHit(Unit* caster, SpellInfo const* spell) override
|
||||
|
||||
@ -131,7 +131,6 @@ public:
|
||||
{
|
||||
explicit boss_four_horsemenAI(Creature* c) : BossAI(c, BOSS_HORSEMAN)
|
||||
{
|
||||
pInstance = me->GetInstanceScript();
|
||||
switch (me->GetEntry())
|
||||
{
|
||||
case NPC_SIR_ZELIEK:
|
||||
@ -150,7 +149,6 @@ public:
|
||||
}
|
||||
|
||||
EventMap events;
|
||||
InstanceScript* pInstance;
|
||||
uint8 currentWaypoint{};
|
||||
uint8 movementPhase{};
|
||||
uint8 horsemanId;
|
||||
@ -203,16 +201,6 @@ public:
|
||||
{
|
||||
events.RescheduleEvent(EVENT_SECONDARY_SPELL, 15s);
|
||||
}
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_HORSEMEN_GATE)))
|
||||
{
|
||||
if (pInstance->GetBossState(BOSS_GOTHIK) == DONE)
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MovementInform(uint32 type, uint32 id) override
|
||||
@ -262,36 +250,19 @@ public:
|
||||
return;
|
||||
|
||||
Talk(SAY_SLAY);
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
BossAI::JustDied(killer);
|
||||
if (pInstance)
|
||||
{
|
||||
if (pInstance->GetBossState(BOSS_HORSEMAN) == DONE)
|
||||
{
|
||||
if (!me->GetMap()->GetPlayers().IsEmpty())
|
||||
{
|
||||
if (Player* player = me->GetMap()->GetPlayers().getFirst()->GetSource())
|
||||
{
|
||||
if (GameObject* chest = player->SummonGameObject(RAID_MODE(GO_HORSEMEN_CHEST_10, GO_HORSEMEN_CHEST_25), 2514.8f, -2944.9f, 245.55f, 5.51f, 0, 0, 0, 0, 0))
|
||||
{
|
||||
chest->SetLootRecipient(me);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_HORSEMEN_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
Talk(SAY_DEATH);
|
||||
|
||||
if (instance->GetBossState(BOSS_HORSEMAN) == DONE)
|
||||
if (!me->GetMap()->GetPlayers().IsEmpty())
|
||||
if (Player* player = me->GetMap()->GetPlayers().getFirst()->GetSource())
|
||||
if (GameObject* chest = player->SummonGameObject(RAID_MODE(GO_HORSEMEN_CHEST_10, GO_HORSEMEN_CHEST_25), 2514.8f, -2944.9f, 245.55f, 5.51f, 0, 0, 0, 0, 0))
|
||||
chest->SetLootRecipient(me);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
@ -305,13 +276,6 @@ public:
|
||||
me->SetSpeed(MOVE_RUN, me->GetSpeedRate(MOVE_RUN), true);
|
||||
MoveToCorner();
|
||||
}
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_HORSEMEN_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
|
||||
@ -79,13 +79,10 @@ public:
|
||||
struct boss_gluthAI : public BossAI
|
||||
{
|
||||
explicit boss_gluthAI(Creature* c) : BossAI(c, BOSS_GLUTH), summons(me)
|
||||
{
|
||||
pInstance = me->GetInstanceScript();
|
||||
}
|
||||
{}
|
||||
|
||||
EventMap events;
|
||||
SummonList summons;
|
||||
InstanceScript* pInstance;
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
@ -138,13 +135,10 @@ public:
|
||||
void KilledUnit(Unit* who) override
|
||||
{
|
||||
if (me->IsAlive() && who->GetEntry() == NPC_ZOMBIE_CHOW)
|
||||
{
|
||||
me->ModifyHealth(int32(me->GetMaxHealth() * 0.05f));
|
||||
}
|
||||
if (who->IsPlayer() && pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
|
||||
if (who->IsPlayer())
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
|
||||
@ -201,12 +201,10 @@ public:
|
||||
struct boss_gothikAI : public BossAI
|
||||
{
|
||||
explicit boss_gothikAI(Creature* c) : BossAI(c, BOSS_GOTHIK), summons(me)
|
||||
{
|
||||
pInstance = me->GetInstanceScript();
|
||||
}
|
||||
{}
|
||||
|
||||
EventMap events;
|
||||
SummonList summons;
|
||||
InstanceScript* pInstance;
|
||||
bool secondPhase{};
|
||||
bool gateOpened{};
|
||||
uint8 waveCount{};
|
||||
@ -233,21 +231,6 @@ public:
|
||||
gateOpened = false;
|
||||
waveCount = 0;
|
||||
me->NearTeleportTo(2642.139f, -3386.959f, 285.492f, 6.265f);
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_ENTER_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_INNER_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_EXIT_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
@ -261,17 +244,6 @@ public:
|
||||
me->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE);
|
||||
events.ScheduleEvent(EVENT_SUMMON_ADDS, 30s);
|
||||
events.ScheduleEvent(EVENT_CHECK_PLAYERS, 2min);
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_ENTER_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_INNER_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon) override
|
||||
@ -327,10 +299,7 @@ public:
|
||||
return;
|
||||
|
||||
Talk(SAY_KILL);
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
@ -338,21 +307,6 @@ public:
|
||||
BossAI::JustDied(killer);
|
||||
Talk(SAY_DEATH);
|
||||
summons.DespawnAll();
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_ENTER_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_INNER_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_EXIT_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SummonHelpers(uint32 entry)
|
||||
@ -472,12 +426,11 @@ public:
|
||||
events.Repeat(20s);
|
||||
break;
|
||||
case EVENT_CHECK_HEALTH:
|
||||
if (me->HealthBelowPct(30) && pInstance)
|
||||
if (me->HealthBelowPct(30))
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_INNER_GATE)))
|
||||
{
|
||||
if (GameObject* go = instance->GetGameObject(DATA_GOTHIK_INNER_GATE))
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
|
||||
events.CancelEvent(EVENT_TELEPORT);
|
||||
break;
|
||||
}
|
||||
@ -509,10 +462,9 @@ public:
|
||||
case EVENT_CHECK_PLAYERS:
|
||||
if (!CheckGroupSplitted())
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_INNER_GATE)))
|
||||
{
|
||||
if (GameObject* go = instance->GetGameObject(DATA_GOTHIK_INNER_GATE))
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
|
||||
gateOpened = true;
|
||||
Talk(EMOTE_GATE_OPENED);
|
||||
}
|
||||
@ -597,10 +549,8 @@ public:
|
||||
|
||||
void KilledUnit(Unit* who) override
|
||||
{
|
||||
if (who->IsPlayer() && me->GetInstanceScript())
|
||||
{
|
||||
me->GetInstanceScript()->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
if (who->IsPlayer())
|
||||
me->GetInstanceScript()->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@ -767,17 +717,14 @@ public:
|
||||
// dead side summons are "owned" by gothik
|
||||
void JustSummoned(Creature* summon) override
|
||||
{
|
||||
if (Creature* gothik = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(DATA_GOTHIK_BOSS)))
|
||||
{
|
||||
if (Creature* gothik = me->GetInstanceScript()->GetCreature(DATA_GOTHIK_BOSS))
|
||||
gothik->AI()->JustSummoned(summon);
|
||||
}
|
||||
}
|
||||
|
||||
void SummonedCreatureDespawn(Creature* summon) override
|
||||
{
|
||||
if (Creature* gothik = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(DATA_GOTHIK_BOSS)))
|
||||
{
|
||||
if (Creature* gothik = me->GetInstanceScript()->GetCreature(DATA_GOTHIK_BOSS))
|
||||
gothik->AI()->SummonedCreatureDespawn(summon);
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
@ -70,13 +70,10 @@ public:
|
||||
struct boss_grobbulusAI : public BossAI
|
||||
{
|
||||
explicit boss_grobbulusAI(Creature* c) : BossAI(c, BOSS_GROBBULUS), summons(me)
|
||||
{
|
||||
pInstance = me->GetInstanceScript();
|
||||
}
|
||||
{}
|
||||
|
||||
EventMap events;
|
||||
SummonList summons;
|
||||
InstanceScript* pInstance;
|
||||
uint32 dropSludgeTimer{};
|
||||
|
||||
void Reset() override
|
||||
@ -138,10 +135,8 @@ public:
|
||||
|
||||
void KilledUnit(Unit* who) override
|
||||
{
|
||||
if (who->IsPlayer() && pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
if (who->IsPlayer())
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@ -217,10 +212,8 @@ public:
|
||||
|
||||
void KilledUnit(Unit* who) override
|
||||
{
|
||||
if (who->IsPlayer() && me->GetInstanceScript())
|
||||
{
|
||||
me->GetInstanceScript()->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
if (who->IsPlayer())
|
||||
me->GetInstanceScript()->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
|
||||
@ -69,11 +69,8 @@ public:
|
||||
struct boss_heiganAI : public BossAI
|
||||
{
|
||||
explicit boss_heiganAI(Creature* c) : BossAI(c, BOSS_HEIGAN)
|
||||
{
|
||||
pInstance = me->GetInstanceScript();
|
||||
}
|
||||
{}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
uint8 currentPhase{};
|
||||
uint8 currentSection{};
|
||||
@ -86,13 +83,6 @@ public:
|
||||
currentPhase = 0;
|
||||
currentSection = 3;
|
||||
moveRight = true;
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_HEIGAN_ENTER_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* who) override
|
||||
@ -101,10 +91,7 @@ public:
|
||||
return;
|
||||
|
||||
Talk(SAY_SLAY);
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
@ -118,13 +105,6 @@ public:
|
||||
BossAI::JustEngagedWith(who);
|
||||
me->SetInCombatWithZone();
|
||||
Talk(SAY_AGGRO);
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_HEIGAN_ENTER_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
}
|
||||
StartFightPhase(PHASE_SLOW_DANCE);
|
||||
}
|
||||
|
||||
@ -206,41 +186,38 @@ public:
|
||||
}
|
||||
break;
|
||||
case EVENT_ERUPT_SECTION:
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_HEIGAN_ERUPTION, currentSection);
|
||||
if (currentSection == 3)
|
||||
{
|
||||
moveRight = false;
|
||||
}
|
||||
else if (currentSection == 0)
|
||||
{
|
||||
moveRight = true;
|
||||
}
|
||||
moveRight ? currentSection++ : currentSection--;
|
||||
}
|
||||
{
|
||||
instance->SetData(DATA_HEIGAN_ERUPTION, currentSection);
|
||||
if (currentSection == 3)
|
||||
moveRight = false;
|
||||
else if (currentSection == 0)
|
||||
moveRight = true;
|
||||
|
||||
moveRight ? currentSection++ : currentSection--;
|
||||
|
||||
if (currentPhase == PHASE_SLOW_DANCE)
|
||||
{
|
||||
Talk(SAY_TAUNT);
|
||||
}
|
||||
|
||||
events.Repeat(currentPhase == PHASE_SLOW_DANCE ? 10s : 4s);
|
||||
break;
|
||||
}
|
||||
case EVENT_SAFETY_DANCE:
|
||||
{
|
||||
Map::PlayerList const& pList = me->GetMap()->GetPlayers();
|
||||
for (auto const& itr : pList)
|
||||
{
|
||||
Map::PlayerList const& pList = me->GetMap()->GetPlayers();
|
||||
for (auto const& itr : pList)
|
||||
if (IsInRoom(itr.GetSource()) && !itr.GetSource()->IsAlive())
|
||||
{
|
||||
if (IsInRoom(itr.GetSource()) && !itr.GetSource()->IsAlive())
|
||||
{
|
||||
pInstance->SetData(DATA_DANCE_FAIL, 0);
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
return;
|
||||
}
|
||||
instance->SetData(DATA_DANCE_FAIL, 0);
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
return;
|
||||
}
|
||||
events.Repeat(5s);
|
||||
return;
|
||||
}
|
||||
events.Repeat(5s);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
@ -145,15 +145,10 @@ public:
|
||||
struct boss_kelthuzadAI : public BossAI
|
||||
{
|
||||
explicit boss_kelthuzadAI(Creature* c) : BossAI(c, BOSS_KELTHUZAD), summons(me)
|
||||
{
|
||||
pInstance = me->GetInstanceScript();
|
||||
_justSpawned = true;
|
||||
}
|
||||
{}
|
||||
|
||||
EventMap events;
|
||||
SummonList summons;
|
||||
InstanceScript* pInstance;
|
||||
bool _justSpawned;
|
||||
|
||||
float NormalizeOrientation(float o)
|
||||
{
|
||||
@ -224,35 +219,23 @@ public:
|
||||
summons.DespawnAll();
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_FLOOR)))
|
||||
if (GameObject* go = instance->GetGameObject(DATA_KELTHUZAD_FLOOR))
|
||||
{
|
||||
go->SetPhaseMask(1, true);
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_GATE)))
|
||||
{
|
||||
if (!_justSpawned) // Don't open the door if we just spawned and are still doing the conversation
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
_justSpawned = false;
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_PORTAL_1)))
|
||||
{
|
||||
|
||||
if (GameObject* go = instance->GetGameObject(DATA_KELTHUZAD_PORTAL_1))
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_PORTAL_2)))
|
||||
{
|
||||
|
||||
if (GameObject* go = instance->GetGameObject(DATA_KELTHUZAD_PORTAL_2))
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_PORTAL_3)))
|
||||
{
|
||||
|
||||
if (GameObject* go = instance->GetGameObject(DATA_KELTHUZAD_PORTAL_3))
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_PORTAL_4)))
|
||||
{
|
||||
|
||||
if (GameObject* go = instance->GetGameObject(DATA_KELTHUZAD_PORTAL_4))
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason why) override
|
||||
@ -267,10 +250,7 @@ public:
|
||||
return;
|
||||
|
||||
Talk(SAY_SLAY);
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
@ -282,13 +262,6 @@ public:
|
||||
guardian->AI()->Talk(EMOTE_GUARDIAN_FLEE);
|
||||
}
|
||||
Talk(SAY_DEATH);
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who) override
|
||||
@ -312,17 +285,11 @@ public:
|
||||
events.ScheduleEvent(EVENT_SUMMON_SOUL_WEAVER, 12s);
|
||||
events.ScheduleEvent(EVENT_PHASE_2, 228s);
|
||||
events.ScheduleEvent(EVENT_ENRAGE, 15min);
|
||||
if (pInstance)
|
||||
|
||||
if (GameObject* go = instance->GetGameObject(DATA_KELTHUZAD_FLOOR))
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_FLOOR)))
|
||||
{
|
||||
events.ScheduleEvent(EVENT_FLOOR_CHANGE, 15s);
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
events.ScheduleEvent(EVENT_FLOOR_CHANGE, 15s);
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -354,14 +321,11 @@ public:
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_FLOOR_CHANGE:
|
||||
if (pInstance)
|
||||
if (GameObject* go = instance->GetGameObject(DATA_KELTHUZAD_FLOOR))
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_FLOOR)))
|
||||
{
|
||||
events.ScheduleEvent(EVENT_FLOOR_CHANGE, 15s);
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
go->SetPhaseMask(2, true);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_FLOOR_CHANGE, 15s);
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
go->SetPhaseMask(2, true);
|
||||
}
|
||||
break;
|
||||
case EVENT_SPAWN_POOL:
|
||||
@ -465,39 +429,32 @@ public:
|
||||
Talk(SAY_REQUEST_AID);
|
||||
events.DelayEvents(5500ms);
|
||||
events.ScheduleEvent(EVENT_P3_LICH_KING_SAY, 5s);
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_PORTAL_1)))
|
||||
{
|
||||
if (GameObject* go = instance->GetGameObject(DATA_KELTHUZAD_PORTAL_1))
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_PORTAL_2)))
|
||||
{
|
||||
|
||||
if (GameObject* go = instance->GetGameObject(DATA_KELTHUZAD_PORTAL_2))
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_PORTAL_3)))
|
||||
{
|
||||
|
||||
if (GameObject* go = instance->GetGameObject(DATA_KELTHUZAD_PORTAL_3))
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_PORTAL_4)))
|
||||
{
|
||||
|
||||
if (GameObject* go = instance->GetGameObject(DATA_KELTHUZAD_PORTAL_4))
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
events.Repeat(1s);
|
||||
break;
|
||||
case EVENT_P3_LICH_KING_SAY:
|
||||
if (pInstance)
|
||||
{
|
||||
if (Creature* cr = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_LICH_KING_BOSS)))
|
||||
{
|
||||
cr->AI()->Talk(SAY_ANSWER_REQUEST);
|
||||
}
|
||||
}
|
||||
{
|
||||
if (Creature* cr = instance->GetCreature(DATA_LICH_KING_BOSS))
|
||||
cr->AI()->Talk(SAY_ANSWER_REQUEST);
|
||||
|
||||
for (uint8 i = 0 ; i < RAID_MODE(2, 4); ++i)
|
||||
{
|
||||
events.ScheduleEvent(EVENT_SUMMON_GUARDIAN_OF_ICECROWN, 10000 + (i * 5000));
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case EVENT_SUMMON_GUARDIAN_OF_ICECROWN:
|
||||
if (Creature* cr = me->SummonCreature(NPC_GUARDIAN_OF_ICECROWN, SpawnPool[RAND(0, 1, 3, 4)]))
|
||||
{
|
||||
@ -573,10 +530,8 @@ public:
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
if (me->GetEntry() == NPC_UNSTOPPABLE_ABOMINATION && me->GetInstanceScript())
|
||||
{
|
||||
if (me->GetEntry() == NPC_UNSTOPPABLE_ABOMINATION)
|
||||
me->GetInstanceScript()->SetData(DATA_ABOMINATION_KILLED, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void AttackStart(Unit* who) override
|
||||
@ -618,10 +573,8 @@ public:
|
||||
|
||||
void KilledUnit(Unit* who) override
|
||||
{
|
||||
if (who->IsPlayer() && me->GetInstanceScript())
|
||||
{
|
||||
me->GetInstanceScript()->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
if (who->IsPlayer())
|
||||
me->GetInstanceScript()->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void JustReachedHome() override
|
||||
|
||||
@ -62,11 +62,9 @@ public:
|
||||
{
|
||||
explicit boss_loathebAI(Creature* c) : BossAI(c, BOSS_LOATHEB), summons(me)
|
||||
{
|
||||
pInstance = me->GetInstanceScript();
|
||||
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
|
||||
}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
uint8 doomCounter;
|
||||
EventMap events;
|
||||
SummonList summons;
|
||||
@ -77,14 +75,6 @@ public:
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
doomCounter = 0;
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(BOSS_LOATHEB, NOT_STARTED);
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_LOATHEB_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* cr) override
|
||||
@ -95,18 +85,13 @@ public:
|
||||
|
||||
void SummonedCreatureDies(Creature* /*cr*/, Unit*) override
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_SPORE_KILLED, 0);
|
||||
}
|
||||
instance->SetData(DATA_SPORE_KILLED, 0);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* who) override
|
||||
{
|
||||
if (who->IsPlayer() && pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
if (who->IsPlayer())
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
@ -118,24 +103,12 @@ public:
|
||||
events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 2min);
|
||||
events.ScheduleEvent(EVENT_SUMMON_SPORE, 15s);
|
||||
events.ScheduleEvent(EVENT_BERSERK, 12min);
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(BOSS_LOATHEB, IN_PROGRESS);
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_LOATHEB_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
BossAI::JustDied(killer);
|
||||
summons.DespawnAll();
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(BOSS_LOATHEB, DONE);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
|
||||
@ -106,11 +106,8 @@ public:
|
||||
struct boss_maexxnaAI : public BossAI
|
||||
{
|
||||
explicit boss_maexxnaAI(Creature* c) : BossAI(c, BOSS_MAEXXNA), summons(me)
|
||||
{
|
||||
pInstance = me->GetInstanceScript();
|
||||
}
|
||||
{}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
SummonList summons;
|
||||
|
||||
@ -131,10 +128,6 @@ public:
|
||||
BossAI::Reset();
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
if (pInstance)
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_MAEXXNA_GATE)))
|
||||
if (pInstance->GetBossState(BOSS_FAERLINA) == DONE)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
@ -147,13 +140,6 @@ public:
|
||||
events.ScheduleEvent(EVENT_NECROTIC_POISON, 5s);
|
||||
events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s);
|
||||
events.ScheduleEvent(EVENT_SUMMON_SPIDERLINGS, 30s);
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_MAEXXNA_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* cr) override
|
||||
@ -171,10 +157,8 @@ public:
|
||||
|
||||
void KilledUnit(Unit* who) override
|
||||
{
|
||||
if (who->IsPlayer() && pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
if (who->IsPlayer())
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
|
||||
@ -89,11 +89,8 @@ public:
|
||||
struct boss_nothAI : public BossAI
|
||||
{
|
||||
explicit boss_nothAI(Creature* c) : BossAI(c, BOSS_NOTH), summons(me)
|
||||
{
|
||||
pInstance = me->GetInstanceScript();
|
||||
}
|
||||
{}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
uint8 timesInBalcony;
|
||||
EventMap events;
|
||||
SummonList summons;
|
||||
@ -151,13 +148,6 @@ public:
|
||||
me->SetControlled(false, UNIT_STATE_ROOT);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
timesInBalcony = 0;
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_NOTH_ENTRY_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason why) override
|
||||
@ -171,13 +161,6 @@ public:
|
||||
BossAI::JustEngagedWith(who);
|
||||
Talk(SAY_AGGRO);
|
||||
StartGroundPhase();
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_NOTH_ENTRY_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon) override
|
||||
@ -195,13 +178,6 @@ public:
|
||||
}
|
||||
BossAI::JustDied(killer);
|
||||
Talk(SAY_DEATH);
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_NOTH_ENTRY_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* who) override
|
||||
@ -210,10 +186,7 @@ public:
|
||||
return;
|
||||
|
||||
Talk(SAY_SLAY);
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
|
||||
@ -63,12 +63,9 @@ public:
|
||||
struct boss_patchwerkAI : public BossAI
|
||||
{
|
||||
explicit boss_patchwerkAI(Creature* c) : BossAI(c, BOSS_PATCHWERK)
|
||||
{
|
||||
pInstance = me->GetInstanceScript();
|
||||
}
|
||||
{}
|
||||
|
||||
EventMap events;
|
||||
InstanceScript* pInstance;
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
@ -82,13 +79,9 @@ public:
|
||||
return;
|
||||
|
||||
if (!urand(0, 3))
|
||||
{
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
@ -105,10 +98,7 @@ public:
|
||||
events.ScheduleEvent(EVENT_HATEFUL_STRIKE, 1500ms);
|
||||
events.ScheduleEvent(EVENT_BERSERK, 6min);
|
||||
events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s);
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
|
||||
}
|
||||
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
|
||||
@ -82,13 +82,10 @@ public:
|
||||
struct boss_razuviousAI : public BossAI
|
||||
{
|
||||
explicit boss_razuviousAI(Creature* c) : BossAI(c, BOSS_RAZUVIOUS), summons(me)
|
||||
{
|
||||
pInstance = me->GetInstanceScript();
|
||||
}
|
||||
{}
|
||||
|
||||
EventMap events;
|
||||
SummonList summons;
|
||||
InstanceScript* pInstance;
|
||||
|
||||
void SpawnHelpers()
|
||||
{
|
||||
@ -210,13 +207,10 @@ public:
|
||||
void KilledUnit(Unit* who) override
|
||||
{
|
||||
if (roll_chance_i(30))
|
||||
{
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
if (who->IsPlayer() && pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
|
||||
if (who->IsPlayer())
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* who, uint32& damage, DamageEffectType, SpellSchoolMask) override
|
||||
@ -331,17 +325,16 @@ public:
|
||||
switch (action)
|
||||
{
|
||||
case ACTION_FACE_ME:
|
||||
{
|
||||
scheduler.CancelGroup(GROUP_OOC_RP);
|
||||
me->SetSheath(SHEATH_STATE_UNARMED);
|
||||
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
|
||||
if (InstanceScript* instance = me->GetInstanceScript())
|
||||
{
|
||||
if (Creature* creature = instance->GetCreature(DATA_RAZUVIOUS))
|
||||
{
|
||||
me->SetFacingToObject(creature);
|
||||
}
|
||||
}
|
||||
|
||||
if (Creature* creature = me->GetInstanceScript()->GetCreature(DATA_RAZUVIOUS_BOSS))
|
||||
me->SetFacingToObject(creature);
|
||||
|
||||
break;
|
||||
}
|
||||
case ACTION_TALK:
|
||||
Talk(SAY_DEATH_KNIGHT_UNDERSTUDY);
|
||||
break;
|
||||
@ -360,22 +353,18 @@ public:
|
||||
|
||||
void KilledUnit(Unit* who) override
|
||||
{
|
||||
if (who->IsPlayer() && me->GetInstanceScript())
|
||||
{
|
||||
me->GetInstanceScript()->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
if (who->IsPlayer())
|
||||
me->GetInstanceScript()->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
scheduler.CancelGroup(GROUP_OOC_RP);
|
||||
if (InstanceScript* instance = me->GetInstanceScript())
|
||||
|
||||
if (Creature* creature = me->GetInstanceScript()->GetCreature(DATA_RAZUVIOUS_BOSS))
|
||||
{
|
||||
if (Creature* creature = instance->GetCreature(DATA_RAZUVIOUS))
|
||||
{
|
||||
creature->SetInCombatWithZone();
|
||||
creature->AI()->AttackStart(who);
|
||||
}
|
||||
creature->SetInCombatWithZone();
|
||||
creature->AI()->AttackStart(who);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -92,12 +92,9 @@ public:
|
||||
struct boss_sapphironAI : public BossAI
|
||||
{
|
||||
explicit boss_sapphironAI(Creature* c) : BossAI(c, BOSS_SAPPHIRON)
|
||||
{
|
||||
pInstance = me->GetInstanceScript();
|
||||
}
|
||||
{}
|
||||
|
||||
EventMap events;
|
||||
InstanceScript* pInstance;
|
||||
uint8 iceboltCount{};
|
||||
uint32 spawnTimer{};
|
||||
GuidList blockList;
|
||||
@ -221,10 +218,8 @@ public:
|
||||
|
||||
void KilledUnit(Unit* who) override
|
||||
{
|
||||
if (who->IsPlayer() && pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
if (who->IsPlayer())
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@ -402,9 +397,9 @@ public:
|
||||
Map::PlayerList const& pList = me->GetMap()->GetPlayers();
|
||||
for (auto const& itr : pList)
|
||||
{
|
||||
if (itr.GetSource()->GetResistance(SPELL_SCHOOL_FROST) > 100 && pInstance)
|
||||
if (itr.GetSource()->GetResistance(SPELL_SCHOOL_FROST) > 100)
|
||||
{
|
||||
pInstance->SetData(DATA_HUNDRED_CLUB, 0);
|
||||
instance->SetData(DATA_HUNDRED_CLUB, 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -123,11 +123,8 @@ public:
|
||||
struct boss_thaddiusAI : public BossAI
|
||||
{
|
||||
explicit boss_thaddiusAI(Creature* c) : BossAI(c, BOSS_THADDIUS), summons(me), ballLightningEnabled(false)
|
||||
{
|
||||
pInstance = me->GetInstanceScript();
|
||||
}
|
||||
{}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
SummonList summons;
|
||||
uint32 summonTimer{};
|
||||
@ -184,28 +181,15 @@ public:
|
||||
}
|
||||
|
||||
if (GameObject* go = me->FindNearestGameObject(GO_TESLA_COIL_LEFT, 100.0f))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
if (GameObject* go = me->FindNearestGameObject(GO_TESLA_COIL_RIGHT, 100.0f))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_THADDIUS_GATE)))
|
||||
{
|
||||
if (pInstance->GetBossState(BOSS_GLUTH) == DONE)
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POSITIVE_POLARITY);
|
||||
pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POSITIVE_CHARGE_STACK);
|
||||
pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_NEGATIVE_POLARITY);
|
||||
pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_NEGATIVE_CHARGE_STACK);
|
||||
if (GameObject* go = me->FindNearestGameObject(GO_TESLA_COIL_RIGHT, 100.0f))
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POSITIVE_POLARITY);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POSITIVE_CHARGE_STACK);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_NEGATIVE_POLARITY);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_NEGATIVE_CHARGE_STACK);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* who) override
|
||||
@ -214,27 +198,17 @@ public:
|
||||
return;
|
||||
|
||||
Talk(SAY_SLAY);
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
BossAI::JustDied(killer);
|
||||
Talk(SAY_DEATH);
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POSITIVE_POLARITY);
|
||||
pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POSITIVE_CHARGE_STACK);
|
||||
pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_NEGATIVE_POLARITY);
|
||||
pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_NEGATIVE_CHARGE_STACK);
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_THADDIUS_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POSITIVE_POLARITY);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POSITIVE_CHARGE_STACK);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_NEGATIVE_POLARITY);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_NEGATIVE_CHARGE_STACK);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* cr) override
|
||||
@ -384,11 +358,9 @@ public:
|
||||
{
|
||||
explicit boss_thaddius_summonAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = me->GetInstanceScript();
|
||||
overload = false;
|
||||
}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
uint32 pullTimer{};
|
||||
uint32 visualTimer{};
|
||||
@ -439,17 +411,11 @@ public:
|
||||
{
|
||||
events.ScheduleEvent(EVENT_MINION_MAGNETIC_PULL, 20s);
|
||||
}
|
||||
if (pInstance)
|
||||
|
||||
if (Creature* cr = me->GetInstanceScript()->GetCreature(DATA_THADDIUS_BOSS))
|
||||
{
|
||||
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_THADDIUS_GATE)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
if (Creature* cr = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_THADDIUS_BOSS)))
|
||||
{
|
||||
cr->AI()->AttackStart(pWho);
|
||||
cr->AddThreat(pWho, 10.0f);
|
||||
}
|
||||
cr->AI()->AttackStart(pWho);
|
||||
cr->AddThreat(pWho, 10.0f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -479,13 +445,9 @@ public:
|
||||
{
|
||||
Talk(me->GetEntry() == NPC_STALAGG ? SAY_STAL_DEATH : SAY_FEUG_DEATH);
|
||||
Talk(me->GetEntry() == NPC_STALAGG ? EMOTE_STAL_DEATH : EMOTE_FEUG_DEATH);
|
||||
if (pInstance)
|
||||
{
|
||||
if (Creature* cr = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_THADDIUS_BOSS)))
|
||||
{
|
||||
cr->AI()->DoAction(ACTION_SUMMON_DIED);
|
||||
}
|
||||
}
|
||||
|
||||
if (Creature* cr = me->GetInstanceScript()->GetCreature(DATA_THADDIUS_BOSS))
|
||||
cr->AI()->DoAction(ACTION_SUMMON_DIED);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* who) override
|
||||
@ -493,14 +455,10 @@ public:
|
||||
if (!who->IsPlayer())
|
||||
return;
|
||||
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
|
||||
}
|
||||
if (!urand(0, 2))
|
||||
{
|
||||
Talk(me->GetEntry() == NPC_STALAGG ? SAY_STAL_SLAY : SAY_FEUG_SLAY);
|
||||
}
|
||||
|
||||
me->GetInstanceScript()->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@ -547,31 +505,30 @@ public:
|
||||
events.Repeat(3s);
|
||||
break;
|
||||
case EVENT_MINION_MAGNETIC_PULL:
|
||||
{
|
||||
events.Repeat(20s);
|
||||
if (pInstance)
|
||||
if (Creature* feugen = me->GetInstanceScript()->GetCreature(DATA_FEUGEN_BOSS))
|
||||
{
|
||||
if (Creature* feugen = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_FEUGEN_BOSS)))
|
||||
{
|
||||
if (!feugen->IsAlive() || !feugen->GetVictim() || !me->GetVictim())
|
||||
return;
|
||||
if (!feugen->IsAlive() || !feugen->GetVictim() || !me->GetVictim())
|
||||
return;
|
||||
|
||||
float threatFeugen = feugen->GetThreatMgr().GetThreat(feugen->GetVictim());
|
||||
float threatStalagg = me->GetThreatMgr().GetThreat(me->GetVictim());
|
||||
Unit* tankFeugen = feugen->GetVictim();
|
||||
Unit* tankStalagg = me->GetVictim();
|
||||
float threatFeugen = feugen->GetThreatMgr().GetThreat(feugen->GetVictim());
|
||||
float threatStalagg = me->GetThreatMgr().GetThreat(me->GetVictim());
|
||||
Unit* tankFeugen = feugen->GetVictim();
|
||||
Unit* tankStalagg = me->GetVictim();
|
||||
|
||||
feugen->GetThreatMgr().ModifyThreatByPercent(tankFeugen, -100);
|
||||
feugen->AddThreat(tankStalagg, threatFeugen);
|
||||
feugen->CastSpell(tankStalagg, SPELL_MAGNETIC_PULL, true);
|
||||
feugen->AI()->DoAction(ACTION_MAGNETIC_PULL);
|
||||
feugen->GetThreatMgr().ModifyThreatByPercent(tankFeugen, -100);
|
||||
feugen->AddThreat(tankStalagg, threatFeugen);
|
||||
feugen->CastSpell(tankStalagg, SPELL_MAGNETIC_PULL, true);
|
||||
feugen->AI()->DoAction(ACTION_MAGNETIC_PULL);
|
||||
|
||||
me->GetThreatMgr().ModifyThreatByPercent(tankStalagg, -100);
|
||||
me->AddThreat(tankFeugen, threatStalagg);
|
||||
me->CastSpell(tankFeugen, SPELL_MAGNETIC_PULL, true);
|
||||
DoAction(ACTION_MAGNETIC_PULL);
|
||||
}
|
||||
me->GetThreatMgr().ModifyThreatByPercent(tankStalagg, -100);
|
||||
me->AddThreat(tankFeugen, threatStalagg);
|
||||
me->CastSpell(tankFeugen, SPELL_MAGNETIC_PULL, true);
|
||||
DoAction(ACTION_MAGNETIC_PULL);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EVENT_MINION_CHECK_DISTANCE:
|
||||
if (Creature* cr = ObjectAccessor::GetCreature(*me, myCoil))
|
||||
{
|
||||
@ -652,9 +609,9 @@ class spell_thaddius_pos_neg_charge : public SpellScript
|
||||
{
|
||||
SetHitDamage(0);
|
||||
}
|
||||
else if (target->GetInstanceScript())
|
||||
else if (InstanceScript* instance = target->GetInstanceScript())
|
||||
{
|
||||
target->GetInstanceScript()->SetData(DATA_CHARGES_CROSSED, 0);
|
||||
instance->SetData(DATA_CHARGES_CROSSED, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -736,15 +693,13 @@ public:
|
||||
bool OnTrigger(Player* player, AreaTrigger const* /*areaTrigger*/) override
|
||||
{
|
||||
InstanceScript* instance = player->GetInstanceScript();
|
||||
if (!instance || instance->GetData(DATA_HAD_THADDIUS_GREET) || instance->GetBossState(BOSS_THADDIUS) == DONE)
|
||||
if (!instance || instance->GetData(DATA_THADDIUS_INTRO) || instance->GetBossState(BOSS_THADDIUS) == DONE)
|
||||
return true;
|
||||
|
||||
if (Creature* thaddius = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_THADDIUS_BOSS)))
|
||||
{
|
||||
if (Creature* thaddius = instance->GetCreature(DATA_THADDIUS_BOSS))
|
||||
thaddius->AI()->Talk(SAY_GREET);
|
||||
}
|
||||
instance->SetData(DATA_HAD_THADDIUS_GREET, 1);
|
||||
|
||||
instance->SetData(DATA_THADDIUS_INTRO, 1);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -18,68 +18,78 @@
|
||||
#ifndef DEF_NAXXRAMAS_H
|
||||
#define DEF_NAXXRAMAS_H
|
||||
|
||||
#include "CreatureAIImpl.h"
|
||||
|
||||
#define DataHeader "NAX"
|
||||
|
||||
#define NaxxramasScriptName "instance_naxxramas"
|
||||
|
||||
enum Encouters
|
||||
enum NaxxramasEncouter
|
||||
{
|
||||
BOSS_PATCHWERK = 0,
|
||||
BOSS_GROBBULUS = 1,
|
||||
BOSS_GLUTH = 2,
|
||||
BOSS_NOTH = 3,
|
||||
BOSS_HEIGAN = 4,
|
||||
BOSS_LOATHEB = 5,
|
||||
BOSS_ANUB = 6,
|
||||
BOSS_FAERLINA = 7,
|
||||
BOSS_MAEXXNA = 8,
|
||||
BOSS_THADDIUS = 9,
|
||||
BOSS_RAZUVIOUS = 10,
|
||||
BOSS_GOTHIK = 11,
|
||||
BOSS_HORSEMAN = 12,
|
||||
BOSS_SAPPHIRON = 13,
|
||||
BOSS_KELTHUZAD = 14,
|
||||
MAX_ENCOUNTERS,
|
||||
BOSS_PATCHWERK = 0,
|
||||
BOSS_GROBBULUS = 1,
|
||||
BOSS_GLUTH = 2,
|
||||
BOSS_NOTH = 3,
|
||||
BOSS_HEIGAN = 4,
|
||||
BOSS_LOATHEB = 5,
|
||||
BOSS_ANUB = 6,
|
||||
BOSS_FAERLINA = 7,
|
||||
BOSS_MAEXXNA = 8,
|
||||
BOSS_THADDIUS = 9,
|
||||
BOSS_RAZUVIOUS = 10,
|
||||
BOSS_GOTHIK = 11,
|
||||
BOSS_HORSEMAN = 12,
|
||||
BOSS_SAPPHIRON = 13,
|
||||
BOSS_KELTHUZAD = 14,
|
||||
MAX_ENCOUNTERS
|
||||
};
|
||||
|
||||
enum NXData
|
||||
enum NaxxramasData
|
||||
{
|
||||
DATA_NOTH_ENTRY_GATE = 100,
|
||||
DATA_HEIGAN_ERUPTION = 101,
|
||||
DATA_HEIGAN_ENTER_GATE = 102,
|
||||
DATA_LOATHEB_GATE = 103,
|
||||
DATA_FAERLINA_WEB = 105,
|
||||
DATA_MAEXXNA_GATE = 106,
|
||||
DATA_THADDIUS_BOSS = 107,
|
||||
DATA_STALAGG_BOSS = 108,
|
||||
DATA_FEUGEN_BOSS = 109,
|
||||
DATA_THADDIUS_GATE = 110,
|
||||
DATA_RAZUVIOUS = 111,
|
||||
DATA_GOTHIK_BOSS = 112,
|
||||
DATA_GOTHIK_ENTER_GATE = 113,
|
||||
DATA_GOTHIK_INNER_GATE = 114,
|
||||
DATA_GOTHIK_EXIT_GATE = 115,
|
||||
DATA_HORSEMEN_GATE = 116,
|
||||
DATA_LICH_KING_BOSS = 117,
|
||||
DATA_KELTHUZAD_FLOOR = 118,
|
||||
DATA_ABOMINATION_KILLED = 119,
|
||||
DATA_FRENZY_REMOVED = 120,
|
||||
DATA_CHARGES_CROSSED = 121,
|
||||
DATA_SPORE_KILLED = 122,
|
||||
DATA_HUNDRED_CLUB = 123,
|
||||
DATA_DANCE_FAIL = 124,
|
||||
DATA_IMMORTAL_FAIL = 125,
|
||||
DATA_KELTHUZAD_GATE = 126,
|
||||
DATA_HAD_THADDIUS_GREET = 127,
|
||||
DATA_KELTHUZAD_PORTAL_1 = 128,
|
||||
DATA_KELTHUZAD_PORTAL_2 = 129,
|
||||
DATA_KELTHUZAD_PORTAL_3 = 130,
|
||||
DATA_KELTHUZAD_PORTAL_4 = 131
|
||||
DATA_PATCHWERK_BOSS = 100,
|
||||
DATA_STALAGG_BOSS = 101,
|
||||
DATA_FEUGEN_BOSS = 102,
|
||||
DATA_THADDIUS_BOSS = 103,
|
||||
DATA_RAZUVIOUS_BOSS = 104,
|
||||
DATA_GOTHIK_BOSS = 105,
|
||||
DATA_BARON_RIVENDARE_BOSS = 106,
|
||||
DATA_SIR_ZELIEK_BOSS = 107,
|
||||
DATA_LADY_BLAUMEUX_BOSS = 108,
|
||||
DATA_THANE_KORTHAZZ_BOSS = 109,
|
||||
DATA_SAPPHIRON_BOSS = 110,
|
||||
DATA_KELTHUZAD_BOSS = 111,
|
||||
DATA_LICH_KING_BOSS = 112,
|
||||
|
||||
DATA_LOATHEB_PORTAL = 200,
|
||||
DATA_MAEXXNA_PORTAL = 201,
|
||||
DATA_THADDIUS_PORTAL = 202,
|
||||
DATA_HORSEMAN_PORTAL = 203,
|
||||
DATA_GOTHIK_INNER_GATE = 204,
|
||||
DATA_SAPPHIRON_GATE = 205,
|
||||
DATA_KELTHUZAD_GATE = 206,
|
||||
DATA_KELTHUZAD_FLOOR = 207,
|
||||
DATA_KELTHUZAD_PORTAL_1 = 208,
|
||||
DATA_KELTHUZAD_PORTAL_2 = 209,
|
||||
DATA_KELTHUZAD_PORTAL_3 = 210,
|
||||
DATA_KELTHUZAD_PORTAL_4 = 211,
|
||||
|
||||
DATA_HEIGAN_ERUPTION = 300,
|
||||
DATA_DANCE_FAIL = 301,
|
||||
DATA_SPORE_KILLED = 302,
|
||||
DATA_FRENZY_REMOVED = 303,
|
||||
DATA_THADDIUS_INTRO = 304,
|
||||
DATA_CHARGES_CROSSED = 305,
|
||||
DATA_HUNDRED_CLUB = 306,
|
||||
DATA_ABOMINATION_KILLED = 307,
|
||||
};
|
||||
|
||||
enum NXGOs
|
||||
enum NaxxramasPersistentData
|
||||
{
|
||||
PERSISTENT_DATA_THADDIUS_INTRO = 0,
|
||||
PERSISTENT_DATA_KELTHUZAD_DIALOG = 1,
|
||||
PERSISTENT_DATA_IMMORTAL_FAIL = 2,
|
||||
PERSISTENT_DATA_COUNT
|
||||
};
|
||||
|
||||
enum NaxxramasGameObject
|
||||
{
|
||||
GO_PATCHWERK_GATE = 181123,
|
||||
GO_GLUTH_GATE = 181120,
|
||||
@ -129,8 +139,25 @@ enum NXGOs
|
||||
GO_CONS_EYE_RAMP_BOSS = 181232
|
||||
};
|
||||
|
||||
enum NXNPCs
|
||||
enum NaxxramasGameObjectsDisplayId
|
||||
{
|
||||
GO_DISPLAY_ID_HEIGAN_ERUPTION1 = 1287,
|
||||
GO_DISPLAY_ID_HEIGAN_ERUPTION2 = 6785
|
||||
};
|
||||
|
||||
enum NaxxramasCreatureId
|
||||
{
|
||||
// Patchwerk
|
||||
NPC_PATCHWERK = 16028,
|
||||
NPC_PATCHWORK_GOLEM = 16017,
|
||||
NPC_BILE_RETCHER = 16018,
|
||||
NPC_MAD_SCIENTIST = 16020,
|
||||
NPC_LIVING_MONSTROSITY = 16021,
|
||||
NPC_SURGICAL_ASSIST = 16022,
|
||||
NPC_SLUDGE_BELCHER = 16029,
|
||||
|
||||
NPC_LIVING_POISON = 16027,
|
||||
|
||||
// Thaddius
|
||||
NPC_THADDIUS = 15928,
|
||||
NPC_STALAGG = 15929,
|
||||
@ -139,6 +166,9 @@ enum NXNPCs
|
||||
// Razuvious
|
||||
NPC_RAZUVIOUS = 16061,
|
||||
|
||||
// Gothik
|
||||
NPC_GOTHIK = 16060,
|
||||
|
||||
// Four horseman
|
||||
NPC_BARON_RIVENDARE = 30549,
|
||||
NPC_SIR_ZELIEK = 16063,
|
||||
@ -150,30 +180,124 @@ enum NXNPCs
|
||||
|
||||
// Kel'Thuzad
|
||||
NPC_KELTHUZAD = 15990,
|
||||
NPC_LICH_KING = 16980,
|
||||
|
||||
// Frogger
|
||||
NPC_LIVING_POISON = 16027,
|
||||
NPC_NAXXRAMAS_TRIGGER = 16082,
|
||||
NPC_MR_BIGGLESWORTH = 16998,
|
||||
|
||||
// Patchwerk
|
||||
NPC_PATCHWERK = 16028,
|
||||
NPC_PATCHWORK_GOLEM = 16017,
|
||||
NPC_BILE_RETCHER = 16018,
|
||||
NPC_MAD_SCIENTIST = 16020,
|
||||
NPC_LIVING_MONSTROSITY = 16021,
|
||||
NPC_SURGICAL_ASSIST = 16022,
|
||||
NPC_SLUDGE_BELCHER = 16029,
|
||||
|
||||
// Gothik
|
||||
NPC_GOTHIK = 16060
|
||||
NPC_LICH_KING = 16980
|
||||
};
|
||||
|
||||
enum NXMisc
|
||||
enum NaxxramasAchievemmentCriteria
|
||||
{
|
||||
ACHIEV_CRITERIA_AND_THEY_WOULD_ALL_GO_DOWN_TOGETHER_10_PLAYER = 7600, // And They Would All Go Down Together (10 player)
|
||||
ACHIEV_CRITERIA_AND_THEY_WOULD_ALL_GO_DOWN_TOGETHER_25_PLAYER = 7601, // And They Would All Go Down Together (25 player)
|
||||
|
||||
ACHIEV_CRITERIA_JUST_CANT_GET_ENOUGH_10_PLAYER = 7614, // Just Can't Get Enough (10 player)
|
||||
ACHIEV_CRITERIA_JUST_CANT_GET_ENOUGH_25_PLAYER = 7615, // Just Can't Get Enough (25 player)
|
||||
|
||||
ACHIEV_CRITERIA_MOMMA_SAID_KNOCK_YOU_OUT_10_PLAYER = 7265, // Momma Said Knock You Out (10 player)
|
||||
ACHIEV_CRITERIA_MOMMA_SAID_KNOCK_YOU_OUT_25_PLAYER = 7549, // Momma Said Knock You Out (25 player)
|
||||
|
||||
ACHIEV_CRITERIA_SHOKING_10_PLAYER = 7604, // Shocking! (10 player)
|
||||
ACHIEV_CRITERIA_SHOKING_25_PLAYER = 7605, // Shocking! (25 player)
|
||||
|
||||
ACHIEV_CRITERIA_SPORE_LOSER_10_PLAYER = 7612, // Spore Loser (10 player)
|
||||
ACHIEV_CRITERIA_SPORE_LOSER_25_PLAYER = 7613, // Spore Loser (25 player)
|
||||
|
||||
ACHIEV_CRITERIA_THE_SAFETY_DANCE_10_PLAYER = 7264, // The Safety Dance (10 player)
|
||||
ACHIEV_CRITERIA_THE_SAFETY_DANCE_25_PLAYER = 7548, // The Safety Dance (25 player)
|
||||
|
||||
ACHIEV_CRITERIA_SUBTRACTION_10_PLAYER = 7608, // Subtraction (10 player)
|
||||
ACHIEV_CRITERIA_SUBTRACTION_25_PLAYER = 7609, // Subtraction (25 player)
|
||||
|
||||
ACHIEV_CRITERIA_THE_HUNDRED_CLUB_10_PLAYER = 7567, // The Hundred Club (10 player)
|
||||
ACHIEV_CRITERIA_THE_HUNDRED_CLUB_25_PLAYER = 7568, // The Hundred Club (25 player)
|
||||
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_ANUB_10_PLAYER = 7146, // The Dedicated Few (25 player) - Anub'Rekhan
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_FAERLINA_10_PLAYER = 7147, // The Dedicated Few (25 player) - Grand Widow Faerlina
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_MAEXXNA_10_PLAYER = 7148, // The Dedicated Few (25 player) - Maexxna
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_PATCHWERK_10_PLAYER = 7149, // The Dedicated Few (25 player) - Patchwerk
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_GROBBULUS_10_PLAYER = 7150, // The Dedicated Few (25 player) - Grobbulus
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_GLUTH_10_PLAYER = 7151, // The Dedicated Few (25 player) - Gluth
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_THADDIUS_10_PLAYER = 7152, // The Dedicated Few (25 player) - Thaddius
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_NOTH_10_PLAYER = 7153, // The Dedicated Few (25 player) - Noth the Plaguebringer
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_HEIGAN_10_PLAYER = 7154, // The Dedicated Few (25 player) - Heigan the Unclean
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_LOATHEB_10_PLAYER = 7155, // The Dedicated Few (25 player) - Loatheb
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_RAZUVIOUS_10_PLAYER = 7156, // The Dedicated Few (25 player) - Instructor Razuvious
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_GOTHIK_10_PLAYER = 7157, // The Dedicated Few (25 player) - Gothik the Harvester
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_SAPPHIRON_10_PLAYER = 7158, // The Dedicated Few (25 player) - Sapphiron
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_KELTHUZAD_10_PLAYER = 6802, // The Dedicated Few (25 player) - Kel'Thuzad
|
||||
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_ANUB_25_PLAYER = 7159, // The Dedicated Few (25 player) - Anub'Rekhan
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_FAERLINA_25_PLAYER = 7160, // The Dedicated Few (25 player) - Grand Widow Faerlina
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_MAEXXNA_25_PLAYER = 7161, // The Dedicated Few (25 player) - Maexxna
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_PATCHWERK_25_PLAYER = 7162, // The Dedicated Few (25 player) - Patchwerk
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_GROBBULUS_25_PLAYER = 7163, // The Dedicated Few (25 player) - Grobbulus
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_GLUTH_25_PLAYER = 7164, // The Dedicated Few (25 player) - Gluth
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_THADDIUS_25_PLAYER = 7165, // The Dedicated Few (25 player) - Thaddius
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_NOTH_25_PLAYER = 7166, // The Dedicated Few (25 player) - Noth the Plaguebringer
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_HEIGAN_25_PLAYER = 7167, // The Dedicated Few (25 player) - Heigan the Unclean
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_LOATHEB_25_PLAYER = 7168, // The Dedicated Few (25 player) - Loatheb
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_RAZUVIOUS_25_PLAYER = 7169, // The Dedicated Few (25 player) - Instructor Razuvious
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_GOTHIK_25_PLAYER = 7170, // The Dedicated Few (25 player) - Gothik the Harvester
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_SAPPHIRON_25_PLAYER = 7171, // The Dedicated Few (25 player) - Sapphiron
|
||||
ACHIEV_CRITERIA_THE_DEDICATED_FEW_KELTHUZAD_25_PLAYER = 7172, // The Dedicated Few (25 player) - Kel'Thuzad
|
||||
|
||||
ACHIEV_CRITERIA_THE_UNDYING_KELTHUZAD = 7617, // The Undying - Kel'Thuzad
|
||||
ACHIEV_CRITERIA_THE_UNDYING_THE_FOUR_HORSEMEN = 13237, // The Undying - The Four Horsemen
|
||||
ACHIEV_CRITERIA_THE_UNDYING_MAEXXNA = 13238, // The Undying - Maexxna
|
||||
ACHIEV_CRITERIA_THE_UNDYING_LOATHEB = 13239, // The Undying - Loatheb
|
||||
ACHIEV_CRITERIA_THE_UNDYING_THADDIUS = 13240, // The Undying - Thaddius
|
||||
|
||||
ACHIEV_CRITERIA_THE_IMMORTAL_KELTHUZAD = 7616, // The Immortal - Kel'Thuzad
|
||||
ACHIEV_CRITERIA_THE_IMMORTAL_THE_FOUR_HORSEMEN = 13233, // The Immortal - The Four Horsemen
|
||||
ACHIEV_CRITERIA_THE_IMMORTAL_MAEXXNA = 13234, // The Immortal - Maexxna
|
||||
ACHIEV_CRITERIA_THE_IMMORTAL_LOATHEB = 13235, // The Immortal - Loatheb
|
||||
ACHIEV_CRITERIA_THE_IMMORTAL_THADDIUS = 13236 // The Immortal - Thaddius
|
||||
};
|
||||
|
||||
enum NaxxramasSay
|
||||
{
|
||||
SAY_HORSEMEN_DIALOG1 = 5,
|
||||
SAY_HORSEMEN_DIALOG2 = 6,
|
||||
|
||||
SAY_SAPP_DIALOG1 = 0,
|
||||
SAY_SAPP_DIALOG2_LICH = 1,
|
||||
SAY_SAPP_DIALOG3 = 2,
|
||||
SAY_SAPP_DIALOG4_LICH = 2,
|
||||
SAY_SAPP_DIALOG5 = 4,
|
||||
SAY_SAPP_DIALOG6 = 20,
|
||||
|
||||
SAY_CAT_DIED = 5, // No!!! A curse upon you, interlopers! The armies of the Lich King will hunt you down. You will not escape your fate...
|
||||
SAY_FIRST_WING_TAUNT = 16
|
||||
};
|
||||
|
||||
enum NaxxramasEvent
|
||||
{
|
||||
EVENT_SUMMON_LIVING_POISON = 1,
|
||||
EVENT_THADDIUS_SCREAMS = 2,
|
||||
EVENT_AND_THEY_WOULD_ALL_GO_DOWN_TOGETHER = 3,
|
||||
EVENT_KELTHUZAD_WING_TAUNT = 4,
|
||||
|
||||
EVENT_HORSEMEN_INTRO1 = 5, // Thane Korth'azz: To arms, ye roustabouts! We've got company!
|
||||
EVENT_HORSEMEN_INTRO2 = 6, // Sir Zeliek: Invaders, cease this foolish venture at once! Turn away while you still can!
|
||||
EVENT_HORSEMEN_INTRO3 = 7, // Lady Blaumeux: Come, Zeliek, do not drive them out. Not before we've had our fun!
|
||||
EVENT_HORSEMEN_INTRO4 = 8, // Baron Rivendare: Enough prattling. Let them come. We shall grind their bones to dust.
|
||||
EVENT_HORSEMEN_INTRO5 = 9, // Lady Blaumeux: I do hope they stay alive long enough for me to... introduce myself.
|
||||
EVENT_HORSEMEN_INTRO6 = 10, // Sir Zeliek: Perhaps they will come to their senses... and run away as fast as they can.
|
||||
EVENT_HORSEMEN_INTRO7 = 11, // Thane Korth'azz: I've heard about enough a' yer snivelin'! Shut yer flytrap before I shut it for ye'!
|
||||
EVENT_HORSEMEN_INTRO8 = 12, // Baron Rivendare: Conserve your anger. Harness your rage. You will all have outlets for your frustrations soon enough.
|
||||
|
||||
EVENT_FROSTWYRM_WATERFALL_DOOR = 13,
|
||||
EVENT_KELTHUZAD_LICH_KING_TALK1 = 14,
|
||||
EVENT_KELTHUZAD_LICH_KING_TALK2 = 15,
|
||||
EVENT_KELTHUZAD_LICH_KING_TALK3 = 16,
|
||||
EVENT_KELTHUZAD_LICH_KING_TALK4 = 17,
|
||||
EVENT_KELTHUZAD_LICH_KING_TALK5 = 18,
|
||||
EVENT_KELTHUZAD_LICH_KING_TALK6 = 19
|
||||
};
|
||||
|
||||
enum NaxxramasMisc
|
||||
{
|
||||
SPELL_ERUPTION = 29371,
|
||||
SPELL_FROGGER_EXPLODE = 28433,
|
||||
SPELL_EXPLODE = 28433,
|
||||
SPELL_THE_FOUR_HORSEMAN_CREDIT = 59450,
|
||||
|
||||
ACTION_SAPPHIRON_BIRTH = 1,
|
||||
|
||||
@ -181,32 +305,19 @@ enum NXMisc
|
||||
SOUND_SCREAM = 8873
|
||||
};
|
||||
|
||||
enum NXSays
|
||||
{
|
||||
SAY_SAPP_DIALOG1 = 0,
|
||||
SAY_SAPP_DIALOG2_LICH = 1,
|
||||
SAY_SAPP_DIALOG3 = 2,
|
||||
SAY_SAPP_DIALOG4_LICH = 2,
|
||||
SAY_SAPP_DIALOG5 = 4,
|
||||
SAY_SAPP_DIALOG6 = 20,
|
||||
SAY_CAT_DIED = 5,
|
||||
SAY_FIRST_WING_TAUNT = 16,
|
||||
SAY_HORSEMEN_DIALOG1 = 5,
|
||||
SAY_HORSEMEN_DIALOG2 = 6
|
||||
};
|
||||
static constexpr uint32 NaxxramasMapId = 533;
|
||||
static constexpr uint8 HeiganEruptSectionCount = 4;
|
||||
static constexpr uint8 HorsemanCount = 4;
|
||||
static constexpr uint8 AbominationKillCountReq = 18;
|
||||
static constexpr uint8 TheDedicatedFew10PlayerReq = 9;
|
||||
static constexpr uint8 TheDedicatedFew25PlayerReq = 21;
|
||||
|
||||
enum NXEvents
|
||||
{
|
||||
EVENT_THADDIUS_SCREAMS = 0,
|
||||
EVENT_KELTHUZAD_WING_TAUNT = 1,
|
||||
EVENT_FROSTWYRM_WATERFALL_DOOR = 2,
|
||||
EVENT_HORSEMEN_INTRO = 3
|
||||
};
|
||||
|
||||
template <class AI, class T>
|
||||
template<typename AI, typename T>
|
||||
inline AI* GetNaxxramasAI(T* obj)
|
||||
{
|
||||
return GetInstanceAI<AI>(obj, NaxxramasScriptName);
|
||||
}
|
||||
|
||||
#define RegisterNaxxramasCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetNaxxramasAI)
|
||||
|
||||
#endif
|
||||
|
||||
@ -44,22 +44,7 @@ void AddSC_boss_krik_thir(); //Azjol-Nerub Azjol-Nerub
|
||||
void AddSC_boss_hadronox();
|
||||
void AddSC_boss_anub_arak();
|
||||
void AddSC_instance_azjol_nerub();
|
||||
void AddSC_boss_anubrekhan(); //Naxxramas
|
||||
void AddSC_boss_maexxna();
|
||||
void AddSC_boss_patchwerk();
|
||||
void AddSC_boss_grobbulus();
|
||||
void AddSC_boss_razuvious();
|
||||
void AddSC_boss_kelthuzad();
|
||||
void AddSC_boss_loatheb();
|
||||
void AddSC_boss_noth();
|
||||
void AddSC_boss_gluth();
|
||||
void AddSC_boss_sapphiron();
|
||||
void AddSC_boss_four_horsemen();
|
||||
void AddSC_boss_faerlina();
|
||||
void AddSC_boss_heigan();
|
||||
void AddSC_boss_gothik();
|
||||
void AddSC_boss_thaddius();
|
||||
void AddSC_instance_naxxramas();
|
||||
void AddSC_instance_naxxramas(); //Naxxramas
|
||||
void AddSC_boss_magus_telestra(); //The Nexus Nexus
|
||||
void AddSC_boss_anomalus();
|
||||
void AddSC_boss_ormorok();
|
||||
@ -210,22 +195,7 @@ void AddNorthrendScripts()
|
||||
AddSC_boss_hadronox();
|
||||
AddSC_boss_anub_arak();
|
||||
AddSC_instance_azjol_nerub();
|
||||
AddSC_boss_anubrekhan(); //Naxxramas
|
||||
AddSC_boss_maexxna();
|
||||
AddSC_boss_patchwerk();
|
||||
AddSC_boss_grobbulus();
|
||||
AddSC_boss_razuvious();
|
||||
AddSC_boss_kelthuzad();
|
||||
AddSC_boss_loatheb();
|
||||
AddSC_boss_noth();
|
||||
AddSC_boss_gluth();
|
||||
AddSC_boss_sapphiron();
|
||||
AddSC_boss_four_horsemen();
|
||||
AddSC_boss_faerlina();
|
||||
AddSC_boss_heigan();
|
||||
AddSC_boss_gothik();
|
||||
AddSC_boss_thaddius();
|
||||
AddSC_instance_naxxramas();
|
||||
AddSC_instance_naxxramas(); //Naxxramas
|
||||
AddSC_boss_magus_telestra(); //The Nexus Nexus
|
||||
AddSC_boss_anomalus();
|
||||
AddSC_boss_ormorok();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user