diff options
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 27 | ||||
-rw-r--r-- | src/server/game/Server/Packets/AuthenticationPackets.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/Packets/AuthenticationPackets.h | 2 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.h | 49 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.h | 6 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.cpp | 32 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 9 | ||||
-rw-r--r-- | src/server/game/Server/WorldSocket.cpp | 5 | ||||
-rw-r--r-- | src/server/shared/Database/Implementation/LoginDatabase.cpp | 1 | ||||
-rw-r--r-- | src/server/shared/Database/Implementation/LoginDatabase.h | 1 |
12 files changed, 112 insertions, 46 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index a96cd9220ac..de72e024e5e 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -56,6 +56,7 @@ #include "Battlefield.h" #include "BattlefieldMgr.h" #include "DB2Stores.h" +#include "CharacterPackets.h" void WorldSession::HandleRepopRequestOpcode(WorldPacket& recvData) { @@ -373,7 +374,7 @@ void WorldSession::HandleWhoOpcode(WorldPacket& recvData) TC_LOG_DEBUG("network", "WORLD: Send SMSG_WHO Message"); } -void WorldSession::HandleLogoutRequestOpcode(WorldPacket& /*recvData*/) +void WorldSession::HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequest& /*logoutRequest*/) { TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_LOGOUT_REQUEST Message, security - %u", GetSecurity()); @@ -395,14 +396,14 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPacket& /*recvData*/) else if (GetPlayer()->duel || GetPlayer()->HasAura(9454)) // is dueling or frozen by GM via freeze command reason = 2; // FIXME - Need the correct value - WorldPacket data(SMSG_LOGOUT_RESPONSE, 1+4); - data << uint32(reason); - data << uint8(instantLogout); - SendPacket(&data); + WorldPackets::Character::LogoutResponse logoutResponse; + logoutResponse.LogoutResult = reason; + logoutResponse.Instant = instantLogout; + SendPacket(logoutResponse.Write()); if (reason) { - LogoutRequest(0); + SetLogoutStartTime(0); return; } @@ -422,15 +423,10 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPacket& /*recvData*/) GetPlayer()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); } - LogoutRequest(time(NULL)); + SetLogoutStartTime(time(NULL)); } -void WorldSession::HandlePlayerLogoutOpcode(WorldPacket& /*recvData*/) -{ - TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_PLAYER_LOGOUT Message"); -} - -void WorldSession::HandleLogoutCancelOpcode(WorldPacket& /*recvData*/) +void WorldSession::HandleLogoutCancelOpcode(WorldPackets::Character::LogoutCancel& /*logoutCancel*/) { TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_LOGOUT_CANCEL Message"); @@ -438,10 +434,9 @@ void WorldSession::HandleLogoutCancelOpcode(WorldPacket& /*recvData*/) if (!GetPlayer()) return; - LogoutRequest(0); + SetLogoutStartTime(0); - WorldPacket data(SMSG_LOGOUT_CANCEL_ACK, 0); - SendPacket(&data); + SendPacket(WorldPackets::Character::LogoutCancelAck().Write()); // not remove flags if can't free move - its not set in Logout request code. if (GetPlayer()->CanFreeMove()) diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp index 95f2379e82f..2bb1760b31c 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.cpp +++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp @@ -142,7 +142,7 @@ WorldPacket const* WorldPackets::Auth::AuthResponse::Write() std::string const WorldPackets::Auth::ConnectTo::Haiku("An island of peace\nCorruption is brought ashore\nPandarens will rise\n\0\0", 71); -uint8 const WorldPackets::Auth::ConnectTo::PiDigits[260] = +uint8 const WorldPackets::Auth::ConnectTo::PiDigits[130] = { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, 0x02, 0x88, 0x41, 0x97, diff --git a/src/server/game/Server/Packets/AuthenticationPackets.h b/src/server/game/Server/Packets/AuthenticationPackets.h index 70aa38cac8e..6f9eae12f63 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.h +++ b/src/server/game/Server/Packets/AuthenticationPackets.h @@ -141,7 +141,7 @@ namespace WorldPackets class ConnectTo final : public ServerPacket { static std::string const Haiku; - static uint8 const PiDigits[260]; + static uint8 const PiDigits[130]; struct ConnectPayload { diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 790402c473f..70da43ff661 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -337,3 +337,17 @@ WorldPacket const* WorldPackets::Character::LoginVerifyWorld::Write() _worldPacket << uint32(Reason); return &_worldPacket; } + +WorldPacket const* WorldPackets::Character::LogoutResponse::Write() +{ + _worldPacket << int32(LogoutResult); + _worldPacket.WriteBit(Instant); + _worldPacket.FlushBits(); + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Character::LogoutComplete::Write() +{ + _worldPacket << SwitchToCharacter; + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index 57a81e0ed11..a4bb21cd9b0 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -207,9 +207,9 @@ namespace WorldPackets { public: GenerateRandomCharacterName(WorldPacket&& packet); - + void Read() override; - + uint8 Sex = 0; uint8 Race = 0; }; @@ -304,6 +304,51 @@ namespace WorldPackets Position Pos; uint32 Reason = 0; }; + + class LogoutRequest final : public ClientPacket + { + public: + LogoutRequest(WorldPacket&& packet) : ClientPacket(std::move(packet)) { } + + void Read() override { } + }; + + class LogoutResponse final : public ServerPacket + { + public: + LogoutResponse() : ServerPacket(SMSG_LOGOUT_RESPONSE, 4 + 1) { } + + WorldPacket const* Write() override; + + int32 LogoutResult = 0; + bool Instant = false; + }; + + class LogoutComplete final : public ServerPacket + { + public: + LogoutComplete() : ServerPacket(SMSG_LOGOUT_COMPLETE, 2) { } + + WorldPacket const* Write() override; + + ObjectGuid SwitchToCharacter; + }; + + class LogoutCancel final : public ClientPacket + { + public: + LogoutCancel(WorldPacket&& packet) : ClientPacket(std::move(packet)) { } + + void Read() override { } + }; + + class LogoutCancelAck final : public ServerPacket + { + public: + LogoutCancelAck() : ServerPacket(SMSG_LOGOUT_CANCEL_ACK, 0) { } + + WorldPacket const* Write() override { return &_worldPacket; } + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 97fc18a1c2f..57d6abe49e6 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -378,8 +378,8 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_SET_GUILD_POST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderSetGuildPost ); DEFINE_OPCODE_HANDLER_OLD(CMSG_LIST_INVENTORY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleListInventoryOpcode ); DEFINE_OPCODE_HANDLER_OLD(CMSG_LOAD_SCREEN, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLoadScreenOpcode ); - DEFINE_OPCODE_HANDLER_OLD(CMSG_LOGOUT_CANCEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLogoutCancelOpcode ); - DEFINE_OPCODE_HANDLER_OLD(CMSG_LOGOUT_REQUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLogoutRequestOpcode ); + DEFINE_HANDLER(CMSG_LOGOUT_CANCEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Character::LogoutCancel, &WorldSession::HandleLogoutCancelOpcode); + DEFINE_HANDLER(CMSG_LOGOUT_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Character::LogoutRequest, &WorldSession::HandleLogoutRequestOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_LOG_DISCONNECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess ); DEFINE_OPCODE_HANDLER_OLD(CMSG_LOOT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLootOpcode ); DEFINE_OPCODE_HANDLER_OLD(CMSG_LOOT_CURRENCY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); @@ -1034,9 +1034,9 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOAD_CUF_PROFILES, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_SETTIMESPEED, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_VERIFY_WORLD, STATUS_NEVER); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_CANCEL_ACK, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_COMPLETE, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_RESPONSE, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_CANCEL_ACK, STATUS_NEVER); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_COMPLETE, STATUS_NEVER); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_RESPONSE, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOG_XPGAIN, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_ALL_PASSED, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_CLEAR_MONEY, STATUS_UNHANDLED); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 879554e8bd6..a77793ce6dd 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -335,7 +335,7 @@ enum OpcodeClient : uint32 CMSG_LF_GUILD_SET_GUILD_POST = 0xBADD, CMSG_LIST_INVENTORY = 0xBADD, CMSG_LOAD_SCREEN = 0x0B08, - CMSG_LOGOUT_CANCEL = 0xBADD, + CMSG_LOGOUT_CANCEL = 0x03C2, CMSG_LOGOUT_REQUEST = 0x1911, CMSG_LOG_DISCONNECT = 0x04D5, CMSG_LOOT = 0xBADD, @@ -563,7 +563,7 @@ enum OpcodeClient : uint32 CMSG_SUGGESTION_SUBMIT = 0xBADD, CMSG_SUMMON_RESPONSE = 0xBADD, CMSG_SUSPEND_COMMS_ACK = 0x0C56, - CMSG_SUSPEND_TOKEN_RESPONSE = 0x0142, + CMSG_SUSPEND_TOKEN_RESPONSE = 0xBADD, CMSG_SWAP_INV_ITEM = 0xBADD, CMSG_SWAP_ITEM = 0xBADD, CMSG_SYNC_DANCE = 0xBADD, @@ -1060,7 +1060,7 @@ enum OpcodeServer : uint32 SMSG_LOAD_CUF_PROFILES = 0x1530, SMSG_LOGIN_SETTIMESPEED = 0x09AA, SMSG_LOGIN_VERIFY_WORLD = 0x0B19, - SMSG_LOGOUT_CANCEL_ACK = 0xBADD, + SMSG_LOGOUT_CANCEL_ACK = 0x0FAD, SMSG_LOGOUT_COMPLETE = 0x0B21, SMSG_LOGOUT_RESPONSE = 0x052D, SMSG_LOG_XPGAIN = 0xBADD, diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index f427b91787a..2554a9e09db 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -138,7 +138,7 @@ WorldSession::WorldSession(uint32 id, uint32 battlenetAccountId, std::shared_ptr LoginDatabase.PExecute("UPDATE account SET online = 1 WHERE id = %u;", GetAccountId()); // One-time query } - m_Socket[0] = sock; + m_Socket[CONNECTION_TYPE_REALM] = sock; InitializeQueryCallbackParameters(); } @@ -288,7 +288,7 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) ///- Before we process anything: /// If necessary, kick the player from the character select screen if (IsConnectionIdle()) - m_Socket[0]->CloseSocket(); + m_Socket[CONNECTION_TYPE_REALM]->CloseSocket(); ///- Retrieve packets from the receive queue and call the appropriate handlers /// not process packets if socket already closed @@ -305,7 +305,7 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) uint32 processedPackets = 0; time_t currentTime = time(NULL); - while (m_Socket[0] && !_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket && _recvQueue.next(packet, updater)) + while (m_Socket[CONNECTION_TYPE_REALM] && !_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket && _recvQueue.next(packet, updater)) { if (!AntiDOS.EvaluateOpcode(*packet, currentTime)) KickPlayer(); @@ -414,7 +414,7 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) break; } - if (m_Socket[0] && m_Socket[0]->IsOpen() && _warden) + if (m_Socket[CONNECTION_TYPE_REALM] && m_Socket[CONNECTION_TYPE_REALM]->IsOpen() && _warden) _warden->Update(); ProcessQueryCallbacks(); @@ -428,21 +428,22 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) if (ShouldLogOut(currTime) && m_playerLoading.IsEmpty()) LogoutPlayer(true); - if (m_Socket[0] && GetPlayer() && _warden) + if (m_Socket[CONNECTION_TYPE_REALM] && GetPlayer() && _warden) _warden->Update(); ///- Cleanup socket pointer if need - if ((m_Socket[0] && !m_Socket[0]->IsOpen()) || (m_Socket[1] && !m_Socket[1]->IsOpen())) + if ((m_Socket[CONNECTION_TYPE_REALM] && !m_Socket[CONNECTION_TYPE_REALM]->IsOpen()) || + (m_Socket[CONNECTION_TYPE_INSTANCE] && !m_Socket[CONNECTION_TYPE_INSTANCE]->IsOpen())) { expireTime -= expireTime > diff ? diff : expireTime; if (expireTime < diff || forceExit || !GetPlayer()) { - m_Socket[0].reset(); - m_Socket[1].reset(); + m_Socket[CONNECTION_TYPE_REALM].reset(); + m_Socket[CONNECTION_TYPE_INSTANCE].reset(); } } - if (!m_Socket[0]) + if (!m_Socket[CONNECTION_TYPE_REALM]) return false; //Will remove this session from the world session map } @@ -544,7 +545,7 @@ void WorldSession::LogoutPlayer(bool save) // remove player from the group if he is: // a) in group; b) not in raid group; c) logging out normally (not being kicked or disconnected) - if (_player->GetGroup() && !_player->GetGroup()->isRaidGroup() && m_Socket[0]) + if (_player->GetGroup() && !_player->GetGroup()->isRaidGroup() && m_Socket[CONNECTION_TYPE_REALM]) _player->RemoveFromGroup(); //! Send update to group and reset stored max enchanting level @@ -578,8 +579,7 @@ void WorldSession::LogoutPlayer(bool save) //! Send the 'logout complete' packet to the client //! Client will respond by sending 3x CMSG_CANCEL_TRADE, which we currently dont handle - WorldPacket data(SMSG_LOGOUT_COMPLETE, 0); - SendPacket(&data); + SendPacket(WorldPackets::Character::LogoutComplete().Write()); TC_LOG_DEBUG("network", "SESSION: Sent SMSG_LOGOUT_COMPLETE Message"); //! Since each account can only have one online character at any given time, ensure all characters for active account are marked as offline @@ -588,10 +588,16 @@ void WorldSession::LogoutPlayer(bool save) CharacterDatabase.Execute(stmt); } + if (m_Socket[CONNECTION_TYPE_INSTANCE]) + { + m_Socket[CONNECTION_TYPE_INSTANCE]->CloseSocket(); + m_Socket[CONNECTION_TYPE_INSTANCE].reset(); + } + m_playerLogout = false; m_playerSave = false; m_playerRecentlyLogout = true; - LogoutRequest(0); + SetLogoutStartTime(0); } /// Kick a player out of the World diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 83a746c8f44..bf496077c36 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -87,6 +87,8 @@ namespace WorldPackets class ReorderCharacters; class UndeleteCharacter; class PlayerLogin; + class LogoutRequest; + class LogoutCancel; } namespace Guild @@ -276,7 +278,7 @@ class WorldSession bool isLogingOut() const { return _logoutTime || m_playerLogout; } /// Engage the logout process for the user - void LogoutRequest(time_t requestTime) + void SetLogoutStartTime(time_t requestTime) { _logoutTime = requestTime; } @@ -511,9 +513,8 @@ class WorldSession void HandleLootReleaseOpcode(WorldPacket& recvPacket); void HandleLootMasterGiveOpcode(WorldPacket& recvPacket); void HandleWhoOpcode(WorldPacket& recvPacket); - void HandleLogoutRequestOpcode(WorldPacket& recvPacket); - void HandlePlayerLogoutOpcode(WorldPacket& recvPacket); - void HandleLogoutCancelOpcode(WorldPacket& recvPacket); + void HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequest& logoutRequest); + void HandleLogoutCancelOpcode(WorldPackets::Character::LogoutCancel& logoutCancel); // GM Ticket opcodes void HandleGMTicketCreateOpcode(WorldPacket& recvPacket); diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index d4265c9a601..2c414413deb 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -670,7 +670,10 @@ void WorldSocket::HandleAuthContinuedSession(WorldPackets::Auth::AuthContinuedSe { uint32 accountId = PAIR64_LOPART(authSession.Key); _type = ConnectionType(PAIR64_HIPART(authSession.Key)); - QueryResult result = LoginDatabase.PQuery("SELECT username, sessionkey FROM account WHERE id = %u", accountId); + + PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_INFO_CONTINUED_SESSION); + stmt->setUInt32(0, accountId); + PreparedQueryResult result = LoginDatabase.Query(stmt); if (!result) { SendAuthResponseError(AUTH_UNKNOWN_ACCOUNT); diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp index c0c9751a804..bfdd39fdd3e 100644 --- a/src/server/shared/Database/Implementation/LoginDatabase.cpp +++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp @@ -35,6 +35,7 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_INS_ACCOUNT_AUTO_BANNED, "INSERT INTO account_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity Auth', 'Failed login autoban', 1)", CONNECTION_ASYNC); PrepareStatement(LOGIN_DEL_ACCOUNT_BANNED, "DELETE FROM account_banned WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_SESSIONKEY, "SELECT a.sessionkey, a.id, aa.gmlevel FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE username = ?", CONNECTION_SYNCH); + PrepareStatement(LOGIN_SEL_ACCOUNT_INFO_CONTINUED_SESSION, "SELECT username, sessionkey FROM account WHERE id = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_UPD_VS, "UPDATE account SET v = ?, s = ? WHERE username = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_UPD_LOGONPROOF, "UPDATE account SET sessionkey = ?, last_ip = ?, last_login = NOW(), locale = ?, failed_logins = 0, os = ? WHERE username = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_LOGONCHALLENGE, "SELECT a.sha_pass_hash, a.id, a.locked, a.lock_country, a.last_ip, aa.gmlevel, a.v, a.s, a.token_key, a.battlenet_account FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE a.username = ?", CONNECTION_SYNCH); diff --git a/src/server/shared/Database/Implementation/LoginDatabase.h b/src/server/shared/Database/Implementation/LoginDatabase.h index bf4b8511e67..07653263ef9 100644 --- a/src/server/shared/Database/Implementation/LoginDatabase.h +++ b/src/server/shared/Database/Implementation/LoginDatabase.h @@ -53,6 +53,7 @@ enum LoginDatabaseStatements LOGIN_INS_ACCOUNT_AUTO_BANNED, LOGIN_DEL_ACCOUNT_BANNED, LOGIN_SEL_SESSIONKEY, + LOGIN_SEL_ACCOUNT_INFO_CONTINUED_SESSION, LOGIN_UPD_VS, LOGIN_UPD_LOGONPROOF, LOGIN_SEL_LOGONCHALLENGE, |