From a775e90eb3e7b19eb849b0d45c6d53bc62b88d2b Mon Sep 17 00:00:00 2001 From: Emagi Date: Sun, 1 Dec 2024 11:28:32 -0500 Subject: [PATCH] reject char create when world locked --- source/WorldServer/LoginServer.cpp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/source/WorldServer/LoginServer.cpp b/source/WorldServer/LoginServer.cpp index cd06b50..6972d5f 100644 --- a/source/WorldServer/LoginServer.cpp +++ b/source/WorldServer/LoginServer.cpp @@ -321,17 +321,23 @@ bool LoginServer::Process() { int8 resp = 0; int32 acct_id = 0; int32 char_id = 0; + // have to load packet to clear the buffer if(packet && packet->LoadPacketData(pack->pBuffer+sizeof(int16),pack->size - sizeof(int16), version <= 561 ? false : true)){ - EQ2_16BitString name = packet->getType_EQ2_16BitString_ByName("name"); - resp = database.CheckNameFilter(name.data.c_str()); - acct_id = packet->getType_int32_ByName("account_id"); - LogWrite(WORLD__DEBUG, 0, "World", "Response: %i", (int)resp); - - sint16 lowestStatus = database.GetLowestCharacterAdminStatus(acct_id); - if(lowestStatus == -2) - resp = UNKNOWNERROR_REPLY2; - else if(resp == CREATESUCCESS_REPLY) - char_id = database.SaveCharacter(packet, acct_id); + if(net.world_locked) { + resp = NOSERVERSAVAIL_REPLY; // no new characters when locked + } + else { + EQ2_16BitString name = packet->getType_EQ2_16BitString_ByName("name"); + resp = database.CheckNameFilter(name.data.c_str()); + acct_id = packet->getType_int32_ByName("account_id"); + LogWrite(WORLD__DEBUG, 0, "World", "Response: %i", (int)resp); + + sint16 lowestStatus = database.GetLowestCharacterAdminStatus(acct_id); + if(lowestStatus == -2) + resp = UNKNOWNERROR_REPLY2; + else if(resp == CREATESUCCESS_REPLY) + char_id = database.SaveCharacter(packet, acct_id); + } } else{ LogWrite(WORLD__ERROR, 0, "World", "Invalid creation request!");