Properly clean up players that have been kicked as duplicates.

This should fix the issue with null pointers in PlayerManager::players.
This commit is contained in:
2020-10-02 01:37:50 +02:00
parent 600c26024b
commit 4fe4aeb0d3
3 changed files with 16 additions and 5 deletions

View File

@@ -885,6 +885,7 @@ WarpLocation PlayerManager::getRespawnPoint(Player *plr) {
return best;
}
bool PlayerManager::isAccountInUse(int accountId) {
std::map<CNSocket*, PlayerView>::iterator it;
for (it = PlayerManager::players.begin(); it != PlayerManager::players.end(); it++)
@@ -897,15 +898,18 @@ bool PlayerManager::isAccountInUse(int accountId) {
void PlayerManager::exitDuplicate(int accountId) {
std::map<CNSocket*, PlayerView>::iterator it;
for (it = PlayerManager::players.begin(); it != PlayerManager::players.end(); it++)
{
if (it->second.plr->accountId == accountId)
{
// disconnect any duplicate players
for (it = players.begin(); it != players.end(); it++) {
if (it->second.plr->accountId == accountId) {
CNSocket* sock = it->first;
INITSTRUCT(sP_FE2CL_REP_PC_EXIT_DUPLICATE, resp);
resp.iErrorCode = 0;
sock->sendPacket((void*)&resp, P_FE2CL_REP_PC_EXIT_DUPLICATE, sizeof(sP_FE2CL_REP_PC_EXIT_DUPLICATE));
sock->kill();
CNShardServer::_killConnection(sock);
}
}
}