diff --git a/source/WorldServer/LoginServer.cpp b/source/WorldServer/LoginServer.cpp index 5a51ccd..cbaec9d 100644 --- a/source/WorldServer/LoginServer.cpp +++ b/source/WorldServer/LoginServer.cpp @@ -583,7 +583,7 @@ int32 LoginServer::DetermineCharacterLoginRequest ( UsertoWorldRequest_Struct* u else status = database.GetCharacterAdminStatus ( utwr->lsaccountid , utwr->char_id ); - if(status < 100 && zone_list.ClientConnected(utwr->lsaccountid)) + if(status < 100 && zone_list.ClientConnected(utwr->lsaccountid, utwr->char_id)) status = -9; if(status < 0){ LogWrite(WORLD__ERROR, 0, "World", "Login Rejected based on PLAY_ERROR (UserStatus) (MinStatus: %i), UserStatus: %i, CharID: %i",loginserver.minLockedStatus,status,utwr->char_id ); @@ -592,7 +592,7 @@ int32 LoginServer::DetermineCharacterLoginRequest ( UsertoWorldRequest_Struct* u response = PLAY_ERROR_CHAR_NOT_LOADED; break; case -9: - response = 0;//PLAY_ERROR_ACCOUNT_IN_USE; + response = PLAY_ERROR_ACCOUNT_IN_USE; break; case -8: response = PLAY_ERROR_LOADING_ERROR; diff --git a/source/WorldServer/World.cpp b/source/WorldServer/World.cpp index 9ac01c2..e2bdbc3 100644 --- a/source/WorldServer/World.cpp +++ b/source/WorldServer/World.cpp @@ -1280,7 +1280,7 @@ int32 ZoneList::GetZonesPlayersCount() { return ret; } -bool ZoneList::ClientConnected(int32 account_id){ +bool ZoneList::ClientConnected(int32 account_id, int32 char_id){ bool ret = false; map::iterator itr; MClientList.lock(); @@ -1294,7 +1294,9 @@ bool ZoneList::ClientConnected(int32 account_id){ if(client_map.size() > 0){ itr=client_map.begin(); if(itr == client_map.end()){ - if(itr->second && itr->second->GetAccountID() == account_id && (itr->second->GetPlayer()->GetActivityStatus() & ACTIVITY_STATUS_LINKDEAD) == 0) + if(itr->second && itr->second->GetAccountID() == account_id && itr->second->GetCharacterID() != char_id) + ret = true; + if(itr->second && itr->second->GetAccountID() == account_id && itr->second->GetCharacterID() == char_id && ((itr->second->GetPlayer()->GetActivityStatus() & ACTIVITY_STATUS_LINKDEAD) == 0)) ret = true; break; } diff --git a/source/WorldServer/World.h b/source/WorldServer/World.h index 44806c1..707e3b1 100644 --- a/source/WorldServer/World.h +++ b/source/WorldServer/World.h @@ -532,7 +532,7 @@ class ZoneList { client_map.erase(name); MClientList.unlock(); } - bool ClientConnected(int32 account_id); + bool ClientConnected(int32 account_id, int32 char_id); void RemoveClientZoneReference(ZoneServer* zone); void ReloadClientQuests(); bool DepopFinished();