aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp16
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.h2
-rw-r--r--src/server/game/Groups/Group.cpp14
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;