From d4fc589f4c4efac69723211b37239a2afa161cc6 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 15 Jun 2023 23:35:22 +0200 Subject: Core/Misc: Don't logout players instantly when client automatically requests a logout by idling too long --- src/server/game/Handlers/MiscHandler.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/server/game/Handlers/MiscHandler.cpp') diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 7e870b0a291..b64187a5741 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -237,13 +237,15 @@ void WorldSession::HandleWhoOpcode(WorldPackets::Who::WhoRequestPkt& whoRequest) SendPacket(response.Write()); } -void WorldSession::HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequest& /*logoutRequest*/) +void WorldSession::HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequest& logoutRequest) { if (!GetPlayer()->GetLootGUID().IsEmpty()) GetPlayer()->SendLootReleaseAll(); - bool instantLogout = (GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_RESTING) && !GetPlayer()->IsInCombat()) || - GetPlayer()->IsInFlight() || HasPermission(rbac::RBAC_PERM_INSTANT_LOGOUT); + bool instantLogout = GetPlayer()->IsInFlight(); + if (!logoutRequest.IdleLogout) + instantLogout |= (GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_RESTING) && !GetPlayer()->IsInCombat()) + || HasPermission(rbac::RBAC_PERM_INSTANT_LOGOUT); /// TODO: Possibly add RBAC permission to log out in combat bool canLogoutInCombat = GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_RESTING); -- cgit v1.2.3