diff options
-rwxr-xr-x | src/server/game/DungeonFinding/LFGMgr.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 25231417860..aa9927f7b52 100755 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -1081,24 +1081,31 @@ void LFGMgr::UpdateRoleCheck(uint64& gguid, uint64 guid /* = 0 */, uint8 roles / { uint64 pguid = it->first; Player* plrg = sObjectMgr->GetPlayer(pguid); + if (!plrg) + { + if (roleCheck->state == LFG_ROLECHECK_FINISHED) + SetState(pguid, LFG_STATE_QUEUED); + else if (roleCheck->state != LFG_ROLECHECK_INITIALITING) + ClearState(pguid); + continue; + } + team = uint8(plrg->GetTeam()); - WorldSession* session = plrg->GetSession(); if (!sendRoleChosen) - session->SendLfgRoleChosen(guid, roles); - session->SendLfgRoleCheckUpdate(roleCheck); - - switch(roleCheck->state) + plrg->GetSession()->SendLfgRoleChosen(guid, roles); + plrg->GetSession()->SendLfgRoleCheckUpdate(roleCheck); + switch (roleCheck->state) { case LFG_ROLECHECK_INITIALITING: continue; case LFG_ROLECHECK_FINISHED: SetState(pguid, LFG_STATE_QUEUED); - session->SendLfgUpdateParty(LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, dungeons, GetComment(pguid))); + plrg->GetSession()->SendLfgUpdateParty(LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, dungeons, GetComment(pguid))); break; default: if (roleCheck->leader == pguid) - session->SendLfgJoinResult(joinData); - session->SendLfgUpdateParty(LfgUpdateData(LFG_UPDATETYPE_ROLECHECK_FAILED)); + plrg->GetSession()->SendLfgJoinResult(joinData); + plrg->GetSession()->SendLfgUpdateParty(LfgUpdateData(LFG_UPDATETYPE_ROLECHECK_FAILED)); ClearState(pguid); break; } |