Well, last night I was pretty bored so I figured I'd work a bit on RS377d, here are some of the packets I found.
Code:
public ActionSender sendMessage(String msg)
{
player.getSession().write(new Rs2PacketBuilder(63, Type.VARIABLE).putRs2String(msg).toPacket());
return this;
}
public ActionSender sendLogout()
{
player.getSession().write(new Rs2PacketBuilder(5).toPacket());
return this;
}
public ActionSender sendSkill(int skill)
{
Rs2PacketBuilder packet = new Rs2PacketBuilder(49);
packet.putByteC(skill);
packet.put((byte) player.getSkills().getLevel(skill));
packet.putInt((int) player.getSkills().getExperience(skill));
player.getSession().write(packet.toPacket());
return this;
}
public ActionSender sendChatBoxInterface(int interfaceId)
{
Rs2PacketBuilder packet = new Rs2PacketBuilder(109);
packet.putShort(interfaceId);
player.getSession().write(packet.toPacket());
return this;
}
public ActionSender sendInterface(int interfaceId) {
Rs2PacketBuilder packet = new Rs2PacketBuilder(159);
packet.putLEShortA(interfaceId);
player.getSession().write(packet.toPacket());
return this;
}
public ActionSender sendEnterAmountInterface(int interfaceId) {
player.getSession().write(new Rs2PacketBuilder(58).toPacket());
return this;
}
public ActionSender sendEnterNameInterface() {
player.getSession().write(new Rs2PacketBuilder(6).toPacket());
return this;
}
public ActionSender sendSystemUpdate(int countdown) {
Rs2PacketBuilder packet = new Rs2PacketBuilder(190);
packet.putLEShort(countdown);
player.getSession().write(packet.toPacket());
return this;
}
public ActionSender flashSideBarIcon(int tab) {
Rs2PacketBuilder packet = new Rs2PacketBuilder(238);
packet.put((byte) tab);
player.getSession().write(packet.toPacket());
return this;
}
public ActionSender sendString(int childId, String string) {
Rs2PacketBuilder packet = new Rs2PacketBuilder(232, Type.VARIABLE_SHORT);
packet.putLEShortA(childId);
packet.putRs2String(string);
player.getSession().write(packet.toPacket());
return this;
}
public ActionSender sendTextColor(int childId, int blue, int green, int red) {
Rs2PacketBuilder packet = new Rs2PacketBuilder(218);
packet.putShort((blue) << 0 | (green) << 5 | (red) << 10);
packet.putShortA(childId);
player.getSession().write(packet.toPacket());
return this;
}
public ActionSender sendCloseInterfaces() {
player.getSession().write(new Rs2PacketBuilder(29).toPacket());
return this;
}
public ActionSender sendPlayerOption(int slot, String string, int priority){
Rs2PacketBuilder packet = new Rs2PacketBuilder(157, Type.VARIABLE);
packet.putByteC((byte) slot);
packet.putRs2String(string);
packet.put((byte) priority);
player.getSession().write(packet.toPacket());
return this;
}
public ActionSender sendWeight(int weight) {
Rs2PacketBuilder packet = new Rs2PacketBuilder(174);
packet.putSmart(weight);
player.getSession().write(packet.toPacket());
return this;
}
public ActionSender sendRunEnergy() {
Rs2PacketBuilder packet = new Rs2PacketBuilder(125);
packet.put((byte) 100);
player.getSession().write(packet.toPacket());
return this;
}
public ActionSender sendInterfaceModel(int childId, int zoom, int itemId) {
Rs2PacketBuilder packet = new Rs2PacketBuilder(21);
packet.putShort(childId);
packet.putShort(zoom);
packet.putLEShort(itemId);
player.getSession().write(packet.toPacket());
return this;
}
public ActionSender sendFriendServer(int status) {
Rs2PacketBuilder packet = new Rs2PacketBuilder(251);
packet.put((byte) status);
player.getSession().write(packet.toPacket());
return this;
}
public ActionSender sendConfig(int id, int value) {
Rs2PacketBuilder packet = new Rs2PacketBuilder(182);
packet.putShortA(id);
packet.putByteS((byte) value);
player.getSession().write(packet.toPacket());
return this;
}
public ActionSender sendUpdateItems(int interfaceId, Item[] items) {
Rs2PacketBuilder packet = new Rs2PacketBuilder(206, Type.VARIABLE_SHORT);
packet.putShort(interfaceId);
packet.putShort(items.length);
for(Item item : items) {
if(item != null) {
int count = item.getCount();
if(count > 254) {
packet.putByteC((byte) 255);
packet.putInt2(count);
} else {
packet.putByteC((byte) count);
}
packet.putLEShortA(item.getId() + 1);
} else {
packet.putByteC((byte) 0);
packet.putLEShortA(0);
}
}
player.getSession().write(packet.toPacket());
return this;
}
public ActionSender sendHintIcon(int targetType, int targetId, int arrowId,
int x, int y) {
Rs2PacketBuilder spb = new Rs2PacketBuilder(199);
spb.put((byte) targetType);
if (targetType == 1) {
spb.putShort(targetId);
spb.put((byte) arrowId);
} else if (targetType == 10) {
spb.putShort(targetId);
spb.put((byte) arrowId);
} else {
spb.putShort(x);
spb.putShort(y);
spb.put((byte) arrowId);
}
player.getSession().write(spb.toPacket());
return this;
}
public ActionSender sendPlayerHints(int playerIndex) {
Rs2PacketBuilder spb = new Rs2PacketBuilder(199);
spb.put((byte) 10);// 10 for Player's.
spb.putShort(playerIndex);
spb.putShort(0);
spb.put((byte) 0);
player.getSession().write(spb.toPacket());
return this;
}
public ActionSender sendNPCHints(int npcIndex) {
Rs2PacketBuilder spb = new Rs2PacketBuilder(199);
spb.put((byte) 1);// 1 for NPC's.
spb.putShort(npcIndex);
spb.putShort(0);
spb.put((byte) 0);
player.getSession().write(spb.toPacket());
return this;
}
public ActionSender sendObjectHints(int x, int y, int height) {
Rs2PacketBuilder spb = new Rs2PacketBuilder(199);
spb.put((byte) 2);// 2 for well yeah some specific coordinates.
spb.putShort(x);
spb.putShort(y);
spb.put((byte) height);
player.getSession().write(spb.toPacket());
return this;
}
ButtonHandler
Code:
package org.rs377d.net.event.impl;
import org.apache.mina.core.session.IoSession;
import org.rs377d.model.player.Player;
import org.rs377d.model.util.InterfaceDefinition;
import org.rs377d.net.Rs2Packet;
import org.rs377d.net.event.EventListener;
import org.rs377d.net.event.EventListenerChain;
public class ButtonEventListener implements EventListener {
@Override
public void handle(IoSession session, Rs2Packet packet,
EventListenerChain chain) throws Exception {
final Player player = (Player) session.getAttribute("player");
final int button = packet.getShort();
final int interfaceId = InterfaceDefinition.getParentId(button);
System.out.println("Clicked button: " + button + " on interface: "
+ interfaceId);
if (player.getInterfaceState().isInterfaceAccessable(interfaceId)) {
switch (interfaceId) {
case 2449:
switch (button) {
case 2458:
player.getActionSender().sendLogout();
break;
}
}
}
System.out.println("Clicked button: " + button + " on interface: "
+ interfaceId);
}
}
CommandHandler
Code:
package org.rs377d.net.event.impl;
import org.apache.mina.core.session.IoSession;
import org.rs377d.model.World;
import org.rs377d.model.npc.Npc;
import org.rs377d.model.player.Player;
import org.rs377d.model.util.Container;
import org.rs377d.model.util.Item;
import org.rs377d.model.util.Container.Type;
import org.rs377d.net.Rs2Packet;
import org.rs377d.net.event.EventListener;
import org.rs377d.net.event.EventListenerChain;
import org.rs377d.net.util.ActionSender;
public class CommandEventListener implements EventListener {
@Override
public void handle(IoSession session, Rs2Packet packet, EventListenerChain chain) throws Exception {
final Player player = (Player) session.getAttribute("player");
final String command = packet.getRs2String().toLowerCase();
try {
final String[] arguments = command.split(" ");
if (arguments[0].equals("cbinterface")) {
int interfaceId = Integer.valueOf(arguments[1]);
player.getActionSender().sendChatBoxInterface(interfaceId);
} else if (arguments[0].equals("interface")) {
int interfaceId = Integer.valueOf(arguments[1]);
player.getActionSender().sendInterface(interfaceId);
} else if (arguments[0].equals("amount")) {
int interfaceId = Integer.valueOf(arguments[1]);
player.getActionSender().sendEnterAmountInterface(interfaceId);
} else if (arguments[0].equals("name")) {
player.getActionSender().sendEnterNameInterface();
} else if (arguments[0].equals("systemupdate")) {
int countdown = Integer.valueOf(arguments[1]);
player.getActionSender().sendSystemUpdate(countdown);
} else if (arguments[0].equals("flashtab")) {
int tab = Integer.valueOf(arguments[1]);
player.getActionSender().flashSideBarIcon(tab);
} else if (arguments[0].equals("sendstring")) {
player.getActionSender().sendString(Integer.valueOf(arguments[1]),
arguments[2]);
} else if (arguments[0].equals("closeinterfaces")) {
player.getActionSender().sendCloseInterfaces();
} else if (arguments[0].equals("coords")) {
player.getActionSender().sendMessage("X:" + player.getPosition().getX() + " Y:" + player.getPosition().getY() + " Z:" + player.getPosition().getZ() );
} else if (arguments[0].equals("item")) {
try {
int id = Integer.valueOf(arguments[1]);
int amount = 1;
if (arguments.length > 2) {
amount = Integer.valueOf(arguments[2]);
}
if (player.getInventory().add(new Item(id, amount))) {
player.getActionSender().sendInventory();
} else {
player
.getActionSender()
.sendMessage(
"You don't have enough space in your inventory.");
}
} catch (final Exception ex) {
player.getActionSender().sendMessage(
"Wrong syntax. Usage: item [id] [amount]");
ex.printStackTrace();
}
}
} catch (final Exception ex) {
player.getActionSender().sendMessage(
"Error handling command: " + command);
ex.printStackTrace();
}
}
}