diff options
Diffstat (limited to 'src')
6 files changed, 206 insertions, 245 deletions
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp index ed08296acd8..dac06186dff 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp @@ -100,21 +100,21 @@ class boss_anomalus : public CreatureScript { Initialize(); - instance->SetData(DATA_ANOMALUS_EVENT, NOT_STARTED); + instance->SetBossState(DATA_ANOMALUS, NOT_STARTED); } void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); - instance->SetData(DATA_ANOMALUS_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_ANOMALUS, IN_PROGRESS); } void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); - instance->SetData(DATA_ANOMALUS_EVENT, DONE); + instance->SetBossState(DATA_ANOMALUS, DONE); } uint32 GetData(uint32 type) const override diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp index 6b3df5ef665..a8ffb1d542e 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp @@ -101,7 +101,7 @@ public: RemovePrison(CheckContainmentSpheres()); - instance->SetData(DATA_KERISTRASZA_EVENT, NOT_STARTED); + instance->SetBossState(DATA_KERISTRASZA, NOT_STARTED); } void EnterCombat(Unit* /*who*/) override @@ -109,14 +109,14 @@ public: Talk(SAY_AGGRO); DoCastAOE(SPELL_INTENSE_COLD); - instance->SetData(DATA_KERISTRASZA_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_KERISTRASZA, IN_PROGRESS); } void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); - instance->SetData(DATA_KERISTRASZA_EVENT, DONE); + instance->SetBossState(DATA_KERISTRASZA, DONE); } void KilledUnit(Unit* who) override diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp index 8c58a65cdbe..1df5f5eac8f 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp @@ -31,7 +31,9 @@ enum Spells SPELL_FIRE_MAGUS_VISUAL = 47705, SPELL_FROST_MAGUS_VISUAL = 47706, - SPELL_ARCANE_MAGUS_VISUAL = 47704 + SPELL_ARCANE_MAGUS_VISUAL = 47704, + + SPELL_WEAR_CHRISTMAS_HAT = 61400 }; enum Creatures @@ -53,7 +55,9 @@ enum Yells enum Misc { ACTION_MAGUS_DEAD = 1, - DATA_SPLIT_PERSONALITY = 2 + DATA_SPLIT_PERSONALITY = 2, + + GAME_EVENT_WINTER_VEIL = 2, }; const Position CenterOfRoom = {504.80f, 89.07f, -16.12f, 6.27f}; @@ -128,21 +132,24 @@ public: me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetVisible(true); - instance->SetData(DATA_MAGUS_TELESTRA_EVENT, NOT_STARTED); + instance->SetBossState(DATA_MAGUS_TELESTRA, NOT_STARTED); + + if (IsHeroic() && sGameEventMgr->IsActiveEvent(GAME_EVENT_WINTER_VEIL) && !me->HasAura(SPELL_WEAR_CHRISTMAS_HAT)) + me->AddAura(SPELL_WEAR_CHRISTMAS_HAT, me); } void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); - instance->SetData(DATA_MAGUS_TELESTRA_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_MAGUS_TELESTRA, IN_PROGRESS); } void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); - instance->SetData(DATA_MAGUS_TELESTRA_EVENT, DONE); + instance->SetBossState(DATA_MAGUS_TELESTRA, DONE); } void KilledUnit(Unit* who) override diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp index 84523c1864d..f065f0679fc 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp @@ -68,7 +68,7 @@ public: struct boss_ormorokAI : public BossAI { - boss_ormorokAI(Creature* creature) : BossAI(creature, DATA_ORMOROK_EVENT) + boss_ormorokAI(Creature* creature) : BossAI(creature, DATA_ORMOROK) { Initialize(); } @@ -95,8 +95,6 @@ public: events.ScheduleEvent(EVENT_CRYSTALLINE_TANGLER, 17000); Talk(SAY_AGGRO); - - instance->SetData(DATA_ORMOROK_EVENT, IN_PROGRESS); } void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override @@ -112,10 +110,7 @@ public: void JustDied(Unit* /*killer*/) override { _JustDied(); - Talk(SAY_DEATH); - - instance->SetData(DATA_ORMOROK_EVENT, DONE); } void KilledUnit(Unit* who) override @@ -138,27 +133,27 @@ public: { switch (eventId) { - case EVENT_TRAMPLE: - DoCast(me, SPELL_TRAMPLE); - events.ScheduleEvent(EVENT_TRAMPLE, 10000); - break; - case EVENT_SPELL_REFLECTION: - Talk(SAY_REFLECT); - DoCast(me, SPELL_SPELL_REFLECTION); - events.ScheduleEvent(EVENT_SPELL_REFLECTION, 30000); - break; - case EVENT_CRYSTAL_SPIKES: - Talk(SAY_CRYSTAL_SPIKES); - DoCast(SPELL_CRYSTAL_SPIKES); - events.ScheduleEvent(EVENT_CRYSTAL_SPIKES, 12000); - break; - case EVENT_CRYSTALLINE_TANGLER: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, OrmorokTanglerPredicate(me))) - DoCast(target, SPELL_SUMMON_CRYSTALLINE_TANGLER); - events.ScheduleEvent(EVENT_CRYSTALLINE_TANGLER, 17000); - break; - default: - break; + case EVENT_TRAMPLE: + DoCast(me, SPELL_TRAMPLE); + events.ScheduleEvent(EVENT_TRAMPLE, 10000); + break; + case EVENT_SPELL_REFLECTION: + Talk(SAY_REFLECT); + DoCast(me, SPELL_SPELL_REFLECTION); + events.ScheduleEvent(EVENT_SPELL_REFLECTION, 30000); + break; + case EVENT_CRYSTAL_SPIKES: + Talk(SAY_CRYSTAL_SPIKES); + DoCast(SPELL_CRYSTAL_SPIKES); + events.ScheduleEvent(EVENT_CRYSTAL_SPIKES, 12000); + break; + case EVENT_CRYSTALLINE_TANGLER: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, OrmorokTanglerPredicate(me))) + DoCast(target, SPELL_SUMMON_CRYSTALLINE_TANGLER); + events.ScheduleEvent(EVENT_CRYSTALLINE_TANGLER, 17000); + break; + default: + break; } } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp index b7f2e23616b..b3b2cdd540f 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp @@ -18,10 +18,8 @@ #include "ScriptMgr.h" #include "InstanceScript.h" -#include "nexus.h" #include "Player.h" - -#define NUMBER_OF_ENCOUNTERS 4 +#include "nexus.h" enum Factions { @@ -30,229 +28,163 @@ enum Factions class instance_nexus : public InstanceMapScript { -public: - instance_nexus() : InstanceMapScript("instance_nexus", 576) { } - - InstanceScript* GetInstanceScript(InstanceMap* map) const override - { - return new instance_nexus_InstanceMapScript(map); - } + public: + instance_nexus() : InstanceMapScript(NexusScriptName, 576) { } - struct instance_nexus_InstanceMapScript : public InstanceScript - { - instance_nexus_InstanceMapScript(Map* map) : InstanceScript(map) + struct instance_nexus_InstanceMapScript : public InstanceScript { - SetHeaders(DataHeader); - memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); - } - - uint32 m_auiEncounter[NUMBER_OF_ENCOUNTERS]; - - ObjectGuid Anomalus; - ObjectGuid Keristrasza; - - ObjectGuid AnomalusContainmentSphere; - ObjectGuid OrmoroksContainmentSphere; - ObjectGuid TelestrasContainmentSphere; - - std::string strInstData; - - void OnCreatureCreate(Creature* creature) override - { - Map::PlayerList const &players = instance->GetPlayers(); - uint32 TeamInInstance = 0; - - if (!players.isEmpty()) + instance_nexus_InstanceMapScript(Map* map) : InstanceScript(map) { - if (Player* player = players.begin()->GetSource()) - TeamInInstance = player->GetTeam(); + SetHeaders(DataHeader); + SetBossNumber(EncounterCount); + _teamInInstance = 0; } - switch (creature->GetEntry()) + + void OnPlayerEnter(Player* player) override { - case 26763: - Anomalus = creature->GetGUID(); - break; - case 26723: - Keristrasza = creature->GetGUID(); - break; - // Alliance npcs are spawned by default, if you are alliance, you will fight against horde npcs. - case 26800: - { - if (ServerAllowsTwoSideGroups()) - creature->setFaction(FACTION_HOSTILE_FOR_ALL); - if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(26799); - break; - } - case 26802: - { - if (ServerAllowsTwoSideGroups()) - creature->setFaction(FACTION_HOSTILE_FOR_ALL); - if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(26801); - break; - } - case 26805: - { - if (ServerAllowsTwoSideGroups()) - creature->setFaction(FACTION_HOSTILE_FOR_ALL); - if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(26803); - break; - } - case 27949: - { - if (ServerAllowsTwoSideGroups()) - creature->setFaction(FACTION_HOSTILE_FOR_ALL); - if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(27947); - break; - } - case 26796: - { - if (ServerAllowsTwoSideGroups()) - creature->setFaction(FACTION_HOSTILE_FOR_ALL); - if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(26798); - break; - } + if (!_teamInInstance) + _teamInInstance = player->GetTeam(); } - } - void OnGameObjectCreate(GameObject* go) override - { - switch (go->GetEntry()) + void OnCreatureCreate(Creature* creature) override { - case 188527: - { - AnomalusContainmentSphere = go->GetGUID(); - if (m_auiEncounter[1] == DONE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); - break; - } - case 188528: - { - OrmoroksContainmentSphere = go->GetGUID(); - if (m_auiEncounter[2] == DONE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); - break; - } - case 188526: + switch (creature->GetEntry()) { - TelestrasContainmentSphere = go->GetGUID(); - if (m_auiEncounter[0] == DONE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); - break; + case NPC_ANOMALUS: + AnomalusGUID = creature->GetGUID(); + break; + case NPC_KERISTRASZA: + KeristraszaGUID = creature->GetGUID(); + break; + // Alliance npcs are spawned by default, if you are alliance, you will fight against horde npcs. + case NPC_ALLIANCE_BERSERKER: + if (ServerAllowsTwoSideGroups()) + creature->setFaction(FACTION_HOSTILE_FOR_ALL); + if (_teamInInstance == ALLIANCE) + creature->UpdateEntry(NPC_HORDE_BERSERKER); + break; + case NPC_ALLIANCE_RANGER: + if (ServerAllowsTwoSideGroups()) + creature->setFaction(FACTION_HOSTILE_FOR_ALL); + if (_teamInInstance == ALLIANCE) + creature->UpdateEntry(NPC_HORDE_RANGER); + break; + case NPC_ALLIANCE_CLERIC: + if (ServerAllowsTwoSideGroups()) + creature->setFaction(FACTION_HOSTILE_FOR_ALL); + if (_teamInInstance == ALLIANCE) + creature->UpdateEntry(NPC_HORDE_CLERIC); + break; + case NPC_ALLIANCE_COMMANDER: + if (ServerAllowsTwoSideGroups()) + creature->setFaction(FACTION_HOSTILE_FOR_ALL); + if (_teamInInstance == ALLIANCE) + creature->UpdateEntry(NPC_HORDE_COMMANDER); + break; + case NPC_COMMANDER_STOUTBEARD: + if (ServerAllowsTwoSideGroups()) + creature->setFaction(FACTION_HOSTILE_FOR_ALL); + if (_teamInInstance == ALLIANCE) + creature->UpdateEntry(NPC_COMMANDER_KOLURG); + break; + default: + break; } } - } - - uint32 GetData(uint32 identifier) const override - { - switch (identifier) - { - case DATA_MAGUS_TELESTRA_EVENT: return m_auiEncounter[0]; - case DATA_ANOMALUS_EVENT: return m_auiEncounter[1]; - case DATA_ORMOROK_EVENT: return m_auiEncounter[2]; - case DATA_KERISTRASZA_EVENT: return m_auiEncounter[3]; - } - return 0; - } - void SetData(uint32 identifier, uint32 data) override - { - switch (identifier) + void OnGameObjectCreate(GameObject* go) override { - case DATA_MAGUS_TELESTRA_EVENT: + switch (go->GetEntry()) { - if (data == DONE) - { - GameObject* Sphere = instance->GetGameObject(TelestrasContainmentSphere); - if (Sphere) - Sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); - } - m_auiEncounter[0] = data; - break; + case GO_ANOMALUS_CONTAINMET_SPHERE: + AnomalusContainmentSphere = go->GetGUID(); + if (GetBossState(DATA_ANOMALUS) == DONE) + go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + break; + case GO_ORMOROKS_CONTAINMET_SPHERE: + OrmoroksContainmentSphere = go->GetGUID(); + if (GetBossState(DATA_ORMOROK) == DONE) + go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + break; + case GO_TELESTRAS_CONTAINMET_SPHERE: + TelestrasContainmentSphere = go->GetGUID(); + if (GetBossState(DATA_MAGUS_TELESTRA) == DONE) + go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + break; + default: + break; } - case DATA_ANOMALUS_EVENT: - { - if (data == DONE) - { - if (GameObject* Sphere = instance->GetGameObject(AnomalusContainmentSphere)) - Sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); - } - m_auiEncounter[1] = data; - break; - } - case DATA_ORMOROK_EVENT: - { - if (data == DONE) - { - if (GameObject* Sphere = instance->GetGameObject(OrmoroksContainmentSphere)) - Sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); - } - m_auiEncounter[2] = data; - break; - } - case DATA_KERISTRASZA_EVENT: - m_auiEncounter[3] = data; - break; } - if (data == DONE) + bool SetBossState(uint32 type, EncounterState state) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' - << m_auiEncounter[3]; + if (!InstanceScript::SetBossState(type, state)) + return false; - strInstData = saveStream.str(); + switch (type) + { + case DATA_MAGUS_TELESTRA: + if (state == DONE) + { + if (GameObject* sphere = instance->GetGameObject(TelestrasContainmentSphere)) + sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + } + break; + case DATA_ANOMALUS: + if (state == DONE) + { + if (GameObject* sphere = instance->GetGameObject(AnomalusContainmentSphere)) + sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + } + break; + case DATA_ORMOROK: + if (state == DONE) + { + if (GameObject* sphere = instance->GetGameObject(OrmoroksContainmentSphere)) + sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + } + break; + default: + break; + } - SaveToDB(); - OUT_SAVE_INST_DATA_COMPLETE; + return true; } - } - ObjectGuid GetGuidData(uint32 uiIdentifier) const override - { - switch (uiIdentifier) + ObjectGuid GetGuidData(uint32 type) const override { - case DATA_ANOMALUS: return Anomalus; - case DATA_KERISTRASZA: return Keristrasza; - case ANOMALUS_CONTAINMET_SPHERE: return AnomalusContainmentSphere; - case ORMOROKS_CONTAINMET_SPHERE: return OrmoroksContainmentSphere; - case TELESTRAS_CONTAINMET_SPHERE: return TelestrasContainmentSphere; - } - return ObjectGuid::Empty; - } - - std::string GetSaveData() override - { - return strInstData; - } + switch (type) + { + case DATA_ANOMALUS: + return AnomalusGUID; + case DATA_KERISTRASZA: + return KeristraszaGUID; + case ANOMALUS_CONTAINMET_SPHERE: + return AnomalusContainmentSphere; + case ORMOROKS_CONTAINMET_SPHERE: + return OrmoroksContainmentSphere; + case TELESTRAS_CONTAINMET_SPHERE: + return TelestrasContainmentSphere; + default: + break; + } - void Load(const char *chrIn) - { - if (!chrIn) - { - OUT_LOAD_INST_DATA_FAIL; - return; + return ObjectGuid::Empty; } - OUT_LOAD_INST_DATA(chrIn); - - std::istringstream loadStream(chrIn); - loadStream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3]; + private: + ObjectGuid AnomalusGUID; + ObjectGuid KeristraszaGUID; + ObjectGuid AnomalusContainmentSphere; + ObjectGuid OrmoroksContainmentSphere; + ObjectGuid TelestrasContainmentSphere; + uint32 _teamInInstance; + }; - for (uint8 i = 0; i < NUMBER_OF_ENCOUNTERS; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - m_auiEncounter[i] = NOT_STARTED; - - OUT_LOAD_INST_DATA_COMPLETE; + InstanceScript* GetInstanceScript(InstanceMap* map) const override + { + return new instance_nexus_InstanceMapScript(map); } - }; - }; void AddSC_instance_nexus() diff --git a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h index c9f5d44c932..9962b0c884d 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h +++ b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h @@ -18,21 +18,48 @@ #ifndef DEF_NEXUS_H #define DEF_NEXUS_H +#define NexusScriptName "instance_nexus" #define DataHeader "NEX" +uint32 const EncounterCount = 4; + enum DataTypes { - DATA_MAGUS_TELESTRA_EVENT, - DATA_ANOMALUS_EVENT, - DATA_ORMOROK_EVENT, - DATA_KERISTRASZA_EVENT, + DATA_MAGUS_TELESTRA = 0, + DATA_ANOMALUS = 1, + DATA_ORMOROK = 2, + DATA_KERISTRASZA = 3, + + ANOMALUS_CONTAINMET_SPHERE = 4, + ORMOROKS_CONTAINMET_SPHERE = 5, + TELESTRAS_CONTAINMET_SPHERE = 6 +}; - DATA_ANOMALUS, - DATA_KERISTRASZA, +enum CreatureIds +{ + NPC_ANOMALUS = 26763, + NPC_KERISTRASZA = 26723, + + // Alliance + NPC_ALLIANCE_BERSERKER = 26800, + NPC_ALLIANCE_RANGER = 26802, + NPC_ALLIANCE_CLERIC = 26805, + NPC_ALLIANCE_COMMANDER = 27949, + NPC_COMMANDER_STOUTBEARD = 26796, + + // Horde + NPC_HORDE_BERSERKER = 26799, + NPC_HORDE_RANGER = 26801, + NPC_HORDE_CLERIC = 26803, + NPC_HORDE_COMMANDER = 27947, + NPC_COMMANDER_KOLURG = 26798 +}; - ANOMALUS_CONTAINMET_SPHERE, - ORMOROKS_CONTAINMET_SPHERE, - TELESTRAS_CONTAINMET_SPHERE +enum GameObjectIds +{ + GO_ANOMALUS_CONTAINMET_SPHERE = 188527, + GO_ORMOROKS_CONTAINMET_SPHERE = 188528, + GO_TELESTRAS_CONTAINMET_SPHERE = 188526 }; #endif |