public class WorldPacketsEncoder extends Encoder {
private Player player;
public WorldPacketsEncoder(Session session, Player player) {
super(session);
this.player = player;
}
public Player getPlayer() {
return player;
}
public void sendPlayerUnderNPCPriority(boolean priority) {
OutputStream stream = new OutputStream(2);
stream.writePacket(player, 6);
stream.writeByteC(priority ? 1 : 0);
session.write(stream);
}
public void sendHintIcon(HintIcon icon) {
OutputStream stream = new OutputStream(15);
stream.writePacket(player, 79);
stream.writeByte((icon.getTargetType() & 0x1f) | (icon.getIndex() << 5));
if (icon.getTargetType() == 0)
stream.skip(13);
else {
stream.writeByte(icon.getArrowType());
if (icon.getTargetType() == 1 || icon.getTargetType() == 10) {
stream.writeShort(icon.getTargetIndex());
stream.writeShort(2500); // how often the arrow flashes, 2500 ideal, 0 never
stream.skip(4);
} else if ((icon.getTargetType() >= 2 && icon.getTargetType() <= 6)) { // directions
stream.writeByte(icon.getPlane()); // unknown
stream.writeShort(icon.getCoordX());
stream.writeShort(icon.getCoordY());
stream.writeByte(icon.getDistanceFromFloor() * 4 >> 2);
stream.writeShort(-1); //distance to start showing on minimap, 0 doesnt show, -1 infinite
}
stream.writeInt(icon.getModelId());
}
session.write(stream);
}
public void sendCameraShake(int slotId, int b, int c, int d, int e) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 44);
stream.writeByte128(b);
stream.writeByte128(slotId);
stream.writeByte128;
stream.writeByte128(c);
stream.writeShortLE(e);
session.write(stream);
}
public void sendStopCameraShake() {
OutputStream stream = new OutputStream(1);
stream.writePacket(player, 131);
session.write(stream);
}
public void sendIComponentModel(int interfaceId, int componentId,
int modelId) {
OutputStream stream = new OutputStream(9);
stream.writePacket(player, 102);
stream.writeIntV1(modelId);
stream.writeIntV1(interfaceId << 16 | componentId);
session.write(stream);
}
public void sendHideIComponent(int interfaceId, int componentId,
boolean hidden) {
OutputStream stream = new OutputStream(6);
stream.writePacket(player, 112);
stream.writeIntV2(interfaceId << 16 | componentId);
stream.writeByte(hidden ? 1 : 0);
session.write(stream);
}
public void sendRemoveGroundItem(FloorItem item) {
OutputStream stream = createWorldTileStream(item.getTile());
int localX = item.getTile().getLocalX(
player.getLastLoadedMapRegionTile(), player.getMapSize());
int localY = item.getTile().getLocalY(
player.getLastLoadedMapRegionTile(), player.getMapSize());
int offsetX = localX - ((localX >> 3) << 3);
int offsetY = localY - ((localY >> 3) << 3);
stream.writePacket(player, 108);
stream.writeShortLE(item.getId());
stream.write128Byte((offsetX << 4) | offsetY);
session.write(stream);
public void sendProjectile(Entity receiver, WorldTile startTile,
WorldTile endTile, int gfxId, int startHeight, int endHeight,
int speed, int delay, int curve, int startDistanceOffset,
int creatorSize) {
OutputStream stream = createWorldTileStream(startTile);
stream.writePacket(player, 20);
int localX = startTile.getLocalX(player.getLastLoadedMapRegionT ile(),
player.getMapSize());
int localY = startTile.getLocalY(player.getLastLoadedMapRegionT ile(),
player.getMapSize());
int offsetX = localX - ((localX >> 3) << 3);
int offsetY = localY - ((localY >> 3) << 3);
stream.writeByte((offsetX << 3) | offsetY);
stream.writeByte(endTile.getX() - startTile.getX());
stream.writeByte(endTile.getY() - startTile.getY());
stream.writeShort(receiver == null ? 0
: (receiver instanceof Player ? -(receiver.getIndex() + 1)
: receiver.getIndex() + 1));
stream.writeShort(gfxId);
stream.writeByte(startHeight);
stream.writeByte(endHeight);
stream.writeShort(delay);
int duration = (Utils.getDistance(startTile.getX(), startTile.getY(),
endTile.getX(), endTile.getY()) * 30 / ((speed / 10) < 1 ? 1
: (speed / 10)))
+ delay;
stream.writeShort(duration);
stream.writeByte(curve);
stream.writeShort(creatorSize * 64 + startDistanceOffset * 64);
session.write(stream);
}
public void sendUnlockIComponentOptionSlots(int interfaceId,
int componentId, int fromSlot, int toSlot, int... optionsSlots) {
int settingsHash = 0;
for (int slot : optionsSlots)
settingsHash |= 2 << slot;
sendIComponentSettings(interfaceId, componentId, fromSlot, toSlot,
settingsHash);
}
public void sendIComponentSettings(int interfaceId, int componentId,
int fromSlot, int toSlot, int settingsHash) {
OutputStream stream = new OutputStream(13);
stream.writePacket(player, 40);
stream.writeIntV2(settingsHash);
stream.writeInt(interfaceId << 16 | componentId);
stream.writeShort128(fromSlot);
stream.writeShortLE(toSlot);
session.write(stream);
}
public void sendInterFlashScript(int interfaceId,
int componentId, int width, int height, int slot) {
Object[] parameters = new Object[4];
int index = 0;
parameters[index++] = slot;
parameters[index++] = height;
parameters[index++] = width;
parameters[index++] = interfaceId << 16 | componentId;
sendRunScript(143, parameters);
}
public void sendInterSetItemsOptionsScript(int interfaceId,
int componentId, int key, int width, int height, String... options) {
sendInterSetItemsOptionsScript(interfaceId, componentId, key, false, width, height, options);
}
public void sendInterSetItemsOptionsScript(int interfaceId,
int componentId, int key, boolean negativeKey, int width, int height, String... options) {
Object[] parameters = new Object[6 + options.length];
int index = 0;
for (int count = options.length - 1; count >= 0; count--)
parameters[index++] = options[count];
parameters[index++] = -1; // dunno but always this
parameters[index++] = 0;// dunno but always this, maybe startslot?
parameters[index++] = height;
parameters[index++] = width;
parameters[index++] = key;
parameters[index++] = interfaceId << 16 | componentId;
sendRunScript(negativeKey ? 695 : 150, parameters); // scriptid 150 does that the method
// name says*/
}
public void sendInputNameScript(String message) {
sendRunScript(109, new Object[] { message });
}
public void sendInputIntegerScript(boolean integerEntryOnly, String message) {
sendRunScript(108, new Object[] { message });
}
public void sendInputLongTextScript(String message) {
sendRunScript(110, new Object[] { message });
}
public void sendRunScript(int scriptId, Object... params) {
OutputStream stream = new OutputStream();
stream.writePacketVarShort(player, 119);
String parameterTypes = "";
if (params != null) {
for (int count = params.length - 1; count >= 0; count--) {
if (params[count] instanceof String)
parameterTypes += "s"; // string
else
parameterTypes += "i"; // integer
}
}
stream.writeString(parameterTypes);
if (params != null) {
int index = 0;
for (int count = parameterTypes.length() - 1; count >= 0; count--) {
if (parameterTypes.charAt(count) == 's')
stream.writeString((String) params[index++]);
else
stream.writeInt((Integer) params[index++]);
}
}
stream.writeInt(scriptId);
stream.endPacketVarShort();
session.write(stream);
}
public void sendGlobalConfig(int id, int value) {
if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE)
sendGlobalConfig2(id, value);
else
sendGlobalConfig1(id, value);
}
public void sendGlobalConfig1(int id, int value) {
OutputStream stream = new OutputStream(4);
stream.writePacket(player, 154);
stream.writeByteC(value);
stream.writeShort128(id);
session.write(stream);
}
public void sendGlobalConfig2(int id, int value) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 63);
stream.writeShort128(id);
stream.writeInt(value);
session.write(stream);
}
public void sendConfig(int id, int value) {
if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE)
sendConfig2(id, value);
else
sendConfig1(id, value);
}
public void sendConfigByFile(int fileId, int value) {
if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE)
sendConfigByFile2(fileId, value);
else
sendConfigByFile1(fileId, value);
}
public void sendConfig1(int id, int value) {
OutputStream stream = new OutputStream(4);
stream.writePacket(player, 110);
stream.writeShortLE128(id);
stream.writeByte128(value);
session.write(stream);
}
public void sendConfig2(int id, int value) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 56);
stream.writeShort128(id);
stream.writeIntLE(value);
session.write(stream);
}
public void sendConfigByFile1(int fileId, int value) {
OutputStream stream = new OutputStream(4);
stream.writePacket(player, 111);
stream.writeShort128(fileId);
stream.writeByteC(value);
session.write(stream);
}
public void sendConfigByFile2(int fileId, int value) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 81);
stream.writeIntV1(value);
stream.writeShort128(fileId);
session.write(stream);
}
public void sendRunEnergy() {
OutputStream stream = new OutputStream(2);
stream.writePacket(player, 25);
stream.writeByte(player.getRunEnergy());
session.write(stream);
}
public void sendIComponentText(int interfaceId, int componentId, String text) {
OutputStream stream = new OutputStream();
stream.writePacketVarShort(player, 135);
stream.writeString(text);
stream.writeInt(interfaceId << 16 | componentId);
stream.endPacketVarShort();
session.write(stream);
}
public void sendIComponentAnimation(int emoteId, int interfaceId,
int componentId) {
OutputStream stream = new OutputStream(9);
stream.writePacket(player, 103);
stream.writeIntV2(emoteId);
stream.writeInt(interfaceId << 16 | componentId);
session.write(stream);
}
public void sendItemOnIComponent(int interfaceid, int componentId, int id,
int amount) {
OutputStream stream = new OutputStream(11);
stream.writePacket(player, 152);
stream.writeShort128(id);
stream.writeIntV1(amount);
stream.writeIntV2(interfaceid << 16 | componentId);
session.write(stream);
}
public void sendEntityOnIComponent(boolean isPlayer, int entityId,
int interfaceId, int componentId) {
if (isPlayer)
sendPlayerOnIComponent(interfaceId, componentId);
else
sendNPCOnIComponent(interfaceId, componentId, entityId);
}
public void sendWorldTile(WorldTile tile) {
session.write(createWorldTileStream(tile));
}
public void sendTradeRequestMessage(Player p) {
sendMessage(100, "wishes to trade with you.", p);
}
public void sendClanWarsRequestMessage(Player p) {
sendMessage(101, "wishes to challenge your clan to a clan war.", p);
}
public void sendDuelChallengeRequestMessage(Player p, boolean friendly) {
sendMessage(101, "wishes to duel with you("
+ (friendly ? "friendly" : "stake") + ").", p);
}
public void sendMessage(int type, String text, Player p) {
int maskData = 0;
if (p != null) {
maskData |= 0x1;
if (p.hasDisplayName())
maskData |= 0x2;
}
OutputStream stream = new OutputStream();
stream.writePacketVarByte(player, 136);
stream.writeSmart(type);
stream.writeInt(player.getTileHash()); // junk, not used by client
stream.writeByte(maskData);
if ((maskData & 0x1) != 0) {
stream.writeString(p.getDisplayName());
if (p.hasDisplayName())
stream.writeString(Utils.formatPlayerNameForDispla y(p
.getUsername()));
}
stream.writeString(text);
stream.endPacketVarByte();
session.write(stream);
}
// effect type 1 or 2(index4 or index14 format, index15 format unusused by
// jagex for now)
public void sendSound(int id, int delay, int effectType) {
if (effectType == 1)
sendIndex14Sound(id, delay);
else if (effectType == 2)
sendIndex15Sound(id, delay);
}
public void sendVoice(int id) {
resetSounds();
sendSound(id, 0, 2);
}
public void resetSounds() {
OutputStream stream = new OutputStream(1);
stream.writePacket(player, 145);
session.write(stream);
}
public void sendIndex14Sound(int id, int delay) {
OutputStream stream = new OutputStream(9);
stream.writePacket(player, 26);
stream.writeShort(id);
stream.writeByte(1);//repeated amount
stream.writeShort(delay);
stream.writeByte(255);
stream.writeShort(256);
session.write(stream);
}
public void sendIndex15Sound(int id, int delay) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 70);
stream.writeShort(id);
stream.writeByte(1); // amt of times it repeats
stream.writeShort(delay);
stream.writeByte(255); // volume
session.write(stream);
}
public void sendMusicEffect(int id) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 9);
stream.write128Byte(255); // volume
stream.write24BitIntegerV2(0);
stream.writeShort(id);
session.write(stream);
}
public void sendMusic(int id) {
sendMusic(id, 100, 255);
}
public void sendMusic(int id, int delay, int volume) {
OutputStream stream = new OutputStream(5);
stream.writePacket(player, 129);
stream.writeByte(delay);
stream.writeShortLE128(id);
stream.writeByte128(volume);
session.write(stream);
}
public void sendSkillLevel(int skill) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 146);
stream.write128Byte(skill);
stream.writeInt((int) player.getSkills().getXp(skill));
stream.writeByte128(player.getSkills().getLevel(sk ill));
session.write(stream);
}
// CUTSCENE PACKETS START
/**
* This will blackout specified area.
*
* @[Only registered and activated users can see links. ] byte area = area which will be blackout (0 = unblackout; 1 =
* blackout orb; 2 = blackout map; 5 = blackout orb and map)
*/
public void sendBlackOut(int area) {
OutputStream out = new OutputStream(2);
out.writePacket(player, 69);
out.writeByte(area);
session.write(out);
}
// instant
public void sendCameraLook(int viewLocalX, int viewLocalY, int viewZ) {
sendCameraLook(viewLocalX, viewLocalY, viewZ, -1, -1);
}
public void sendCameraLook(int viewLocalX, int viewLocalY, int viewZ,
int speed1, int speed2) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 116);
stream.writeByte128(viewLocalY);
stream.writeByte(speed1);
stream.writeByteC(viewLocalX);
stream.writeByte(speed2);
stream.writeShort128(viewZ >> 2);
session.write(stream);
}
public void sendResetCamera() {
OutputStream stream = new OutputStream(1);
stream.writePacket(player, 95);
session.write(stream);
}
public void sendCameraRotation(int unknown1, int unknown2) {
OutputStream stream = new OutputStream(5);
stream.writePacket(player, 123);
stream.writeShort(unknown1);
stream.writeShortLE(unknown1);
session.write(stream);
}
public void sendCameraPos(int moveLocalX, int moveLocalY, int moveZ) {
sendCameraPos(moveLocalX, moveLocalY, moveZ, -1, -1);
}
public void sendClientConsoleCommand(String command) {
OutputStream stream = new OutputStream();
stream.writePacketVarByte(player, 61);
stream.writeString(command);
stream.endPacketVarByte();
}
public void sendOpenURL(String url) {
OutputStream stream = new OutputStream();
stream.writePacketVarShort(player, 17);
stream.writeByte(0);
stream.writeString(url);
stream.endPacketVarShort();
session.write(stream);
}
public void sendSetMouse(String walkHereReplace, int cursor) {
OutputStream stream = new OutputStream();
stream.writePacketVarByte(player, 10);
stream.writeString(walkHereReplace);
stream.writeShort(cursor);
stream.endPacketVarByte();
session.write(stream);
}
public void sendItemsLook() {
OutputStream stream = new OutputStream(2);
stream.writePacket(player, 159);
stream.writeByte(player.isOldItemsLook() ? 1 : 0);
session.write(stream);
}
public void sendCameraPos(int moveLocalX, int moveLocalY, int moveZ,
int speed1, int speed2) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 74);
stream.writeByte128(speed2);
stream.writeByte128(speed1);
stream.writeByte(moveLocalY);
stream.writeShort(moveZ >> 2);
stream.writeByte(moveLocalX);
session.write(stream);
}
public final class WorldPacketsDecoder extends Decoder {
private static final byte[] PACKET_SIZES = new byte[104];
private final static int WALKING_PACKET = 8;
private final static int PLAYER_OPTION_6_PACKET = 49;
private final static int MINI_WALKING_PACKET = 58;
private final static int AFK_PACKET = -1;
public final static int ACTION_BUTTON1_PACKET = 14;
public final static int ACTION_BUTTON2_PACKET = 67;
public final static int ACTION_BUTTON3_PACKET = 5;
public final static int ACTION_BUTTON4_PACKET = 55;
public final static int ACTION_BUTTON5_PACKET = 68;
public final static int ACTION_BUTTON6_PACKET = 90;
public final static int ACTION_BUTTON7_PACKET = 6;
public final static int ACTION_BUTTON8_PACKET = 32;
public final static int ACTION_BUTTON9_PACKET = 27;
public final static int WORLD_MAP_CLICK = 38;
public final static int ACTION_BUTTON10_PACKET = 96;
public final static int RECEIVE_PACKET_COUNT_PACKET = 33;
private final static int MAGIC_ON_ITEM_PACKET = -1;
private final static int PLAYER_OPTION_4_PACKET = 17;
private final static int MOVE_CAMERA_PACKET = 103;
private final static int INTERFACE_ON_OBJECT = 37;
private final static int CLICK_PACKET = -1;
private final static int MOUVE_MOUSE_PACKET = -1;
private final static int KEY_TYPED_PACKET = -1;
private final static int CLOSE_INTERFACE_PACKET = 54;
private final static int COMMANDS_PACKET = 60;
private final static int ITEM_ON_ITEM_PACKET = 3;
private final static int IN_OUT_SCREEN_PACKET = -1;
private final static int DONE_LOADING_REGION_PACKET = 30;
private final static int PING_PACKET = 21;
private final static int SCREEN_PACKET = 98;
private final static int CHAT_TYPE_PACKET = 83;
private final static int CHAT_PACKET = 53;
private final static int PUBLIC_QUICK_CHAT_PACKET = 86;
private final static int ADD_FRIEND_PACKET = 89;
private final static int ADD_IGNORE_PACKET = 4;
private final static int REMOVE_IGNORE_PACKET = 73;
private final static int JOIN_FRIEND_CHAT_PACKET = 36;
private final static int CHANGE_FRIEND_CHAT_PACKET = 22;
private final static int KICK_FRIEND_CHAT_PACKET = 74;
private final static int REMOVE_FRIEND_PACKET = 24;
private final static int SEND_FRIEND_MESSAGE_PACKET = 82;
private final static int SEND_FRIEND_QUICK_CHAT_PACKET = 0;
private final static int OBJECT_CLICK1_PACKET = 26;
private final static int OBJECT_CLICK2_PACKET = 59;
private final static int OBJECT_CLICK3_PACKET = 40;
private final static int OBJECT_CLICK4_PACKET = 23;
private final static int OBJECT_CLICK5_PACKET = 80;
private final static int OBJECT_EXAMINE_PACKET = 25;
private final static int NPC_CLICK1_PACKET = 31;
private final static int NPC_CLICK2_PACKET = 101;
private final static int NPC_CLICK3_PACKET = 34;
private final static int ATTACK_NPC = 20;
private final static int PLAYER_OPTION_1_PACKET = 42;
private final static int PLAYER_OPTION_2_PACKET = 46;
private final static int ITEM_TAKE_PACKET = 57;
private final static int DIALOGUE_CONTINUE_PACKET = 72;
private final static int ENTER_INTEGER_PACKET = 81;
private final static int ENTER_NAME_PACKET = 29;
private final static int ENTER_STRING_PACKET = -1;
private final static int SWITCH_INTERFACE_ITEM_PACKET = 76;
private final static int INTERFACE_ON_PLAYER = 50;
private final static int INTERFACE_ON_NPC = 66;
private final static int COLOR_ID_PACKET = 97;
private static final int NPC_EXAMINE_PACKET = 9;
private final static int REPORT_ABUSE_PACKET = -1;
public static void decodeLogicPacket(final Player player, LogicPacket packet) {
int packetId = packet.getId();
InputStream stream = new InputStream(packet.getData());
if (packetId == WALKING_PACKET || packetId == MINI_WALKING_PACKET) {
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead())
return;
long currentTime = Utils.currentTimeMillis();
if (player.getLockDelay() > currentTime)
return;
if (player.getFreezeDelay() >= currentTime) {
player.getPackets().sendGameMessage(
"A magical force prevents you from moving.");
return;
}
int length = stream.getLength();
/*if (packetId == MINI_WALKING_PACKET)
length -= 13;*/
int baseX = stream.readUnsignedShort128();
boolean forceRun = stream.readUnsigned128Byte() == 1;
int baseY = stream.readUnsignedShort128();
int steps = (length - 5) / 2;
if (steps > 25)
steps = 25;
player.stopAll();
if(forceRun)
player.setRun(forceRun);
for (int step = 0; step < steps; step++)
if (!player.addWalkSteps(baseX + stream.readUnsignedByte(),
baseY + stream.readUnsignedByte(), 25,
true))
break;
} else if (packetId == INTERFACE_ON_OBJECT) {
boolean forceRun = stream.readByte128() == 1;
int itemId = stream.readShortLE128();
int y = stream.readShortLE128();
int objectId = stream.readIntV2();
int interfaceHash = stream.readInt();
final int interfaceId = interfaceHash >> 16;
int slot = stream.readShortLE();
int x = stream.readShort128();
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead())
return;
long currentTime = Utils.currentTimeMillis();
if (player.getLockDelay() >= currentTime || player.getEmotesManager().getNextEmoteEnd() >= currentTime)
return;
final WorldTile tile = new WorldTile(x, y, player.getPlane());
int regionId = tile.getRegionId();
if (!player.getMapRegionsIds().contains(regionId))
return;
WorldObject mapObject = World.getRegion(regionId).getObject(objectId, tile);
if (mapObject == null || mapObject.getId() != objectId)
return;
final WorldObject object = !player.isAtDynamicRegion() ? mapObject : new WorldObject(objectId, mapObject.getType(), mapObject.getRotation(), x, y, player.getPlane());
final Item item = player.getInventory().getItem(slot);
if (player.isDead() || Utils.getInterfaceDefinitionsSize() <= interfaceId)
return;
if (player.getLockDelay() > Utils.currentTimeMillis())
return;
if (!player.getInterfaceManager().containsInterface(i nterfaceId))
return;
if (item == null || item.getId() != itemId)
return;
player.stopAll(false); // false
if(forceRun)
player.setRun(forceRun);
switch (interfaceId) {
case Inventory.INVENTORY_INTERFACE: // inventory
ObjectHandler.handleItemOnObject(player, object, interfaceId, item);
break;
}
} else if (packetId == PLAYER_OPTION_2_PACKET) {
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead())
return;
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean unknown = stream.readByte() == 1;
int playerIndex = stream.readUnsignedShortLE128();
Player p2 = World.getPlayers().get(playerIndex);
if (p2 == null || p2.isDead() || p2.hasFinished()
|| !player.getMapRegionsIds().contains(p2.getRegionId ()))
return;
if (player.getLockDelay() > Utils.currentTimeMillis())
return;
player.stopAll(false);
player.getActionManager().setAction(new PlayerFollow(p2));
} else if (packetId == PLAYER_OPTION_6_PACKET) {
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean unknown = stream.readByte() == 1;
int playerIndex = stream.readUnsignedShortLE128();
Player other = World.getPlayers().get(playerIndex);
if (other == null || other.isDead() || other.hasFinished()
|| !player.getMapRegionsIds().contains(other.getRegio nId()))
return;
if (player.getLockDelay() > Utils.currentTimeMillis())
return;
if (player.getInterfaceManager().containsScreenInter( )) {
player.getPackets()
.sendGameMessage("The other player is busy.");
return;
}
if (!other.withinDistance(player, 14)) {
player.getPackets().sendGameMessage(
"Unable to find target " + other.getDisplayName());
return;
}
if (player.getAttackedByDelay() + 10000 > Utils.currentTimeMillis()) {
player.getPackets()
.sendGameMessage(
"<col=B00000>You view "
+ other.getDisplayName()
+ " Stats's until 10 seconds after the end of combat.");
return;
}
player.getInterfaceManager().sendInterface(1314);
player.getPackets().sendIComponentText(1314, 91,
"" + other.getDisplayName() + "'s stats");
player.getPackets().sendIComponentText(1314, 90,
""+ other.getPrestige()+ " <col=00FF7F>FS - Prestige Points");
player.getPackets().sendIComponentText(1314, 61,
"" + other.getSkills().getLevel(0));
player.getPackets().sendIComponentText(1314, 62,
"" + other.getSkills().getLevel(2));
player.getPackets().sendIComponentText(1314, 63,
"" + other.getSkills().getLevel(1));
player.getPackets().sendIComponentText(1314, 65,
"" + other.getSkills().getLevel(4));
player.getPackets().sendIComponentText(1314, 66,
"" + other.getSkills().getLevel(5));
player.getPackets().sendIComponentText(1314, 64,
"" + other.getSkills().getLevel(6));
player.getPackets().sendIComponentText(1314, 78,
"" + other.getSkills().getLevel(20));
player.getPackets().sendIComponentText(1314, 81,
"" + other.getSkills().getLevel(22));
player.getPackets().sendIComponentText(1314, 76,
"" + other.getSkills().getLevel(24));
player.getPackets().sendIComponentText(1314, 82,
"" + other.getSkills().getLevel(3));
player.getPackets().sendIComponentText(1314, 83,
"" + other.getSkills().getLevel(16));
player.getPackets().sendIComponentText(1314, 84,
"" + other.getSkills().getLevel(15));
player.getPackets().sendIComponentText(1314, 80,
"" + other.getSkills().getLevel(17));
player.getPackets().sendIComponentText(1314, 70,
"" + other.getSkills().getLevel(12));
player.getPackets().sendIComponentText(1314, 85,
"" + other.getSkills().getLevel(9));
player.getPackets().sendIComponentText(1314, 77,
"" + other.getSkills().getLevel(18));
player.getPackets().sendIComponentText(1314, 79,
"" + other.getSkills().getLevel(21));
player.getPackets().sendIComponentText(1314, 68,
"" + other.getSkills().getLevel(14));
player.getPackets().sendIComponentText(1314, 69,
"" + other.getSkills().getLevel(13));
player.getPackets().sendIComponentText(1314, 74,
"" + other.getSkills().getLevel(10));
player.getPackets().sendIComponentText(1314, 75,
"" + other.getSkills().getLevel(7));
player.getPackets().sendIComponentText(1314, 73,
"" + other.getSkills().getLevel(11));
player.getPackets().sendIComponentText(1314, 71,
"" + other.getSkills().getLevel(8));
player.getPackets().sendIComponentText(1314, 72,
"" + other.getSkills().getLevel(19));
player.getPackets().sendIComponentText(1314, 67,
"" + other.getSkills().getLevel(23));
player.getPackets().sendIComponentText(1314, 87,
"" + other.getMaxHitpoints());
player.getPackets().sendIComponentText(1314, 86,
"" + other.getSkills().getCombatLevelWithSummoning());
player.getPackets().sendIComponentText(1314, 88,
"" + other.getSkills().getTotalLevel(other));
player.getPackets().sendIComponentText(1314, 89,
"" + other.getSkills().getTotalXp(other));
player.getTemporaryAttributtes().put("finding_play er",
Boolean.FALSE);
} else if (packetId == PLAYER_OPTION_4_PACKET) {
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean unknown = stream.readByte() == 1;
int playerIndex = stream.readUnsignedShortLE128();
Player p2 = World.getPlayers().get(playerIndex);
if (p2 == null || p2.isDead() || p2.hasFinished()
|| !player.getMapRegionsIds().contains(p2.getRegionId ()))
return;
if (player.getLockDelay() > Utils.currentTimeMillis())
return;
player.stopAll(false);
if(player.isCantTrade()) {
player.getPackets().sendGameMessage("You are busy.");
return;
}
if (p2.getInterfaceManager().containsScreenInter() || p2.isCantTrade()) {
player.getPackets().sendGameMessage("The other player is busy.");
return;
}
if (!p2.withinDistance(player, 14)) {
player.getPackets().sendGameMessage(
"Unable to find target "+p2.getDisplayName());
return;
}
if (p2.getTemporaryAttributtes().get("TradeTarget") == player) {
p2.getTemporaryAttributtes().remove("TradeTarget") ;
player.getTrade().openTrade(p2);
p2.getTrade().openTrade(player);
return;
}
player.getTemporaryAttributtes().put("TradeTarget" , p2);
player.getPackets().sendGameMessage("Sending " + p2.getDisplayName() + " a request...");
p2.getPackets().sendTradeRequestMessage(player);
//tradelogs
String location = "";
location = "data/tradelogs/" + player.getUsername() + ".txt";
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(location,
true));
writer.write("[TRADE SENT] "+ player.getDisplayName()+" to "+p2.getDisplayName()+" .");
writer.newLine();
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
} else if (packetId == PLAYER_OPTION_1_PACKET) {
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead())
return;
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean unknown = stream.readByte() == 1;
int playerIndex = stream.readUnsignedShortLE128();
Player p2 = World.getPlayers().get(playerIndex);
if (p2 == null || p2.isDead() || p2.hasFinished()
|| !player.getMapRegionsIds().contains(p2.getRegionId ()))
return;
if (player.getLockDelay() > Utils.currentTimeMillis()
|| !player.getControlerManager().canPlayerOption1(p2) )
return;
if (!player.isCanPvp())
return;
if (!player.getControlerManager().canAttack(p2))
return;
if (!player.isCanPvp() || !p2.isCanPvp()) {
player.getPackets()
.sendGameMessage(
"You can only attack players in a player-vs-player area.");
return;
}
if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
if (player.getAttackedBy() != p2
&& player.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"You are already in combat.");
return;
}
if (p2.getAttackedBy() != player
&& p2.getAttackedByDelay() > Utils.currentTimeMillis()) {
if (p2.getAttackedBy() instanceof NPC) {
p2.setAttackedBy(player); // changes enemy to player,
// player has priority over
// npc on single areas
} else {
player.getPackets().sendGameMessage(
"That player is already in combat.");
return;
}
}
}
player.stopAll(false);
player.getActionManager().setAction(new PlayerCombat(p2));
} else if (packetId == ATTACK_NPC) {
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead()) {
return;
}
if (player.getLockDelay() > Utils.currentTimeMillis()) {
return;
}
int npcIndex = stream.readUnsignedShort128();
boolean forceRun = stream.read128Byte() == 1;
if(forceRun)
player.setRun(forceRun);
NPC npc = World.getNPCs().get(npcIndex);
if (npc == null || npc.isDead() || npc.hasFinished()
|| !player.getMapRegionsIds().contains(npc.getRegionI d())
|| !npc.getDefinitions().hasAttackOption()) {
return;
}
if (!player.getControlerManager().canAttack(npc)) {
return;
}
if (npc instanceof Familiar) {
Familiar familiar = (Familiar) npc;
if (familiar == player.getFamiliar()) {
player.getPackets().sendGameMessage(
"You can't attack your own familiar.");
return;
}
if (!familiar.canAttack(player)) {
player.getPackets().sendGameMessage(
"You can't attack this npc.");
return;
}
} else if (!npc.isForceMultiAttacked()) {
if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
if (player.getAttackedBy() != npc
&& player.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"You are already in combat.");
return;
}
if (npc.getAttackedBy() != player
&& npc.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"This npc is already in combat.");
return;
}
}
}
player.stopAll(false);
player.getActionManager().setAction(new PlayerCombat(npc));
} else if (packetId == INTERFACE_ON_PLAYER) {
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead())
return;
if (player.getLockDelay() > Utils.currentTimeMillis())
return;
@[Only registered and activated users can see links. ]ressWarnings("unused")
int junk1 = stream.readUnsignedShort();
int playerIndex = stream.readUnsignedShort();
int interfaceHash = stream.readIntV2();
@[Only registered and activated users can see links. ]ressWarnings("unused")
int junk2 = stream.readUnsignedShortLE128();
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean unknown = stream.read128Byte() == 1;
int interfaceId = interfaceHash >> 16;
int componentId = interfaceHash - (interfaceId << 16);
if (Utils.getInterfaceDefinitionsSize() <= interfaceId)
return;
if (!player.getInterfaceManager().containsInterface(i nterfaceId))
return;
if (componentId == 65535)
componentId = -1;
if (componentId != -1
&& Utils.getInterfaceDefinitionsComponentsSize(interf aceId) <= componentId)
return;
Player p2 = World.getPlayers().get(playerIndex);
if (p2 == null || p2.isDead() || p2.hasFinished()
|| !player.getMapRegionsIds().contains(p2.getRegionId ()))
return;
player.stopAll(false);
switch (interfaceId) {
case 662:
case 747:
if (player.getFamiliar() == null)
return;
player.resetWalkSteps();
if ((interfaceId == 747 && componentId == 15)
|| (interfaceId == 662 && componentId == 65)
|| (interfaceId == 662 && componentId == 74)
|| interfaceId == 747 && componentId == 18) {
if ((interfaceId == 662 && componentId == 74
|| interfaceId == 747 && componentId == 24 || interfaceId == 747
&& componentId == 18)) {
if (player.getFamiliar().getSpecialAttack() != SpecialAttack.ENTITY)
return;
}
if (!player.isCanPvp() || !p2.isCanPvp()) {
player.getPackets()
.sendGameMessage(
"You can only attack players in a player-vs-player area.");
return;
}
if (!player.getFamiliar().canAttack(p2)) {
player.getPackets()
.sendGameMessage(
"You can only use your familiar in a multi-zone area.");
return;
} else {
player.getFamiliar().setSpecial(
interfaceId == 662 && componentId == 74
|| interfaceId == 747
&& componentId == 18);
player.getFamiliar().setTarget(p2);
}
}
break;
case 193:
switch (componentId) {
case 28:
case 32:
case 24:
case 20:
case 30:
case 34:
case 26:
case 22:
case 29:
case 33:
case 25:
case 21:
case 31:
case 35:
case 27:
case 23:
if (Magic.checkCombatSpell(player, componentId, 1, false)) {
player.setNextFaceWorldTile(new WorldTile(p2
.getCoordFaceX(p2.getSize()), p2
.getCoordFaceY(p2.getSize()), p2.getPlane()));
if (!player.getControlerManager().canAttack(p2))
return;
if (!player.isCanPvp() || !p2.isCanPvp()) {
player.getPackets()
.sendGameMessage(
"You can only attack players in a player-vs-player area.");
return;
}
if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
if (player.getAttackedBy() != p2
&& player.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets()
.sendGameMessage(
"That "
+ (player
.getAttackedBy() instanceof Player ? "player"
: "npc")
+ " is already in combat.");
return;
}
if (p2.getAttackedBy() != player
&& p2.getAttackedByDelay() > Utils
.currentTimeMillis()) {
if (p2.getAttackedBy() instanceof NPC) {
p2.setAttackedBy(player); // changes enemy
// to player,
// player has
// priority over
// npc on single
// areas
} else {
player.getPackets()
.sendGameMessage(
"That player is already in combat.");
return;
}
}
}
player.getActionManager()
.setAction(new PlayerCombat(p2));
}
break;
}
case 192:
switch (componentId) {
case 25: // air strike
case 28: // water strike
case 30: // earth strike
case 32: // fire strike
case 34: // air bolt
case 39: // water bolt
case 42: // earth bolt
case 45: // fire bolt
case 49: // air blast
case 52: // water blast
case 58: // earth blast
case 63: // fire blast
case 70: // air wave
case 73: // water wave
case 77: // earth wave
case 80: // fire wave
case 86: // teleblock
case 84: // air surge
case 87: // water surge
case 89: // earth surge
case 91: // fire surge
case 99: // storm of armadyl
case 36: // bind
case 66: // Sara Strike
case 67: // Guthix Claws
case 68: // Flame of Zammy
case 55: // snare
case 81: // entangle
if (Magic.checkCombatSpell(player, componentId, 1, false)) {
player.setNextFaceWorldTile(new WorldTile(p2
.getCoordFaceX(p2.getSize()), p2
.getCoordFaceY(p2.getSize()), p2.getPlane()));
if (!player.getControlerManager().canAttack(p2))
return;
if (!player.isCanPvp() || !p2.isCanPvp()) {
player.getPackets()
.sendGameMessage(
"You can only attack players in a player-vs-player area.");
return;
}
if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
if (player.getAttackedBy() != p2
&& player.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets()
.sendGameMessage(
"That "
+ (player
.getAttackedBy() instanceof Player ? "player"
: "npc")
+ " is already in combat.");
return;
}
if (p2.getAttackedBy() != player
&& p2.getAttackedByDelay() > Utils
.currentTimeMillis()) {
if (p2.getAttackedBy() instanceof NPC) {
p2.setAttackedBy(player); // changes enemy
// to player,
// player has
// priority over
// npc on single
// areas
} else {
player.getPackets()
.sendGameMessage(
"That player is already in combat.");
return;
}
}
}
player.getActionManager()
.setAction(new PlayerCombat(p2));
}
break;
}
break;
}
if (Settings.DEBUG)
System.out.println("Spell:" + componentId);
} else if (packetId == INTERFACE_ON_NPC) {
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead())
return;
if (player.getLockDelay() > Utils.currentTimeMillis())
return;
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean unknown = stream.readByte() == 1;
int interfaceHash = stream.readInt();
int npcIndex = stream.readUnsignedShortLE();
int interfaceSlot = stream.readUnsignedShortLE128();
@[Only registered and activated users can see links. ]ressWarnings("unused")
int junk2 =stream.readUnsignedShortLE();
int interfaceId = interfaceHash >> 16;
int componentId = interfaceHash - (interfaceId << 16);
if (Utils.getInterfaceDefinitionsSize() <= interfaceId)
return;
if (!player.getInterfaceManager().containsInterface(i nterfaceId))
return;
if (componentId == 65535)
componentId = -1;
if (componentId != -1
&& Utils.getInterfaceDefinitionsComponentsSize(interf aceId) <= componentId)
return;
NPC npc = World.getNPCs().get(npcIndex);
if (npc == null || npc.isDead() || npc.hasFinished()
|| !player.getMapRegionsIds().contains(npc.getRegionI d()))
return;
player.stopAll(false);
if (interfaceId != Inventory.INVENTORY_INTERFACE) {
if (!npc.getDefinitions().hasAttackOption()) {
player.getPackets().sendGameMessage(
"You can't attack this npc.");
return;
}
}
switch (interfaceId) {
case Inventory.INVENTORY_INTERFACE:
Item item = player.getInventory().getItem(interfaceSlot);
if (item == null || !player.getControlerManager().processItemOnNPC(npc , item))
return;
InventoryOptionsHandler.handleItemOnNPC(player, npc, item);
break;
case 1165:
Summoning.attackDreadnipTarget(npc, player/*, stream*/);
break;
case 662:
case 747:
if (player.getFamiliar() == null)
return;
player.resetWalkSteps();
if ((interfaceId == 747 && componentId == 15)
|| (interfaceId == 662 && componentId == 65)
|| (interfaceId == 662 && componentId == 74)
|| interfaceId == 747 && componentId == 18
|| interfaceId == 747 && componentId == 24) {
if ((interfaceId == 662 && componentId == 74 || interfaceId == 747
&& componentId == 18)) {
if (player.getFamiliar().getSpecialAttack() != SpecialAttack.ENTITY)
return;
}
if(npc instanceof Familiar) {
Familiar familiar = (Familiar) npc;
if (familiar == player.getFamiliar()) {
player.getPackets().sendGameMessage("You can't attack your own familiar.");
return;
}
if (!player.getFamiliar().canAttack(familiar.getOwner ())) {
player.getPackets().sendGameMessage("You can only attack players in a player-vs-player area.");
return;
}
}
if (!player.getFamiliar().canAttack(npc)) {
player.getPackets()
.sendGameMessage(
"You can only use your familiar in a multi-zone area.");
return;
} else {
player.getFamiliar().setSpecial(
interfaceId == 662 && componentId == 74
|| interfaceId == 747
&& componentId == 18);
player.getFamiliar().setTarget(npc);
}
}
break;
case 193:
switch (componentId) {
case 28:
case 32:
case 24:
case 20:
case 30:
case 34:
case 26:
case 22:
case 29:
case 33:
case 25:
case 21:
case 31:
case 35:
case 27:
case 23:
if (Magic.checkCombatSpell(player, componentId, 1, false)) {
player.setNextFaceWorldTile(new WorldTile(npc
.getCoordFaceX(npc.getSize()), npc
.getCoordFaceY(npc.getSize()), npc.getPlane()));
if (!player.getControlerManager().canAttack(npc))
return;
if (npc instanceof Familiar) {
Familiar familiar = (Familiar) npc;
if (familiar == player.getFamiliar()) {
player.getPackets().sendGameMessage(
"You can't attack your own familiar.");
return;
}
if (!familiar.canAttack(player)) {
player.getPackets().sendGameMessage(
"You can't attack this npc.");
return;
}
} else if (!npc.isForceMultiAttacked()) {
if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
if (player.getAttackedBy() != npc
&& player.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"You are already in combat.");
return;
}
if (npc.getAttackedBy() != player
&& npc.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"This npc is already in combat.");
return;
}
}
}
player.getActionManager().setAction(
new PlayerCombat(npc));
}
break;
}
case 192:
switch (componentId) {
case 25: // air strike
case 28: // water strike
case 30: // earth strike
case 32: // fire strike
case 34: // air bolt
case 39: // water bolt
case 42: // earth bolt
case 45: // fire bolt
case 49: // air blast
case 52: // water blast
case 58: // earth blast
case 63: // fire blast
case 70: // air wave
case 73: // water wave
case 77: // earth wave
case 80: // fire wave
case 84: // air surge
case 87: // water surge
case 89: // earth surge
case 66: // Sara Strike
case 67: // Guthix Claws
case 68: // Flame of Zammy
case 93:
case 91: // fire surge
case 99: // storm of Armadyl
case 36: // bind
case 55: // snare
case 81: // entangle
if (Magic.checkCombatSpell(player, componentId, 1, false)) {
player.setNextFaceWorldTile(new WorldTile(npc
.getCoordFaceX(npc.getSize()), npc
.getCoordFaceY(npc.getSize()), npc.getPlane()));
if (!player.getControlerManager().canAttack(npc))
return;
if (npc instanceof Familiar) {
Familiar familiar = (Familiar) npc;
if (familiar == player.getFamiliar()) {
player.getPackets().sendGameMessage(
"You can't attack your own familiar.");
return;
}
if (!familiar.canAttack(player)) {
player.getPackets().sendGameMessage(
"You can't attack this npc.");
return;
}
} else if (!npc.isForceMultiAttacked()) {
if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
if (player.getAttackedBy() != npc
&& player.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"You are already in combat.");
return;
}
if (npc.getAttackedBy() != player
&& npc.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"This npc is already in combat.");
return;
}
}
}
player.getActionManager().setAction(
new PlayerCombat(npc));
}
break;
}
break;
}
if (Settings.DEBUG)
System.out.println("Spell:" + componentId);
} else if (packetId == NPC_CLICK1_PACKET)
NPCHandler.handleOption1(player, stream);
else if (packetId == NPC_CLICK2_PACKET)
NPCHandler.handleOption2(player, stream);
else if (packetId == NPC_CLICK3_PACKET)
NPCHandler.handleOption3(player, stream);
else if (packetId == OBJECT_CLICK1_PACKET)
ObjectHandler.handleOption(player, stream, 1);
else if (packetId == OBJECT_CLICK2_PACKET)
ObjectHandler.handleOption(player, stream, 2);
else if (packetId == OBJECT_CLICK3_PACKET)
ObjectHandler.handleOption(player, stream, 3);
else if (packetId == OBJECT_CLICK4_PACKET)
ObjectHandler.handleOption(player, stream, 4);
else if (packetId == OBJECT_CLICK5_PACKET)
ObjectHandler.handleOption(player, stream, 5);
else if (packetId == ITEM_TAKE_PACKET) {
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead())
return;
long currentTime = Utils.currentTimeMillis();
if (player.getLockDelay() > currentTime)
// || player.getFreezeDelay() >= currentTime)
return;
int y = stream.readUnsignedShort();
int x = stream.readUnsignedShortLE();
final int id = stream.readUnsignedShort();
boolean forceRun = stream.read128Byte() == 1;
final WorldTile tile = new WorldTile(x, y, player.getPlane());
final int regionId = tile.getRegionId();
if (!player.getMapRegionsIds().contains(regionId))
return;
final FloorItem item = World.getRegion(regionId).getGroundItem(id,
tile, player);
if (item == null)
return;
player.stopAll(false);
if(forceRun)
player.setRun(forceRun);
player.setCoordsEvent(new CoordsEvent(tile, new Runnable() {
@Override
public void run() {
final FloorItem item = World.getRegion(regionId)
.getGroundItem(id, tile, player);
if (item == null)
return;
/* if (player.getRights() > 0 || player.isSupporter())
player.getPackets().sendGameMessage("This item was dropped by [Username] "+item.getOwner().getUsername()+ " [DiplayName] "+item.getOwner().getDisplayName());
*/ player.setNextFaceWorldTile(tile);
player.addWalkSteps(tile.getX(), tile.getY(), 1);
World.removeGroundItem(player, item);
}
}, 1, 1));
}
}
public void processPackets(final int packetId, InputStream stream,
int length) {
player.setPacketsDecoderPing(Utils.currentTimeMill is());
if (packetId == PING_PACKET) {
// kk we ping
} else if (packetId == MOUVE_MOUSE_PACKET) {
// USELESS PACKET
} else if (packetId == KEY_TYPED_PACKET) {
// USELESS PACKET
} else if (packetId == RECEIVE_PACKET_COUNT_PACKET) {
// interface packets
stream.readInt();
} else if (packetId == ITEM_ON_ITEM_PACKET) {
InventoryOptionsHandler.handleItemOnItem(player, stream);
} else if (packetId == MAGIC_ON_ITEM_PACKET) {
int inventoryInter = stream.readInt() >> 16;
int itemId = stream.readShort128();
@[Only registered and activated users can see links. ]ressWarnings("unused")
int junk = stream.readShort();
@[Only registered and activated users can see links. ]ressWarnings("unused")
int itemSlot = stream.readShortLE();
int interfaceSet = stream.readIntV1();
int spellId = interfaceSet & 0xFFF;
int magicInter = interfaceSet >> 16;
if (inventoryInter == 149 && magicInter == 192) {
switch (spellId) {
case 59:// High Alch
if (player.getSkills().getLevel(Skills.MAGIC) < 55) {
player.getPackets()
.sendGameMessage(
"You do not have the required level to cast this spell.");
return;
}
if (itemId == 995) {
player.getPackets().sendGameMessage(
"You can't alch this!");
return;
}
if (player.getEquipment().getWeaponId() == 1401
|| player.getEquipment().getWeaponId() == 3054
|| player.getEquipment().getWeaponId() == 19323) {
if (!player.getInventory().containsItem(561, 1)) {
player.getPackets()
.sendGameMessage(
"You do not have the required runes to cast this spell.");
return;
}
player.setNextAnimation(new Animation(9633));
player.setNextGraphics(new Graphics(112));
player.getInventory().deleteItem(561, 1);
player.getInventory().deleteItem(itemId, 1);
player.getInventory()
.addItem(
995,
new Item(itemId, 1).getDefinitions()
.getValue() >> 6);
} else {
if (!player.getInventory().containsItem(561, 1)
|| !player.getInventory().containsItem(554, 5)) {
player.getPackets()
.sendGameMessage(
"You do not have the required runes to cast this spell.");
return;
}
player.setNextAnimation(new Animation(713));
player.setNextGraphics(new Graphics(113));
player.getInventory().deleteItem(561, 1);
player.getInventory().deleteItem(554, 5);
player.getInventory().deleteItem(itemId, 1);
player.getInventory()
.addItem(
995,
new Item(itemId, 1).getDefinitions()
.getValue() >> 6);
}
break;
default:
System.out.println("Spell:" + spellId + ", Item:" + itemId);
}
System.out.println("Spell:" + spellId + ", Item:" + itemId);
}
} else if (packetId == AFK_PACKET) {
player.getSession().getChannel().close();
} else if (packetId == CLOSE_INTERFACE_PACKET) {
if (player.hasStarted() && !player.hasFinished() && !player.isRunning()) { //used for old welcome screen
player.run();
return;
}
player.stopAll();
} else if (packetId == MOVE_CAMERA_PACKET) {
// not using it atm
stream.readUnsignedShort();
stream.readUnsignedShort();
} else if (packetId == IN_OUT_SCREEN_PACKET) {
// not using this check because not 100% efficient
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean inScreen = stream.readByte() == 1;
} else if (packetId == SCREEN_PACKET) {
int displayMode = stream.readUnsignedByte();
player.setScreenWidth(stream.readUnsignedShort());
player.setScreenHeight(stream.readUnsignedShort()) ;
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean switchScreenMode = stream.readUnsignedByte() == 1;
if (!player.hasStarted() || player.hasFinished()
|| displayMode == player.getDisplayMode()
|| !player.getInterfaceManager().containsInterface(74 2))
return;
player.setDisplayMode(displayMode);
player.getInterfaceManager().removeAll();
player.getInterfaceManager().sendInterfaces();
player.getInterfaceManager().sendInterface(742);
} else if (packetId == CLICK_PACKET) {
int mouseHash = stream.readShortLE128();
int mouseButton = mouseHash >> 15;
int time = mouseHash - (mouseButton << 15); // time
int positionHash = stream.readIntV1();
int y = positionHash >> 16; // y;
int x = positionHash - (y << 16); // x
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean clicked;
// mass click or stupid autoclicker, lets stop lagg
if (time <= 1 || x < 0 || x > player.getScreenWidth() || y < 0
|| y > player.getScreenHeight()) {
// player.getSession().getChannel().close();
clicked = false;
return;
}
clicked = true;
} else if (packetId == DIALOGUE_CONTINUE_PACKET) {
int interfaceHash = stream.readInt();
int junk = stream.readShort128();
int interfaceId = interfaceHash >> 16;
int buttonId = (interfaceHash & 0xFF);
if (Utils.getInterfaceDefinitionsSize() <= interfaceId) {
// hack, or server error or client error
// player.getSession().getChannel().close();
return;
}
if (!player.isRunning()
|| !player.getInterfaceManager().containsInterface(
interfaceId))
return;
if(Settings.DEBUG)
Logger.log(this, "Dialogue: "+interfaceId+", "+buttonId+", "+junk);
int componentId = interfaceHash - (interfaceId << 16);
player.getDialogueManager().continueDialogue(inter faceId,
componentId);
} else if (packetId == WORLD_MAP_CLICK) {
int coordinateHash = stream.readInt();
int x = coordinateHash >> 14;
int y = coordinateHash & 0x3fff;
int plane = coordinateHash >> 28;
Integer hash = (Integer)player.getTemporaryAttributtes().get("wor ldHash");
if (hash == null || coordinateHash != hash)
player.getTemporaryAttributtes().put("worldHash", coordinateHash);
else {
player.getTemporaryAttributtes().remove("worldHash ");
player.getHintIconsManager().addHintIcon(x, y, plane, 20, 0, 2, -1, true);
player.getPackets().sendConfig(1159, coordinateHash);
}
} else if (packetId == ACTION_BUTTON1_PACKET
|| packetId == ACTION_BUTTON2_PACKET
|| packetId == ACTION_BUTTON4_PACKET
|| packetId == ACTION_BUTTON5_PACKET
|| packetId == ACTION_BUTTON6_PACKET
|| packetId == ACTION_BUTTON7_PACKET
|| packetId == ACTION_BUTTON8_PACKET
|| packetId == ACTION_BUTTON3_PACKET
|| packetId == ACTION_BUTTON9_PACKET
|| packetId == ACTION_BUTTON10_PACKET) {
ButtonHandler.handleButtons(player, stream, packetId);
} else if (packetId == ENTER_NAME_PACKET) {
if (!player.isRunning() || player.isDead())
return;
String value = stream.readString();
if (value.equals(""))
return;
if (player.getInterfaceManager().containsInterface(11 08))
player.getFriendsIgnores().setChatPrefix(value);
else if (player.getTemporaryAttributtes().get("yellcolor") == Boolean.TRUE) {
if(value.length() != 6) {
player.getDialogueManager().startDialogue("SimpleM essage", "The HEX yell color you wanted to pick cannot be longer and shorter then 6.");
} else if(Utils.containsInvalidCharacter(value) || value.contains("_")) {
player.getDialogueManager().startDialogue("SimpleM essage", "The requested yell color can only contain numeric and regular characters.");
} else {
player.setYellColor(value);
player.getDialogueManager().startDialogue("SimpleM essage", "Your yell color has been changed to <col="+player.getYellColor()+">"+player.getYellCol or()+"</col>.");
}
player.getTemporaryAttributtes().put("yellcolor", Boolean.FALSE);
} else if (player.getTemporaryAttributtes().get("yellshade") == Boolean.TRUE) {
if(value.length() != 6) {
player.getDialogueManager().startDialogue("SimpleM essage", "The HEX yell shade you wanted to pick cannot be longer and shorter then 6.");
} else if(Utils.containsInvalidCharacter(value) || value.contains("_")) {
player.getDialogueManager().startDialogue("SimpleM essage", "The requested yell shade can only contain numeric and regular characters.");
} else {
player.setYellShade(value);
player.getDialogueManager().startDialogue("SimpleM essage", "Your yell color has been changed to <col="+player.getShadColor()+">"+player.getShadCol or()+"</col>.");
}
player.getTemporaryAttributtes().put("yellshade", Boolean.FALSE);
} else if (player.getTemporaryAttributtes().get("yellprefix" ) == Boolean.TRUE) {
String[] invalid = { "<euro", "<img", "<img=", "<col", "<col=",
"<shad", "<shad=", "<str>", "<u>" };
for (String s : invalid)
if (value.contains(s)) {
player.getPackets().sendGameMessage(
"You cannot add additional code to the message.");
return;
}
if(value.length() > 17) {
player.getDialogueManager().startDialogue("SimpleM essage", "The prefix cannot be more than 16 characters.");
} else {
player.setPrefix(value);
player.getDialogueManager().startDialogue("SimpleM essage", "Your yell prfix has been changed to "+player.getPrefix()+".");
}
player.getTemporaryAttributtes().put("yellprefix", Boolean.FALSE);
}
else if (player.getTemporaryAttributtes().get("entering_no te") == Boolean.TRUE) {
player.getNotes().add(new Note(value, 1));
player.getNotes().refresh();
player.getTemporaryAttributtes().put("entering_not e", Boolean.FALSE);
return;
} else if (player.getTemporaryAttributtes().get("editing_not e") == Boolean.TRUE) {
Note note = (Note) player.getTemporaryAttributtes().get("curNote");
player.getNotes().getNotes().get(player.getNotes() .getNotes().indexOf(note));
player.getNotes().refresh();
player.getTemporaryAttributtes().put("editing_note ", Boolean.FALSE);
} else if (player.getTemporaryAttributtes().get("view_name") == Boolean.TRUE) {
player.getTemporaryAttributtes().remove("view_name ");
Player other = World.getPlayerByDisplayName(value);
if (other == null) {
player.getPackets().sendGameMessage("Couldn't find player.");
return;
}
ClanWars clan = other.getCurrentFriendChat() != null ? other.getCurrentFriendChat().getClanWars() : null;
if (clan == null) {
player.getPackets().sendGameMessage("This player's clan is not in war.");
return;
}
if (clan.getSecondTeam().getOwnerDisplayName() != other.getCurrentFriendChat().getOwnerDisplayName() ) {
player.getTemporaryAttributtes().put("view_prefix" , 1);
}
player.getTemporaryAttributtes().put("view_clan", clan);
ClanWars.enter(player);
} else if (player.getTemporaryAttributtes().remove("setdispl ay") != null) {
if(Utils.invalidAccountName(Utils
.formatPlayerNameForProtocol(value))) {
player.getPackets().sendGameMessage("Invalid name!");
return;
}
if(!DisplayNames.setDisplayName(player, value)) {
player.getPackets().sendGameMessage("Name already in use!");
return;
}
player.getPackets().sendGameMessage("Changed display name!");
} else if (player.getTemporaryAttributtes().remove("checkvot einput") != null)
Vote.checkVote(player, value);
} else if (packetId == ENTER_STRING_PACKET) {
if (!player.isRunning() || player.isDead())
return;
String value = stream.readString();
if (value.equals(""))
return;
} else if (packetId == ENTER_INTEGER_PACKET) {
if (!player.isRunning() || player.isDead())
return;
int value = stream.readInt();
if ((player.getInterfaceManager().containsInterface(7 62) && player
.getInterfaceManager().containsInterface(763))
|| player.getInterfaceManager().containsInterface(11) ) {
if (value < 0)
return;
Integer bank_item_X_Slot = (Integer) player
.getTemporaryAttributtes().remove("bank_item_X_Slo t");
if (bank_item_X_Slot == null)
return;
player.getBank().setLastX(value);
player.getBank().refreshLastX();
if (player.getTemporaryAttributtes().remove("bank_isW ithdraw") != null)
player.getBank().withdrawItem(bank_item_X_Slot, value);
else
player.getBank()
.depositItem(
bank_item_X_Slot,
value,
player.getInterfaceManager()
.containsInterface(11) ? false
: true);
} else if (player.getTemporaryAttributtes().get("bank_pin") == Boolean.TRUE) {
if (value < 0)
return;
player.setBankPin(value);
player.hasBankPin = true;
player.getAppearence().generateAppearenceData();
player.getDialogueManager().startDialogue("SimpleM essage", "Your Bank Pin Is... <col=FF0000>"+player.getBankPin() + " </col>Remember it!");
player.getTemporaryAttributtes().put("bank_pin", Boolean.FALSE);
} else if (player.getTemporaryAttributtes().get("bank_pin1") == Boolean.TRUE) {
if (value < 0)
return;
if(player.pin != value) {
player.getDialogueManager().startDialogue("SimpleM essage", "Wrong Pin please try again.");
} else {
player.getAppearence().generateAppearenceData();
player.getDialogueManager().startDialogue("SimpleM essage", "You have entered your bank pin, Thank You");
player.hasEnteredPin = true;
}
player.getTemporaryAttributtes().put("bank_pin1", Boolean.FALSE);
} else if (player.getInterfaceManager().containsInterface(20 6)
&& player.getInterfaceManager().containsInterface(207 )) {
if (value < 0)
return;
Integer pc_item_X_Slot = (Integer) player
.getTemporaryAttributtes().remove("pc_item_X_Slot" );
if (pc_item_X_Slot == null)
return;
if (player.getTemporaryAttributtes().remove("pc_isRem ove") != null)
player.getPriceCheckManager().removeItem(pc_item_X _Slot,
value);
else
player.getPriceCheckManager()
.addItem(pc_item_X_Slot, value);
} else if (player.getInterfaceManager().containsInterface(67 1)
&& player.getInterfaceManager().containsInterface(665 )) {
if (player.getFamiliar() == null
|| player.getFamiliar().getBob() == null)
return;
if (value < 0)
return;
Integer bob_item_X_Slot = (Integer) player
.getTemporaryAttributtes().remove("bob_item_X_Slot ");
if (bob_item_X_Slot == null)
return;
if (player.getTemporaryAttributtes().remove("bob_isRe move") != null)
player.getFamiliar().getBob()
.removeItem(bob_item_X_Slot, value);
else
player.getFamiliar().getBob()
.addItem(bob_item_X_Slot, value);
} else if (player.getInterfaceManager().containsInterface(33 5)
&& player.getInterfaceManager().containsInterface(336 )) {
int playerIndex = stream.readUnsignedShortLE128();
@[Only registered and activated users can see links. ]ressWarnings("unused")
Player p2 = World.getPlayers().get(playerIndex);
if (value < 0)
return;
Integer trade_item_X_Slot = (Integer) player
.getTemporaryAttributtes().remove("trade_item_X_Sl ot");
if (trade_item_X_Slot == null)
return;
if (player.getTemporaryAttributtes().remove("trade_is Remove") != null)
player.getTrade().removeItem(trade_item_X_Slot, value);
else
player.getTrade().addItem(trade_item_X_Slot, value);
} else if (player.getTemporaryAttributtes().get("skillId") != null) {
if (player.getEquipment().wearingArmour()) {
player.getDialogueManager().finishDialogue();
player.getDialogueManager().startDialogue("SimpleM essage", "You cannot do this while having armour on!");
return;
}
int skillId = (Integer) player.getTemporaryAttributtes()
.remove("skillId");
if (skillId == Skills.HITPOINTS && value <= 9)
value = 10;
else if (value < 1)
value = 1;
else if (value > 99)
value = 99;
player.getSkills().set(skillId, value);
player.getSkills().setXp(skillId, Skills.getXPForLevel(value));
player.getAppearence().generateAppearenceData();
player.getDialogueManager().finishDialogue();
}//
else if (player.getTemporaryAttributtes().get("banning_sec urity") == Boolean.TRUE) {
if (value < 0)
return;
/**
* 1. Set a normal integer.
*/
//PIN STAFF E OUTROS
int Staffpin = 5555;
/**
* 2. Use math formula. (Advanced security)
*/
if (value != Staffpin) {
player.getDialogueManager().startDialogue("SimpleM essage",
"Access denied, you have been logged out.");
Logger.log("Security", "Unauthorized ban attempt by " + player.getDisplayName() + ".");
player.forceLogout();
} else {
player.getDialogueManager().startDialogue("SimpleM essage", "Access granted for current session.");
Logger.log("Security", "Authorized attempt by " + player.getDisplayName() + ".");
player.unlock();
player.hasStaffPin = true;
}
player.getTemporaryAttributtes().put("banning_secu rity", Boolean.FALSE);
}
else if (player.getTemporaryAttributtes().get("banning_sec urity_ayslan") == Boolean.TRUE) {
if (value < 0)
return;
/**
* 1. Set a normal integer.
*/
//PIN HAKUREN
int Hakurenpin = 8024;
/**
* 2. Use math formula. (Advanced security)
*/
if (value != Hakurenpin) {
player.getDialogueManager().startDialogue("SimpleM essage",
"Access denied, you have been logged out.");
Logger.log("Security", "Unauthorized ban attempt by " + player.getDisplayName() + ".");
player.forceLogout();
} else {
player.getDialogueManager().startDialogue("SimpleM essage", "Access granted for current session.");
Logger.log("Security", "Authorized attempt by " + player.getDisplayName() + ".");
player.unlock();
player.hasHakurenPin = true;
}
player.getTemporaryAttributtes().put("banning_secu rity_hakuren", Boolean.FALSE);
}
else if (player.getTemporaryAttributtes().get("banning_sec urity_hakuren") == Boolean.TRUE) {
if (value < 0)
return;
/**
* 1. Set a normal integer.
*/
//PIN AYSLAN
int Ayslanpin =8024;
/**
* 2. Use math formula. (Advanced security)
*/
if (value != Ayslanpin) {
player.getDialogueManager().startDialogue("SimpleM essage",
"Access denied, you have been logged out.");
Logger.log("Security", "Unauthorized ban attempt by " + player.getDisplayName() + ".");
player.forceLogout();
} else {
player.getDialogueManager().startDialogue("SimpleM essage", "Access granted for current session.");
Logger.log("Security", "Authorized attempt by " + player.getDisplayName() + ".");
player.unlock();
player.hasAyslanPin = true;
}
player.getTemporaryAttributtes().put("banning_secu rity_ayslan", Boolean.FALSE);
}
else if (player.getTemporaryAttributtes().get("banning_sec urity_titus") == Boolean.TRUE) {
if (value < 0)
return;
/**
* 1. Set a normal integer.
*/
}
else if (player.getTemporaryAttributtes().get("kilnX") != null) {
int index = (Integer) player.getTemporaryAttributtes().get("scIndex");
int componentId = (Integer) player.getTemporaryAttributtes().get("scComponentI d");
int itemId = (Integer) player.getTemporaryAttributtes().get("scItemId");
player.getTemporaryAttributtes().remove("kilnX");
if (StealingCreation.proccessKilnItems(player, componentId, index, itemId, value))
return;
} else if (player.getInterfaceManager().containsInterface(54 8) ||
player.getInterfaceManager().containsInterface(746 )) {
if (value < 0)
return;
}
Integer remove_X_money = (Integer) player.getTemporaryAttributtes().remove("remove_X_ money");
if(remove_X_money == null) {
return;
}
int amount = player.getInventory().getItems().getNumberOf(remov e_X_money);
if(player.getTemporaryAttributtes().remove("remove _money") != null) {
if (!player.getInventory().containsItem(995, 1) && !player.getInventory().hasFreeSlots()) {
player.getPackets().sendGameMessage("You need at least 1 inventory space to withdraw your coins.");
return;
}
if (player.money < 1) {
player.getPackets().sendGameMessage("You don't have any coins on your money pouch.");
return;
}
if(value <= player.money) {
if(amount + value > 0) {
player.getInventory().addItem(remove_X_money, value);
player.getPackets().sendRunScript(5561, 0, value);
player.money -= value;
player.refreshMoneyPouch();
} else {
player.getPackets().sendGameMessage("You can't have more then 2,147,483,647 coins in your inventory.");
}
} else {
if(amount + value > 0) {
player.getInventory().addItem(remove_X_money, player.money);
player.getPackets().sendRunScript(5561, 0, player.money);
player.money -= player.money;
player.refreshMoneyPouch();
} else {
player.getPackets().sendGameMessage("Please input a valid amount.");
}
}
}
} else if (packetId == SWITCH_INTERFACE_ITEM_PACKET) {
stream.readShortLE128();
int fromInterfaceHash = stream.readIntV1();
int toInterfaceHash = stream.readInt();
int fromSlot = stream.readUnsignedShort();
int toSlot = stream.readUnsignedShortLE128();
stream.readUnsignedShortLE();
int toInterfaceId = toInterfaceHash >> 16;
int toComponentId = toInterfaceHash - (toInterfaceId << 16);
int fromInterfaceId = fromInterfaceHash >> 16;
int fromComponentId = fromInterfaceHash - (fromInterfaceId << 16);
public class WorldPacketsEncoder extends Encoder {
private Player player;
public WorldPacketsEncoder(Session session, Player player) {
super(session);
this.player = player;
}
public Player getPlayer() {
return player;
}
public void sendPlayerUnderNPCPriority(boolean priority) {
OutputStream stream = new OutputStream(2);
stream.writePacket(player, 6);
stream.writeByteC(priority ? 1 : 0);
session.write(stream);
}
public void sendHintIcon(HintIcon icon) {
OutputStream stream = new OutputStream(15);
stream.writePacket(player, 79);
stream.writeByte((icon.getTargetType() & 0x1f) | (icon.getIndex() << 5));
if (icon.getTargetType() == 0)
stream.skip(13);
else {
stream.writeByte(icon.getArrowType());
if (icon.getTargetType() == 1 || icon.getTargetType() == 10) {
stream.writeShort(icon.getTargetIndex());
stream.writeShort(2500); // how often the arrow flashes, 2500 ideal, 0 never
stream.skip(4);
} else if ((icon.getTargetType() >= 2 && icon.getTargetType() <= 6)) { // directions
stream.writeByte(icon.getPlane()); // unknown
stream.writeShort(icon.getCoordX());
stream.writeShort(icon.getCoordY());
stream.writeByte(icon.getDistanceFromFloor() * 4 >> 2);
stream.writeShort(-1); //distance to start showing on minimap, 0 doesnt show, -1 infinite
}
stream.writeInt(icon.getModelId());
}
session.write(stream);
}
public void sendCameraShake(int slotId, int b, int c, int d, int e) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 44);
stream.writeByte128(b);
stream.writeByte128(slotId);
stream.writeByte128;
stream.writeByte128(c);
stream.writeShortLE(e);
session.write(stream);
}
public void sendStopCameraShake() {
OutputStream stream = new OutputStream(1);
stream.writePacket(player, 131);
session.write(stream);
}
public void sendIComponentModel(int interfaceId, int componentId,
int modelId) {
OutputStream stream = new OutputStream(9);
stream.writePacket(player, 102);
stream.writeIntV1(modelId);
stream.writeIntV1(interfaceId << 16 | componentId);
session.write(stream);
}
public void sendHideIComponent(int interfaceId, int componentId,
boolean hidden) {
OutputStream stream = new OutputStream(6);
stream.writePacket(player, 112);
stream.writeIntV2(interfaceId << 16 | componentId);
stream.writeByte(hidden ? 1 : 0);
session.write(stream);
}
public void sendRemoveGroundItem(FloorItem item) {
OutputStream stream = createWorldTileStream(item.getTile());
int localX = item.getTile().getLocalX(
player.getLastLoadedMapRegionTile(), player.getMapSize());
int localY = item.getTile().getLocalY(
player.getLastLoadedMapRegionTile(), player.getMapSize());
int offsetX = localX - ((localX >> 3) << 3);
int offsetY = localY - ((localY >> 3) << 3);
stream.writePacket(player, 108);
stream.writeShortLE(item.getId());
stream.write128Byte((offsetX << 4) | offsetY);
session.write(stream);
public void sendProjectile(Entity receiver, WorldTile startTile,
WorldTile endTile, int gfxId, int startHeight, int endHeight,
int speed, int delay, int curve, int startDistanceOffset,
int creatorSize) {
OutputStream stream = createWorldTileStream(startTile);
stream.writePacket(player, 20);
int localX = startTile.getLocalX(player.getLastLoadedMapRegionT ile(),
player.getMapSize());
int localY = startTile.getLocalY(player.getLastLoadedMapRegionT ile(),
player.getMapSize());
int offsetX = localX - ((localX >> 3) << 3);
int offsetY = localY - ((localY >> 3) << 3);
stream.writeByte((offsetX << 3) | offsetY);
stream.writeByte(endTile.getX() - startTile.getX());
stream.writeByte(endTile.getY() - startTile.getY());
stream.writeShort(receiver == null ? 0
: (receiver instanceof Player ? -(receiver.getIndex() + 1)
: receiver.getIndex() + 1));
stream.writeShort(gfxId);
stream.writeByte(startHeight);
stream.writeByte(endHeight);
stream.writeShort(delay);
int duration = (Utils.getDistance(startTile.getX(), startTile.getY(),
endTile.getX(), endTile.getY()) * 30 / ((speed / 10) < 1 ? 1
: (speed / 10)))
+ delay;
stream.writeShort(duration);
stream.writeByte(curve);
stream.writeShort(creatorSize * 64 + startDistanceOffset * 64);
session.write(stream);
}
public void sendUnlockIComponentOptionSlots(int interfaceId,
int componentId, int fromSlot, int toSlot, int... optionsSlots) {
int settingsHash = 0;
for (int slot : optionsSlots)
settingsHash |= 2 << slot;
sendIComponentSettings(interfaceId, componentId, fromSlot, toSlot,
settingsHash);
}
public void sendIComponentSettings(int interfaceId, int componentId,
int fromSlot, int toSlot, int settingsHash) {
OutputStream stream = new OutputStream(13);
stream.writePacket(player, 40);
stream.writeIntV2(settingsHash);
stream.writeInt(interfaceId << 16 | componentId);
stream.writeShort128(fromSlot);
stream.writeShortLE(toSlot);
session.write(stream);
}
public void sendInterFlashScript(int interfaceId,
int componentId, int width, int height, int slot) {
Object[] parameters = new Object[4];
int index = 0;
parameters[index++] = slot;
parameters[index++] = height;
parameters[index++] = width;
parameters[index++] = interfaceId << 16 | componentId;
sendRunScript(143, parameters);
}
public void sendInterSetItemsOptionsScript(int interfaceId,
int componentId, int key, int width, int height, String... options) {
sendInterSetItemsOptionsScript(interfaceId, componentId, key, false, width, height, options);
}
public void sendInterSetItemsOptionsScript(int interfaceId,
int componentId, int key, boolean negativeKey, int width, int height, String... options) {
Object[] parameters = new Object[6 + options.length];
int index = 0;
for (int count = options.length - 1; count >= 0; count--)
parameters[index++] = options[count];
parameters[index++] = -1; // dunno but always this
parameters[index++] = 0;// dunno but always this, maybe startslot?
parameters[index++] = height;
parameters[index++] = width;
parameters[index++] = key;
parameters[index++] = interfaceId << 16 | componentId;
sendRunScript(negativeKey ? 695 : 150, parameters); // scriptid 150 does that the method
// name says*/
}
public void sendInputNameScript(String message) {
sendRunScript(109, new Object[] { message });
}
public void sendInputIntegerScript(boolean integerEntryOnly, String message) {
sendRunScript(108, new Object[] { message });
}
public void sendInputLongTextScript(String message) {
sendRunScript(110, new Object[] { message });
}
public void sendRunScript(int scriptId, Object... params) {
OutputStream stream = new OutputStream();
stream.writePacketVarShort(player, 119);
String parameterTypes = "";
if (params != null) {
for (int count = params.length - 1; count >= 0; count--) {
if (params[count] instanceof String)
parameterTypes += "s"; // string
else
parameterTypes += "i"; // integer
}
}
stream.writeString(parameterTypes);
if (params != null) {
int index = 0;
for (int count = parameterTypes.length() - 1; count >= 0; count--) {
if (parameterTypes.charAt(count) == 's')
stream.writeString((String) params[index++]);
else
stream.writeInt((Integer) params[index++]);
}
}
stream.writeInt(scriptId);
stream.endPacketVarShort();
session.write(stream);
}
public void sendGlobalConfig(int id, int value) {
if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE)
sendGlobalConfig2(id, value);
else
sendGlobalConfig1(id, value);
}
public void sendGlobalConfig1(int id, int value) {
OutputStream stream = new OutputStream(4);
stream.writePacket(player, 154);
stream.writeByteC(value);
stream.writeShort128(id);
session.write(stream);
}
public void sendGlobalConfig2(int id, int value) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 63);
stream.writeShort128(id);
stream.writeInt(value);
session.write(stream);
}
public void sendConfig(int id, int value) {
if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE)
sendConfig2(id, value);
else
sendConfig1(id, value);
}
public void sendConfigByFile(int fileId, int value) {
if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE)
sendConfigByFile2(fileId, value);
else
sendConfigByFile1(fileId, value);
}
public void sendConfig1(int id, int value) {
OutputStream stream = new OutputStream(4);
stream.writePacket(player, 110);
stream.writeShortLE128(id);
stream.writeByte128(value);
session.write(stream);
}
public void sendConfig2(int id, int value) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 56);
stream.writeShort128(id);
stream.writeIntLE(value);
session.write(stream);
}
public void sendConfigByFile1(int fileId, int value) {
OutputStream stream = new OutputStream(4);
stream.writePacket(player, 111);
stream.writeShort128(fileId);
stream.writeByteC(value);
session.write(stream);
}
public void sendConfigByFile2(int fileId, int value) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 81);
stream.writeIntV1(value);
stream.writeShort128(fileId);
session.write(stream);
}
public void sendRunEnergy() {
OutputStream stream = new OutputStream(2);
stream.writePacket(player, 25);
stream.writeByte(player.getRunEnergy());
session.write(stream);
}
public void sendIComponentText(int interfaceId, int componentId, String text) {
OutputStream stream = new OutputStream();
stream.writePacketVarShort(player, 135);
stream.writeString(text);
stream.writeInt(interfaceId << 16 | componentId);
stream.endPacketVarShort();
session.write(stream);
}
public void sendIComponentAnimation(int emoteId, int interfaceId,
int componentId) {
OutputStream stream = new OutputStream(9);
stream.writePacket(player, 103);
stream.writeIntV2(emoteId);
stream.writeInt(interfaceId << 16 | componentId);
session.write(stream);
}
public void sendItemOnIComponent(int interfaceid, int componentId, int id,
int amount) {
OutputStream stream = new OutputStream(11);
stream.writePacket(player, 152);
stream.writeShort128(id);
stream.writeIntV1(amount);
stream.writeIntV2(interfaceid << 16 | componentId);
session.write(stream);
}
public void sendEntityOnIComponent(boolean isPlayer, int entityId,
int interfaceId, int componentId) {
if (isPlayer)
sendPlayerOnIComponent(interfaceId, componentId);
else
sendNPCOnIComponent(interfaceId, componentId, entityId);
}
public void sendWorldTile(WorldTile tile) {
session.write(createWorldTileStream(tile));
}
public void sendTradeRequestMessage(Player p) {
sendMessage(100, "wishes to trade with you.", p);
}
public void sendClanWarsRequestMessage(Player p) {
sendMessage(101, "wishes to challenge your clan to a clan war.", p);
}
public void sendDuelChallengeRequestMessage(Player p, boolean friendly) {
sendMessage(101, "wishes to duel with you("
+ (friendly ? "friendly" : "stake") + ").", p);
}
public void sendMessage(int type, String text, Player p) {
int maskData = 0;
if (p != null) {
maskData |= 0x1;
if (p.hasDisplayName())
maskData |= 0x2;
}
OutputStream stream = new OutputStream();
stream.writePacketVarByte(player, 136);
stream.writeSmart(type);
stream.writeInt(player.getTileHash()); // junk, not used by client
stream.writeByte(maskData);
if ((maskData & 0x1) != 0) {
stream.writeString(p.getDisplayName());
if (p.hasDisplayName())
stream.writeString(Utils.formatPlayerNameForDispla y(p
.getUsername()));
}
stream.writeString(text);
stream.endPacketVarByte();
session.write(stream);
}
// effect type 1 or 2(index4 or index14 format, index15 format unusused by
// jagex for now)
public void sendSound(int id, int delay, int effectType) {
if (effectType == 1)
sendIndex14Sound(id, delay);
else if (effectType == 2)
sendIndex15Sound(id, delay);
}
public void sendVoice(int id) {
resetSounds();
sendSound(id, 0, 2);
}
public void resetSounds() {
OutputStream stream = new OutputStream(1);
stream.writePacket(player, 145);
session.write(stream);
}
public void sendIndex14Sound(int id, int delay) {
OutputStream stream = new OutputStream(9);
stream.writePacket(player, 26);
stream.writeShort(id);
stream.writeByte(1);//repeated amount
stream.writeShort(delay);
stream.writeByte(255);
stream.writeShort(256);
session.write(stream);
}
public void sendIndex15Sound(int id, int delay) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 70);
stream.writeShort(id);
stream.writeByte(1); // amt of times it repeats
stream.writeShort(delay);
stream.writeByte(255); // volume
session.write(stream);
}
public void sendMusicEffect(int id) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 9);
stream.write128Byte(255); // volume
stream.write24BitIntegerV2(0);
stream.writeShort(id);
session.write(stream);
}
public void sendMusic(int id) {
sendMusic(id, 100, 255);
}
public void sendMusic(int id, int delay, int volume) {
OutputStream stream = new OutputStream(5);
stream.writePacket(player, 129);
stream.writeByte(delay);
stream.writeShortLE128(id);
stream.writeByte128(volume);
session.write(stream);
}
public void sendSkillLevel(int skill) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 146);
stream.write128Byte(skill);
stream.writeInt((int) player.getSkills().getXp(skill));
stream.writeByte128(player.getSkills().getLevel(sk ill));
session.write(stream);
}
// CUTSCENE PACKETS START
/**
* This will blackout specified area.
*
* @[Only registered and activated users can see links. ] byte area = area which will be blackout (0 = unblackout; 1 =
* blackout orb; 2 = blackout map; 5 = blackout orb and map)
*/
public void sendBlackOut(int area) {
OutputStream out = new OutputStream(2);
out.writePacket(player, 69);
out.writeByte(area);
session.write(out);
}
// instant
public void sendCameraLook(int viewLocalX, int viewLocalY, int viewZ) {
sendCameraLook(viewLocalX, viewLocalY, viewZ, -1, -1);
}
public void sendCameraLook(int viewLocalX, int viewLocalY, int viewZ,
int speed1, int speed2) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 116);
stream.writeByte128(viewLocalY);
stream.writeByte(speed1);
stream.writeByteC(viewLocalX);
stream.writeByte(speed2);
stream.writeShort128(viewZ >> 2);
session.write(stream);
}
public void sendResetCamera() {
OutputStream stream = new OutputStream(1);
stream.writePacket(player, 95);
session.write(stream);
}
public void sendCameraRotation(int unknown1, int unknown2) {
OutputStream stream = new OutputStream(5);
stream.writePacket(player, 123);
stream.writeShort(unknown1);
stream.writeShortLE(unknown1);
session.write(stream);
}
public void sendCameraPos(int moveLocalX, int moveLocalY, int moveZ) {
sendCameraPos(moveLocalX, moveLocalY, moveZ, -1, -1);
}
public void sendClientConsoleCommand(String command) {
OutputStream stream = new OutputStream();
stream.writePacketVarByte(player, 61);
stream.writeString(command);
stream.endPacketVarByte();
}
public void sendOpenURL(String url) {
OutputStream stream = new OutputStream();
stream.writePacketVarShort(player, 17);
stream.writeByte(0);
stream.writeString(url);
stream.endPacketVarShort();
session.write(stream);
}
public void sendSetMouse(String walkHereReplace, int cursor) {
OutputStream stream = new OutputStream();
stream.writePacketVarByte(player, 10);
stream.writeString(walkHereReplace);
stream.writeShort(cursor);
stream.endPacketVarByte();
session.write(stream);
}
public void sendItemsLook() {
OutputStream stream = new OutputStream(2);
stream.writePacket(player, 159);
stream.writeByte(player.isOldItemsLook() ? 1 : 0);
session.write(stream);
}
public void sendCameraPos(int moveLocalX, int moveLocalY, int moveZ,
int speed1, int speed2) {
OutputStream stream = new OutputStream(7);
stream.writePacket(player, 74);
stream.writeByte128(speed2);
stream.writeByte128(speed1);
stream.writeByte(moveLocalY);
stream.writeShort(moveZ >> 2);
stream.writeByte(moveLocalX);
session.write(stream);
}
public final class WorldPacketsDecoder extends Decoder {
private static final byte[] PACKET_SIZES = new byte[104];
private final static int WALKING_PACKET = 8;
private final static int PLAYER_OPTION_6_PACKET = 49;
private final static int MINI_WALKING_PACKET = 58;
private final static int AFK_PACKET = -1;
public final static int ACTION_BUTTON1_PACKET = 14;
public final static int ACTION_BUTTON2_PACKET = 67;
public final static int ACTION_BUTTON3_PACKET = 5;
public final static int ACTION_BUTTON4_PACKET = 55;
public final static int ACTION_BUTTON5_PACKET = 68;
public final static int ACTION_BUTTON6_PACKET = 90;
public final static int ACTION_BUTTON7_PACKET = 6;
public final static int ACTION_BUTTON8_PACKET = 32;
public final static int ACTION_BUTTON9_PACKET = 27;
public final static int WORLD_MAP_CLICK = 38;
public final static int ACTION_BUTTON10_PACKET = 96;
public final static int RECEIVE_PACKET_COUNT_PACKET = 33;
private final static int MAGIC_ON_ITEM_PACKET = -1;
private final static int PLAYER_OPTION_4_PACKET = 17;
private final static int MOVE_CAMERA_PACKET = 103;
private final static int INTERFACE_ON_OBJECT = 37;
private final static int CLICK_PACKET = -1;
private final static int MOUVE_MOUSE_PACKET = -1;
private final static int KEY_TYPED_PACKET = -1;
private final static int CLOSE_INTERFACE_PACKET = 54;
private final static int COMMANDS_PACKET = 60;
private final static int ITEM_ON_ITEM_PACKET = 3;
private final static int IN_OUT_SCREEN_PACKET = -1;
private final static int DONE_LOADING_REGION_PACKET = 30;
private final static int PING_PACKET = 21;
private final static int SCREEN_PACKET = 98;
private final static int CHAT_TYPE_PACKET = 83;
private final static int CHAT_PACKET = 53;
private final static int PUBLIC_QUICK_CHAT_PACKET = 86;
private final static int ADD_FRIEND_PACKET = 89;
private final static int ADD_IGNORE_PACKET = 4;
private final static int REMOVE_IGNORE_PACKET = 73;
private final static int JOIN_FRIEND_CHAT_PACKET = 36;
private final static int CHANGE_FRIEND_CHAT_PACKET = 22;
private final static int KICK_FRIEND_CHAT_PACKET = 74;
private final static int REMOVE_FRIEND_PACKET = 24;
private final static int SEND_FRIEND_MESSAGE_PACKET = 82;
private final static int SEND_FRIEND_QUICK_CHAT_PACKET = 0;
private final static int OBJECT_CLICK1_PACKET = 26;
private final static int OBJECT_CLICK2_PACKET = 59;
private final static int OBJECT_CLICK3_PACKET = 40;
private final static int OBJECT_CLICK4_PACKET = 23;
private final static int OBJECT_CLICK5_PACKET = 80;
private final static int OBJECT_EXAMINE_PACKET = 25;
private final static int NPC_CLICK1_PACKET = 31;
private final static int NPC_CLICK2_PACKET = 101;
private final static int NPC_CLICK3_PACKET = 34;
private final static int ATTACK_NPC = 20;
private final static int PLAYER_OPTION_1_PACKET = 42;
private final static int PLAYER_OPTION_2_PACKET = 46;
private final static int ITEM_TAKE_PACKET = 57;
private final static int DIALOGUE_CONTINUE_PACKET = 72;
private final static int ENTER_INTEGER_PACKET = 81;
private final static int ENTER_NAME_PACKET = 29;
private final static int ENTER_STRING_PACKET = -1;
private final static int SWITCH_INTERFACE_ITEM_PACKET = 76;
private final static int INTERFACE_ON_PLAYER = 50;
private final static int INTERFACE_ON_NPC = 66;
private final static int COLOR_ID_PACKET = 97;
private static final int NPC_EXAMINE_PACKET = 9;
private final static int REPORT_ABUSE_PACKET = -1;
public static void decodeLogicPacket(final Player player, LogicPacket packet) {
int packetId = packet.getId();
InputStream stream = new InputStream(packet.getData());
if (packetId == WALKING_PACKET || packetId == MINI_WALKING_PACKET) {
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead())
return;
long currentTime = Utils.currentTimeMillis();
if (player.getLockDelay() > currentTime)
return;
if (player.getFreezeDelay() >= currentTime) {
player.getPackets().sendGameMessage(
"A magical force prevents you from moving.");
return;
}
int length = stream.getLength();
/*if (packetId == MINI_WALKING_PACKET)
length -= 13;*/
int baseX = stream.readUnsignedShort128();
boolean forceRun = stream.readUnsigned128Byte() == 1;
int baseY = stream.readUnsignedShort128();
int steps = (length - 5) / 2;
if (steps > 25)
steps = 25;
player.stopAll();
if(forceRun)
player.setRun(forceRun);
for (int step = 0; step < steps; step++)
if (!player.addWalkSteps(baseX + stream.readUnsignedByte(),
baseY + stream.readUnsignedByte(), 25,
true))
break;
} else if (packetId == INTERFACE_ON_OBJECT) {
boolean forceRun = stream.readByte128() == 1;
int itemId = stream.readShortLE128();
int y = stream.readShortLE128();
int objectId = stream.readIntV2();
int interfaceHash = stream.readInt();
final int interfaceId = interfaceHash >> 16;
int slot = stream.readShortLE();
int x = stream.readShort128();
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead())
return;
long currentTime = Utils.currentTimeMillis();
if (player.getLockDelay() >= currentTime || player.getEmotesManager().getNextEmoteEnd() >= currentTime)
return;
final WorldTile tile = new WorldTile(x, y, player.getPlane());
int regionId = tile.getRegionId();
if (!player.getMapRegionsIds().contains(regionId))
return;
WorldObject mapObject = World.getRegion(regionId).getObject(objectId, tile);
if (mapObject == null || mapObject.getId() != objectId)
return;
final WorldObject object = !player.isAtDynamicRegion() ? mapObject : new WorldObject(objectId, mapObject.getType(), mapObject.getRotation(), x, y, player.getPlane());
final Item item = player.getInventory().getItem(slot);
if (player.isDead() || Utils.getInterfaceDefinitionsSize() <= interfaceId)
return;
if (player.getLockDelay() > Utils.currentTimeMillis())
return;
if (!player.getInterfaceManager().containsInterface(i nterfaceId))
return;
if (item == null || item.getId() != itemId)
return;
player.stopAll(false); // false
if(forceRun)
player.setRun(forceRun);
switch (interfaceId) {
case Inventory.INVENTORY_INTERFACE: // inventory
ObjectHandler.handleItemOnObject(player, object, interfaceId, item);
break;
}
} else if (packetId == PLAYER_OPTION_2_PACKET) {
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead())
return;
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean unknown = stream.readByte() == 1;
int playerIndex = stream.readUnsignedShortLE128();
Player p2 = World.getPlayers().get(playerIndex);
if (p2 == null || p2.isDead() || p2.hasFinished()
|| !player.getMapRegionsIds().contains(p2.getRegionId ()))
return;
if (player.getLockDelay() > Utils.currentTimeMillis())
return;
player.stopAll(false);
player.getActionManager().setAction(new PlayerFollow(p2));
} else if (packetId == PLAYER_OPTION_6_PACKET) {
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean unknown = stream.readByte() == 1;
int playerIndex = stream.readUnsignedShortLE128();
Player other = World.getPlayers().get(playerIndex);
if (other == null || other.isDead() || other.hasFinished()
|| !player.getMapRegionsIds().contains(other.getRegio nId()))
return;
if (player.getLockDelay() > Utils.currentTimeMillis())
return;
if (player.getInterfaceManager().containsScreenInter( )) {
player.getPackets()
.sendGameMessage("The other player is busy.");
return;
}
if (!other.withinDistance(player, 14)) {
player.getPackets().sendGameMessage(
"Unable to find target " + other.getDisplayName());
return;
}
if (player.getAttackedByDelay() + 10000 > Utils.currentTimeMillis()) {
player.getPackets()
.sendGameMessage(
"<col=B00000>You view "
+ other.getDisplayName()
+ " Stats's until 10 seconds after the end of combat.");
return;
}
player.getInterfaceManager().sendInterface(1314);
player.getPackets().sendIComponentText(1314, 91,
"" + other.getDisplayName() + "'s stats");
player.getPackets().sendIComponentText(1314, 90,
""+ other.getPrestige()+ " <col=00FF7F>FS - Prestige Points");
player.getPackets().sendIComponentText(1314, 61,
"" + other.getSkills().getLevel(0));
player.getPackets().sendIComponentText(1314, 62,
"" + other.getSkills().getLevel(2));
player.getPackets().sendIComponentText(1314, 63,
"" + other.getSkills().getLevel(1));
player.getPackets().sendIComponentText(1314, 65,
"" + other.getSkills().getLevel(4));
player.getPackets().sendIComponentText(1314, 66,
"" + other.getSkills().getLevel(5));
player.getPackets().sendIComponentText(1314, 64,
"" + other.getSkills().getLevel(6));
player.getPackets().sendIComponentText(1314, 78,
"" + other.getSkills().getLevel(20));
player.getPackets().sendIComponentText(1314, 81,
"" + other.getSkills().getLevel(22));
player.getPackets().sendIComponentText(1314, 76,
"" + other.getSkills().getLevel(24));
player.getPackets().sendIComponentText(1314, 82,
"" + other.getSkills().getLevel(3));
player.getPackets().sendIComponentText(1314, 83,
"" + other.getSkills().getLevel(16));
player.getPackets().sendIComponentText(1314, 84,
"" + other.getSkills().getLevel(15));
player.getPackets().sendIComponentText(1314, 80,
"" + other.getSkills().getLevel(17));
player.getPackets().sendIComponentText(1314, 70,
"" + other.getSkills().getLevel(12));
player.getPackets().sendIComponentText(1314, 85,
"" + other.getSkills().getLevel(9));
player.getPackets().sendIComponentText(1314, 77,
"" + other.getSkills().getLevel(18));
player.getPackets().sendIComponentText(1314, 79,
"" + other.getSkills().getLevel(21));
player.getPackets().sendIComponentText(1314, 68,
"" + other.getSkills().getLevel(14));
player.getPackets().sendIComponentText(1314, 69,
"" + other.getSkills().getLevel(13));
player.getPackets().sendIComponentText(1314, 74,
"" + other.getSkills().getLevel(10));
player.getPackets().sendIComponentText(1314, 75,
"" + other.getSkills().getLevel(7));
player.getPackets().sendIComponentText(1314, 73,
"" + other.getSkills().getLevel(11));
player.getPackets().sendIComponentText(1314, 71,
"" + other.getSkills().getLevel(8));
player.getPackets().sendIComponentText(1314, 72,
"" + other.getSkills().getLevel(19));
player.getPackets().sendIComponentText(1314, 67,
"" + other.getSkills().getLevel(23));
player.getPackets().sendIComponentText(1314, 87,
"" + other.getMaxHitpoints());
player.getPackets().sendIComponentText(1314, 86,
"" + other.getSkills().getCombatLevelWithSummoning());
player.getPackets().sendIComponentText(1314, 88,
"" + other.getSkills().getTotalLevel(other));
player.getPackets().sendIComponentText(1314, 89,
"" + other.getSkills().getTotalXp(other));
player.getTemporaryAttributtes().put("finding_play er",
Boolean.FALSE);
} else if (packetId == PLAYER_OPTION_4_PACKET) {
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean unknown = stream.readByte() == 1;
int playerIndex = stream.readUnsignedShortLE128();
Player p2 = World.getPlayers().get(playerIndex);
if (p2 == null || p2.isDead() || p2.hasFinished()
|| !player.getMapRegionsIds().contains(p2.getRegionId ()))
return;
if (player.getLockDelay() > Utils.currentTimeMillis())
return;
player.stopAll(false);
if(player.isCantTrade()) {
player.getPackets().sendGameMessage("You are busy.");
return;
}
if (p2.getInterfaceManager().containsScreenInter() || p2.isCantTrade()) {
player.getPackets().sendGameMessage("The other player is busy.");
return;
}
if (!p2.withinDistance(player, 14)) {
player.getPackets().sendGameMessage(
"Unable to find target "+p2.getDisplayName());
return;
}
if (p2.getTemporaryAttributtes().get("TradeTarget") == player) {
p2.getTemporaryAttributtes().remove("TradeTarget") ;
player.getTrade().openTrade(p2);
p2.getTrade().openTrade(player);
return;
}
player.getTemporaryAttributtes().put("TradeTarget" , p2);
player.getPackets().sendGameMessage("Sending " + p2.getDisplayName() + " a request...");
p2.getPackets().sendTradeRequestMessage(player);
//tradelogs
String location = "";
location = "data/tradelogs/" + player.getUsername() + ".txt";
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(location,
true));
writer.write("[TRADE SENT] "+ player.getDisplayName()+" to "+p2.getDisplayName()+" .");
writer.newLine();
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
} else if (packetId == PLAYER_OPTION_1_PACKET) {
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead())
return;
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean unknown = stream.readByte() == 1;
int playerIndex = stream.readUnsignedShortLE128();
Player p2 = World.getPlayers().get(playerIndex);
if (p2 == null || p2.isDead() || p2.hasFinished()
|| !player.getMapRegionsIds().contains(p2.getRegionId ()))
return;
if (player.getLockDelay() > Utils.currentTimeMillis()
|| !player.getControlerManager().canPlayerOption1(p2) )
return;
if (!player.isCanPvp())
return;
if (!player.getControlerManager().canAttack(p2))
return;
if (!player.isCanPvp() || !p2.isCanPvp()) {
player.getPackets()
.sendGameMessage(
"You can only attack players in a player-vs-player area.");
return;
}
if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
if (player.getAttackedBy() != p2
&& player.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"You are already in combat.");
return;
}
if (p2.getAttackedBy() != player
&& p2.getAttackedByDelay() > Utils.currentTimeMillis()) {
if (p2.getAttackedBy() instanceof NPC) {
p2.setAttackedBy(player); // changes enemy to player,
// player has priority over
// npc on single areas
} else {
player.getPackets().sendGameMessage(
"That player is already in combat.");
return;
}
}
}
player.stopAll(false);
player.getActionManager().setAction(new PlayerCombat(p2));
} else if (packetId == ATTACK_NPC) {
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead()) {
return;
}
if (player.getLockDelay() > Utils.currentTimeMillis()) {
return;
}
int npcIndex = stream.readUnsignedShort128();
boolean forceRun = stream.read128Byte() == 1;
if(forceRun)
player.setRun(forceRun);
NPC npc = World.getNPCs().get(npcIndex);
if (npc == null || npc.isDead() || npc.hasFinished()
|| !player.getMapRegionsIds().contains(npc.getRegionI d())
|| !npc.getDefinitions().hasAttackOption()) {
return;
}
if (!player.getControlerManager().canAttack(npc)) {
return;
}
if (npc instanceof Familiar) {
Familiar familiar = (Familiar) npc;
if (familiar == player.getFamiliar()) {
player.getPackets().sendGameMessage(
"You can't attack your own familiar.");
return;
}
if (!familiar.canAttack(player)) {
player.getPackets().sendGameMessage(
"You can't attack this npc.");
return;
}
} else if (!npc.isForceMultiAttacked()) {
if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
if (player.getAttackedBy() != npc
&& player.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"You are already in combat.");
return;
}
if (npc.getAttackedBy() != player
&& npc.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"This npc is already in combat.");
return;
}
}
}
player.stopAll(false);
player.getActionManager().setAction(new PlayerCombat(npc));
} else if (packetId == INTERFACE_ON_PLAYER) {
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead())
return;
if (player.getLockDelay() > Utils.currentTimeMillis())
return;
@[Only registered and activated users can see links. ]ressWarnings("unused")
int junk1 = stream.readUnsignedShort();
int playerIndex = stream.readUnsignedShort();
int interfaceHash = stream.readIntV2();
@[Only registered and activated users can see links. ]ressWarnings("unused")
int junk2 = stream.readUnsignedShortLE128();
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean unknown = stream.read128Byte() == 1;
int interfaceId = interfaceHash >> 16;
int componentId = interfaceHash - (interfaceId << 16);
if (Utils.getInterfaceDefinitionsSize() <= interfaceId)
return;
if (!player.getInterfaceManager().containsInterface(i nterfaceId))
return;
if (componentId == 65535)
componentId = -1;
if (componentId != -1
&& Utils.getInterfaceDefinitionsComponentsSize(interf aceId) <= componentId)
return;
Player p2 = World.getPlayers().get(playerIndex);
if (p2 == null || p2.isDead() || p2.hasFinished()
|| !player.getMapRegionsIds().contains(p2.getRegionId ()))
return;
player.stopAll(false);
switch (interfaceId) {
case 662:
case 747:
if (player.getFamiliar() == null)
return;
player.resetWalkSteps();
if ((interfaceId == 747 && componentId == 15)
|| (interfaceId == 662 && componentId == 65)
|| (interfaceId == 662 && componentId == 74)
|| interfaceId == 747 && componentId == 18) {
if ((interfaceId == 662 && componentId == 74
|| interfaceId == 747 && componentId == 24 || interfaceId == 747
&& componentId == 18)) {
if (player.getFamiliar().getSpecialAttack() != SpecialAttack.ENTITY)
return;
}
if (!player.isCanPvp() || !p2.isCanPvp()) {
player.getPackets()
.sendGameMessage(
"You can only attack players in a player-vs-player area.");
return;
}
if (!player.getFamiliar().canAttack(p2)) {
player.getPackets()
.sendGameMessage(
"You can only use your familiar in a multi-zone area.");
return;
} else {
player.getFamiliar().setSpecial(
interfaceId == 662 && componentId == 74
|| interfaceId == 747
&& componentId == 18);
player.getFamiliar().setTarget(p2);
}
}
break;
case 193:
switch (componentId) {
case 28:
case 32:
case 24:
case 20:
case 30:
case 34:
case 26:
case 22:
case 29:
case 33:
case 25:
case 21:
case 31:
case 35:
case 27:
case 23:
if (Magic.checkCombatSpell(player, componentId, 1, false)) {
player.setNextFaceWorldTile(new WorldTile(p2
.getCoordFaceX(p2.getSize()), p2
.getCoordFaceY(p2.getSize()), p2.getPlane()));
if (!player.getControlerManager().canAttack(p2))
return;
if (!player.isCanPvp() || !p2.isCanPvp()) {
player.getPackets()
.sendGameMessage(
"You can only attack players in a player-vs-player area.");
return;
}
if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
if (player.getAttackedBy() != p2
&& player.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets()
.sendGameMessage(
"That "
+ (player
.getAttackedBy() instanceof Player ? "player"
: "npc")
+ " is already in combat.");
return;
}
if (p2.getAttackedBy() != player
&& p2.getAttackedByDelay() > Utils
.currentTimeMillis()) {
if (p2.getAttackedBy() instanceof NPC) {
p2.setAttackedBy(player); // changes enemy
// to player,
// player has
// priority over
// npc on single
// areas
} else {
player.getPackets()
.sendGameMessage(
"That player is already in combat.");
return;
}
}
}
player.getActionManager()
.setAction(new PlayerCombat(p2));
}
break;
}
case 192:
switch (componentId) {
case 25: // air strike
case 28: // water strike
case 30: // earth strike
case 32: // fire strike
case 34: // air bolt
case 39: // water bolt
case 42: // earth bolt
case 45: // fire bolt
case 49: // air blast
case 52: // water blast
case 58: // earth blast
case 63: // fire blast
case 70: // air wave
case 73: // water wave
case 77: // earth wave
case 80: // fire wave
case 86: // teleblock
case 84: // air surge
case 87: // water surge
case 89: // earth surge
case 91: // fire surge
case 99: // storm of armadyl
case 36: // bind
case 66: // Sara Strike
case 67: // Guthix Claws
case 68: // Flame of Zammy
case 55: // snare
case 81: // entangle
if (Magic.checkCombatSpell(player, componentId, 1, false)) {
player.setNextFaceWorldTile(new WorldTile(p2
.getCoordFaceX(p2.getSize()), p2
.getCoordFaceY(p2.getSize()), p2.getPlane()));
if (!player.getControlerManager().canAttack(p2))
return;
if (!player.isCanPvp() || !p2.isCanPvp()) {
player.getPackets()
.sendGameMessage(
"You can only attack players in a player-vs-player area.");
return;
}
if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
if (player.getAttackedBy() != p2
&& player.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets()
.sendGameMessage(
"That "
+ (player
.getAttackedBy() instanceof Player ? "player"
: "npc")
+ " is already in combat.");
return;
}
if (p2.getAttackedBy() != player
&& p2.getAttackedByDelay() > Utils
.currentTimeMillis()) {
if (p2.getAttackedBy() instanceof NPC) {
p2.setAttackedBy(player); // changes enemy
// to player,
// player has
// priority over
// npc on single
// areas
} else {
player.getPackets()
.sendGameMessage(
"That player is already in combat.");
return;
}
}
}
player.getActionManager()
.setAction(new PlayerCombat(p2));
}
break;
}
break;
}
if (Settings.DEBUG)
System.out.println("Spell:" + componentId);
} else if (packetId == INTERFACE_ON_NPC) {
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead())
return;
if (player.getLockDelay() > Utils.currentTimeMillis())
return;
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean unknown = stream.readByte() == 1;
int interfaceHash = stream.readInt();
int npcIndex = stream.readUnsignedShortLE();
int interfaceSlot = stream.readUnsignedShortLE128();
@[Only registered and activated users can see links. ]ressWarnings("unused")
int junk2 =stream.readUnsignedShortLE();
int interfaceId = interfaceHash >> 16;
int componentId = interfaceHash - (interfaceId << 16);
if (Utils.getInterfaceDefinitionsSize() <= interfaceId)
return;
if (!player.getInterfaceManager().containsInterface(i nterfaceId))
return;
if (componentId == 65535)
componentId = -1;
if (componentId != -1
&& Utils.getInterfaceDefinitionsComponentsSize(interf aceId) <= componentId)
return;
NPC npc = World.getNPCs().get(npcIndex);
if (npc == null || npc.isDead() || npc.hasFinished()
|| !player.getMapRegionsIds().contains(npc.getRegionI d()))
return;
player.stopAll(false);
if (interfaceId != Inventory.INVENTORY_INTERFACE) {
if (!npc.getDefinitions().hasAttackOption()) {
player.getPackets().sendGameMessage(
"You can't attack this npc.");
return;
}
}
switch (interfaceId) {
case Inventory.INVENTORY_INTERFACE:
Item item = player.getInventory().getItem(interfaceSlot);
if (item == null || !player.getControlerManager().processItemOnNPC(npc , item))
return;
InventoryOptionsHandler.handleItemOnNPC(player, npc, item);
break;
case 1165:
Summoning.attackDreadnipTarget(npc, player/*, stream*/);
break;
case 662:
case 747:
if (player.getFamiliar() == null)
return;
player.resetWalkSteps();
if ((interfaceId == 747 && componentId == 15)
|| (interfaceId == 662 && componentId == 65)
|| (interfaceId == 662 && componentId == 74)
|| interfaceId == 747 && componentId == 18
|| interfaceId == 747 && componentId == 24) {
if ((interfaceId == 662 && componentId == 74 || interfaceId == 747
&& componentId == 18)) {
if (player.getFamiliar().getSpecialAttack() != SpecialAttack.ENTITY)
return;
}
if(npc instanceof Familiar) {
Familiar familiar = (Familiar) npc;
if (familiar == player.getFamiliar()) {
player.getPackets().sendGameMessage("You can't attack your own familiar.");
return;
}
if (!player.getFamiliar().canAttack(familiar.getOwner ())) {
player.getPackets().sendGameMessage("You can only attack players in a player-vs-player area.");
return;
}
}
if (!player.getFamiliar().canAttack(npc)) {
player.getPackets()
.sendGameMessage(
"You can only use your familiar in a multi-zone area.");
return;
} else {
player.getFamiliar().setSpecial(
interfaceId == 662 && componentId == 74
|| interfaceId == 747
&& componentId == 18);
player.getFamiliar().setTarget(npc);
}
}
break;
case 193:
switch (componentId) {
case 28:
case 32:
case 24:
case 20:
case 30:
case 34:
case 26:
case 22:
case 29:
case 33:
case 25:
case 21:
case 31:
case 35:
case 27:
case 23:
if (Magic.checkCombatSpell(player, componentId, 1, false)) {
player.setNextFaceWorldTile(new WorldTile(npc
.getCoordFaceX(npc.getSize()), npc
.getCoordFaceY(npc.getSize()), npc.getPlane()));
if (!player.getControlerManager().canAttack(npc))
return;
if (npc instanceof Familiar) {
Familiar familiar = (Familiar) npc;
if (familiar == player.getFamiliar()) {
player.getPackets().sendGameMessage(
"You can't attack your own familiar.");
return;
}
if (!familiar.canAttack(player)) {
player.getPackets().sendGameMessage(
"You can't attack this npc.");
return;
}
} else if (!npc.isForceMultiAttacked()) {
if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
if (player.getAttackedBy() != npc
&& player.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"You are already in combat.");
return;
}
if (npc.getAttackedBy() != player
&& npc.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"This npc is already in combat.");
return;
}
}
}
player.getActionManager().setAction(
new PlayerCombat(npc));
}
break;
}
case 192:
switch (componentId) {
case 25: // air strike
case 28: // water strike
case 30: // earth strike
case 32: // fire strike
case 34: // air bolt
case 39: // water bolt
case 42: // earth bolt
case 45: // fire bolt
case 49: // air blast
case 52: // water blast
case 58: // earth blast
case 63: // fire blast
case 70: // air wave
case 73: // water wave
case 77: // earth wave
case 80: // fire wave
case 84: // air surge
case 87: // water surge
case 89: // earth surge
case 66: // Sara Strike
case 67: // Guthix Claws
case 68: // Flame of Zammy
case 93:
case 91: // fire surge
case 99: // storm of Armadyl
case 36: // bind
case 55: // snare
case 81: // entangle
if (Magic.checkCombatSpell(player, componentId, 1, false)) {
player.setNextFaceWorldTile(new WorldTile(npc
.getCoordFaceX(npc.getSize()), npc
.getCoordFaceY(npc.getSize()), npc.getPlane()));
if (!player.getControlerManager().canAttack(npc))
return;
if (npc instanceof Familiar) {
Familiar familiar = (Familiar) npc;
if (familiar == player.getFamiliar()) {
player.getPackets().sendGameMessage(
"You can't attack your own familiar.");
return;
}
if (!familiar.canAttack(player)) {
player.getPackets().sendGameMessage(
"You can't attack this npc.");
return;
}
} else if (!npc.isForceMultiAttacked()) {
if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
if (player.getAttackedBy() != npc
&& player.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"You are already in combat.");
return;
}
if (npc.getAttackedBy() != player
&& npc.getAttackedByDelay() > Utils
.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"This npc is already in combat.");
return;
}
}
}
player.getActionManager().setAction(
new PlayerCombat(npc));
}
break;
}
break;
}
if (Settings.DEBUG)
System.out.println("Spell:" + componentId);
} else if (packetId == NPC_CLICK1_PACKET)
NPCHandler.handleOption1(player, stream);
else if (packetId == NPC_CLICK2_PACKET)
NPCHandler.handleOption2(player, stream);
else if (packetId == NPC_CLICK3_PACKET)
NPCHandler.handleOption3(player, stream);
else if (packetId == OBJECT_CLICK1_PACKET)
ObjectHandler.handleOption(player, stream, 1);
else if (packetId == OBJECT_CLICK2_PACKET)
ObjectHandler.handleOption(player, stream, 2);
else if (packetId == OBJECT_CLICK3_PACKET)
ObjectHandler.handleOption(player, stream, 3);
else if (packetId == OBJECT_CLICK4_PACKET)
ObjectHandler.handleOption(player, stream, 4);
else if (packetId == OBJECT_CLICK5_PACKET)
ObjectHandler.handleOption(player, stream, 5);
else if (packetId == ITEM_TAKE_PACKET) {
if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
|| player.isDead())
return;
long currentTime = Utils.currentTimeMillis();
if (player.getLockDelay() > currentTime)
// || player.getFreezeDelay() >= currentTime)
return;
int y = stream.readUnsignedShort();
int x = stream.readUnsignedShortLE();
final int id = stream.readUnsignedShort();
boolean forceRun = stream.read128Byte() == 1;
final WorldTile tile = new WorldTile(x, y, player.getPlane());
final int regionId = tile.getRegionId();
if (!player.getMapRegionsIds().contains(regionId))
return;
final FloorItem item = World.getRegion(regionId).getGroundItem(id,
tile, player);
if (item == null)
return;
player.stopAll(false);
if(forceRun)
player.setRun(forceRun);
player.setCoordsEvent(new CoordsEvent(tile, new Runnable() {
@Override
public void run() {
final FloorItem item = World.getRegion(regionId)
.getGroundItem(id, tile, player);
if (item == null)
return;
/* if (player.getRights() > 0 || player.isSupporter())
player.getPackets().sendGameMessage("This item was dropped by [Username] "+item.getOwner().getUsername()+ " [DiplayName] "+item.getOwner().getDisplayName());
*/ player.setNextFaceWorldTile(tile);
player.addWalkSteps(tile.getX(), tile.getY(), 1);
World.removeGroundItem(player, item);
}
}, 1, 1));
}
}
public void processPackets(final int packetId, InputStream stream,
int length) {
player.setPacketsDecoderPing(Utils.currentTimeMill is());
if (packetId == PING_PACKET) {
// kk we ping
} else if (packetId == MOUVE_MOUSE_PACKET) {
// USELESS PACKET
} else if (packetId == KEY_TYPED_PACKET) {
// USELESS PACKET
} else if (packetId == RECEIVE_PACKET_COUNT_PACKET) {
// interface packets
stream.readInt();
} else if (packetId == ITEM_ON_ITEM_PACKET) {
InventoryOptionsHandler.handleItemOnItem(player, stream);
} else if (packetId == MAGIC_ON_ITEM_PACKET) {
int inventoryInter = stream.readInt() >> 16;
int itemId = stream.readShort128();
@[Only registered and activated users can see links. ]ressWarnings("unused")
int junk = stream.readShort();
@[Only registered and activated users can see links. ]ressWarnings("unused")
int itemSlot = stream.readShortLE();
int interfaceSet = stream.readIntV1();
int spellId = interfaceSet & 0xFFF;
int magicInter = interfaceSet >> 16;
if (inventoryInter == 149 && magicInter == 192) {
switch (spellId) {
case 59:// High Alch
if (player.getSkills().getLevel(Skills.MAGIC) < 55) {
player.getPackets()
.sendGameMessage(
"You do not have the required level to cast this spell.");
return;
}
if (itemId == 995) {
player.getPackets().sendGameMessage(
"You can't alch this!");
return;
}
if (player.getEquipment().getWeaponId() == 1401
|| player.getEquipment().getWeaponId() == 3054
|| player.getEquipment().getWeaponId() == 19323) {
if (!player.getInventory().containsItem(561, 1)) {
player.getPackets()
.sendGameMessage(
"You do not have the required runes to cast this spell.");
return;
}
player.setNextAnimation(new Animation(9633));
player.setNextGraphics(new Graphics(112));
player.getInventory().deleteItem(561, 1);
player.getInventory().deleteItem(itemId, 1);
player.getInventory()
.addItem(
995,
new Item(itemId, 1).getDefinitions()
.getValue() >> 6);
} else {
if (!player.getInventory().containsItem(561, 1)
|| !player.getInventory().containsItem(554, 5)) {
player.getPackets()
.sendGameMessage(
"You do not have the required runes to cast this spell.");
return;
}
player.setNextAnimation(new Animation(713));
player.setNextGraphics(new Graphics(113));
player.getInventory().deleteItem(561, 1);
player.getInventory().deleteItem(554, 5);
player.getInventory().deleteItem(itemId, 1);
player.getInventory()
.addItem(
995,
new Item(itemId, 1).getDefinitions()
.getValue() >> 6);
}
break;
default:
System.out.println("Spell:" + spellId + ", Item:" + itemId);
}
System.out.println("Spell:" + spellId + ", Item:" + itemId);
}
} else if (packetId == AFK_PACKET) {
player.getSession().getChannel().close();
} else if (packetId == CLOSE_INTERFACE_PACKET) {
if (player.hasStarted() && !player.hasFinished() && !player.isRunning()) { //used for old welcome screen
player.run();
return;
}
player.stopAll();
} else if (packetId == MOVE_CAMERA_PACKET) {
// not using it atm
stream.readUnsignedShort();
stream.readUnsignedShort();
} else if (packetId == IN_OUT_SCREEN_PACKET) {
// not using this check because not 100% efficient
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean inScreen = stream.readByte() == 1;
} else if (packetId == SCREEN_PACKET) {
int displayMode = stream.readUnsignedByte();
player.setScreenWidth(stream.readUnsignedShort());
player.setScreenHeight(stream.readUnsignedShort()) ;
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean switchScreenMode = stream.readUnsignedByte() == 1;
if (!player.hasStarted() || player.hasFinished()
|| displayMode == player.getDisplayMode()
|| !player.getInterfaceManager().containsInterface(74 2))
return;
player.setDisplayMode(displayMode);
player.getInterfaceManager().removeAll();
player.getInterfaceManager().sendInterfaces();
player.getInterfaceManager().sendInterface(742);
} else if (packetId == CLICK_PACKET) {
int mouseHash = stream.readShortLE128();
int mouseButton = mouseHash >> 15;
int time = mouseHash - (mouseButton << 15); // time
int positionHash = stream.readIntV1();
int y = positionHash >> 16; // y;
int x = positionHash - (y << 16); // x
@[Only registered and activated users can see links. ]ressWarnings("unused")
boolean clicked;
// mass click or stupid autoclicker, lets stop lagg
if (time <= 1 || x < 0 || x > player.getScreenWidth() || y < 0
|| y > player.getScreenHeight()) {
// player.getSession().getChannel().close();
clicked = false;
return;
}
clicked = true;
} else if (packetId == DIALOGUE_CONTINUE_PACKET) {
int interfaceHash = stream.readInt();
int junk = stream.readShort128();
int interfaceId = interfaceHash >> 16;
int buttonId = (interfaceHash & 0xFF);
if (Utils.getInterfaceDefinitionsSize() <= interfaceId) {
// hack, or server error or client error
// player.getSession().getChannel().close();
return;
}
if (!player.isRunning()
|| !player.getInterfaceManager().containsInterface(
interfaceId))
return;
if(Settings.DEBUG)
Logger.log(this, "Dialogue: "+interfaceId+", "+buttonId+", "+junk);
int componentId = interfaceHash - (interfaceId << 16);
player.getDialogueManager().continueDialogue(inter faceId,
componentId);
} else if (packetId == WORLD_MAP_CLICK) {
int coordinateHash = stream.readInt();
int x = coordinateHash >> 14;
int y = coordinateHash & 0x3fff;
int plane = coordinateHash >> 28;
Integer hash = (Integer)player.getTemporaryAttributtes().get("wor ldHash");
if (hash == null || coordinateHash != hash)
player.getTemporaryAttributtes().put("worldHash", coordinateHash);
else {
player.getTemporaryAttributtes().remove("worldHash ");
player.getHintIconsManager().addHintIcon(x, y, plane, 20, 0, 2, -1, true);
player.getPackets().sendConfig(1159, coordinateHash);
}
} else if (packetId == ACTION_BUTTON1_PACKET
|| packetId == ACTION_BUTTON2_PACKET
|| packetId == ACTION_BUTTON4_PACKET
|| packetId == ACTION_BUTTON5_PACKET
|| packetId == ACTION_BUTTON6_PACKET
|| packetId == ACTION_BUTTON7_PACKET
|| packetId == ACTION_BUTTON8_PACKET
|| packetId == ACTION_BUTTON3_PACKET
|| packetId == ACTION_BUTTON9_PACKET
|| packetId == ACTION_BUTTON10_PACKET) {
ButtonHandler.handleButtons(player, stream, packetId);
} else if (packetId == ENTER_NAME_PACKET) {
if (!player.isRunning() || player.isDead())
return;
String value = stream.readString();
if (value.equals(""))
return;
if (player.getInterfaceManager().containsInterface(11 08))
player.getFriendsIgnores().setChatPrefix(value);
else if (player.getTemporaryAttributtes().get("yellcolor") == Boolean.TRUE) {
if(value.length() != 6) {
player.getDialogueManager().startDialogue("SimpleM essage", "The HEX yell color you wanted to pick cannot be longer and shorter then 6.");
} else if(Utils.containsInvalidCharacter(value) || value.contains("_")) {
player.getDialogueManager().startDialogue("SimpleM essage", "The requested yell color can only contain numeric and regular characters.");
} else {
player.setYellColor(value);
player.getDialogueManager().startDialogue("SimpleM essage", "Your yell color has been changed to <col="+player.getYellColor()+">"+player.getYellCol or()+"</col>.");
}
player.getTemporaryAttributtes().put("yellcolor", Boolean.FALSE);
} else if (player.getTemporaryAttributtes().get("yellshade") == Boolean.TRUE) {
if(value.length() != 6) {
player.getDialogueManager().startDialogue("SimpleM essage", "The HEX yell shade you wanted to pick cannot be longer and shorter then 6.");
} else if(Utils.containsInvalidCharacter(value) || value.contains("_")) {
player.getDialogueManager().startDialogue("SimpleM essage", "The requested yell shade can only contain numeric and regular characters.");
} else {
player.setYellShade(value);
player.getDialogueManager().startDialogue("SimpleM essage", "Your yell color has been changed to <col="+player.getShadColor()+">"+player.getShadCol or()+"</col>.");
}
player.getTemporaryAttributtes().put("yellshade", Boolean.FALSE);
} else if (player.getTemporaryAttributtes().get("yellprefix" ) == Boolean.TRUE) {
String[] invalid = { "<euro", "<img", "<img=", "<col", "<col=",
"<shad", "<shad=", "<str>", "<u>" };
for (String s : invalid)
if (value.contains(s)) {
player.getPackets().sendGameMessage(
"You cannot add additional code to the message.");
return;
}
if(value.length() > 17) {
player.getDialogueManager().startDialogue("SimpleM essage", "The prefix cannot be more than 16 characters.");
} else {
player.setPrefix(value);
player.getDialogueManager().startDialogue("SimpleM essage", "Your yell prfix has been changed to "+player.getPrefix()+".");
}
player.getTemporaryAttributtes().put("yellprefix", Boolean.FALSE);
}
else if (player.getTemporaryAttributtes().get("entering_no te") == Boolean.TRUE) {
player.getNotes().add(new Note(value, 1));
player.getNotes().refresh();
player.getTemporaryAttributtes().put("entering_not e", Boolean.FALSE);
return;
} else if (player.getTemporaryAttributtes().get("editing_not e") == Boolean.TRUE) {
Note note = (Note) player.getTemporaryAttributtes().get("curNote");
player.getNotes().getNotes().get(player.getNotes() .getNotes().indexOf(note));
player.getNotes().refresh();
player.getTemporaryAttributtes().put("editing_note ", Boolean.FALSE);
} else if (player.getTemporaryAttributtes().get("view_name") == Boolean.TRUE) {
player.getTemporaryAttributtes().remove("view_name ");
Player other = World.getPlayerByDisplayName(value);
if (other == null) {
player.getPackets().sendGameMessage("Couldn't find player.");
return;
}
ClanWars clan = other.getCurrentFriendChat() != null ? other.getCurrentFriendChat().getClanWars() : null;
if (clan == null) {
player.getPackets().sendGameMessage("This player's clan is not in war.");
return;
}
if (clan.getSecondTeam().getOwnerDisplayName() != other.getCurrentFriendChat().getOwnerDisplayName() ) {
player.getTemporaryAttributtes().put("view_prefix" , 1);
}
player.getTemporaryAttributtes().put("view_clan", clan);
ClanWars.enter(player);
} else if (player.getTemporaryAttributtes().remove("setdispl ay") != null) {
if(Utils.invalidAccountName(Utils
.formatPlayerNameForProtocol(value))) {
player.getPackets().sendGameMessage("Invalid name!");
return;
}
if(!DisplayNames.setDisplayName(player, value)) {
player.getPackets().sendGameMessage("Name already in use!");
return;
}
player.getPackets().sendGameMessage("Changed display name!");
} else if (player.getTemporaryAttributtes().remove("checkvot einput") != null)
Vote.checkVote(player, value);
} else if (packetId == ENTER_STRING_PACKET) {
if (!player.isRunning() || player.isDead())
return;
String value = stream.readString();
if (value.equals(""))
return;
} else if (packetId == ENTER_INTEGER_PACKET) {
if (!player.isRunning() || player.isDead())
return;
int value = stream.readInt();
if ((player.getInterfaceManager().containsInterface(7 62) && player
.getInterfaceManager().containsInterface(763))
|| player.getInterfaceManager().containsInterface(11) ) {
if (value < 0)
return;
Integer bank_item_X_Slot = (Integer) player
.getTemporaryAttributtes().remove("bank_item_X_Slo t");
if (bank_item_X_Slot == null)
return;
player.getBank().setLastX(value);
player.getBank().refreshLastX();
if (player.getTemporaryAttributtes().remove("bank_isW ithdraw") != null)
player.getBank().withdrawItem(bank_item_X_Slot, value);
else
player.getBank()
.depositItem(
bank_item_X_Slot,
value,
player.getInterfaceManager()
.containsInterface(11) ? false
: true);
} else if (player.getTemporaryAttributtes().get("bank_pin") == Boolean.TRUE) {
if (value < 0)
return;
player.setBankPin(value);
player.hasBankPin = true;
player.getAppearence().generateAppearenceData();
player.getDialogueManager().startDialogue("SimpleM essage", "Your Bank Pin Is... <col=FF0000>"+player.getBankPin() + " </col>Remember it!");
player.getTemporaryAttributtes().put("bank_pin", Boolean.FALSE);
} else if (player.getTemporaryAttributtes().get("bank_pin1") == Boolean.TRUE) {
if (value < 0)
return;
if(player.pin != value) {
player.getDialogueManager().startDialogue("SimpleM essage", "Wrong Pin please try again.");
} else {
player.getAppearence().generateAppearenceData();
player.getDialogueManager().startDialogue("SimpleM essage", "You have entered your bank pin, Thank You");
player.hasEnteredPin = true;
}
player.getTemporaryAttributtes().put("bank_pin1", Boolean.FALSE);
} else if (player.getInterfaceManager().containsInterface(20 6)
&& player.getInterfaceManager().containsInterface(207 )) {
if (value < 0)
return;
Integer pc_item_X_Slot = (Integer) player
.getTemporaryAttributtes().remove("pc_item_X_Slot" );
if (pc_item_X_Slot == null)
return;
if (player.getTemporaryAttributtes().remove("pc_isRem ove") != null)
player.getPriceCheckManager().removeItem(pc_item_X _Slot,
value);
else
player.getPriceCheckManager()
.addItem(pc_item_X_Slot, value);
} else if (player.getInterfaceManager().containsInterface(67 1)
&& player.getInterfaceManager().containsInterface(665 )) {
if (player.getFamiliar() == null
|| player.getFamiliar().getBob() == null)
return;
if (value < 0)
return;
Integer bob_item_X_Slot = (Integer) player
.getTemporaryAttributtes().remove("bob_item_X_Slot ");
if (bob_item_X_Slot == null)
return;
if (player.getTemporaryAttributtes().remove("bob_isRe move") != null)
player.getFamiliar().getBob()
.removeItem(bob_item_X_Slot, value);
else
player.getFamiliar().getBob()
.addItem(bob_item_X_Slot, value);
} else if (player.getInterfaceManager().containsInterface(33 5)
&& player.getInterfaceManager().containsInterface(336 )) {
int playerIndex = stream.readUnsignedShortLE128();
@[Only registered and activated users can see links. ]ressWarnings("unused")
Player p2 = World.getPlayers().get(playerIndex);
if (value < 0)
return;
Integer trade_item_X_Slot = (Integer) player
.getTemporaryAttributtes().remove("trade_item_X_Sl ot");
if (trade_item_X_Slot == null)
return;
if (player.getTemporaryAttributtes().remove("trade_is Remove") != null)
player.getTrade().removeItem(trade_item_X_Slot, value);
else
player.getTrade().addItem(trade_item_X_Slot, value);
} else if (player.getTemporaryAttributtes().get("skillId") != null) {
if (player.getEquipment().wearingArmour()) {
player.getDialogueManager().finishDialogue();
player.getDialogueManager().startDialogue("SimpleM essage", "You cannot do this while having armour on!");
return;
}
int skillId = (Integer) player.getTemporaryAttributtes()
.remove("skillId");
if (skillId == Skills.HITPOINTS && value <= 9)
value = 10;
else if (value < 1)
value = 1;
else if (value > 99)
value = 99;
player.getSkills().set(skillId, value);
player.getSkills().setXp(skillId, Skills.getXPForLevel(value));
player.getAppearence().generateAppearenceData();
player.getDialogueManager().finishDialogue();
}//
else if (player.getTemporaryAttributtes().get("banning_sec urity") == Boolean.TRUE) {
if (value < 0)
return;
/**
* 1. Set a normal integer.
*/
//PIN STAFF E OUTROS
int Staffpin = 5555;
/**
* 2. Use math formula. (Advanced security)
*/
if (value != Staffpin) {
player.getDialogueManager().startDialogue("SimpleM essage",
"Access denied, you have been logged out.");
Logger.log("Security", "Unauthorized ban attempt by " + player.getDisplayName() + ".");
player.forceLogout();
} else {
player.getDialogueManager().startDialogue("SimpleM essage", "Access granted for current session.");
Logger.log("Security", "Authorized attempt by " + player.getDisplayName() + ".");
player.unlock();
player.hasStaffPin = true;
}
player.getTemporaryAttributtes().put("banning_secu rity", Boolean.FALSE);
}
else if (player.getTemporaryAttributtes().get("banning_sec urity_ayslan") == Boolean.TRUE) {
if (value < 0)
return;
/**
* 1. Set a normal integer.
*/
//PIN HAKUREN
int Hakurenpin = 8024;
/**
* 2. Use math formula. (Advanced security)
*/
if (value != Hakurenpin) {
player.getDialogueManager().startDialogue("SimpleM essage",
"Access denied, you have been logged out.");
Logger.log("Security", "Unauthorized ban attempt by " + player.getDisplayName() + ".");
player.forceLogout();
} else {
player.getDialogueManager().startDialogue("SimpleM essage", "Access granted for current session.");
Logger.log("Security", "Authorized attempt by " + player.getDisplayName() + ".");
player.unlock();
player.hasHakurenPin = true;
}
player.getTemporaryAttributtes().put("banning_secu rity_hakuren", Boolean.FALSE);
}
else if (player.getTemporaryAttributtes().get("banning_sec urity_hakuren") == Boolean.TRUE) {
if (value < 0)
return;
/**
* 1. Set a normal integer.
*/
//PIN AYSLAN
int Ayslanpin =8024;
/**
* 2. Use math formula. (Advanced security)
*/
if (value != Ayslanpin) {
player.getDialogueManager().startDialogue("SimpleM essage",
"Access denied, you have been logged out.");
Logger.log("Security", "Unauthorized ban attempt by " + player.getDisplayName() + ".");
player.forceLogout();
} else {
player.getDialogueManager().startDialogue("SimpleM essage", "Access granted for current session.");
Logger.log("Security", "Authorized attempt by " + player.getDisplayName() + ".");
player.unlock();
player.hasAyslanPin = true;
}
player.getTemporaryAttributtes().put("banning_secu rity_ayslan", Boolean.FALSE);
}
else if (player.getTemporaryAttributtes().get("banning_sec urity_titus") == Boolean.TRUE) {
if (value < 0)
return;
/**
* 1. Set a normal integer.
*/
}
else if (player.getTemporaryAttributtes().get("kilnX") != null) {
int index = (Integer) player.getTemporaryAttributtes().get("scIndex");
int componentId = (Integer) player.getTemporaryAttributtes().get("scComponentI d");
int itemId = (Integer) player.getTemporaryAttributtes().get("scItemId");
player.getTemporaryAttributtes().remove("kilnX");
if (StealingCreation.proccessKilnItems(player, componentId, index, itemId, value))
return;
} else if (player.getInterfaceManager().containsInterface(54 8) ||
player.getInterfaceManager().containsInterface(746 )) {
if (value < 0)
return;
}
Integer remove_X_money = (Integer) player.getTemporaryAttributtes().remove("remove_X_ money");
if(remove_X_money == null) {
return;
}
int amount = player.getInventory().getItems().getNumberOf(remov e_X_money);
if(player.getTemporaryAttributtes().remove("remove _money") != null) {
if (!player.getInventory().containsItem(995, 1) && !player.getInventory().hasFreeSlots()) {
player.getPackets().sendGameMessage("You need at least 1 inventory space to withdraw your coins.");
return;
}
if (player.money < 1) {
player.getPackets().sendGameMessage("You don't have any coins on your money pouch.");
return;
}
if(value <= player.money) {
if(amount + value > 0) {
player.getInventory().addItem(remove_X_money, value);
player.getPackets().sendRunScript(5561, 0, value);
player.money -= value;
player.refreshMoneyPouch();
} else {
player.getPackets().sendGameMessage("You can't have more then 2,147,483,647 coins in your inventory.");
}
} else {
if(amount + value > 0) {
player.getInventory().addItem(remove_X_money, player.money);
player.getPackets().sendRunScript(5561, 0, player.money);
player.money -= player.money;
player.refreshMoneyPouch();
} else {
player.getPackets().sendGameMessage("Please input a valid amount.");
}
}
}
} else if (packetId == SWITCH_INTERFACE_ITEM_PACKET) {
stream.readShortLE128();
int fromInterfaceHash = stream.readIntV1();
int toInterfaceHash = stream.readInt();
int fromSlot = stream.readUnsignedShort();
int toSlot = stream.readUnsignedShortLE128();
stream.readUnsignedShortLE();
int toInterfaceId = toInterfaceHash >> 16;
int toComponentId = toInterfaceHash - (toInterfaceId << 16);
int fromInterfaceId = fromInterfaceHash >> 16;
int fromComponentId = fromInterfaceHash - (fromInterfaceId << 16);