diff options
-rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.cpp | 16 | ||||
-rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.h | 2 | ||||
-rw-r--r-- | src/server/game/Groups/Group.cpp | 14 |
3 files changed, 22 insertions, 10 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 455eb519402..290ec361371 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -1610,6 +1610,22 @@ LfgDungeonSet const& LFGMgr::GetSelectedDungeons(ObjectGuid guid) return PlayersStore[guid].GetSelectedDungeons(); } +uint32 LFGMgr::GetSelectedRandomDungeon(ObjectGuid guid) +{ + if (GetState(guid) != LFG_STATE_NONE) + { + LfgDungeonSet const& dungeons = GetSelectedDungeons(guid); + if (!dungeons.empty()) + { + LFGDungeonData const* dungeon = GetLFGDungeon(*dungeons.begin()); + if (dungeon && dungeon->type == LFG_TYPE_RANDOM) + return *dungeons.begin(); + } + } + + return 0; +} + LfgLockMap LFGMgr::GetLockedDungeons(ObjectGuid guid) { TC_LOG_TRACE("lfg.data.player.dungeons.locked.get", "Player: %s, LockedDungeons.", guid.ToString().c_str()); diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index e16a11a5623..2202a90ddec 100644 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -337,6 +337,8 @@ class TC_GAME_API LFGMgr bool inLfgDungeonMap(ObjectGuid guid, uint32 map, Difficulty difficulty); /// Get selected dungeons LfgDungeonSet const& GetSelectedDungeons(ObjectGuid guid); + /// Get selected random dungeon + uint32 GetSelectedRandomDungeon(ObjectGuid guid); /// Get current lfg state LfgState GetState(ObjectGuid guid); /// Get current vote kick state diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 3d5b46665ab..eb3ff858060 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -1520,20 +1520,14 @@ void Group::SendUpdateToPlayer(ObjectGuid playerGUID, MemberSlot* slot) partyUpdate.LfgInfos->Aborted = false; partyUpdate.LfgInfos->MyFlags = sLFGMgr->GetState(m_guid) == lfg::LFG_STATE_FINISHED_DUNGEON ? 2 : 0; - partyUpdate.LfgInfos->MyRandomSlot = [player]() -> uint32 - { - lfg::LfgDungeonSet const& selectedDungeons = sLFGMgr->GetSelectedDungeons(player->GetGUID()); - if (selectedDungeons.size() == 1) - if (LFGDungeonsEntry const* dungeon = sLFGDungeonsStore.LookupEntry(*selectedDungeons.begin())) - if (dungeon->TypeID == lfg::LFG_TYPE_RANDOM) - return dungeon->ID; - - return 0; - }(); + partyUpdate.LfgInfos->MyRandomSlot = sLFGMgr->GetSelectedRandomDungeon(player->GetGUID()); partyUpdate.LfgInfos->MyPartialClear = 0; partyUpdate.LfgInfos->MyGearDiff = 0.0f; partyUpdate.LfgInfos->MyFirstReward = false; + if (lfg::LfgReward const* reward = sLFGMgr->GetRandomDungeonReward(partyUpdate.LfgInfos->MyRandomSlot, player->getLevel())) + if (Quest const* quest = sObjectMgr->GetQuestTemplate(reward->firstQuest)) + partyUpdate.LfgInfos->MyFirstReward = player->CanRewardQuest(quest, false); partyUpdate.LfgInfos->MyStrangerCount = 0; partyUpdate.LfgInfos->MyKickVoteCount = 0; |