diff --git a/src/org/apollo/game/GameService.java b/src/org/apollo/game/GameService.java index 31cc3730..3f647950 100644 --- a/src/org/apollo/game/GameService.java +++ b/src/org/apollo/game/GameService.java @@ -148,14 +148,21 @@ public final class GameService extends Service { } /** - * Registers a player (may block!). + * Registers a {@link Player} (may block!). * - * @param player The player. + * @param player The Player. + * @param session The {@link GameSession} of the Player. + * @param reconnecting The reconnecting flag. * @return A {@link RegistrationStatus}. */ - public RegistrationStatus registerPlayer(Player player) { + public RegistrationStatus registerPlayer(Player player, GameSession session, boolean reconnecting) { synchronized (this) { - return World.getWorld().register(player); + RegistrationStatus status = World.getWorld().register(player); + if (status == RegistrationStatus.OK) { + player.setSession(session, reconnecting); + } + + return status; } } diff --git a/src/org/apollo/game/message/impl/OpenInterfaceSidebarMessage.java b/src/org/apollo/game/message/impl/OpenInterfaceOverlayMessage.java similarity index 54% rename from src/org/apollo/game/message/impl/OpenInterfaceSidebarMessage.java rename to src/org/apollo/game/message/impl/OpenInterfaceOverlayMessage.java index 276047e6..1d34521d 100644 --- a/src/org/apollo/game/message/impl/OpenInterfaceSidebarMessage.java +++ b/src/org/apollo/game/message/impl/OpenInterfaceOverlayMessage.java @@ -3,11 +3,11 @@ package org.apollo.game.message.impl; import org.apollo.game.message.Message; /** - * A {@link Message} sent to the client to open an interface and temporary sidebar overlay. + * A {@link Message} sent to the client to open an interface and temporary overlay. * * @author Graham */ -public final class OpenInterfaceSidebarMessage extends Message { +public final class OpenInterfaceOverlayMessage extends Message { /** * The interface id. @@ -15,19 +15,19 @@ public final class OpenInterfaceSidebarMessage extends Message { private final int interfaceId; /** - * The sidebar id. + * The overlay id. */ - private final int sidebarId; + private final int overlayId; /** - * Creates the open interface sidebar message. + * Creates the open interface overlay message. * * @param interfaceId The interface id. - * @param sidebarId The sidebar id. + * @param overlayId The overlay id. */ - public OpenInterfaceSidebarMessage(int interfaceId, int sidebarId) { + public OpenInterfaceOverlayMessage(int interfaceId, int overlayId) { this.interfaceId = interfaceId; - this.sidebarId = sidebarId; + this.overlayId = overlayId; } /** @@ -40,12 +40,12 @@ public final class OpenInterfaceSidebarMessage extends Message { } /** - * Gets the sidebar id. + * Gets the overlay id. * - * @return The sidebar id. + * @return The overlay id. */ - public int getSidebarId() { - return sidebarId; + public int getOverlayId() { + return overlayId; } } \ No newline at end of file diff --git a/src/org/apollo/game/message/impl/OpenOverlayMessage.java b/src/org/apollo/game/message/impl/OpenOverlayMessage.java new file mode 100644 index 00000000..90ad7dbc --- /dev/null +++ b/src/org/apollo/game/message/impl/OpenOverlayMessage.java @@ -0,0 +1,35 @@ +package org.apollo.game.message.impl; + +import org.apollo.game.message.Message; + +/** + * A {@link Message} sent to the client to open an overlay interface. + * + * @author Major + */ +public final class OpenOverlayMessage extends Message { + + /** + * The overlay id. + */ + private final int overlayId; + + /** + * Creates the open interface overlay message. + * + * @param overlayId The overlay id. + */ + public OpenOverlayMessage(int overlayId) { + this.overlayId = overlayId; + } + + /** + * Gets the overlay id. + * + * @return The overlay id. + */ + public int getOverlayId() { + return overlayId; + } + +} \ No newline at end of file diff --git a/src/org/apollo/game/model/inter/InterfaceSet.java b/src/org/apollo/game/model/inter/InterfaceSet.java index 72835dac..b2178eac 100644 --- a/src/org/apollo/game/model/inter/InterfaceSet.java +++ b/src/org/apollo/game/model/inter/InterfaceSet.java @@ -8,9 +8,11 @@ import org.apollo.game.message.impl.CloseInterfaceMessage; import org.apollo.game.message.impl.EnterAmountMessage; import org.apollo.game.message.impl.OpenDialogueInterfaceMessage; import org.apollo.game.message.impl.OpenInterfaceMessage; -import org.apollo.game.message.impl.OpenInterfaceSidebarMessage; +import org.apollo.game.message.impl.OpenInterfaceOverlayMessage; +import org.apollo.game.message.impl.OpenOverlayMessage; import org.apollo.game.model.entity.Player; import org.apollo.game.model.inter.dialogue.DialogueListener; +import org.apollo.game.model.inv.InventoryListener; /** * Represents the set of interfaces the player has open. @@ -217,7 +219,33 @@ public final class InterfaceSet { interfaces.put(InterfaceType.WINDOW, windowId); interfaces.put(InterfaceType.SIDEBAR, sidebarId); - player.send(new OpenInterfaceSidebarMessage(windowId, sidebarId)); + player.send(new OpenInterfaceOverlayMessage(windowId, sidebarId)); + } + + /** + * Opens an overlay interface. + * + * @param overlay The overlay id. + */ + public void openOverlay(int overlay) { + closeAndNotify(); + interfaces.put(InterfaceType.OVERLAY, overlay); + + player.send(new OpenOverlayMessage(overlay)); + } + + /** + * Opens an overlay interface with the specified {@link InventoryListener}. + * + * @param listener The listener. + * @param overlay The overlay id. + */ + public void openOverlay(InterfaceListener listener, int overlay) { + closeAndNotify(); + this.listener = Optional.ofNullable(listener); + interfaces.put(InterfaceType.OVERLAY, overlay); + + player.send(new OpenOverlayMessage(overlay)); } /** diff --git a/src/org/apollo/net/release/r317/OpenInterfaceSidebarMessageEncoder.java b/src/org/apollo/net/release/r317/OpenInterfaceOverlayMessageEncoder.java similarity index 58% rename from src/org/apollo/net/release/r317/OpenInterfaceSidebarMessageEncoder.java rename to src/org/apollo/net/release/r317/OpenInterfaceOverlayMessageEncoder.java index a13edd65..1a1d18c9 100644 --- a/src/org/apollo/net/release/r317/OpenInterfaceSidebarMessageEncoder.java +++ b/src/org/apollo/net/release/r317/OpenInterfaceOverlayMessageEncoder.java @@ -1,6 +1,6 @@ package org.apollo.net.release.r317; -import org.apollo.game.message.impl.OpenInterfaceSidebarMessage; +import org.apollo.game.message.impl.OpenInterfaceOverlayMessage; import org.apollo.net.codec.game.DataTransformation; import org.apollo.net.codec.game.DataType; import org.apollo.net.codec.game.GamePacket; @@ -8,17 +8,17 @@ import org.apollo.net.codec.game.GamePacketBuilder; import org.apollo.net.release.MessageEncoder; /** - * A {@link MessageEncoder} for the {@link OpenInterfaceSidebarMessage}. + * A {@link MessageEncoder} for the {@link OpenInterfaceOverlayMessage}. * * @author Graham */ -public final class OpenInterfaceSidebarMessageEncoder extends MessageEncoder { +public final class OpenInterfaceOverlayMessageEncoder extends MessageEncoder { @Override - public GamePacket encode(OpenInterfaceSidebarMessage message) { + public GamePacket encode(OpenInterfaceOverlayMessage message) { GamePacketBuilder builder = new GamePacketBuilder(248); builder.put(DataType.SHORT, DataTransformation.ADD, message.getInterfaceId()); - builder.put(DataType.SHORT, message.getSidebarId()); + builder.put(DataType.SHORT, message.getOverlayId()); return builder.toGamePacket(); } diff --git a/src/org/apollo/net/release/r317/OpenOverlayMessageEncoder.java b/src/org/apollo/net/release/r317/OpenOverlayMessageEncoder.java new file mode 100644 index 00000000..f9ff4a8c --- /dev/null +++ b/src/org/apollo/net/release/r317/OpenOverlayMessageEncoder.java @@ -0,0 +1,24 @@ +package org.apollo.net.release.r317; + +import org.apollo.game.message.impl.OpenOverlayMessage; +import org.apollo.net.codec.game.DataOrder; +import org.apollo.net.codec.game.DataType; +import org.apollo.net.codec.game.GamePacket; +import org.apollo.net.codec.game.GamePacketBuilder; +import org.apollo.net.release.MessageEncoder; + +/** + * A {@link MessageEncoder} for the {@link OpenOverlayMessage}. + * + * @author Major + */ +public final class OpenOverlayMessageEncoder extends MessageEncoder { + + @Override + public GamePacket encode(OpenOverlayMessage message) { + GamePacketBuilder builder = new GamePacketBuilder(142); + builder.put(DataType.SHORT, DataOrder.LITTLE, message.getOverlayId()); + return builder.toGamePacket(); + } + +} \ No newline at end of file diff --git a/src/org/apollo/net/release/r317/Release317.java b/src/org/apollo/net/release/r317/Release317.java index e011e1d8..e57d1d9e 100644 --- a/src/org/apollo/net/release/r317/Release317.java +++ b/src/org/apollo/net/release/r317/Release317.java @@ -17,7 +17,8 @@ import org.apollo.game.message.impl.LogoutMessage; import org.apollo.game.message.impl.NpcSynchronizationMessage; import org.apollo.game.message.impl.OpenDialogueInterfaceMessage; import org.apollo.game.message.impl.OpenInterfaceMessage; -import org.apollo.game.message.impl.OpenInterfaceSidebarMessage; +import org.apollo.game.message.impl.OpenInterfaceOverlayMessage; +import org.apollo.game.message.impl.OpenOverlayMessage; import org.apollo.game.message.impl.PlayerSynchronizationMessage; import org.apollo.game.message.impl.PositionMessage; import org.apollo.game.message.impl.PrivacyOptionMessage; @@ -178,7 +179,7 @@ public final class Release317 extends Release { register(UpdateItemsMessage.class, new UpdateItemsMessageEncoder()); register(UpdateSlottedItemsMessage.class, new UpdateSlottedItemsMessageEncoder()); register(UpdateSkillMessage.class, new UpdateSkillMessageEncoder()); - register(OpenInterfaceSidebarMessage.class, new OpenInterfaceSidebarMessageEncoder()); + register(OpenInterfaceOverlayMessage.class, new OpenInterfaceOverlayMessageEncoder()); register(EnterAmountMessage.class, new EnterAmountMessageEncoder()); register(SetWidgetTextMessage.class, new SetWidgetTextMessageEncoder()); register(NpcSynchronizationMessage.class, new NpcSynchronizationMessageEncoder()); @@ -209,5 +210,6 @@ public final class Release317 extends Release { register(SendFriendMessage.class, new SendFriendMessageEncoder()); register(HintIconMessage.class, new HintIconMessageEncoder()); register(FlashTabInterfaceMessage.class, new FlashTabInterfaceMessageEncoder()); + register(OpenOverlayMessage.class, new OpenOverlayMessageEncoder()); } } \ No newline at end of file diff --git a/src/org/apollo/net/release/r377/OpenInterfaceSidebarMessageEncoder.java b/src/org/apollo/net/release/r377/OpenInterfaceOverlayMessageEncoder.java similarity index 64% rename from src/org/apollo/net/release/r377/OpenInterfaceSidebarMessageEncoder.java rename to src/org/apollo/net/release/r377/OpenInterfaceOverlayMessageEncoder.java index 543c509a..2a83cc8c 100644 --- a/src/org/apollo/net/release/r377/OpenInterfaceSidebarMessageEncoder.java +++ b/src/org/apollo/net/release/r377/OpenInterfaceOverlayMessageEncoder.java @@ -1,6 +1,6 @@ package org.apollo.net.release.r377; -import org.apollo.game.message.impl.OpenInterfaceSidebarMessage; +import org.apollo.game.message.impl.OpenInterfaceOverlayMessage; import org.apollo.net.codec.game.DataOrder; import org.apollo.net.codec.game.DataTransformation; import org.apollo.net.codec.game.DataType; @@ -9,17 +9,17 @@ import org.apollo.net.codec.game.GamePacketBuilder; import org.apollo.net.release.MessageEncoder; /** - * A {@link MessageEncoder} for the {@link OpenInterfaceSidebarMessage}. + * A {@link MessageEncoder} for the {@link OpenInterfaceOverlayMessage}. * * @author Graham */ -public final class OpenInterfaceSidebarMessageEncoder extends MessageEncoder { +public final class OpenInterfaceOverlayMessageEncoder extends MessageEncoder { @Override - public GamePacket encode(OpenInterfaceSidebarMessage message) { + public GamePacket encode(OpenInterfaceOverlayMessage message) { GamePacketBuilder builder = new GamePacketBuilder(128); builder.put(DataType.SHORT, DataTransformation.ADD, message.getInterfaceId()); - builder.put(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD, message.getSidebarId()); + builder.put(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD, message.getOverlayId()); return builder.toGamePacket(); } diff --git a/src/org/apollo/net/release/r377/OpenOverlayMessageEncoder.java b/src/org/apollo/net/release/r377/OpenOverlayMessageEncoder.java new file mode 100644 index 00000000..e3364138 --- /dev/null +++ b/src/org/apollo/net/release/r377/OpenOverlayMessageEncoder.java @@ -0,0 +1,25 @@ +package org.apollo.net.release.r377; + +import org.apollo.game.message.impl.OpenOverlayMessage; +import org.apollo.net.codec.game.DataOrder; +import org.apollo.net.codec.game.DataTransformation; +import org.apollo.net.codec.game.DataType; +import org.apollo.net.codec.game.GamePacket; +import org.apollo.net.codec.game.GamePacketBuilder; +import org.apollo.net.release.MessageEncoder; + +/** + * A {@link MessageEncoder} for the {@link OpenOverlayMessage}. + * + * @author Major + */ +public final class OpenOverlayMessageEncoder extends MessageEncoder { + + @Override + public GamePacket encode(OpenOverlayMessage message) { + GamePacketBuilder builder = new GamePacketBuilder(246); + builder.put(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD, message.getOverlayId()); + return builder.toGamePacket(); + } + +} \ No newline at end of file diff --git a/src/org/apollo/net/release/r377/Release377.java b/src/org/apollo/net/release/r377/Release377.java index d943f6bd..9cee1c14 100644 --- a/src/org/apollo/net/release/r377/Release377.java +++ b/src/org/apollo/net/release/r377/Release377.java @@ -17,7 +17,8 @@ import org.apollo.game.message.impl.LogoutMessage; import org.apollo.game.message.impl.NpcSynchronizationMessage; import org.apollo.game.message.impl.OpenDialogueInterfaceMessage; import org.apollo.game.message.impl.OpenInterfaceMessage; -import org.apollo.game.message.impl.OpenInterfaceSidebarMessage; +import org.apollo.game.message.impl.OpenInterfaceOverlayMessage; +import org.apollo.game.message.impl.OpenOverlayMessage; import org.apollo.game.message.impl.PlayerSynchronizationMessage; import org.apollo.game.message.impl.PositionMessage; import org.apollo.game.message.impl.PrivacyOptionMessage; @@ -42,7 +43,6 @@ import org.apollo.game.message.impl.UpdateTileItemMessage; import org.apollo.game.message.impl.UpdateWeightMessage; import org.apollo.net.meta.PacketMetaDataGroup; import org.apollo.net.release.Release; -import org.apollo.net.release.r317.FlashTabInterfaceMessageEncoder; /** * A {@link Release} implementation for the 377 protocol. @@ -175,7 +175,7 @@ public final class Release377 extends Release { register(UpdateItemsMessage.class, new UpdateItemsMessageEncoder()); register(UpdateSlottedItemsMessage.class, new UpdateSlottedItemsMessageEncoder()); register(UpdateSkillMessage.class, new UpdateSkillMessageEncoder()); - register(OpenInterfaceSidebarMessage.class, new OpenInterfaceSidebarMessageEncoder()); + register(OpenInterfaceOverlayMessage.class, new OpenInterfaceOverlayMessageEncoder()); register(EnterAmountMessage.class, new EnterAmountMessageEncoder()); register(SetWidgetTextMessage.class, new SetWidgetTexMessageEncoder()); register(NpcSynchronizationMessage.class, new NpcSynchronizationMessageEncoder()); @@ -206,6 +206,7 @@ public final class Release377 extends Release { register(SendFriendMessage.class, new SendFriendMessageEncoder()); register(HintIconMessage.class, new HintIconMessageEncoder()); register(FlashTabInterfaceMessage.class, new FlashTabInterfaceMessageEncoder()); + register(OpenOverlayMessage.class, new OpenOverlayMessageEncoder()); } } \ No newline at end of file diff --git a/src/org/apollo/net/session/LoginSession.java b/src/org/apollo/net/session/LoginSession.java index 1d0712aa..827249d0 100644 --- a/src/org/apollo/net/session/LoginSession.java +++ b/src/org/apollo/net/session/LoginSession.java @@ -85,37 +85,33 @@ public final class LoginSession extends Session { * @param response The response. */ public void handlePlayerLoaderResponse(LoginRequest request, PlayerLoaderResponse response) { - GameService gameService = serverContext.getService(GameService.class); + GameService service = serverContext.getService(GameService.class); Channel channel = getChannel(); - Optional responsePlayer = response.getPlayer(); + Optional optional = response.getPlayer(); int status = response.getStatus(), rights = 0; boolean flagged = false; - if (responsePlayer.isPresent()) { - Player player = responsePlayer.get(); + if (optional.isPresent()) { + Player player = optional.get(); rights = player.getPrivilegeLevel().toInteger(); GameSession session = new GameSession(channel, serverContext, player); - player.setSession(session, false /* TODO */); + RegistrationStatus registration = service.registerPlayer(player, session, request.isReconnecting()); - RegistrationStatus registrationStatus = gameService.registerPlayer(player); - - if (registrationStatus != RegistrationStatus.OK) { - responsePlayer = Optional.empty(); + if (registration != RegistrationStatus.OK) { + optional = Optional.empty(); rights = 0; - if (registrationStatus == RegistrationStatus.ALREADY_ONLINE) { - status = LoginConstants.STATUS_ACCOUNT_ONLINE; - } else { - status = LoginConstants.STATUS_SERVER_FULL; - } + + status = (registration == RegistrationStatus.ALREADY_ONLINE) ? LoginConstants.STATUS_ACCOUNT_ONLINE + : LoginConstants.STATUS_SERVER_FULL; } } ChannelFuture future = channel.writeAndFlush(new LoginResponse(status, rights, flagged)); destroy(); - if (responsePlayer.isPresent()) { + if (optional.isPresent()) { IsaacRandomPair randomPair = request.getRandomPair(); Release release = serverContext.getRelease(); @@ -129,7 +125,7 @@ public final class LoginSession extends Session { channel.pipeline().remove("loginDecoder"); channel.pipeline().remove("loginEncoder"); - channelContext.attr(NetworkConstants.SESSION_KEY).set(responsePlayer.get().getSession()); + channelContext.attr(NetworkConstants.SESSION_KEY).set(optional.get().getSession()); } else { future.addListener(ChannelFutureListener.CLOSE); }