aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/DungeonFinding/LFG.h13
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp20
-rw-r--r--src/server/game/Handlers/LFGHandler.cpp2
3 files changed, 31 insertions, 4 deletions
diff --git a/src/server/game/DungeonFinding/LFG.h b/src/server/game/DungeonFinding/LFG.h
index 1387507d00a..31d47dfed23 100644
--- a/src/server/game/DungeonFinding/LFG.h
+++ b/src/server/game/DungeonFinding/LFG.h
@@ -119,14 +119,23 @@ enum LfgAnswer
LFG_ANSWER_AGREE = 1
};
+/// Used to hide random LFG dungeon entries from the dungeon finder. Either value above 0 is doing that, however, only 2 is being sent in sniffs
+enum class LfgSoftLock : uint8
+{
+ None = 0,
+ Unk1 = 1,
+ Unk2 = 2
+};
+
struct TC_GAME_API LfgLockInfoData
{
- LfgLockInfoData(uint32 _lockStatus = 0, uint16 _requiredItemLevel = 0, float _currentItemLevel = 0) :
- lockStatus(_lockStatus), requiredItemLevel(_requiredItemLevel), currentItemLevel(_currentItemLevel) { }
+ LfgLockInfoData(uint32 _lockStatus = 0, uint16 _requiredItemLevel = 0, float _currentItemLevel = 0, LfgSoftLock _softLock = LfgSoftLock::None) :
+ lockStatus(_lockStatus), requiredItemLevel(_requiredItemLevel), currentItemLevel(_currentItemLevel), softLock(_softLock) { }
uint32 lockStatus;
uint16 requiredItemLevel;
float currentItemLevel;
+ LfgSoftLock softLock;
};
typedef std::set<uint32> LfgDungeonSet;
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 2a132c5068c..4c18a6e0041 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -1804,8 +1804,26 @@ LfgLockMap LFGMgr::GetLockedDungeons(ObjectGuid guid)
return 0;
}();
+ LfgSoftLock softLock = [lockStatus]()
+ {
+ switch (lockStatus)
+ {
+ // Dungeons which are out of our level range, active season or expansion are hidden from the list
+ case LFG_LOCKSTATUS_TOO_LOW_LEVEL:
+ case LFG_LOCKSTATUS_TOO_HIGH_LEVEL:
+ case LFG_LOCKSTATUS_NOT_IN_SEASON:
+ case LFG_LOCKSTATUS_INSUFFICIENT_EXPANSION:
+ return LfgSoftLock::Unk2; // only value seen in sniffs
+ default:
+ return LfgSoftLock::None;
+
+ }
+
+ return LfgSoftLock::None;
+ }();
+
if (lockStatus)
- lock[dungeon->Entry()] = LfgLockInfoData(lockStatus, dungeon->requiredItemLevel, player->GetAverageItemLevel());
+ lock[dungeon->Entry()] = LfgLockInfoData(lockStatus, dungeon->requiredItemLevel, player->GetAverageItemLevel(), softLock);
}
return lock;
diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp
index 8ee1aede0c3..5d850fc976f 100644
--- a/src/server/game/Handlers/LFGHandler.cpp
+++ b/src/server/game/Handlers/LFGHandler.cpp
@@ -157,7 +157,7 @@ void WorldSession::SendLfgPlayerLockInfo()
// Get player locked Dungeons
for (auto const& lock : sLFGMgr->GetLockedDungeons(_player->GetGUID()))
- lfgPlayerInfo.BlackList.Slot.emplace_back(lock.first, lock.second.lockStatus, lock.second.requiredItemLevel, lock.second.currentItemLevel, 0);
+ lfgPlayerInfo.BlackList.Slot.emplace_back(lock.first, lock.second.lockStatus, lock.second.requiredItemLevel, lock.second.currentItemLevel, AsUnderlyingType(lock.second.softLock));
for (uint32 slot : randomDungeons)
{