diff options
6 files changed, 88 insertions, 138 deletions
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index 9ba1bc0416c..c79349c051e 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -205,7 +205,7 @@ public: if (MovementType != POINT_MOTION_TYPE) return; - instance->SetData(BOSS_ARGENT_CHALLENGE_E, DONE); + instance->SetBossState(BOSS_ARGENT_CHALLENGE_E, DONE); me->DisappearAndDie(); } @@ -333,7 +333,7 @@ public: if (MovementType != POINT_MOTION_TYPE || Point != 0) return; - instance->SetData(BOSS_ARGENT_CHALLENGE_P, DONE); + instance->SetBossState(BOSS_ARGENT_CHALLENGE_P, DONE); me->DisappearAndDie(); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index 05b1761b1f3..9cc5ecf2db9 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -290,7 +290,7 @@ public: { DoCast(me, SPELL_KILL_CREDIT); - instance->SetData(BOSS_BLACK_KNIGHT, DONE); + instance->SetBossState(BOSS_BLACK_KNIGHT, DONE); } }; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index 7b6b5b04953..17e6c4598aa 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -435,7 +435,7 @@ public: void JustDied(Unit* /*killer*/) override { - instance->SetData(BOSS_GRAND_CHAMPIONS, DONE); + instance->SetBossState(BOSS_GRAND_CHAMPIONS, DONE); } }; @@ -522,7 +522,7 @@ public: else if (me->GetGUID() == instance->GetGuidData(DATA_GRAND_CHAMPION_3)) me->SetHomePosition(754.34f, 660.70f, 412.39f, 4.79f); - instance->SetData(BOSS_GRAND_CHAMPIONS, IN_PROGRESS); + instance->SetBossState(BOSS_GRAND_CHAMPIONS, IN_PROGRESS); EnterEvadeMode(); bHome = true; @@ -579,7 +579,7 @@ public: void JustDied(Unit* /*killer*/) override { - instance->SetData(BOSS_GRAND_CHAMPIONS, DONE); + instance->SetBossState(BOSS_GRAND_CHAMPIONS, DONE); } }; @@ -672,7 +672,7 @@ public: else if (me->GetGUID() == instance->GetGuidData(DATA_GRAND_CHAMPION_3)) me->SetHomePosition(754.34f, 660.70f, 412.39f, 4.79f); - instance->SetData(BOSS_GRAND_CHAMPIONS, IN_PROGRESS); + instance->SetBossState(BOSS_GRAND_CHAMPIONS, IN_PROGRESS); EnterEvadeMode(); bHome = true; @@ -731,7 +731,7 @@ public: void JustDied(Unit* /*killer*/) override { - instance->SetData(BOSS_GRAND_CHAMPIONS, DONE); + instance->SetBossState(BOSS_GRAND_CHAMPIONS, DONE); } }; @@ -823,7 +823,7 @@ public: else if (me->GetGUID() == instance->GetGuidData(DATA_GRAND_CHAMPION_3)) me->SetHomePosition(754.34f, 660.70f, 412.39f, 4.79f); - instance->SetData(BOSS_GRAND_CHAMPIONS, IN_PROGRESS); + instance->SetBossState(BOSS_GRAND_CHAMPIONS, IN_PROGRESS); EnterEvadeMode(); bHome = true; @@ -892,7 +892,7 @@ public: void JustDied(Unit* /*killer*/) override { - instance->SetData(BOSS_GRAND_CHAMPIONS, DONE); + instance->SetBossState(BOSS_GRAND_CHAMPIONS, DONE); } }; @@ -976,7 +976,7 @@ public: else if (me->GetGUID() == instance->GetGuidData(DATA_GRAND_CHAMPION_3)) me->SetHomePosition(754.34f, 660.70f, 412.39f, 4.79f); - instance->SetData(BOSS_GRAND_CHAMPIONS, IN_PROGRESS); + instance->SetBossState(BOSS_GRAND_CHAMPIONS, IN_PROGRESS); EnterEvadeMode(); bHome = true; @@ -1018,7 +1018,7 @@ public: void JustDied(Unit* /*killer*/) override { - instance->SetData(BOSS_GRAND_CHAMPIONS, DONE); + instance->SetBossState(BOSS_GRAND_CHAMPIONS, DONE); } }; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp index 82148684037..2b1aa9137a0 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp @@ -32,7 +32,7 @@ EndScriptData */ #include "Player.h" #include "trial_of_the_champion.h" -#define MAX_ENCOUNTER 4 +constexpr uint32 ToCEncounterCount = 4; class instance_trial_of_the_champion : public InstanceMapScript { @@ -49,18 +49,15 @@ public: instance_trial_of_the_champion_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); + SetBossNumber(ToCEncounterCount); uiMovementDone = 0; uiGrandChampionsDeaths = 0; uiArgentSoldierDeaths = 0; teamInInstance = 0; bDone = false; - - memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); } - uint32 m_auiEncounter[MAX_ENCOUNTER]; - uint32 teamInInstance; uint16 uiMovementDone; uint16 uiGrandChampionsDeaths; @@ -79,21 +76,8 @@ public: GuidList VehicleList; - std::string str_data; - bool bDone; - bool IsEncounterInProgress() const override - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - { - if (m_auiEncounter[i] == IN_PROGRESS) - return true; - } - - return false; - } - void OnPlayerEnter(Player* player) override { if (!teamInInstance) @@ -165,39 +149,71 @@ public: } } - void SetData(uint32 uiType, uint32 uiData) override + bool SetBossState(uint32 id, EncounterState state) override { - switch (uiType) + if (!InstanceScript::SetBossState(id, state)) + return false; + + switch (id) { - case DATA_MOVEMENT_DONE: - uiMovementDone = uiData; - if (uiMovementDone == 3) - { - if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID)) - pAnnouncer->AI()->SetData(DATA_IN_POSITION, 0); - } - break; case BOSS_GRAND_CHAMPIONS: - m_auiEncounter[0] = uiData; - if (uiData == IN_PROGRESS) + if (state == IN_PROGRESS) { - for (GuidList::const_iterator itr = VehicleList.begin(); itr != VehicleList.end(); ++itr) - if (Creature* summon = instance->GetCreature(*itr)) + for (ObjectGuid guid : VehicleList) + if (Creature* summon = instance->GetCreature(guid)) summon->RemoveFromWorld(); - }else if (uiData == DONE) + } + else if (state == DONE) { ++uiGrandChampionsDeaths; if (uiGrandChampionsDeaths == 3) { - if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID)) + if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID)) { pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f); pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_CHAMPIONS_LOOT_H : GO_CHAMPIONS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, QuaternionData(), 25h); + pAnnouncer->SummonGameObject(instance->IsHeroic() ? GO_CHAMPIONS_LOOT_H : GO_CHAMPIONS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, QuaternionData(), 25h); } } } break; + case BOSS_ARGENT_CHALLENGE_E: + if (state == DONE) + { + if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID)) + { + pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f); + pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + pAnnouncer->SummonGameObject(instance->IsHeroic() ? GO_EADRIC_LOOT_H : GO_EADRIC_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, QuaternionData(), 25h); + } + } + break; + case BOSS_ARGENT_CHALLENGE_P: + if (state == DONE) + { + if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID)) + { + pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f); + pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + pAnnouncer->SummonGameObject(instance->IsHeroic() ? GO_PALETRESS_LOOT_H : GO_PALETRESS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, QuaternionData(), 25h); + } + } + break; + } + } + + void SetData(uint32 uiType, uint32 uiData) override + { + switch (uiType) + { + case DATA_MOVEMENT_DONE: + uiMovementDone = uiData; + if (uiMovementDone == 3) + { + if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID)) + pAnnouncer->AI()->SetData(DATA_IN_POSITION, 0); + } + break; case DATA_ARGENT_SOLDIER_DEFEATED: uiArgentSoldierDeaths = uiData; if (uiArgentSoldierDeaths == 9) @@ -210,24 +226,6 @@ public: } } break; - case BOSS_ARGENT_CHALLENGE_E: - m_auiEncounter[1] = uiData; - if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID)) - { - pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f); - pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_EADRIC_LOOT_H : GO_EADRIC_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, QuaternionData(), 25h); - } - break; - case BOSS_ARGENT_CHALLENGE_P: - m_auiEncounter[2] = uiData; - if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID)) - { - pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f); - pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_PALETRESS_LOOT_H : GO_PALETRESS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, QuaternionData(), 25h); - } - break; } if (uiData == DONE) @@ -238,11 +236,6 @@ public: { switch (uiData) { - case BOSS_GRAND_CHAMPIONS: return m_auiEncounter[0]; - case BOSS_ARGENT_CHALLENGE_E: return m_auiEncounter[1]; - case BOSS_ARGENT_CHALLENGE_P: return m_auiEncounter[2]; - case BOSS_BLACK_KNIGHT: return m_auiEncounter[3]; - case DATA_MOVEMENT_DONE: return uiMovementDone; case DATA_ARGENT_SOLDIER_DEFEATED: return uiArgentSoldierDeaths; } @@ -281,60 +274,16 @@ public: } } - std::string GetSaveData() override + void WriteSaveDataMore(std::ostringstream& stream) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - - saveStream << "T C " << m_auiEncounter[0] - << ' ' << m_auiEncounter[1] - << ' ' << m_auiEncounter[2] - << ' ' << m_auiEncounter[3] - << ' ' << uiGrandChampionsDeaths - << ' ' << uiMovementDone; - - str_data = saveStream.str(); - - OUT_SAVE_INST_DATA_COMPLETE; - return str_data; + stream << uiGrandChampionsDeaths << ' ' << uiMovementDone; } - void Load(char const* in) override + void ReadSaveDataMore(std::istringstream& stream) override { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint16 data0, data1, data2, data3, data4, data5; - - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3 >> data4 >> data5; - - if (dataHead1 == 'T' && dataHead2 == 'C') - { - m_auiEncounter[0] = data0; - m_auiEncounter[1] = data1; - m_auiEncounter[2] = data2; - m_auiEncounter[3] = data3; - - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - m_auiEncounter[i] = NOT_STARTED; - - uiGrandChampionsDeaths = data4; - uiMovementDone = data5; - } else OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + stream >> uiGrandChampionsDeaths >> uiMovementDone; } }; - }; void AddSC_instance_trial_of_the_champion() diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp index 44f12375539..b915f80f71b 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp @@ -348,20 +348,20 @@ public: { me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - if (instance->GetData(BOSS_BLACK_KNIGHT) == NOT_STARTED) + if (instance->GetBossState(BOSS_BLACK_KNIGHT) == NOT_STARTED) { - if (instance->GetData(BOSS_ARGENT_CHALLENGE_E) == NOT_STARTED && instance->GetData(BOSS_ARGENT_CHALLENGE_P) == NOT_STARTED) + if (instance->GetBossState(BOSS_ARGENT_CHALLENGE_E) == NOT_STARTED && instance->GetBossState(BOSS_ARGENT_CHALLENGE_P) == NOT_STARTED) { - if (instance->GetData(BOSS_GRAND_CHAMPIONS) == NOT_STARTED) + if (instance->GetBossState(BOSS_GRAND_CHAMPIONS) == NOT_STARTED) SetData(DATA_START, 0); - if (instance->GetData(BOSS_GRAND_CHAMPIONS) == DONE) + if (instance->GetBossState(BOSS_GRAND_CHAMPIONS) == DONE) DoStartArgentChampionEncounter(); } - if ((instance->GetData(BOSS_GRAND_CHAMPIONS) == DONE && - instance->GetData(BOSS_ARGENT_CHALLENGE_E) == DONE) || - instance->GetData(BOSS_ARGENT_CHALLENGE_P) == DONE) + if ((instance->GetBossState(BOSS_GRAND_CHAMPIONS) == DONE && + instance->GetBossState(BOSS_ARGENT_CHALLENGE_E) == DONE) || + instance->GetBossState(BOSS_ARGENT_CHALLENGE_P) == DONE) me->SummonCreature(VEHICLE_BLACK_KNIGHT, 769.834f, 651.915f, 447.035f, 0); } } @@ -424,7 +424,7 @@ public: void JustSummoned(Creature* summon) override { - if (instance->GetData(BOSS_GRAND_CHAMPIONS) == NOT_STARTED) + if (instance->GetBossState(BOSS_GRAND_CHAMPIONS) == NOT_STARTED) { summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); summon->SetReactState(REACT_PASSIVE); @@ -452,16 +452,16 @@ public: bool OnGossipHello(Player* player) override { - if (((instance->GetData(BOSS_GRAND_CHAMPIONS) == DONE && - instance->GetData(BOSS_BLACK_KNIGHT) == DONE && - instance->GetData(BOSS_ARGENT_CHALLENGE_E) == DONE) || - instance->GetData(BOSS_ARGENT_CHALLENGE_P) == DONE)) + if (((instance->GetBossState(BOSS_GRAND_CHAMPIONS) == DONE && + instance->GetBossState(BOSS_BLACK_KNIGHT) == DONE && + instance->GetBossState(BOSS_ARGENT_CHALLENGE_E) == DONE) || + instance->GetBossState(BOSS_ARGENT_CHALLENGE_P) == DONE)) return false; - if (instance->GetData(BOSS_GRAND_CHAMPIONS) == NOT_STARTED && - instance->GetData(BOSS_ARGENT_CHALLENGE_E) == NOT_STARTED && - instance->GetData(BOSS_ARGENT_CHALLENGE_P) == NOT_STARTED && - instance->GetData(BOSS_BLACK_KNIGHT) == NOT_STARTED) + if (instance->GetBossState(BOSS_GRAND_CHAMPIONS) == NOT_STARTED && + instance->GetBossState(BOSS_ARGENT_CHALLENGE_E) == NOT_STARTED && + instance->GetBossState(BOSS_ARGENT_CHALLENGE_P) == NOT_STARTED && + instance->GetBossState(BOSS_BLACK_KNIGHT) == NOT_STARTED) AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_START_EVENT1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); else AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_START_EVENT2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h index e802088e7f8..2da7435e328 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h @@ -25,10 +25,11 @@ enum TCData { - BOSS_GRAND_CHAMPIONS, - BOSS_ARGENT_CHALLENGE_E, - BOSS_ARGENT_CHALLENGE_P, - BOSS_BLACK_KNIGHT, + BOSS_GRAND_CHAMPIONS = 0, + BOSS_ARGENT_CHALLENGE_E = 1, + BOSS_ARGENT_CHALLENGE_P = 2, + BOSS_BLACK_KNIGHT = 3, + DATA_MOVEMENT_DONE, DATA_LESSER_CHAMPIONS_DEFEATED, DATA_START, |