mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-03 00:38:21 +00:00
Add private message support for r377.
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
package org.apollo.net.release.r377;
|
||||
|
||||
import org.apollo.game.event.impl.ForwardPrivateMessageEvent;
|
||||
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;
|
||||
import org.apollo.util.NameUtil;
|
||||
|
||||
/**
|
||||
* An {@link EventEncoder} for the {@link ForwardPrivateMessageEvent}.
|
||||
*
|
||||
* @author Major
|
||||
*/
|
||||
public final class ForwardPrivateMessageEventEncoder extends EventEncoder<ForwardPrivateMessageEvent> {
|
||||
|
||||
/**
|
||||
* The amount of messages sent globally, offset by a random variable x, {@code 0 <= x < 100000000}.
|
||||
*/
|
||||
private static int messageCount = (int) (Math.random() * 100000000);
|
||||
|
||||
@Override
|
||||
public GamePacket encode(ForwardPrivateMessageEvent event) {
|
||||
GamePacketBuilder builder = new GamePacketBuilder(135, PacketType.VARIABLE_BYTE);
|
||||
|
||||
builder.put(DataType.LONG, NameUtil.encodeBase37(event.getSenderUsername()));
|
||||
builder.put(DataType.INT, messageCount++);
|
||||
builder.put(DataType.BYTE, event.getSenderPrivilege().toInteger());
|
||||
builder.putBytes(event.getMessage());
|
||||
return builder.toGamePacket();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import org.apollo.game.event.impl.CloseInterfaceEvent;
|
||||
import org.apollo.game.event.impl.ConfigEvent;
|
||||
import org.apollo.game.event.impl.DisplayTabInterfaceEvent;
|
||||
import org.apollo.game.event.impl.EnterAmountEvent;
|
||||
import org.apollo.game.event.impl.ForwardPrivateMessageEvent;
|
||||
import org.apollo.game.event.impl.FriendServerStatusEvent;
|
||||
import org.apollo.game.event.impl.IdAssignmentEvent;
|
||||
import org.apollo.game.event.impl.IgnoreListEvent;
|
||||
@@ -134,6 +135,7 @@ public final class Release377 extends Release {
|
||||
register(217, new AddIgnoreEventDecoder());
|
||||
register(141, new RemoveFriendEventDecoder());
|
||||
register(160, new RemoveIgnoreEventDecoder());
|
||||
register(227, new SendPrivateMessageEventDecoder());
|
||||
|
||||
// register encoders
|
||||
register(IdAssignmentEvent.class, new IdAssignmentEventEncoder());
|
||||
@@ -163,6 +165,7 @@ public final class Release377 extends Release {
|
||||
register(UpdateRunEnergyEvent.class, new UpdateRunEnergyEventEncoder());
|
||||
register(PrivacyOptionEvent.class, new PrivacyOptionEventEncoder());
|
||||
|
||||
register(ForwardPrivateMessageEvent.class, new ForwardPrivateMessageEventEncoder());
|
||||
register(FriendServerStatusEvent.class, new FriendServerStatusEventEncoder());
|
||||
register(IgnoreListEvent.class, new IgnoreListEventEncoder());
|
||||
register(SendFriendEvent.class, new SendFriendEventEncoder());
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package org.apollo.net.release.r377;
|
||||
|
||||
import org.apollo.game.event.impl.SendPrivateMessageEvent;
|
||||
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;
|
||||
import org.apollo.util.NameUtil;
|
||||
import org.apollo.util.TextUtil;
|
||||
|
||||
/**
|
||||
* An {@link EventDecoder} for the {@link SendPrivateMessageEvent}.
|
||||
*
|
||||
* @author Major
|
||||
*/
|
||||
public final class SendPrivateMessageEventDecoder extends EventDecoder<SendPrivateMessageEvent> {
|
||||
|
||||
@Override
|
||||
public SendPrivateMessageEvent decode(GamePacket packet) {
|
||||
GamePacketReader reader = new GamePacketReader(packet);
|
||||
|
||||
String username = NameUtil.decodeBase37(reader.getSigned(DataType.LONG));
|
||||
int length = packet.getLength() - 8;
|
||||
|
||||
byte[] originalCompressed = new byte[length];
|
||||
reader.getBytes(originalCompressed);
|
||||
|
||||
String uncompressed = TextUtil.uncompress(originalCompressed, length);
|
||||
uncompressed = TextUtil.filterInvalidCharacters(uncompressed);
|
||||
uncompressed = TextUtil.capitalize(uncompressed);
|
||||
|
||||
byte[] recompressed = new byte[length];
|
||||
TextUtil.compress(uncompressed, recompressed);
|
||||
|
||||
return new SendPrivateMessageEvent(username, new String(uncompressed), recompressed);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user