aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/DungeonFinding/LFGQueue.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/DungeonFinding/LFGQueue.h')
-rw-r--r--src/server/game/DungeonFinding/LFGQueue.h50
1 files changed, 27 insertions, 23 deletions
diff --git a/src/server/game/DungeonFinding/LFGQueue.h b/src/server/game/DungeonFinding/LFGQueue.h
index b67431befce..7c47519d79e 100644
--- a/src/server/game/DungeonFinding/LFGQueue.h
+++ b/src/server/game/DungeonFinding/LFGQueue.h
@@ -34,6 +34,17 @@ enum LfgCompatibility
LFG_COMPATIBLES_MATCH // Must be the last one
};
+struct LfgCompatibilityData
+{
+ LfgCompatibilityData(): compatibility(LFG_COMPATIBILITY_PENDING) { }
+ LfgCompatibilityData(LfgCompatibility _compatibility): compatibility(_compatibility) { }
+ LfgCompatibilityData(LfgCompatibility _compatibility, LfgRolesMap const& _roles):
+ compatibility(_compatibility), roles(_roles) { }
+
+ LfgCompatibility compatibility;
+ LfgRolesMap roles;
+};
+
/// Stores player or group queue info
struct LfgQueueData
{
@@ -41,26 +52,10 @@ struct LfgQueueData
healers(LFG_HEALERS_NEEDED), dps(LFG_DPS_NEEDED)
{ }
- LfgQueueData(time_t _joinTime, const LfgDungeonSet &_dungeons, const LfgRolesMap &_roles)
- {
- joinTime = _joinTime;
- dungeons = _dungeons;
- roles = _roles;
- tanks = LFG_TANKS_NEEDED;
- healers = LFG_HEALERS_NEEDED;
- dps = LFG_DPS_NEEDED;
-
- for (LfgRolesMap::const_iterator it = roles.begin(); it != roles.end(); ++it)
- {
- uint8 role = it->second;
- if (role & PLAYER_ROLE_TANK)
- --tanks;
- else if (role & PLAYER_ROLE_HEALER)
- --healers;
- else
- --dps;
- }
- }
+ LfgQueueData(time_t _joinTime, const LfgDungeonSet &_dungeons, LfgRolesMap const& _roles):
+ joinTime(_joinTime), tanks(LFG_TANKS_NEEDED), healers(LFG_HEALERS_NEEDED),
+ dps(LFG_DPS_NEEDED), dungeons(_dungeons), roles(_roles)
+ { }
time_t joinTime; ///< Player queue join time (to calculate wait times)
uint8 tanks; ///< Tanks needed
@@ -68,6 +63,7 @@ struct LfgQueueData
uint8 dps; ///< Dps needed
LfgDungeonSet dungeons; ///< Selected Player/Group Dungeon/s
LfgRolesMap roles; ///< Selected Player Role/s
+ std::string bestCompatible; ///< Best compatible combination of people queued
};
struct LfgWaitTime
@@ -78,13 +74,13 @@ struct LfgWaitTime
};
typedef std::map<uint32, LfgWaitTime> LfgWaitTimesMap;
-typedef std::map<std::string, LfgCompatibility> LfgCompatibleMap;
+typedef std::map<std::string, LfgCompatibilityData> LfgCompatibleMap;
typedef std::map<uint64, LfgQueueData> LfgQueueDataMap;
/**
Stores all data related to queue
*/
-class LfgQueue
+class LFGQueue
{
public:
@@ -108,10 +104,13 @@ class LfgQueue
uint8 FindGroups();
// Just for debugging purposes
- LfgCompatibleMap const& GetCompatibleMap();
std::string DumpQueueInfo() const;
std::string DumpCompatibleInfo(bool full = false) const;
+
private:
+ void SetQueueUpdateData(std::string const& strGuids, LfgRolesMap const& proposalRoles);
+ LfgRolesMap const& RemoveFromQueueUpdateData(uint64 guid);
+
void AddToNewQueue(uint64 guid);
void AddToCurrentQueue(uint64 guid);
void RemoveFromNewQueue(uint64 guid);
@@ -121,6 +120,11 @@ class LfgQueue
LfgCompatibility GetCompatibles(std::string const& key);
void RemoveFromCompatibles(uint64 guid);
+ void SetCompatibilityData(std::string const& key, LfgCompatibilityData const& compatibles);
+ LfgCompatibilityData* GetCompatibilityData(std::string const& key);
+ void FindBestCompatibleInQueue(LfgQueueDataMap::iterator itrQueue);
+ void UpdateBestCompatibleInQueue(LfgQueueDataMap::iterator itrQueue, std::string const& key, LfgRolesMap const& roles);
+
LfgCompatibility FindNewGroups(LfgGuidList& check, LfgGuidList& all);
LfgCompatibility CheckCompatibility(LfgGuidList check);