diff --git a/src/org/apollo/game/message/impl/MouseClickMessage.java b/src/org/apollo/game/message/impl/FlaggedMouseEventMessage.java similarity index 92% rename from src/org/apollo/game/message/impl/MouseClickMessage.java rename to src/org/apollo/game/message/impl/FlaggedMouseEventMessage.java index 4af02429..9f427d19 100644 --- a/src/org/apollo/game/message/impl/MouseClickMessage.java +++ b/src/org/apollo/game/message/impl/FlaggedMouseEventMessage.java @@ -7,7 +7,7 @@ import org.apollo.game.message.Message; * * @author Major */ -public final class MouseClickMessage extends Message { +public final class FlaggedMouseEventMessage extends Message { /** * The number of clicks on this point (i.e. the point ({@link #x}, {@link #y})). @@ -38,7 +38,7 @@ public final class MouseClickMessage extends Message { * @param y The y coordinate of the mouse click. * @param delta If the coordinates represent a change in x/y, rather than the values themselves. */ - public MouseClickMessage(int clickCount, int x, int y, boolean delta) { + public FlaggedMouseEventMessage(int clickCount, int x, int y, boolean delta) { this.clickCount = clickCount; this.x = x; this.y = y; diff --git a/src/org/apollo/game/message/impl/MouseClickedMessage.java b/src/org/apollo/game/message/impl/MouseClickedMessage.java new file mode 100644 index 00000000..d7eab5d7 --- /dev/null +++ b/src/org/apollo/game/message/impl/MouseClickedMessage.java @@ -0,0 +1,82 @@ +package org.apollo.game.message.impl; + +import org.apollo.game.message.Message; + +/** + * A {@link Message} sent by the client to indicate when the mouse button/s have been clicked. This can be used in + * combination with {@link org.apollo.game.message.impl.FocusUpdateMessage} to work out if the player is clicking + * whilst the client is closed + * + * @author Stuart + */ +public final class MouseClickedMessage extends Message { + + /** + * Time in milliseconds since the last click + */ + private final long lastClickedDelay; + /** + * Right mouse button flag + */ + private final boolean rightMouseButton; + /** + * The y position of the cursor + */ + private final int x; + /** + * The x position of the cursor + */ + private final int y; + + /** + * Creates a new mouse clicked message + * + * @param lastClickedDelay The delay since the last click + * @param rightMouseButton Whether or not the right mouse button was used + * @param x The x cursor position when clicked + * @param y The y cursor position when clicked + */ + public MouseClickedMessage(long lastClickedDelay, boolean rightMouseButton, int x, int y) { + this.lastClickedDelay = lastClickedDelay; + this.rightMouseButton = rightMouseButton; + this.x = x; + this.y = y; + } + + /** + * Gets the time in milliseconds since the last click + * + * @return The time in milliseconds since the last click + */ + public long getLastClickedDelay() { + return lastClickedDelay; + } + + /** + * Gets whether the right mouse button was used or not + * + * @return If the mouse right button was used to click + */ + public boolean usingRightMouseButton() { + return rightMouseButton; + } + + /** + * Gets the x position of the cursor + * + * @return The x position of the cursor when clicked + */ + public int getX() { + return x; + } + + /** + * Gets the y position of the cursor + * + * @return The y position of the cursor when clicked + */ + public int getY() { + return y; + } + +} diff --git a/src/org/apollo/net/release/r317/MouseClickMessageDecoder.java b/src/org/apollo/net/release/r317/FlaggedMouseEventMessageDecoder.java similarity index 63% rename from src/org/apollo/net/release/r317/MouseClickMessageDecoder.java rename to src/org/apollo/net/release/r317/FlaggedMouseEventMessageDecoder.java index 717d3b70..4279ca05 100644 --- a/src/org/apollo/net/release/r317/MouseClickMessageDecoder.java +++ b/src/org/apollo/net/release/r317/FlaggedMouseEventMessageDecoder.java @@ -1,20 +1,20 @@ package org.apollo.net.release.r317; -import org.apollo.game.message.impl.MouseClickMessage; +import org.apollo.game.message.impl.FlaggedMouseEventMessage; import org.apollo.net.codec.game.DataType; import org.apollo.net.codec.game.GamePacket; import org.apollo.net.codec.game.GamePacketReader; import org.apollo.net.release.MessageDecoder; /** - * A {@link MessageDecoder} for the {@link MouseClickMessage}. + * A {@link MessageDecoder} for the {@link org.apollo.game.message.impl.FlaggedMouseEventMessage}. * * @author Major */ -public final class MouseClickMessageDecoder extends MessageDecoder { +public final class FlaggedMouseEventMessageDecoder extends MessageDecoder { @Override - public MouseClickMessage decode(GamePacket packet) { + public FlaggedMouseEventMessage decode(GamePacket packet) { GamePacketReader reader = new GamePacketReader(packet); int read; if (reader.getLength() == 2) { @@ -22,7 +22,7 @@ public final class MouseClickMessageDecoder extends MessageDecoder> 12); int dX = (read >> 6) & 0x3f; int dY = read & 0x3f; - return new MouseClickMessage(clicks, dX, dY, true); + return new FlaggedMouseEventMessage(clicks, dX, dY, true); } else if (reader.getLength() == 3) { read = (int) reader.getUnsigned(DataType.TRI_BYTE) & ~0x800000; } else { @@ -33,7 +33,7 @@ public final class MouseClickMessageDecoder extends MessageDecoder { + + @Override + public MouseClickedMessage decode(GamePacket packet) { + GamePacketReader reader = new GamePacketReader(packet); + int value = (int)reader.getUnsigned(DataType.INT); + + long delay = (value >> 20) * 50; + + boolean rightMouseButton = ((value >> 19) & 0x1) == 1; + + int cords = (value & 0x3FFFF); + int x = cords % 765; + int y = cords / 765; + + return new MouseClickedMessage(delay, rightMouseButton, x, y); + } + +} \ 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 ccfa5d8a..b8a37cab 100644 --- a/src/org/apollo/net/release/r317/Release317.java +++ b/src/org/apollo/net/release/r317/Release317.java @@ -128,7 +128,8 @@ public final class Release317 extends Release { register(237, new MagicOnItemMessageDecoder()); register(3, new FocusUpdateMessageDecoder()); - register(45, new MouseClickMessageDecoder()); + register(45, new FlaggedMouseEventMessageDecoder()); + register(241, new MouseClickedMessageDecoder()); register(86, new ArrowKeyMessageDecoder()); register(95, new PrivacyOptionMessageDecoder()); diff --git a/src/org/apollo/net/release/r377/MouseClickMessageDecoder.java b/src/org/apollo/net/release/r377/FlaggedMouseEventMessageDecoder.java similarity index 63% rename from src/org/apollo/net/release/r377/MouseClickMessageDecoder.java rename to src/org/apollo/net/release/r377/FlaggedMouseEventMessageDecoder.java index bd189275..a499c6af 100644 --- a/src/org/apollo/net/release/r377/MouseClickMessageDecoder.java +++ b/src/org/apollo/net/release/r377/FlaggedMouseEventMessageDecoder.java @@ -1,20 +1,20 @@ package org.apollo.net.release.r377; -import org.apollo.game.message.impl.MouseClickMessage; +import org.apollo.game.message.impl.FlaggedMouseEventMessage; import org.apollo.net.codec.game.DataType; import org.apollo.net.codec.game.GamePacket; import org.apollo.net.codec.game.GamePacketReader; import org.apollo.net.release.MessageDecoder; /** - * A {@link MessageDecoder} for the {@link MouseClickMessage}. + * A {@link MessageDecoder} for the {@link org.apollo.game.message.impl.FlaggedMouseEventMessage}. * * @author Major */ -public final class MouseClickMessageDecoder extends MessageDecoder { +public final class FlaggedMouseEventMessageDecoder extends MessageDecoder { @Override - public MouseClickMessage decode(GamePacket packet) { + public FlaggedMouseEventMessage decode(GamePacket packet) { GamePacketReader reader = new GamePacketReader(packet); int read, clicks, x, y; @@ -23,7 +23,7 @@ public final class MouseClickMessageDecoder extends MessageDecoder> 12); x = (read >> 6) & 0x3f; y = read & 0x3f; - return new MouseClickMessage(clicks, x, y, true); + return new FlaggedMouseEventMessage(clicks, x, y, true); } else if (reader.getLength() == 3) { read = (int) reader.getUnsigned(DataType.TRI_BYTE) & ~0x800000; } else { @@ -33,7 +33,7 @@ public final class MouseClickMessageDecoder extends MessageDecoder> 19); x = (read & 0x7f) % 765; y = (read & 0x7f) / 765; - return new MouseClickMessage(clicks, x, y, false); + return new FlaggedMouseEventMessage(clicks, x, y, false); } } \ No newline at end of file diff --git a/src/org/apollo/net/release/r377/MouseClickedMessageDecoder.java b/src/org/apollo/net/release/r377/MouseClickedMessageDecoder.java new file mode 100644 index 00000000..5ee162ec --- /dev/null +++ b/src/org/apollo/net/release/r377/MouseClickedMessageDecoder.java @@ -0,0 +1,32 @@ +package org.apollo.net.release.r377; + +import org.apollo.game.message.impl.MouseClickedMessage; +import org.apollo.net.codec.game.DataType; +import org.apollo.net.codec.game.GamePacket; +import org.apollo.net.codec.game.GamePacketReader; +import org.apollo.net.release.MessageDecoder; + +/** + * A {@link org.apollo.net.release.MessageDecoder} for the {@link org.apollo.game.message.impl.MouseClickedMessage} + * + * @author Stuart + */ +public final class MouseClickedMessageDecoder extends MessageDecoder { + + @Override + public MouseClickedMessage decode(GamePacket packet) { + GamePacketReader reader = new GamePacketReader(packet); + int value = (int)reader.getUnsigned(DataType.INT); + + long delay = (value >> 20) * 50; + + boolean rightMouseButton = ((value >> 19) & 0x1) == 1; + + int cords = (value & 0x3FFFF); + int x = cords % 765; + int y = cords / 765; + + return new MouseClickedMessage(delay, rightMouseButton, x, y); + } + +} \ No newline at end of file diff --git a/src/org/apollo/net/release/r377/PrivateMessageMessageDecoder.java b/src/org/apollo/net/release/r377/PrivateChatMessageDecoder.java similarity index 92% rename from src/org/apollo/net/release/r377/PrivateMessageMessageDecoder.java rename to src/org/apollo/net/release/r377/PrivateChatMessageDecoder.java index a39bde32..66725af1 100644 --- a/src/org/apollo/net/release/r377/PrivateMessageMessageDecoder.java +++ b/src/org/apollo/net/release/r377/PrivateChatMessageDecoder.java @@ -13,7 +13,7 @@ import org.apollo.util.TextUtil; * * @author Major */ -public final class PrivateMessageMessageDecoder extends MessageDecoder { +public final class PrivateChatMessageDecoder extends MessageDecoder { @Override public PrivateMessageMessage decode(GamePacket packet) { diff --git a/src/org/apollo/net/release/r377/Release377.java b/src/org/apollo/net/release/r377/Release377.java index 303854f9..9b368738 100644 --- a/src/org/apollo/net/release/r377/Release377.java +++ b/src/org/apollo/net/release/r377/Release377.java @@ -128,7 +128,8 @@ public final class Release377 extends Release { register(36, new MagicOnItemMessageDecoder()); register(187, new FocusUpdateMessageDecoder()); - register(19, new MouseClickMessageDecoder()); + register(19, new MouseClickedMessageDecoder()); + register(171, new FlaggedMouseEventMessageDecoder()); register(140, new ArrowKeyMessageDecoder()); register(176, new PrivacyOptionMessageDecoder()); @@ -152,7 +153,7 @@ public final class Release377 extends Release { register(217, new AddIgnoreMessageDecoder()); register(141, new RemoveFriendMessageDecoder()); register(160, new RemoveIgnoreMessageDecoder()); - register(227, new PrivateMessageMessageDecoder()); + register(227, new PrivateChatMessageDecoder()); // register encoders register(IdAssignmentMessage.class, new IdAssignmentMessageEncoder());