From f5e58f2d4f217e7b62d40ea926401392adb85590 Mon Sep 17 00:00:00 2001 From: MedicOP Date: Mon, 14 Jan 2019 01:20:05 +0100 Subject: [PATCH] Sync login state on channel change (#323) --- .../handlers/PlayerLoggedinHandler.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/net/server/channel/handlers/PlayerLoggedinHandler.java b/src/net/server/channel/handlers/PlayerLoggedinHandler.java index f8b3ea62b6..2081c59d6e 100644 --- a/src/net/server/channel/handlers/PlayerLoggedinHandler.java +++ b/src/net/server/channel/handlers/PlayerLoggedinHandler.java @@ -122,7 +122,6 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { c.setPlayer(player); c.setAccID(player.getAccountID()); - int state = c.getLoginState(); boolean allowLogin = true; World world = server.getWorld(c.getWorld()); @@ -157,13 +156,19 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { } } */ - - if (state != MapleClient.LOGIN_SERVER_TRANSITION || !allowLogin) { - c.setPlayer(null); - c.announce(MaplePacketCreator.getAfterLoginError(7)); - return; + + c.lockClient(); // Sync this to prevent wrong login state for double channel changes + try { + int state = c.getLoginState(); + if (state != MapleClient.LOGIN_SERVER_TRANSITION || !allowLogin) { + c.setPlayer(null); + c.announce(MaplePacketCreator.getAfterLoginError(7)); + return; + } + c.updateLoginState(MapleClient.LOGIN_LOGGEDIN); + } finally { + c.unlockClient(); } - c.updateLoginState(MapleClient.LOGIN_LOGGEDIN); cserv.addPlayer(player); world.addPlayer(player);