mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-06 16:51:37 +00:00
Add privacy options support.
This commit is contained in:
@@ -1,4 +1,10 @@
|
|||||||
<events>
|
<events>
|
||||||
|
<event>
|
||||||
|
<type>org.apollo.game.event.impl.PrivacyOptionEvent</type>
|
||||||
|
<chain>
|
||||||
|
<handler>org.apollo.game.event.handler.impl.PrivacyOptionEventHandler</handler>
|
||||||
|
</chain>
|
||||||
|
</event>
|
||||||
<event>
|
<event>
|
||||||
<type>org.apollo.game.event.impl.KeepAliveEvent</type>
|
<type>org.apollo.game.event.impl.KeepAliveEvent</type>
|
||||||
<chain />
|
<chain />
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package org.apollo.game.event.handler.impl;
|
||||||
|
|
||||||
|
import org.apollo.game.event.handler.EventHandler;
|
||||||
|
import org.apollo.game.event.handler.EventHandlerContext;
|
||||||
|
import org.apollo.game.event.impl.PrivacyOptionEvent;
|
||||||
|
import org.apollo.game.model.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles {@link PrivacyOptionEvent} from the client to the server.
|
||||||
|
*
|
||||||
|
* @author Kyle Stevenson
|
||||||
|
* Date: 12/24/13
|
||||||
|
* Time: 2:03 AM
|
||||||
|
*/
|
||||||
|
public class PrivacyOptionEventHandler extends EventHandler<PrivacyOptionEvent> {
|
||||||
|
@Override
|
||||||
|
public void handle(final EventHandlerContext ctx, final Player player, final PrivacyOptionEvent event) {
|
||||||
|
player.setPrivacyPublicChat(event.getPrivacyPublicChat());
|
||||||
|
player.setPrivacyPrivateChat(event.getPrivacyPrivateChat());
|
||||||
|
player.setPrivacyTradeCompete(event.getPrivacyTradeCompete());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
package org.apollo.game.event.impl;
|
||||||
|
|
||||||
|
import org.apollo.game.event.Event;
|
||||||
|
import org.apollo.game.model.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An {@link Event} sent by the client or server to specify the options at the bottom of the game screen relating
|
||||||
|
* to the chat and trade privacy options.
|
||||||
|
* <br />
|
||||||
|
* See http://rswiki.moparisthebest.com/index.php?title=317:Privacy_options
|
||||||
|
*
|
||||||
|
* @author Kyle Stevenson
|
||||||
|
* Date: 12/24/13
|
||||||
|
* Time: 1:38 AM
|
||||||
|
*/
|
||||||
|
public class PrivacyOptionEvent extends Event {
|
||||||
|
/**
|
||||||
|
* Public chat setting
|
||||||
|
*/
|
||||||
|
private final int publicChat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private chat setting
|
||||||
|
*/
|
||||||
|
private final int privateChat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trade/compete setting
|
||||||
|
*/
|
||||||
|
private final int tradeCompete;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a privacy option event.
|
||||||
|
*
|
||||||
|
* @param publicChat The byte value of the public chat privacy option.
|
||||||
|
* @param privateChat The byte value of the private chat privacy option.
|
||||||
|
* @param tradeCompete The byte value of the trade/compete privacy option.
|
||||||
|
*/
|
||||||
|
public PrivacyOptionEvent(final int publicChat, final int privateChat, final int tradeCompete) {
|
||||||
|
this.publicChat = publicChat & 0xFF;
|
||||||
|
this.privateChat = privateChat & 0xFF;
|
||||||
|
this.tradeCompete = tradeCompete & 0xFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Public chat unsigned byte value.
|
||||||
|
*
|
||||||
|
* @return The public chat unsigned byte.
|
||||||
|
*/
|
||||||
|
public int getPublicChat() {
|
||||||
|
return publicChat;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Public chat privacy option.
|
||||||
|
*
|
||||||
|
* @return The public chat privacy option.
|
||||||
|
*/
|
||||||
|
public Player.PrivacyOption getPrivacyPublicChat() {
|
||||||
|
return Player.PrivacyOption.valueOf(publicChat);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private chat unsigned byte value.
|
||||||
|
*
|
||||||
|
* @return The private chat unsigned byte.
|
||||||
|
*/
|
||||||
|
public int getPrivateChat() {
|
||||||
|
return privateChat;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private chat privacy option.
|
||||||
|
*
|
||||||
|
* @return The private chat privacy option.
|
||||||
|
*/
|
||||||
|
public Player.PrivacyOption getPrivacyPrivateChat() {
|
||||||
|
return Player.PrivacyOption.valueOf(privateChat);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trade/compete unsigned byte value.
|
||||||
|
*
|
||||||
|
* @return The trade/compete unsigned byte.
|
||||||
|
*/
|
||||||
|
public int getTradeCompete() {
|
||||||
|
return tradeCompete;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trade/compete privacy option.
|
||||||
|
*
|
||||||
|
* @return The trade/compete privacy option.
|
||||||
|
*/
|
||||||
|
public Player.PrivacyOption getPrivacyTradeCompete() {
|
||||||
|
return Player.PrivacyOption.valueOf(tradeCompete);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -98,6 +98,80 @@ public final class Player extends Mob {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An enumeration representing the different states for chat and trade options in the protocol.
|
||||||
|
*
|
||||||
|
* @author Kyle Stevenson
|
||||||
|
*/
|
||||||
|
public enum PrivacyOption {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the on-state which displays all messages.
|
||||||
|
*/
|
||||||
|
ON(0),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the friends-state which only displays messages from friends and staff members.
|
||||||
|
*/
|
||||||
|
FRIENDS(1),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the off-state which displays no messages except those of moderators and staff members.
|
||||||
|
*/
|
||||||
|
OFF(2),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the hidden-state which displays text over player's heads but not in the chat box.
|
||||||
|
* This only applies to the "public" option.
|
||||||
|
*/
|
||||||
|
HIDE(3);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the privacy option for the specified numerical value.
|
||||||
|
*
|
||||||
|
* @param numericalValue The numerical level.
|
||||||
|
* @return The privilege level.
|
||||||
|
* @throws IllegalArgumentException If the numerical level is invalid.
|
||||||
|
*/
|
||||||
|
public static PrivacyOption valueOf(final int numericalValue) {
|
||||||
|
for (final PrivacyOption option : values()) {
|
||||||
|
if (option.numericalOption == numericalValue) {
|
||||||
|
return option;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new IllegalArgumentException("invalid numerical level");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The numerical level used in the protocol.
|
||||||
|
*/
|
||||||
|
private final int numericalOption;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a privacy option.
|
||||||
|
*
|
||||||
|
* @param numericalValue The numerical value.
|
||||||
|
*/
|
||||||
|
private PrivacyOption(final int numericalValue) {
|
||||||
|
this.numericalOption = numericalValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the numerical option.
|
||||||
|
*
|
||||||
|
* @return The numerical option used in the protocol.
|
||||||
|
*/
|
||||||
|
public int toInteger() {
|
||||||
|
return numericalOption;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private PrivacyOption privacyPublicChat = PrivacyOption.ON;
|
||||||
|
|
||||||
|
private PrivacyOption privacyPrivateChat = PrivacyOption.ON;
|
||||||
|
|
||||||
|
private PrivacyOption privacyTradeCompete = PrivacyOption.ON;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The player's appearance.
|
* The player's appearance.
|
||||||
*/
|
*/
|
||||||
@@ -347,6 +421,33 @@ public final class Player extends Mob {
|
|||||||
return prayerIcon;
|
return prayerIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the privacy option of private chat.
|
||||||
|
*
|
||||||
|
* @return The privacy option.
|
||||||
|
*/
|
||||||
|
public PrivacyOption getPrivacyPrivateChat() {
|
||||||
|
return privacyPrivateChat;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the privacy option of public chat.
|
||||||
|
*
|
||||||
|
* @return The privacy option.
|
||||||
|
*/
|
||||||
|
public PrivacyOption getPrivacyPublicChat() {
|
||||||
|
return privacyPublicChat;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the privacy option of trade/compete.
|
||||||
|
*
|
||||||
|
* @return The privacy option.
|
||||||
|
*/
|
||||||
|
public PrivacyOption getPrivacyTradeCompete() {
|
||||||
|
return privacyTradeCompete;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the privilege level.
|
* Gets the privilege level.
|
||||||
*
|
*
|
||||||
@@ -665,6 +766,33 @@ public final class Player extends Mob {
|
|||||||
this.prayerIcon = prayerIcon;
|
this.prayerIcon = prayerIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the privacy option for private chat.
|
||||||
|
*
|
||||||
|
* @param privacyPrivateChat The privacy option.
|
||||||
|
*/
|
||||||
|
public void setPrivacyPrivateChat(final PrivacyOption privacyPrivateChat) {
|
||||||
|
this.privacyPrivateChat = privacyPrivateChat;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the privacy option for public chat.
|
||||||
|
*
|
||||||
|
* @param privacyPublicChat The privacy option.
|
||||||
|
*/
|
||||||
|
public void setPrivacyPublicChat(final PrivacyOption privacyPublicChat) {
|
||||||
|
this.privacyPublicChat = privacyPublicChat;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the privacy option for trade/compete.
|
||||||
|
*
|
||||||
|
* @param privacyTradeCompete The privacy option.
|
||||||
|
*/
|
||||||
|
public void setPrivacyTradeCompete(final PrivacyOption privacyTradeCompete) {
|
||||||
|
this.privacyTradeCompete = privacyTradeCompete;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the privilege level.
|
* Sets the privilege level.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -53,6 +53,11 @@ public final class BinaryPlayerLoader implements PlayerLoader {
|
|||||||
PrivilegeLevel privilegeLevel = PrivilegeLevel.valueOf(in.readByte());
|
PrivilegeLevel privilegeLevel = PrivilegeLevel.valueOf(in.readByte());
|
||||||
boolean members = in.readBoolean();
|
boolean members = in.readBoolean();
|
||||||
|
|
||||||
|
// read settings
|
||||||
|
Player.PrivacyOption privacyPublicChat = Player.PrivacyOption.valueOf(in.readByte());
|
||||||
|
Player.PrivacyOption privacyPrivateChat = Player.PrivacyOption.valueOf(in.readByte());
|
||||||
|
Player.PrivacyOption privacyTradeCompete = Player.PrivacyOption.valueOf(in.readByte());
|
||||||
|
|
||||||
// read position
|
// read position
|
||||||
int x = in.readUnsignedShort();
|
int x = in.readUnsignedShort();
|
||||||
int y = in.readUnsignedShort();
|
int y = in.readUnsignedShort();
|
||||||
@@ -75,6 +80,9 @@ public final class BinaryPlayerLoader implements PlayerLoader {
|
|||||||
Player player = new Player(credentials, new Position(x, y, height));
|
Player player = new Player(credentials, new Position(x, y, height));
|
||||||
player.setPrivilegeLevel(privilegeLevel);
|
player.setPrivilegeLevel(privilegeLevel);
|
||||||
player.setMembers(members);
|
player.setMembers(members);
|
||||||
|
player.setPrivacyPublicChat(privacyPublicChat);
|
||||||
|
player.setPrivacyPrivateChat(privacyPrivateChat);
|
||||||
|
player.setPrivacyTradeCompete(privacyTradeCompete);
|
||||||
player.setDesigned(designed);
|
player.setDesigned(designed);
|
||||||
player.setAppearance(new Appearance(gender, style, colors));
|
player.setAppearance(new Appearance(gender, style, colors));
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,11 @@ public final class BinaryPlayerSaver implements PlayerSaver {
|
|||||||
out.writeByte(player.getPrivilegeLevel().toInteger());
|
out.writeByte(player.getPrivilegeLevel().toInteger());
|
||||||
out.writeBoolean(player.isMembers());
|
out.writeBoolean(player.isMembers());
|
||||||
|
|
||||||
|
// write settings
|
||||||
|
out.writeByte(player.getPrivacyPublicChat().toInteger());
|
||||||
|
out.writeByte(player.getPrivacyPrivateChat().toInteger());
|
||||||
|
out.writeByte(player.getPrivacyTradeCompete().toInteger());
|
||||||
|
|
||||||
// write position
|
// write position
|
||||||
Position position = player.getPosition();
|
Position position = player.getPosition();
|
||||||
out.writeShort(position.getX());
|
out.writeShort(position.getX());
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package org.apollo.net.release.r317;
|
||||||
|
|
||||||
|
import org.apollo.game.event.impl.PrivacyOptionEvent;
|
||||||
|
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.EventDecoder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An {@link EventDecoder} for the {@link PrivacyOptionEvent}.
|
||||||
|
*
|
||||||
|
* @author Kyle Stevenson
|
||||||
|
* Date: 12/24/13
|
||||||
|
* Time: 1:44 AM
|
||||||
|
*/
|
||||||
|
public class PrivacyOptionEventDecoder extends EventDecoder<PrivacyOptionEvent> {
|
||||||
|
@Override
|
||||||
|
public PrivacyOptionEvent decode(final GamePacket packet) {
|
||||||
|
final GamePacketReader reader = new GamePacketReader(packet);
|
||||||
|
|
||||||
|
final int publicChat = (int) reader.getUnsigned(DataType.BYTE);
|
||||||
|
final int privateChat = (int) reader.getUnsigned(DataType.BYTE);
|
||||||
|
final int tradeCompete = (int) reader.getUnsigned(DataType.BYTE);
|
||||||
|
|
||||||
|
return new PrivacyOptionEvent(publicChat, privateChat, tradeCompete);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package org.apollo.net.release.r317;
|
||||||
|
|
||||||
|
import org.apollo.game.event.impl.PrivacyOptionEvent;
|
||||||
|
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.meta.PacketType;
|
||||||
|
import org.apollo.net.release.EventEncoder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An {@link org.apollo.net.release.EventEncoder} for the {@link PrivacyOptionEvent}.
|
||||||
|
*
|
||||||
|
* @author Kyle Stevenson
|
||||||
|
* Date: 12/24/13
|
||||||
|
* Time: 1:44 AM
|
||||||
|
*/
|
||||||
|
public class PrivacyOptionEventEncoder extends EventEncoder<PrivacyOptionEvent> {
|
||||||
|
@Override
|
||||||
|
public GamePacket encode(final PrivacyOptionEvent event) {
|
||||||
|
final GamePacketBuilder builder = new GamePacketBuilder(206, PacketType.FIXED);
|
||||||
|
|
||||||
|
builder.put(DataType.BYTE, event.getPublicChat());
|
||||||
|
builder.put(DataType.BYTE, event.getPrivateChat());
|
||||||
|
builder.put(DataType.BYTE, event.getTradeCompete());
|
||||||
|
|
||||||
|
return builder.toGamePacket();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,6 +11,7 @@ import org.apollo.game.event.impl.OpenInterfaceEvent;
|
|||||||
import org.apollo.game.event.impl.OpenInterfaceSidebarEvent;
|
import org.apollo.game.event.impl.OpenInterfaceSidebarEvent;
|
||||||
import org.apollo.game.event.impl.PlayerSynchronizationEvent;
|
import org.apollo.game.event.impl.PlayerSynchronizationEvent;
|
||||||
import org.apollo.game.event.impl.PositionEvent;
|
import org.apollo.game.event.impl.PositionEvent;
|
||||||
|
import org.apollo.game.event.impl.PrivacyOptionEvent;
|
||||||
import org.apollo.game.event.impl.RegionChangeEvent;
|
import org.apollo.game.event.impl.RegionChangeEvent;
|
||||||
import org.apollo.game.event.impl.ServerMessageEvent;
|
import org.apollo.game.event.impl.ServerMessageEvent;
|
||||||
import org.apollo.game.event.impl.SetTileItemEvent;
|
import org.apollo.game.event.impl.SetTileItemEvent;
|
||||||
@@ -116,6 +117,8 @@ public final class Release317 extends Release {
|
|||||||
register(241, new MouseClickEventDecoder());
|
register(241, new MouseClickEventDecoder());
|
||||||
register(86, new ArrowKeyEventDecoder());
|
register(86, new ArrowKeyEventDecoder());
|
||||||
|
|
||||||
|
register(95, new PrivacyOptionEventDecoder());
|
||||||
|
|
||||||
SpamPacketEventDecoder spamEventDecoder = new SpamPacketEventDecoder();
|
SpamPacketEventDecoder spamEventDecoder = new SpamPacketEventDecoder();
|
||||||
register(77, spamEventDecoder);
|
register(77, spamEventDecoder);
|
||||||
register(78, spamEventDecoder);
|
register(78, spamEventDecoder);
|
||||||
@@ -154,6 +157,7 @@ public final class Release317 extends Release {
|
|||||||
register(SetTileItemEvent.class, new SetTileItemEventEncoder());
|
register(SetTileItemEvent.class, new SetTileItemEventEncoder());
|
||||||
register(PositionEvent.class, new PositionEventEncoder());
|
register(PositionEvent.class, new PositionEventEncoder());
|
||||||
register(UpdateRunEnergyEvent.class, new UpdateRunEnergyEventEncoder());
|
register(UpdateRunEnergyEvent.class, new UpdateRunEnergyEventEncoder());
|
||||||
|
register(PrivacyOptionEvent.class, new PrivacyOptionEventEncoder());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user