From 2081b0e2149b77e304aee67c399dfbd369552066 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 10 Aug 2019 03:26:51 -0500 Subject: [PATCH] Merge changes --- world/clientlist.cpp | 13 +++++++++++++ world/clientlist.h | 1 + world/login_server.cpp | 18 +++++------------- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/world/clientlist.cpp b/world/clientlist.cpp index 4ac74e3b3..953f806fe 100644 --- a/world/clientlist.cpp +++ b/world/clientlist.cpp @@ -253,6 +253,19 @@ ClientListEntry* ClientList::FindCLEByCharacterID(uint32 iCharID) { return nullptr; } +ClientListEntry* ClientList::FindCLEByLSID(uint32 iLSID) { + LinkedListIterator iterator(clientlist); + + iterator.Reset(); + while (iterator.MoreElements()) { + if (iterator.GetData()->LSID() == iLSID) { + return iterator.GetData(); + } + iterator.Advance(); + } + return nullptr; +} + void ClientList::SendCLEList(const int16& admin, const char* to, WorldTCPConnection* connection, const char* iName) { LinkedListIterator iterator(clientlist); char* output = 0; diff --git a/world/clientlist.h b/world/clientlist.h index 16259e2e0..3386a6f14 100644 --- a/world/clientlist.h +++ b/world/clientlist.h @@ -55,6 +55,7 @@ public: ClientListEntry* FindCharacter(const char* name); ClientListEntry* FindCLEByAccountID(uint32 iAccID); ClientListEntry* FindCLEByCharacterID(uint32 iCharID); + ClientListEntry* FindCLEByLSID(uint32 iLSID); ClientListEntry* GetCLE(uint32 iID); void GetCLEIP(uint32 iIP); uint32 GetCLEIPCount(uint32 iLSAccountID); diff --git a/world/login_server.cpp b/world/login_server.cpp index 112a7c92f..f6c680afe 100644 --- a/world/login_server.cpp +++ b/world/login_server.cpp @@ -168,19 +168,11 @@ void LoginServer::ProcessUsertoWorldReq(uint16_t opcode, EQ::Net::Packet &p) return; } - if (RuleB(World, DisallowDuplicateAccountLogins)) { - auto cle = client_list.FindCLEByLSID(utwr->lsaccountid); - if (cle != nullptr) { - auto status = cle->GetOnline(); - if (CLE_Status_Zoning == status || CLE_Status_InZone == status) { - utwrs->response = UserToWorldStatusAlreadyOnline; - SendPacket(&outpack); - return; - } - else { - //our existing cle is in a state we can login to, mark the old as stale and remove it. - client_list.RemoveCLEByLSID(utwr->lsaccountid); - } + if (RuleB(World, EnforceCharacterLimitAtLogin)) { + if (client_list.IsAccountInGame(utwr->lsaccountid)) { + utwrs->response = UserToWorldStatusAlreadyOnline; + SendPacket(&outpack); + return; } }