aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/MiscHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/MiscHandler.cpp')
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp31
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));
}