diff options
author | Spp <none@none> | 2010-09-26 13:59:51 +0200 |
---|---|---|
committer | Spp <none@none> | 2010-09-26 13:59:51 +0200 |
commit | ef16cc91094f524555f36f8b27480b7543dc267c (patch) | |
tree | 692645b7d0aec3f8758a592c43a5271c6c4f2115 /src/server/game/DungeonFinding/LFGMgr.cpp | |
parent | 07fc33a083f84c758002ef1187335416ce695a99 (diff) |
Core/Dungeon Finder: Add lfg state to know if a player is using lfg or lfr
- Do not allow to join battleground if using lfg/lfr
Closes issue 4189
--HG--
branch : trunk
Diffstat (limited to 'src/server/game/DungeonFinding/LFGMgr.cpp')
-rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index affb29560cd..4297e73687d 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -299,6 +299,8 @@ void LFGMgr::Update(uint32 diff) plr->GetSession()->SendLfgRoleCheckUpdate(pRoleCheck); plr->GetLfgDungeons()->clear(); plr->SetLfgRoles(ROLE_NONE); + if (!plr->GetGroup() || !plr->GetGroup()->isLFGGroup()) + plr->SetLfgState(LFG_STATE_NONE); if (itRoles->first == pRoleCheck->leader) plr->GetSession()->SendLfgJoinResult(LFG_JOIN_FAILED, pRoleCheck->result); @@ -632,6 +634,8 @@ void LFGMgr::Join(Player* plr) sLog.outError("DEBUG:LFGMgr::Join: [" UI64FMTD "] joining with %u members. result: %u", guid, grp ? grp->GetMembersCount() : 1, result); plr->GetLfgDungeons()->clear(); plr->SetLfgRoles(ROLE_NONE); + if (grp && !grp->isLFGGroup()) + plr->SetLfgState(LFG_STATE_NONE); plr->GetSession()->SendLfgJoinResult(result); plr->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_ROLECHECK_FAILED); return; @@ -644,6 +648,7 @@ void LFGMgr::Join(Player* plr) for (GroupReference* itr = plr->GetGroup()->GetFirstMember(); itr != NULL; itr = itr->next()) { plrg = itr->getSource(); // Not null, checked earlier + plrg->SetLfgState(LFG_STATE_LFG); if (plrg != plr) { dungeons = plrg->GetLfgDungeons(); @@ -657,6 +662,7 @@ void LFGMgr::Join(Player* plr) } else { + plr->SetLfgState(LFG_STATE_LFG); LfgRolesMap roles; roles[plr->GetGUIDLow()] = plr->GetLfgRoles(); @@ -700,7 +706,7 @@ void LFGMgr::Join(Player* plr) /// <param name="Group*">Group (could be NULL)</param> void LFGMgr::Leave(Player* plr, Group* grp /* = NULL*/) { - if ((plr && !plr->GetLfgUpdate()) || !sWorld.getBoolConfig(CONFIG_DUNGEON_FINDER_ENABLE)) + if ((plr && (!plr->GetLfgUpdate() || !plr->isUsingLfg())) || !sWorld.getBoolConfig(CONFIG_DUNGEON_FINDER_ENABLE)) return; uint64 guid = grp ? grp->GetGUID() : plr ? plr->GetGUID() : 0; @@ -748,6 +754,7 @@ void LFGMgr::Leave(Player* plr, Group* grp /* = NULL*/) plrg->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_REMOVED_FROM_QUEUE); plrg->GetLfgDungeons()->clear(); plrg->SetLfgRoles(ROLE_NONE); + plrg->SetLfgState(LFG_STATE_NONE); } } else @@ -755,6 +762,7 @@ void LFGMgr::Leave(Player* plr, Group* grp /* = NULL*/) plr->GetSession()->SendLfgUpdatePlayer(LFG_UPDATETYPE_REMOVED_FROM_QUEUE); plr->GetLfgDungeons()->clear(); plr->SetLfgRoles(ROLE_NONE); + plr->SetLfgState(LFG_STATE_NONE); } } @@ -1223,6 +1231,8 @@ void LFGMgr::UpdateRoleCheck(Group* grp, Player* plr /* = NULL*/) session->SendLfgUpdateParty(LFG_UPDATETYPE_ROLECHECK_FAILED); plrg->GetLfgDungeons()->clear(); plrg->SetLfgRoles(ROLE_NONE); + if (!grp->isLFGGroup()) + plr->SetLfgState(LFG_STATE_NONE); } break; default: @@ -1230,7 +1240,9 @@ void LFGMgr::UpdateRoleCheck(Group* grp, Player* plr /* = NULL*/) session->SendLfgJoinResult(LFG_JOIN_FAILED, pRoleCheck->result); session->SendLfgUpdateParty(LFG_UPDATETYPE_ROLECHECK_FAILED); plrg->GetLfgDungeons()->clear(); - plrg->SetLfgRoles(ROLE_NONE); + if (grp->isLFGGroup()) + plrg->SetLfgRoles(ROLE_NONE); + plr->SetLfgState(LFG_STATE_NONE); break; } } @@ -1644,6 +1656,8 @@ void LFGMgr::RemoveProposal(LfgProposalMap::iterator itProposal, LfgUpdateType t updateType = type; plr->GetLfgDungeons()->clear(); plr->SetLfgRoles(ROLE_NONE); + if (!plr->GetGroup() || !plr->GetGroup()->isLFGGroup()) + plr->SetLfgState(LFG_STATE_NONE); sLog.outError("DEBUG:LFGMgr::RemoveProposal: [" UI64FMTD "] didn't accept. Removing from queue and compatible cache", guid); RemoveFromQueue(guid); |