Compare commits

...

3 Commits

20 changed files with 1115 additions and 1833 deletions

View File

@ -28,3 +28,4 @@ git clone --depth=1 --branch=master https://github.com/azerothcore/mod-server-au
git clone --depth=1 --branch=master https://github.com/azerothcore/mod-transmog.git modules/mod-transmog
git clone --depth=1 --branch=main https://github.com/azerothcore/mod-progression-system.git modules/mod-progression-system
git clone --depth=1 --branch=master https://github.com/azerothcore/mod-arena-3v3-solo-queue.git modules/mod-arena-3v3-solo-queue
git clone --depth=1 --branch=master https://github.com/azerothcore/mod-costumes.git modules/mod-costumes

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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