aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/DungeonFinding
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/DungeonFinding')
-rw-r--r--src/server/game/DungeonFinding/LFG.h18
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp52
2 files changed, 32 insertions, 38 deletions
diff --git a/src/server/game/DungeonFinding/LFG.h b/src/server/game/DungeonFinding/LFG.h
index a5461029c8d..524f13d9790 100644
--- a/src/server/game/DungeonFinding/LFG.h
+++ b/src/server/game/DungeonFinding/LFG.h
@@ -42,7 +42,7 @@ enum LfgUpdateType
LFG_UPDATETYPE_PROPOSAL_DECLINED = 9,
LFG_UPDATETYPE_GROUP_FOUND = 10,
LFG_UPDATETYPE_ADDED_TO_QUEUE = 12,
- LFG_UPDATETYPE_PROPOSAL_FOUND = 13,
+ LFG_UPDATETYPE_PROPOSAL_BEGIN = 13,
LFG_UPDATETYPE_CLEAR_LOCK_LIST = 14,
LFG_UPDATETYPE_GROUP_MEMBER_OFFLINE = 15,
LFG_UPDATETYPE_GROUP_DISBAND = 16,
@@ -52,21 +52,11 @@ typedef std::set<uint32> LfgDungeonSet;
struct LookingForGroup
{
- LookingForGroup(): roles(0)
- {
- donerandomDungeons.clear();
- applyDungeons.clear();
- }
- std::string comment;
- int8 roles;
-
- bool isDungeonDone(const uint32 entry)
- {
- return donerandomDungeons.find(entry) != donerandomDungeons.end();
- }
-
+ LookingForGroup(): roles(0) {}
+ uint8 roles;
LfgDungeonSet applyDungeons; // Dungeons the player have applied for
LfgDungeonSet donerandomDungeons; // Finished random Dungeons (to calculate the bonus);
+ std::string comment;
};
#endif
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 2c628b57e46..fd4ab1bbe02 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -181,8 +181,8 @@ void LFGMgr::Update(uint32 diff)
if (!plr)
continue;
plr->GetSession()->SendPacket(&data);
- plr->m_lookingForGroup.applyDungeons.clear();
- plr->m_lookingForGroup.roles = 0;
+ plr->GetLfgDungeons()->clear();
+ plr->SetLfgRoles(ROLE_NONE);
if (itRoles->first == pRoleCheck->leader)
plr->GetSession()->SendLfgJoinResult(LFG_JOIN_FAILED, pRoleCheck->result);
@@ -258,7 +258,7 @@ void LFGMgr::Join(Player *plr)
else
{
// Check if all dungeons are valid
- for (LfgDungeonSet::const_iterator it = plr->m_lookingForGroup.applyDungeons.begin(); it != plr->m_lookingForGroup.applyDungeons.end(); ++it)
+ for (LfgDungeonSet::const_iterator it = plr->GetLfgDungeons()->begin(); it != plr->GetLfgDungeons()->end(); ++it)
{
if ((m_DungeonsMap[LFG_ALL_DUNGEONS])->find(*it) == (m_DungeonsMap[LFG_ALL_DUNGEONS])->end())
{
@@ -293,8 +293,8 @@ void LFGMgr::Join(Player *plr)
if (result != LFG_JOIN_OK)
{
- plr->m_lookingForGroup.applyDungeons.clear();
- plr->m_lookingForGroup.roles = 0;
+ plr->GetLfgDungeons()->clear();
+ plr->SetLfgRoles(ROLE_NONE);
plr->GetSession()->SendLfgJoinResult(result, 0);
return;
}
@@ -302,10 +302,13 @@ void LFGMgr::Join(Player *plr)
if (grp)
{
Player *plrg = NULL;
+ LfgDungeonSet *dungeons;
for (GroupReference *itr = plr->GetGroup()->GetFirstMember(); itr != NULL; itr = itr->next())
{
plrg = itr->getSource(); // Not null, checked earlier
- plrg->m_lookingForGroup.applyDungeons = plr->m_lookingForGroup.applyDungeons;
+ dungeons = plrg->GetLfgDungeons();
+ for (LfgDungeonSet::const_iterator itDungeon = plr->GetLfgDungeons()->begin(); itDungeon != plr->GetLfgDungeons()->end(); ++itDungeon)
+ dungeons->insert(*itDungeon);
plrg->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_JOIN_PROPOSAL);
}
UpdateRoleCheck(grp, plr);
@@ -321,14 +324,14 @@ void LFGMgr::Join(Player *plr)
uint8 tanks = LFG_TANKS_NEEDED;
uint8 healers = LFG_HEALERS_NEEDED;
uint8 dps = LFG_DPS_NEEDED;
- if (plr->m_lookingForGroup.roles & ROLE_TANK)
+ if (plr->GetLfgRoles() & ROLE_TANK)
--tanks;
- else if (plr->m_lookingForGroup.roles & ROLE_HEALER)
+ else if (plr->GetLfgRoles() & ROLE_HEALER)
--healers;
else
--dps;
m_update = false;
- for (LfgDungeonSet::const_iterator it = plr->m_lookingForGroup.applyDungeons.begin(); it != plr->m_lookingForGroup.applyDungeons.end(); ++it)
+ for (LfgDungeonSet::const_iterator it = plr->GetLfgDungeons()->begin(); it != plr->GetLfgDungeons()->end(); ++it)
{
groupType = GetDungeonGroupType(*it);
pqInfo = m_Queues[groupType] ? m_Queues[groupType]->GetQueueInfo(plr->GetGUID()) : NULL;
@@ -341,7 +344,7 @@ void LFGMgr::Join(Player *plr)
pqInfo->tanks = tanks;
pqInfo->healers = healers;
pqInfo->dps = dps;
- pqInfo->roles[plr->GetGUID()] = plr->m_lookingForGroup.roles;
+ pqInfo->roles[plr->GetGUID()] = plr->GetLfgRoles();
if (!m_Queues[groupType])
m_Queues[groupType] = new LFGQueue();
m_Queues[groupType]->AddToQueue(plr->GetGUID(), pqInfo);
@@ -386,15 +389,15 @@ void LFGMgr::Leave(Player *plr, Group *grp /* = NULL*/)
if (Player *plrg = itr->getSource())
{
plrg->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_REMOVED_FROM_QUEUE);
- plrg->m_lookingForGroup.applyDungeons.clear();
- plrg->m_lookingForGroup.roles = 0;
+ plrg->GetLfgDungeons()->clear();
+ plrg->SetLfgRoles(ROLE_NONE);
}
}
else
{
plr->GetSession()->SendLfgUpdatePlayer(LFG_UPDATETYPE_REMOVED_FROM_QUEUE);
- plr->m_lookingForGroup.applyDungeons.clear();
- plr->m_lookingForGroup.roles = 0;
+ plr->GetLfgDungeons()->clear();
+ plr->SetLfgRoles(ROLE_NONE);
}
}
@@ -426,7 +429,8 @@ void LFGMgr::UpdateRoleCheck(Group *grp, Player *plr /* = NULL*/)
if (Player *plrg = itr->getSource())
pRoleCheck->roles[plrg->GetGUID()] = 0;
- pRoleCheck->dungeons = plr->m_lookingForGroup.applyDungeons;
+ for (LfgDungeonSet::const_iterator itDungeon = plr->GetLfgDungeons()->begin(); itDungeon != plr->GetLfgDungeons()->end(); ++itDungeon)
+ pRoleCheck->dungeons.insert(*itDungeon);
}
else
pRoleCheck = itRoleCheck->second;
@@ -435,12 +439,12 @@ void LFGMgr::UpdateRoleCheck(Group *grp, Player *plr /* = NULL*/)
if (plr)
{
// Player selected no role.
- if (plr->m_lookingForGroup.roles < ROLE_TANK)
+ if (plr->GetLfgRoles() < ROLE_TANK)
pRoleCheck->result = LFG_ROLECHECK_NO_ROLE;
else
{
// Check if all players have selected a role
- pRoleCheck->roles[plr->GetGUID()] = plr->m_lookingForGroup.roles;
+ pRoleCheck->roles[plr->GetGUID()] = plr->GetLfgRoles();
uint8 size = 0;
for (LfgRolesMap::const_iterator itRoles = pRoleCheck->roles.begin(); itRoles != pRoleCheck->roles.end() && itRoles->second != ROLE_NONE; ++itRoles)
++size;
@@ -489,7 +493,7 @@ void LFGMgr::UpdateRoleCheck(Group *grp, Player *plr /* = NULL*/)
session = plrg->GetSession();
if (!newRoleCheck && plr)
- session->SendLfgRoleChosen(plr->GetGUID(), plr->m_lookingForGroup.roles);
+ session->SendLfgRoleChosen(plr->GetGUID(), plr->GetLfgRoles());
session->SendPacket(&data);
switch(pRoleCheck->result)
@@ -516,16 +520,16 @@ void LFGMgr::UpdateRoleCheck(Group *grp, Player *plr /* = NULL*/)
session->SendPacket(&data);
}
session->SendLfgUpdateParty(LFG_UPDATETYPE_ROLECHECK_FAILED);
- plrg->m_lookingForGroup.applyDungeons.clear();
- plrg->m_lookingForGroup.roles = 0;
+ plrg->GetLfgDungeons()->clear();
+ plrg->SetLfgRoles(ROLE_NONE);
}
break;
default:
if (grp->IsLeader(plrg->GetGUID()))
session->SendLfgJoinResult(LFG_JOIN_FAILED, pRoleCheck->result);
session->SendLfgUpdateParty(LFG_UPDATETYPE_ROLECHECK_FAILED);
- plrg->m_lookingForGroup.applyDungeons.clear();
- plrg->m_lookingForGroup.roles = 0;
+ plrg->GetLfgDungeons()->clear();
+ plrg->SetLfgRoles(ROLE_NONE);
break;
}
}
@@ -565,7 +569,7 @@ void LFGMgr::UpdateRoleCheck(Group *grp, Player *plr /* = NULL*/)
for (GroupReference *itr = grp->GetFirstMember(); itr != NULL; itr = itr->next())
{
if (Player *plrg = itr->getSource())
- pqInfo->roles[plrg->GetGUID()] = plrg->m_lookingForGroup.roles;
+ pqInfo->roles[plrg->GetGUID()] = plrg->GetLfgRoles();
}
if (!m_Queues[groupType])
m_Queues[groupType] = new LFGQueue();
@@ -769,7 +773,7 @@ void LFGMgr::SendLfgPartyInfo(Player *plr)
/// <param name="plr">Player</param>
void LFGMgr::BuildRewardBlock(WorldPacket &data, uint32 dungeon, Player *plr)
{
- bool done = plr->m_lookingForGroup.isDungeonDone(dungeon);
+ bool done = plr->isLfgDungeonDone(dungeon);
LfgReward *reward = GetRandomDungeonReward(dungeon, done, plr->getLevel());
if (!reward)