Skip to content

Commit

Permalink
Core/PacketIO: Fix and update SMSG_LOGOUT_RESPONSE
Browse files Browse the repository at this point in the history
Picked from: https://github.com/vmangos/core

Co-authored-by: brotalnia <brotalnia@gmail.com>

vmangos/core@b9b006d
  • Loading branch information
Exxenoz authored and killerwife committed Jul 3, 2024
1 parent 4a3e284 commit bdda342
Showing 1 changed file with 20 additions and 25 deletions.
45 changes: 20 additions & 25 deletions src/game/Entities/MiscHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -271,38 +271,33 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPacket& /*recv_data*/)
{
DEBUG_LOG("WORLD: Received opcode CMSG_LOGOUT_REQUEST, security %u", GetSecurity());

// Can not logout if...
if (GetPlayer()->IsInCombat() || //...is in combat
//...is jumping ...is falling
GetPlayer()->m_movementInfo.HasMovementFlag(MovementFlags(MOVEFLAG_JUMPING | MOVEFLAG_FALLINGFAR)))
bool cantLogout = GetPlayer()->IsInCombat() || GetPlayer()->duel ||
GetPlayer()->m_movementInfo.HasMovementFlag(MovementFlags(MOVEFLAG_JUMPING | MOVEFLAG_FALLINGFAR));
bool instLogout = GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) || GetPlayer()->IsTaxiFlying() ||
GetSecurity() >= (AccountTypes)sWorld.getConfig(CONFIG_UINT32_INSTANT_LOGOUT);

WorldPacket data(SMSG_LOGOUT_RESPONSE, 4 + 1);
data << uint32(cantLogout ? 1 : 0);
data << uint8(instLogout && !cantLogout ? 1 : 0);
SendPacket(data);

DEBUG_LOG("WORLD: Sent SMSG_LOGOUT_RESPONSE Message");

if (cantLogout)
{
WorldPacket data(SMSG_LOGOUT_RESPONSE, (2 + 4)) ;
data << (uint8)0xC;
data << uint32(0);
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 mangosd.conf
if (GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) || GetPlayer()->IsTaxiFlying() ||
GetSecurity() >= (AccountTypes)sWorld.getConfig(CONFIG_UINT32_INSTANT_LOGOUT))
else if (instLogout)
{
LogoutPlayer();
return;
}
else
{
LogoutRequest(time(nullptr));

WorldPacket data(SMSG_LOGOUT_RESPONSE, 5);
data << uint32(0);
data << uint8(0);
SendPacket(data);
LogoutRequest(time(nullptr));

// Set flags and states set by logout:
GetPlayer()->SetStunnedByLogout(true);

DEBUG_LOG("WORLD: Sent SMSG_LOGOUT_RESPONSE Message");
// Set flags and states set by logout:
GetPlayer()->SetStunnedByLogout(true);
}
}

void WorldSession::HandlePlayerLogoutOpcode(WorldPacket& /*recv_data*/)
Expand Down

0 comments on commit bdda342

Please sign in to comment.