aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Instances/InstanceScript.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Instances/InstanceScript.cpp')
-rw-r--r--src/server/game/Instances/InstanceScript.cpp56
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)