aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/DungeonFinding/LFGMgr.cpp
diff options
context:
space:
mode:
authorSpp <none@none>2010-09-26 13:59:51 +0200
committerSpp <none@none>2010-09-26 13:59:51 +0200
commitef16cc91094f524555f36f8b27480b7543dc267c (patch)
tree692645b7d0aec3f8758a592c43a5271c6c4f2115 /src/server/game/DungeonFinding/LFGMgr.cpp
parent07fc33a083f84c758002ef1187335416ce695a99 (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.cpp18
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);