diff options
author | Spp <none@none> | 2010-12-23 21:11:11 +0100 |
---|---|---|
committer | Spp <none@none> | 2010-12-23 21:11:11 +0100 |
commit | 95daf7998fc3b772fdcd70087c12db80bd5a031a (patch) | |
tree | 4d3684179cad7fca6f2f1b9e7d885eef0fec63fd | |
parent | e99ca097edf49423dc1a7ed1395191655562e184 (diff) |
Core/Dungeon Finder: Fix a crash in rolecheck when a player is offline
Closes issue 5246
--HG--
branch : trunk
-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; } |