Sync login state on channel change (#323)

This commit is contained in:
MedicOP
2019-01-14 01:20:05 +01:00
committed by Ronan Lana
parent 21f2713300
commit f5e58f2d4f

View File

@@ -122,7 +122,6 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
c.setPlayer(player); c.setPlayer(player);
c.setAccID(player.getAccountID()); c.setAccID(player.getAccountID());
int state = c.getLoginState();
boolean allowLogin = true; boolean allowLogin = true;
World world = server.getWorld(c.getWorld()); World world = server.getWorld(c.getWorld());
@@ -158,12 +157,18 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
} }
*/ */
if (state != MapleClient.LOGIN_SERVER_TRANSITION || !allowLogin) { c.lockClient(); // Sync this to prevent wrong login state for double channel changes
c.setPlayer(null); try {
c.announce(MaplePacketCreator.getAfterLoginError(7)); int state = c.getLoginState();
return; 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); cserv.addPlayer(player);
world.addPlayer(player); world.addPlayer(player);