From 77032db1fe4b5df3d8a74388f30890c4054da7c8 Mon Sep 17 00:00:00 2001 From: Obique Date: Sat, 16 May 2015 21:31:25 -0500 Subject: [PATCH] Fixed null pointer exception in ConnectionService if player logged out before zoning in --- src/services/galaxy/ConnectionService.java | 24 ++++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/services/galaxy/ConnectionService.java b/src/services/galaxy/ConnectionService.java index 3cd822d40..d3c3a1b05 100644 --- a/src/services/galaxy/ConnectionService.java +++ b/src/services/galaxy/ConnectionService.java @@ -162,17 +162,11 @@ public class ConnectionService extends Service { } private void logOut(Player p) { - PlayerObject playerObject = p.getPlayerObject(); - int currentTime = playerObject.getPlayTime(); - int startTime = playerObject.getStartPlayTime(); - int deltaTime = (int) ((System.currentTimeMillis()) - startTime); - int newTotalTime = currentTime + (int) TimeUnit.MILLISECONDS.toSeconds(deltaTime); - - playerObject.setPlayTime(newTotalTime); - + updatePlayTime(p); if (p.getPlayerState() != PlayerState.LOGGED_OUT) System.out.println("[" + p.getUsername() +"] Logged out " + p.getCharacterName()); - p.getPlayerObject().setFlagBitmask(PlayerFlags.LD); + if (p.getPlayerObject() != null) + p.getPlayerObject().setFlagBitmask(PlayerFlags.LD); p.setPlayerState(PlayerState.LOGGED_OUT); disappearPlayers.add(p); updateService.schedule(disappearRunnable, (long) DISAPPEAR_THRESHOLD, TimeUnit.MILLISECONDS); @@ -188,4 +182,16 @@ public class ConnectionService extends Service { new CloseConnectionIntent(player.getConnectionId(), player.getNetworkId(), reason).broadcast(); } + private void updatePlayTime(Player p) { + PlayerObject playerObject = p.getPlayerObject(); + if (playerObject == null) + return; + + int currentTime = playerObject.getPlayTime(); + int startTime = playerObject.getStartPlayTime(); + int deltaTime = (int) ((System.currentTimeMillis()) - startTime); + int newTotalTime = currentTime + (int) TimeUnit.MILLISECONDS.toSeconds(deltaTime); + playerObject.setPlayTime(newTotalTime); + } + }