diff options
Diffstat (limited to 'src/server/game/Handlers/MiscHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 4d72e79f4df..a2768319150 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -375,33 +375,34 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPacket& /*recvData*/) if (uint64 lguid = GetPlayer()->GetLootGUID()) DoLootRelease(lguid); - uint32 reason = 0; + bool instantLogout = (GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) && !GetPlayer()->isInCombat()) || + GetPlayer()->isInFlight() || HasPermission(RBAC_PERM_INSTANT_LOGOUT); + + /// TODO: Possibly add RBAC permission to log out in combat + bool canLogoutInCombat = GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING); - if (GetPlayer()->isInCombat()) + uint32 reason = 0; + if (GetPlayer()->isInCombat() && !canLogoutInCombat) reason = 1; else if (GetPlayer()->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FALLING | MOVEMENTFLAG_FALLING_FAR)) reason = 3; // is jumping or falling 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(0); + SendPacket(&data); + if (reason) { - WorldPacket data(SMSG_LOGOUT_RESPONSE, 1+4); - data << uint32(reason); - data << uint8(0); - SendPacket(&data); LogoutRequest(0); return; } - //instant logout in taverns/cities or on taxi or for admins, gm's, mod's if its enabled in worldserver.conf - if (GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) || GetPlayer()->isInFlight() || - HasPermission(RBAC_PERM_INSTANT_LOGOUT)) + // instant logout in taverns/cities or on taxi or for admins, gm's, mod's if its enabled in worldserver.conf + if (instantLogout) { - WorldPacket data(SMSG_LOGOUT_RESPONSE, 1+4); - data << uint32(reason); - data << uint8(1); // instant logout - SendPacket(&data); LogoutPlayer(true); return; } @@ -414,10 +415,6 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPacket& /*recvData*/) GetPlayer()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); } - WorldPacket data(SMSG_LOGOUT_RESPONSE, 1+4); - data << uint32(0); - data << uint8(0); - SendPacket(&data); LogoutRequest(time(NULL)); } |