Well i got like 20 packets done so far so i decided ill post just the main ones....
"send map region":
Code:
package net.sean.retty.packet.builders;
import net.sean.retty.GameWorld;
import net.sean.retty.buffer.BufferHeader;
import net.sean.retty.buffer.DataOrder;
import net.sean.retty.buffer.IoBuffer;
import net.sean.retty.buffer.Transformation;
import net.sean.retty.model.Position;
import net.sean.retty.model.player.Player;
import net.sean.retty.packet.PacketBuilder;
import net.sean.retty.packet.builders.context.PlayerContext;
import net.sean.retty.parser.Parsers;
import net.sean.retty.parser.impl.LandscapeKeyParser;
import net.sean.retty.parser.impl.LandscapeKeyParser.KeyDefinition;
/**
* @author Sean
* @author `Discardedx2
*/
public class ViewportBuilder implements PacketBuilder<PlayerContext> {
@Override
public IoBuffer build(PlayerContext attachment) {
Position pos = attachment.getPosition();
IoBuffer buf = IoBuffer.dynamicBuffer(19, BufferHeader.SHORT);
if (attachment.getPlayer().isOnLogin()) {
buf.putBits(30, pos.getX() << 14 | pos.getY() & 0x3fff | pos.getPlane() << 28);
for (int i = 1; i < GameWorld.MAX_PLAYERS; i++) {
if (i != attachment.getPlayer().getIndex()) {
Player otherPlayer = GameWorld.getGameWorld().getPlayer(i);
if (otherPlayer != null)
buf.putBits(18, otherPlayer.getHashLocation());
else
buf.putBits(18, 0);
}
}
attachment.getPlayer().setOnLogin(false);
}
buf.putByte(attachment.getPlayer().isNearNextArea() ? 1 : 1, Transformation.C);
buf.putShort(pos.getRegionSectorY(), Transformation.NONE, DataOrder.LITTLE);
buf.putShort(pos.getRegionSectorX(), Transformation.A, DataOrder.LITTLE);
buf.putByte(pos.getViewportArrayIndex(), Transformation.S);
int viewportDepth = pos.getViewportSize() >> 4;
for (int sectorDeltaX = (pos.getRegionSectorX() - viewportDepth) >> 3; sectorDeltaX <= ((pos.getRegionSectorX() + viewportDepth) >> 3); sectorDeltaX++) {
for (int sectorDeltaY = (pos.getRegionSectorY() - viewportDepth) >> 3; sectorDeltaY <= ((pos.getRegionSectorY() + viewportDepth) >> 3); sectorDeltaY++) {
int sectorId = sectorDeltaY + (sectorDeltaX << 8);
KeyDefinition def = Parsers.get(LandscapeKeyParser.class).getDefinition(sectorId);
int[] key = new int[4];
if (def != null) {
key = def.getKey();
}
for (int i = 0; i < key.length; i++) {
buf.putInt(key[i], DataOrder.BIG);
}
}
}
attachment.getPlayer().setLastKnownRegion(attachment.getPosition());
return buf;
}
}
"send window pane":
Code:
package net.sean.retty.packet.builders;
import net.sean.retty.buffer.BufferHeader;
import net.sean.retty.buffer.DataOrder;
import net.sean.retty.buffer.IoBuffer;
import net.sean.retty.buffer.Transformation;
import net.sean.retty.packet.PacketBuilder;
import net.sean.retty.packet.builders.context.InterfaceContext;
/**
* @author `Discardedx2
*/
public class DisplayBuilder implements PacketBuilder<InterfaceContext> {
@Override
public IoBuffer build(InterfaceContext attachment) {
IoBuffer buffer = IoBuffer.allocate(100, 3, BufferHeader.FIXED);
buffer.putByte(attachment.getChild(), Transformation.A);
buffer.putShort(attachment.getGameWindow(), Transformation.A, DataOrder.LITTLE);
return buffer;
}
}
display interface:
Code:
package net.sean.retty.packet.builders;
import net.sean.retty.buffer.BufferHeader;
import net.sean.retty.buffer.DataOrder;
import net.sean.retty.buffer.IoBuffer;
import net.sean.retty.buffer.Transformation;
import net.sean.retty.packet.PacketBuilder;
import net.sean.retty.packet.builders.context.InterfaceContext;
/**
* @author `Discardedx2
*/
public class InterfaceBuilder implements PacketBuilder<InterfaceContext> {
@Override
public IoBuffer build(InterfaceContext display) {
IoBuffer buf = IoBuffer.allocate(139, 7, BufferHeader.FIXED);
buf.putByte(display.isWalkable() ? 1 : 0, Transformation.S);
buf.putShort(display.getChild(), Transformation.A, DataOrder.BIG);
buf.putInt(display.getGameWindow() << 16 | display.getParent(), DataOrder.BIG);
return buf;
}
}
Configs (csconfig not done):
Code:
package net.sean.retty.packet.builders;
import net.sean.retty.buffer.BufferHeader;
import net.sean.retty.buffer.DataOrder;
import net.sean.retty.buffer.IoBuffer;
import net.sean.retty.buffer.Transformation;
import net.sean.retty.packet.PacketBuilder;
import net.sean.retty.packet.builders.context.ConfigContext;
/**
* @author `Discardedx2
*/
public class ConfigBuilder implements PacketBuilder<ConfigContext>{
@Override
public IoBuffer build(ConfigContext config) {
IoBuffer buf;
switch(config.getType()) {
case CSCONFIG://TODO
if (config.getValue() < 128) {
buf = IoBuffer.allocate(50, 3, BufferHeader.FIXED);
buf.putShort(config.getId(), Transformation.NONE, DataOrder.BIG);
buf.putByte(config.getValue(), Transformation.A);
return buf;
}
return null;
case CONFIG:
if (config.getValue() < 128) {
buf = IoBuffer.allocate(123, 3, BufferHeader.FIXED);
buf.putByte(config.getValue(), Transformation.NONE);
buf.putShort(config.getId(), Transformation.NONE, DataOrder.BIG);
return buf;
} else {
buf = IoBuffer.allocate(135, 6, BufferHeader.FIXED);
buf.putInt(config.getValue(), DataOrder.BIG);
buf.putShort(config.getId(), Transformation.NONE, DataOrder.LITTLE);
return buf;
}
}
return null;
}
}