diff options
Diffstat (limited to 'src/server/game/Instances/InstanceScript.cpp')
-rw-r--r-- | src/server/game/Instances/InstanceScript.cpp | 56 |
1 files changed, 12 insertions, 44 deletions
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index b2c06da1a90..f407ad4ec45 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -435,6 +435,8 @@ bool InstanceScript::SetBossState(uint32 id, EncounterState state) SendBossKillCredit(dungeonEncounter->ID); if (dungeonEncounter->CompleteWorldStateID) DoUpdateWorldState(dungeonEncounter->CompleteWorldStateID, 1); + + UpdateLfgEncounterState(bossInfo); } instance->DoOnPlayers([](Player* player) @@ -857,61 +859,27 @@ void InstanceScript::SendBossKillCredit(uint32 encounterId) instance->SendToPlayers(bossKillCreditMessage.Write()); } -void InstanceScript::UpdateEncounterState(EncounterCreditType type, uint32 creditEntry, Unit* /*source*/) +void InstanceScript::UpdateLfgEncounterState(BossInfo const* bossInfo) { - DungeonEncounterList const* encounters = sObjectMgr->GetDungeonEncounterList(instance->GetId(), instance->GetDifficultyID()); - if (!encounters) - return; - - uint32 dungeonId = 0; - - for (auto const& encounter : *encounters) - { - if (encounter.creditType == type && encounter.creditEntry == creditEntry) - { - if (encounter.dbcEntry->CompleteWorldStateID) - DoUpdateWorldState(encounter.dbcEntry->CompleteWorldStateID, 1); - - if (encounter.lastEncounterDungeon) - { - dungeonId = encounter.lastEncounterDungeon; - TC_LOG_DEBUG("lfg", "UpdateEncounterState: Instance {} (instanceId {}) completed encounter {}. Credit Dungeon: {}", - instance->GetMapName(), instance->GetInstanceId(), encounter.dbcEntry->Name[sWorld->GetDefaultDbcLocale()], dungeonId); - break; - } - } - } - - if (dungeonId) + for (auto const& ref : instance->GetPlayers()) { - Map::PlayerList const& players = instance->GetPlayers(); - for (auto const& ref : players) + if (Player* player = ref.GetSource()) { - if (Player* player = ref.GetSource()) + if (Group* grp = player->GetGroup()) { - if (Group* grp = player->GetGroup()) + if (grp->isLFGGroup()) { - if (grp->isLFGGroup()) - { - sLFGMgr->FinishDungeon(grp->GetGUID(), dungeonId, instance); - return; - } + std::array<uint32, MAX_DUNGEON_ENCOUNTERS_PER_BOSS> dungeonEncounterIds; + std::transform(bossInfo->DungeonEncounters.begin(), bossInfo->DungeonEncounters.end(), dungeonEncounterIds.begin(), + [](DungeonEncounterEntry const* entry) { return entry->ID; }); + sLFGMgr->OnDungeonEncounterDone(grp->GetGUID(), dungeonEncounterIds, instance); + break; } } } } } -void InstanceScript::UpdateEncounterStateForKilledCreature(uint32 creatureId, Unit* source) -{ - UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, creatureId, source); -} - -void InstanceScript::UpdateEncounterStateForSpellCast(uint32 spellId, Unit* source) -{ - UpdateEncounterState(ENCOUNTER_CREDIT_CAST_SPELL, spellId, source); -} - void InstanceScript::UpdatePhasing() { instance->DoOnPlayers([](Player const* player) |