Untitled
unknown
java
4 years ago
111 kB
5
Indexable
package com.rs.network.protocol.codec.decode; import com.rs.Settings; import com.rs.game.Animation; import com.rs.game.Graphics; import com.rs.game.World; import com.rs.game.WorldObject; import com.rs.game.WorldTile; import com.rs.game.activites.dpm.DPMController; import com.rs.game.activites.soulwars.SoulWarsManager; import com.rs.game.item.FloorItem; import com.rs.game.item.Item; import com.rs.game.item.ItemsContainer; import com.rs.game.map.bossInstance.BossInstanceHandler; import com.rs.game.map.bossInstance.BossInstanceHandler.Boss; import com.rs.game.npc.NPC; import com.rs.game.npc.familiar.Familiar; import com.rs.game.npc.familiar.Familiar.SpecialAttack; import com.rs.game.npc.others.MirrorbackSpider; import com.rs.game.player.Bank; import com.rs.game.player.Equipment; import com.rs.game.player.Equipment.SavedCosmetic; import com.rs.game.player.FarmingManager.FarmingSpot; import com.rs.game.player.FarmingManager.SpotInfo; import com.rs.game.player.Inventory; import com.rs.game.player.LendingManager; import com.rs.game.player.LoginManager; import com.rs.game.player.PetLootManager.RestrictedItem; import com.rs.game.player.Player; import com.rs.game.player.PlayerExamine; import com.rs.game.player.Skills; import com.rs.game.player.TemporaryAttributes.Key; import com.rs.game.player.ViewProfile; import com.rs.game.player.actions.CombinationPotions; import com.rs.game.player.actions.PlayerFollow; import com.rs.game.player.actions.firemaking.Firemaking; import com.rs.game.player.actions.summoning.Summoning; import com.rs.game.player.combat.PlayerCombat; import com.rs.game.player.content.AccountInterfaceManager; import com.rs.game.player.content.ArtisansWorkShop; import com.rs.game.player.content.ChatMessage; import com.rs.game.player.content.Commands; import com.rs.game.player.content.CosmeticsHandler; import com.rs.game.player.content.DungeonRewardShop; import com.rs.game.player.content.FriendChatsManager; import com.rs.game.player.content.LogicPacket; import com.rs.game.player.content.Lottery; import com.rs.game.player.content.Magic; import com.rs.game.player.content.Profanity; import com.rs.game.player.content.PublicChatMessage; import com.rs.game.player.content.QuickChatMessage; import com.rs.game.player.content.RouteEvent; import com.rs.game.player.content.Shop; import com.rs.game.player.content.SkillCapeCustomizer; import com.rs.game.player.content.ancientthrone.ThroneManager; import com.rs.game.player.content.clans.ClansManager; import com.rs.game.player.content.construction.House; import com.rs.game.player.content.construction.TabletMaking; import com.rs.game.player.content.dungeoneering.skills.DungeoneeringSmithing; import com.rs.game.player.content.dungeoneering.skills.DungeoneeringSummoning; import com.rs.game.player.content.input.InputEvent; import com.rs.game.player.content.input.impl.InputIntegerEvent; import com.rs.game.player.content.input.impl.InputLongStringEvent; import com.rs.game.player.content.input.impl.InputNameEvent; import com.rs.game.player.content.pet.Pets; import com.rs.game.player.controllers.EliteDungeonController; import com.rs.game.player.controllers.EliteDungeonsLobby; import com.rs.game.player.controllers.Wilderness; import com.rs.game.player.dialogue.impl.PetShopOwner; import com.rs.game.route.RouteFinder; import com.rs.game.route.strategy.FixedTileStrategy; import com.rs.game.tasks.WorldTask; import com.rs.game.tasks.WorldTasksManager; import com.rs.network.protocol.codec.decode.impl.ButtonHandler; import com.rs.network.protocol.codec.decode.impl.InventoryOptionsHandler; import com.rs.network.protocol.codec.decode.impl.NPCHandler; import com.rs.network.protocol.codec.decode.impl.ObjectHandler; import com.rs.stream.InputStream; import com.rs.stream.OutputStream; import com.rs.utils.Colors; import com.rs.utils.DiscordMessage; import com.rs.utils.DisplayNames; import com.rs.utils.Encrypt; import com.rs.utils.IPMute; import com.rs.utils.ItemExamines; import com.rs.utils.Lend; import com.rs.utils.Logger; import com.rs.utils.LoggingSystem; import com.rs.utils.NPCExamines; import com.rs.utils.SerializableFilesManager; import com.rs.utils.Utils; import com.rs.utils.huffman.Huffman; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.util.ReferenceCountUtil; /*import mysql.impl.NewsManager;*/ @SuppressWarnings("unused") public final class WorldPacketsDecoder extends ChannelInboundHandlerAdapter { /** * The packet sizes */ private static final byte[] PACKET_SIZES = new byte[109]; private final static int ITEM_ON_FLOOR_EXAMINE = 42; private final static int WALKING_PACKET = 74; private final static int MINI_WALKING_PACKET = 41; public final static int ACTION_BUTTON1_PACKET = 4; public final static int ACTION_BUTTON2_PACKET = 22; public final static int ACTION_BUTTON3_PACKET = 13; public final static int ACTION_BUTTON4_PACKET = 76; public final static int ACTION_BUTTON5_PACKET = 59; public final static int ACTION_BUTTON6_PACKET = 37; public final static int ACTION_BUTTON7_PACKET = 69; public final static int ACTION_BUTTON8_PACKET = 28; public final static int ACTION_BUTTON9_PACKET = 103; public final static int ACTION_BUTTON10_PACKET = 80; public final static int WORLD_MAP_CLICK = 66; public final static int RECEIVE_PACKET_COUNT_PACKET = 56; private final static int PLAYER_OPTION_3_PACKET = 8; private final static int PLAYER_OPTION_4_PACKET = 104; private final static int PLAYER_OPTION_6_PACKET = 36; private final static int MOVE_CAMERA_PACKET = 33; private final static int INTERFACE_ON_OBJECT = 107; private final static int CLICK_PACKET = 90; private final static int CLICK_PACKET2 = 61; private final static int MOUVE_MOUSE_PACKET = 98; private final static int MOUVE_MOUSE_PACKET2 = 67; private final static int KEY_TYPED_PACKET = 24; private final static int CLOSE_INTERFACE_PACKET = 57; private final static int COMMANDS_PACKET = 20; private final static int INTERFACE_ON_INTERFACE = 26; private final static int IN_OUT_SCREEN_PACKET = 94; private final static int DONE_LOADING_REGION_PACKET = 64; private final static int PING_PACKET = 30; private final static int DISPLAY_PACKET = 31; private final static int CHAT_TYPE_PACKET = 70; private final static int CHAT_PACKET = 86; private final static int PUBLIC_QUICK_CHAT_PACKET = 87; private final static int ADD_FRIEND_PACKET = 71; private final static int ADD_IGNORE_PACKET = 38; private final static int REMOVE_IGNORE_PACKET = 17; private final static int JOIN_FRIEND_CHAT_PACKET = 84; private final static int CHANGE_FRIEND_CHAT_PACKET = 75; private final static int KICK_FRIEND_CHAT_PACKET = 45; private final static int KICK_CLAN_CHAT_PACKET = -92; private final static int REMOVE_FRIEND_PACKET = 81; private final static int SEND_FRIEND_MESSAGE_PACKET = 95; private final static int SEND_FRIEND_QUICK_CHAT_PACKET = -123; private final static int OBJECT_CLICK1_PACKET = 40; private final static int OBJECT_CLICK2_PACKET = 3; private final static int OBJECT_CLICK3_PACKET = 16; private final static int OBJECT_CLICK4_PACKET = 85; private final static int OBJECT_CLICK5_PACKET = 82; private final static int OBJECT_EXAMINE_PACKET = 49; private final static int NPC_CLICK1_PACKET = 72; private final static int NPC_CLICK2_PACKET = 43; private final static int NPC_CLICK3_PACKET = 88; private final static int NPC_CLICK4_PACKET = 32; private final static int ATTACK_NPC = 54; private final static int PLAYER_OPTION_1_PACKET = 44; private final static int PLAYER_OPTION_2_PACKET = 79; private static final int PLAYER_OPTION_5_PACKET = 58; private final static int PLAYER_OPTION_9_PACKET = 55; private final static int ITEM_TAKE_PACKET = 62; private final static int GROUND_ITEM_OPTION_2_PACKET = 27; private final static int GROUND_ITEM_OPTION_EXAMINE = 42; private final static int DIALOGUE_CONTINUE_PACKET = 83; private final static int ENTER_INTEGER_PACKET = 65; private final static int ENTER_NAME_PACKET = 68; private final static int ENTER_LONG_TEXT_PACKET = 21; private final static int SWITCH_INTERFACE_COMPONENTS_PACKET = 7; private final static int INTERFACE_ON_PLAYER = 106; private final static int INTERFACE_ON_NPC = 6; private final static int COLOR_ID_PACKET = 5; private static final int NPC_EXAMINE_PACKET = 0; private static final int FORUM_THREAD_ID_PACKET = -18; private final static int OPEN_URL_PACKET = -91; private final static int REPORT_ABUSE_PACKET = -11; private final static int GRAND_EXCHANGE_ITEM_SELECT_PACKET = 105; private final static int WORLD_LIST_UPDATE = -87; private final static int UPDATE_GAMEBAR_PACKET = -73; private final static int DROP_ITEM_PACKET = -104; public final static int ESCAPE_PRESSED_PACKET = -105; static { loadPacketSizes(); } public static void decodeLogicPacket(final Player player, LogicPacket packet) { int packetId = packet.getId(); InputStream stream = new InputStream(packet.getData()); if (packetId == NPC_CLICK4_PACKET) { NPCHandler.handleOption4(player, stream); return; } if (packetId == WALKING_PACKET || packetId == MINI_WALKING_PACKET) { if (!player.isActive() || !player.clientHasLoadedMapRegion() || player.isDead() || player.isLocked()) { return; } if (player.getFreezeDelay() >= Utils.currentTimeMillis()) { player.sendMessage("A magical force prevents you from moving.", true); return; } int baseY = stream.readUnsignedShort(); int baseX = stream.readUnsignedShortLE128(); boolean forceRun = stream.readUnsignedByte() == 1; player.stopAll(); if (forceRun) { player.setRun(forceRun); } int steps = RouteFinder.findRoute(RouteFinder.WALK_ROUTEFINDER, player.getX(), player.getY(), player.getPlane(), player.getSize(), new FixedTileStrategy(baseX, baseY), true); if (steps < 1) { return; } int[] bufferX = RouteFinder.getLastPathBufferX(); int[] bufferY = RouteFinder.getLastPathBufferY(); int last = -1; for (int i = steps - 1; i >= 0; i--) { if (!player.addWalkSteps(bufferX[i], bufferY[i], 25, true)) { break; } last = i; } if (last != -1) { WorldTile tile = new WorldTile(bufferX[last], bufferY[last], player.getPlane()); player.getPackets().sendMinimapFlag( tile.getLocalX(player.getLastLoadedMapRegionTile(), player.getMapSize()), tile.getLocalY(player.getLastLoadedMapRegionTile(), player.getMapSize())); } else { player.getPackets().sendResetMinimapFlag(); } player.increaseAFKTimer(); } 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 == INTERFACE_ON_PLAYER) { if (!player.isActive() || !player.clientHasLoadedMapRegion() || player.isDead()) { return; } if (player.getLockDelay() > Utils.currentTimeMillis()) { return; } final int itemId = stream.readShort128(); final boolean forceRun = stream.readByte() == 1; int interfaceHash = stream.readInt(); int interfaceSlot = stream.readUnsignedShort(); int playerIndex = stream.readUnsignedShortLE(); int interfaceId = interfaceHash >> 16; int componentId = interfaceHash - (interfaceId << 16); if (Utils.getInterfaceDefinitionsSize() <= interfaceId) { return; } if (!player.getInterfaceManager().containsInterface(interfaceId)) { return; } if (componentId == 65535) { componentId = -1; } if (componentId != -1 && Utils.getInterfaceDefinitionsComponentsSize(interfaceId) <= componentId) { return; } Player p2 = World.getPlayers().get(playerIndex); if (p2 == null || p2.isDead() || p2.hasFinished() || !player.getMapRegionsIds().contains(p2.getRegionId())) { return; } player.stopAll(false); if (interfaceId == 679) { Item item = player.getInventory().getItems().get(interfaceSlot); if (!player.getControlerManager().processItemOnPlayer(p2, item.getId())) { return; } if (item == null) { return; } if (LendingManager.isLendedItem(player, item)) { Lend lend = LendingManager.getLend(player); if (lend == null) { return; } if (!lend.getLender().equals(p2.getUsername())) { player.sendMessage("You can't give your lent item to a stranger..."); return; } player.getDialogueManager().startDialogue("LendReturn", lend); return; } InventoryOptionsHandler.handleItemOnPlayer(player, p2, item.getId()); } switch (interfaceId) { case 1110: if (componentId == 87) { ClansManager.invite(player, p2); } 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) { 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, false); player.getFamiliar().setTarget(p2); } } break; case 950: if (componentId == 52) { if (!(p2 instanceof Player)) { return; } if (player.getLunarDelay() > Utils.currentTimeMillis()) { return; } if (!Magic.checkCombatSpell(player, 52, -1, false)) { return; } if (p2 == null || p2.hasFinished() || p2.isDead()) { return; } if (!p2.getPoison().isPoisoned()) { player.getPackets().sendGameMessage(p2.getDisplayName() + " is not poisoned."); return; } Magic.checkCombatSpell(player, 52, -1, true); player.setLunarDelay(3000); player.getSkills().addXp(Skills.MAGIC, 65); WorldTasksManager.schedule(new WorldTask() { int loop; @Override public void run() { if (loop == 0) { player.faceEntity(p2); player.setNextAnimation(new Animation(4411)); } else if (loop == 1) { p2.setNextGraphics(new Graphics(744, 0, 120)); p2.getPoison().reset(); p2.getPackets().sendGameMessage( "Your afflictions have been cured by " + player.getDisplayName() + "."); player.getPackets().sendGameMessage( "You have cured the afflictions of " + p2.getDisplayName() + "."); stop(); } loop++; } }, 0, 1); } else if (componentId == 64) { if (!(p2 instanceof Player)) { return; } if (player.getSkills().getLevel(Skills.MAGIC) < 93) { player.getPackets().sendGameMessage("Your Magic level is not high enough for this spell."); return; } if (player.getSkills().getLevel(Skills.DEFENCE) < 40) { player.getPackets().sendGameMessage("You need a Defence level of 40 for this spell"); return; } if (player.isCastVeng()) { player.sendMessage("You have already casted a vengeance!"); return; } Long lastVeng = (Long) player.getTemporaryAttributtes().get("LAST_VENG"); if (lastVeng != null && lastVeng + 30000 > Utils.currentTimeMillis()) { player.getPackets().sendGameMessage("Players may only cast vengeance once every 30 seconds."); return; } if (!Magic.checkCombatSpell(player, 64, -1, false)) { return; } player.faceEntity(p2); player.getSkills().addXp(Skills.MAGIC, 108); player.setLunarDelay(4000); player.setNextAnimation(new Animation(4411)); player.getTemporaryAttributtes().put("LAST_VENG", Utils.currentTimeMillis()); player.getPackets().sendGameMessage("You cast a vengeance."); p2.setNextGraphics(new Graphics(725, 0, 100)); p2.setCastVeng(true); p2.getPackets().sendGameMessage("You have the power of vengeance!"); } 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.", true); return; } /* PvP can attack */ if (p2.getAttackedBy() != player && p2.getAttackedByDelay() > Utils.currentTimeMillis()) { if (p2.getAttackedBy() instanceof NPC) { p2.setAttackedBy(player); } else { player.getPackets().sendGameMessage("That player is already in combat.", true); return; } } } player.getActionManager().setAction(new PlayerCombat(p2)); } break; } break; case 430: Magic.processLunarSpell(player, p2, componentId); break; case 79: case 85: case 90: if (p2 == null || p2.isDead() || !p2.isActive() || p2.hasFinished() || !player.getControlerManager().canHit(p2) || p2.isLocked() || p2.isCanPvp()) { player.sendMessage("You cannot do this right now."); return; } if (!p2.isAcceptingAid()) { player.sendMessage("The targeted player isn't accepting aid."); return; } else if (p2.getInterfaceManager().containsScreenInter()) { player.sendMessage("Other player is busy."); return; } player.setNextAnimation(new Animation(1818)); player.setNextGraphics(new Graphics(343)); player.faceEntity(p2); final int comp = componentId; WorldTasksManager.schedule(new WorldTask() { @Override public void run() { switch (comp) { case 79: Magic.sendTeleother(player, p2, 74, 84, "Lumbridge", 566, 1, 563, 1, 557, 1); break; case 85: Magic.sendTeleother(player, p2, 82, 92, "Falador", 566, 1, 563, 1, 555, 1); break; case 90: Magic.sendTeleother(player, p2, 90, 100, "Camelot", 566, 2, 563, 1); break; } } }, 1); break; case 192: switch (componentId) { case 25: // air strike case 24: case 20: case 26: case 22: case 29: case 33: case 21: case 31: case 35: case 27: case 23: 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(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.", true); return; } if (p2.getAttackedBy() != player && p2.getAttackedByDelay() > Utils.currentTimeMillis()) { if (p2.getAttackedBy() instanceof NPC) { p2.setAttackedBy(player); } else { player.getPackets().sendGameMessage("That player is already in combat.", true); return; } } } player.getActionManager().setAction(new PlayerCombat(p2)); } break; } break; } } else if (packetId == INTERFACE_ON_NPC) { if (!player.isActive() || !player.clientHasLoadedMapRegion() || player.isDead()) { return; } if (player.getLockDelay() > Utils.currentTimeMillis()) { return; } int npcIndex = stream.readUnsignedShortLE128(); int interfaceHash = stream.readIntV1(); int itemId = stream.readUnsignedShort128(); int interfaceSlot = stream.readUnsignedShort(); boolean forceRun = stream.read128Byte() == 1; int interfaceId = interfaceHash >> 16; int componentId = interfaceHash - (interfaceId << 16); if (Utils.getInterfaceDefinitionsSize() <= interfaceId) { return; } if (!player.getInterfaceManager().containsInterface(interfaceId)) { return; } if (componentId == 65535) { componentId = -1; } if (componentId != -1 && Utils.getInterfaceDefinitionsComponentsSize(interfaceId) <= componentId) { return; } NPC npc = World.getNPCs().get(npcIndex); if (npc == null || npc.isDead() || npc.hasFinished() || !player.getMapRegionsIds().contains(npc.getRegionId())) { 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); 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 950: switch (componentId) { case 25:// Wind strike case 26:// Confuse case 27:// Water strike case 28:// Earth strike case 29:// Weaken case 30:// Fire strike case 32:// Wind bolt case 33:// Curse case 34:// Bind case 36:// Water bolt case 37:// Earth bolt case 41:// Fire bolt case 42:// Wind blast case 43:// Water blast case 44:// Snare case 45:// Earth blast case 47:// Fire blast case 48:// Wind wave case 49:// Water wave case 50:// Vulnerability /** case 51: */ // Monster examine /** case 52: //Cure other */ case 54:// Earth wave case 56:// Enfeeble case 58:// Fire wave case 59:// Entangle case 60:// Stun case 61:// Wind surge case 62:// Water surge case 63:// Earth surge /** case 64: //Vengeance other */ case 67:// Fire surge 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 MirrorbackSpider) { if (player.mirrorback == npc) { player.sendMessage("You can't attack your own mirrorback spider."); return; } else if (!Wilderness.isAtWild(player)) { player.sendMessage("You cannot attack a mirrorback spider outside of Wilderness."); 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.", true); return; } if (npc.getAttackedBy() != player && npc.getAttackedByDelay() > Utils.currentTimeMillis()) { player.getPackets().sendGameMessage("This npc is already in combat.", true); return; } } } player.getActionManager().setAction(new PlayerCombat(npc)); } break; case 51: player.setRouteEvent(new RouteEvent(npc, new Runnable() { @Override public void run() { if (npc == null || npc.isDead() || npc.hasFinished() || !player.withinDistance(npc, 3)) { return; } if (!Magic.checkCombatSpell(player, 51, -1, false)) { return; } player.setLunarDelay(3000); player.getSkills().addXp(Skills.MAGIC, 61); WorldTasksManager.schedule(new WorldTask() { int loop; @Override public void run() { if (npc == null || npc.isDead() || npc.hasFinished() || player == null || !player.isActive() || player.hasFinished()) { stop(); return; } if (loop == 0) { player.faceEntity(npc); player.setNextGraphics(new Graphics(1059)); player.setNextAnimation(new Animation(6293)); } else if (loop == 1) { npc.setNextGraphics(new Graphics(736)); player.getInterfaceManager().sendTab( player.getInterfaceManager().hasRezizableScreen() ? 118 : 178, 522); player.getPackets().sendIComponentText(522, 0, "Monster Name:<br>" + npc.getDefinitions().getName()); player.getPackets().sendIComponentText(522, 1, "Combat Level: " + npc.getCombatLevel()); player.getPackets().sendIComponentText(522, 2, "Hitpoints: " + npc.getHitpoints() + "/" + npc.getMaxHitpoints()); player.getPackets().sendIComponentText(522, 3, "Creature's max hit: " + npc.getMaxHit()); player.getPackets().sendIComponentText(522, 4, "" + NPCExamines.getExamine(npc)); stop();// stops the loop } loop++; } }, 0, 1); } })); break; } 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.", true); return; } if (npc.getAttackedBy() != player && npc.getAttackedByDelay() > Utils.currentTimeMillis()) { player.getPackets().sendGameMessage("This npc is already in combat.", true); 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.", true); return; } if (npc.getAttackedBy() != player && npc.getAttackedByDelay() > Utils.currentTimeMillis()) { player.getPackets().sendGameMessage("This npc is already in combat.", true); return; } } } player.getActionManager().setAction(new PlayerCombat(npc)); } break; } break; case 430: // Lunar spells Magic.processLunarSpell(player, npc, componentId); break; } if (Settings.DEBUG) { System.out.println("Spell:" + componentId); } } else if (packetId == ATTACK_NPC) { if (!player.isActive() || !player.clientHasLoadedMapRegion() || player.isDead() || player.getLockDelay() > Utils.currentTimeMillis()) { return; } int entityIndex = stream.readUnsignedShortLE(); boolean forceRun = stream.readUnsignedByte() == 1; if (forceRun) { player.setRun(forceRun); } NPC npc = World.getNPCs().get(entityIndex); if (npc == null || npc.isDead() || npc.hasFinished() || !player.getMapRegionsIds().contains(npc.getRegionId()) || !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.", true); return; } if (npc.getAttackedBy() != player && npc.getAttackedByDelay() > Utils.currentTimeMillis()) { player.getPackets().sendGameMessage("This npc is already in combat.", true); return; } } } player.stopAll(false); if (npc.getId() == 16027) { if (!(player.getControlerManager().getControler() instanceof DPMController)) { player.setRouteEvent(new RouteEvent(new WorldTile(4764, 5917, 0), () -> { player.stopAll(); player.faceEntity(npc); player.getDialogueManager().startDialogue("DamagePerMinuteD"); })); return; } } player.getActionManager().setAction(new PlayerCombat(npc)); } if (packetId == NPC_CLICK1_PACKET) { NPCHandler.handleOption1(player, stream); return; } if (packetId == NPC_CLICK2_PACKET) { NPCHandler.handleOption2(player, stream); return; } if (packetId == NPC_CLICK3_PACKET) { NPCHandler.handleOption3(player, stream); return; } if (packetId == INTERFACE_ON_OBJECT) {// alright should be all good int y = stream.readUnsignedShort128(); int x = stream.readUnsignedShortLE128(); int itemId = stream.readUnsignedShort(); boolean forceRun = stream.readUnsignedByteC() == 1; int objectId = stream.readInt(); int interfaceHash = stream.readIntLE(); int slot = stream.readUnsignedShortLE128(); final int interfaceId = interfaceHash >> 16; int componentId = interfaceHash - (interfaceId << 16); if (!player.isActive() || !player.clientHasLoadedMapRegion() || player.isDead() || Utils.getInterfaceDefinitionsSize() <= interfaceId || !player.getInterfaceManager().containsInterface(interfaceId) || player.isDead() || player.isLocked() || player.getEmotesManager().isDoingEmote()) { return; } final WorldTile tile = new WorldTile(x, y, player.getPlane()); if (!player.getMapRegionsIds().contains(tile.getRegionId())) { return; } WorldObject mapObject = World.getObjectWithId(tile, objectId); 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 (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; case 430:// lunars switch (componentId) { case 55: if (player.getSkills().getLevel(Skills.MAGIC) < 66) { player.getPackets().sendGameMessage("You need a level of 65 in order to cast Cure Plant."); return; } if (!Magic.checkRunes(player, true, Magic.ASTRAL_RUNE, 1, Magic.EARTH_RUNE, 8)) { return; } final FarmingSpot spot = player.getFarmingManager().getSpot(SpotInfo.getInfo(object.getId())); if (spot == null || spot.isDead()) { player.getPackets().sendGameMessage("This cannot be cured."); return; } else if (!spot.isDiseased()) { player.getPackets().sendGameMessage("Your patch is not diseased."); return; } player.lock(3); WorldTasksManager.schedule(new WorldTask() { @Override public void run() { spot.setDiseased(false); spot.refresh(); } }, 2); player.getSkills().addXp(Skills.MAGIC, 60); player.setNextGraphics(new Graphics(742, 0, 150)); player.setNextAnimation(new Animation(4409)); player.getPackets().sendGameMessage("You cast the spell and your patch is in perfect health."); break; } break; } } else if (packetId == PLAYER_OPTION_1_PACKET) { if (!player.isActive() || !player.clientHasLoadedMapRegion() || player.isDead()) { return; } int playerIndex = stream.readUnsignedShortLE128(); boolean forceRun = stream.readUnsignedByte() == 1; 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.getControlerManager().getControler() instanceof EliteDungeonsLobby) { player.getControlerManager().canAttack(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.", true); 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.", true); return; } } } player.stopAll(false); player.getActionManager().setAction(new PlayerCombat(p2)); } else if (packetId == PLAYER_OPTION_2_PACKET) { if (!player.isActive() || !player.clientHasLoadedMapRegion() || player.isDead()) { return; } int playerIndex = stream.readUnsignedShortLE128(); boolean forceRun = stream.readUnsignedByte() == 1; 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; } if (player.getFrozenBlockedDelay() > Utils.currentTimeMillis()) { return; } if (player.getFreezeDelay() >= Utils.currentTimeMillis()) { player.getPackets().sendGameMessage("A magical force prevents you from moving."); return; } player.stopAll(false); player.getActionManager().setAction(new PlayerFollow(p2)); } else if (packetId == PLAYER_OPTION_4_PACKET) { int playerIndex = stream.readUnsignedShortLE128(); boolean forceRun = stream.readUnsignedByte() == 1; final Player p2 = World.getPlayers().get(playerIndex); if (p2 == null || p2.isDead() || p2.hasFinished() || !player.getMapRegionsIds().contains(p2.getRegionId()) || player.getLockDelay() >= Utils.currentTimeMillis() || player == p2) { return; } player.stopAll(false); if (player.getX() == p2.getX() && player.getY() == p2.getY()) { if (!player.addWalkSteps(player.getX() - 1, player.getY(), 1)) { if (!player.addWalkSteps(player.getX() + 1, player.getY(), 1)) { if (!player.addWalkSteps(player.getX(), player.getY() + 1, 1)) { player.addWalkSteps(player.getX(), player.getY() - 1, 1); } } } } if (!p2.withinDistance(player, 14)) { player.sendMessage("Unable to find " + p2.getDisplayName() + "; must be within radius."); return; } player.setRouteEvent(new RouteEvent(p2, new Runnable() { @Override public void run() { if (!player.canTrade(p2)) { return; } if (p2.getTemporaryAttributtes().get("TradeTarget") == player) { p2.getTemporaryAttributtes().remove("TradeTarget"); player.getTrade().openTrade(p2); p2.getTrade().openTrade(player); p2.faceEntity(player); player.faceEntity(p2); return; } player.getTemporaryAttributtes().put("TradeTarget", p2); player.sendMessage("Sending " + p2.getDisplayName() + " a trade request..."); p2.getPackets().sendTradeRequestMessage(player); player.faceEntity(p2); } })); } else if (packetId == PLAYER_OPTION_5_PACKET) { int playerIndex = stream.readUnsignedShortLE128(); boolean forceRun = stream.readUnsignedByte() == 1; Player p2 = World.getPlayers().get(playerIndex); if (p2 == null || p2.isDead() || p2.hasFinished() || !player.getMapRegionsIds().contains(p2.getRegionId()) || player.getLockDelay() >= Utils.currentTimeMillis() || player == p2) { return; } if (!p2.withinDistance(player, 14)) { player.sendMessage("Unable to find " + p2.getDisplayName() + "."); return; } if (player.getAttackedByDelay() + 5000 > Utils.currentTimeMillis()) { player.sendMessage("You can't examine " + p2.getDisplayName() + "'s stats until 5 seconds after the end of combat."); return; } player.stopAll(); ViewProfile.sendInterface(player, p2); player.getDialogueManager().startDialogue(PlayerExamine.playerExamineD, p2); } else if (packetId == PLAYER_OPTION_6_PACKET) { int playerIndex = stream.readUnsignedShortLE128(); boolean forceRun = stream.readUnsignedByte() == 1; final Player p2 = World.getPlayers().get(playerIndex); if (p2 == null || p2.isDead() || p2.hasFinished() || !player.getMapRegionsIds().contains(p2.getRegionId()) || player.isLocked() || player == p2) { return; } if (!p2.withinDistance(player, 14)) { player.sendMessage("Unable to find " + p2.getDisplayName() + "."); return; } if (player.getAttackedByDelay() + 5000 > Utils.currentTimeMillis()) { player.sendMessage( "You can't pelt " + p2.getDisplayName() + "'s stats until 5 seconds after the end of combat."); return; } if (p2 == null || p2.isDead() || p2.hasFinished() || !player.getMapRegionsIds().contains(p2.getRegionId()) || player.isLocked() || player == p2) { return; } /* * else if (player.getGroup() != null) { if (player.getGroup().getLeader() == * player) { // 2nd player is busy if * (p2.getInterfaceManager().containsScreenInter()) { * player.sendMessage("This player is currently busy!"); return; } * * if (p2.getGroup() != null) { player.sendMessage(Colors.SALMON + * "This player is already in a group!"); return; } * * if (player.getGroup().getTeam().size() > 3) { * player.sendMessage(Colors.SALMON + "Your team is too" + * " full to invite another player!"); return; } * * if (!player.withinDistance(p2, 14)) { * player.sendMessage("Could not find player: " + p2.getUsername()); return; } * * do walk to player and open interface player.faceEntity(p2); if * (!player.withinDistance(p2, 2)) { player.setRouteEvent(new RouteEvent(p2, () * -> { p2.group = player.getGroup().recruit(p2); })); } else { p2.group = * player.getGroup().recruit(p2); } return; } } */ if (player.getInventory().containsItem(10501, 1)) { player.getInventory().deleteItem(10501, 1); } else if (player.getEquipment().getWeaponId() == 10501 && player.getEquipment().getItem(Equipment.SLOT_WEAPON).getAmount() > 0) { Item weapon = player.getEquipment().getItem(Equipment.SLOT_WEAPON); player.getEquipment().getItem(Equipment.SLOT_WEAPON) .setAmount(player.getEquipment().getItem(Equipment.SLOT_WEAPON).getAmount() - 1); player.getEquipment().refresh(Equipment.SLOT_WEAPON); if (player.getEquipment().getItem(Equipment.SLOT_WEAPON).getAmount() == 0) { player.sendMessage("You used up your last Snowball."); player.getEquipment().deleteItem(10501, weapon.getAmount()); } player.getEquipment().refresh(Equipment.SLOT_WEAPON); player.getAppearence().generateAppearenceData(); } else { player.getPackets().sendPlayerOption("Null", 6, true); return; } player.faceEntity(p2); player.setNextAnimation(new Animation(7530)); player.lock(2); World.sendProjectile(player, player, p2, 1281, 10, 10, 75, 50, 15, 0); } else if (packetId == PLAYER_OPTION_9_PACKET) { int playerIndex = stream.readUnsignedShortLE128(); boolean forceRun = stream.readUnsignedByte() == 1; if (Settings.DEBUG) { System.out.println(playerIndex); } Player p2 = World.getPlayers().get(playerIndex); if (p2 == null || p2 == player || p2.isDead() || p2.hasFinished() || !player.getMapRegionsIds().contains(p2.getRegionId())) { return; } if (player.isLocked()) { return; } if (forceRun) { player.setRun(forceRun); } player.stopAll(); ClansManager.viewInvite(player, p2); } else if (packetId == ITEM_TAKE_PACKET) { if (!player.isActive() || !player.clientHasLoadedMapRegion() || player.isDead()) { return; } long currentTime = Utils.currentTimeMillis(); if (player.getLockDelay() > currentTime) { return; } boolean forceRun = stream.readByte() == 1; int y = stream.readUnsignedShortLE(); int x = stream.readUnsignedShort(); final int id = stream.readUnsignedShort(); 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.setRouteEvent(new RouteEvent(item, new Runnable() { @Override public void run() { final FloorItem item = World.getRegion(regionId).getGroundItem(id, tile, player); if (item == null || !player.getNewQuestManager().canTakeItem(item) || !player.getControlerManager().canTakeItem(item)) { return; } if (item.getOwner() == null) { /* * ( if (item.getId() >= 7928 && item.getId() <= 7933) * * new NewsManager(player, * "<b><img src=\"./bin/images/news/easter.png\" height=15> " + * player.getDisplayName() + " has just found an Easter Egg.")) .start(); */ } if (item.getOwner() != null) { if (player.getRights() == 2) { player.sendMessage("This item was dropped by: " + item.getOwner() + "."); } if ((player.getIronman().isIronman() || player.isWiki()) && !player.getUsername().equalsIgnoreCase(item.getOwner())) { player.getPackets() .sendGameMessage("You can't pick up the items that aren't yours on iron man mode."); return; } } player.setNextFaceWorldTile(tile); player.addWalkSteps(tile.getX(), tile.getY(), 1); World.removeGroundItem(player, item); } })); } } public static void loadPacketSizes() { PACKET_SIZES[0] = 3; PACKET_SIZES[1] = 1; PACKET_SIZES[2] = 1; PACKET_SIZES[3] = 9; PACKET_SIZES[4] = 8; PACKET_SIZES[5] = 2; PACKET_SIZES[6] = 11; PACKET_SIZES[7] = 16; PACKET_SIZES[8] = 4; PACKET_SIZES[9] = -1; PACKET_SIZES[10] = -2; PACKET_SIZES[11] = -2; PACKET_SIZES[12] = -1; PACKET_SIZES[13] = 8; PACKET_SIZES[14] = -2; PACKET_SIZES[15] = -1; PACKET_SIZES[16] = 9; PACKET_SIZES[17] = -1; PACKET_SIZES[18] = 2; PACKET_SIZES[19] = 4; PACKET_SIZES[20] = -1; PACKET_SIZES[21] = -1; PACKET_SIZES[22] = 8; PACKET_SIZES[23] = 7; PACKET_SIZES[24] = -2; PACKET_SIZES[25] = -1; PACKET_SIZES[26] = 16; PACKET_SIZES[27] = 7; PACKET_SIZES[28] = 8; PACKET_SIZES[29] = -2; PACKET_SIZES[30] = 0; PACKET_SIZES[31] = 6; PACKET_SIZES[32] = 3; PACKET_SIZES[33] = 4; PACKET_SIZES[34] = 7; PACKET_SIZES[35] = 3; PACKET_SIZES[36] = 3; PACKET_SIZES[37] = 8; PACKET_SIZES[38] = -1; PACKET_SIZES[39] = -1; PACKET_SIZES[40] = 9; PACKET_SIZES[41] = 18; PACKET_SIZES[42] = 7; PACKET_SIZES[43] = 3; PACKET_SIZES[44] = 3; PACKET_SIZES[45] = -1; PACKET_SIZES[46] = 3; PACKET_SIZES[47] = -1; PACKET_SIZES[48] = 4; PACKET_SIZES[49] = 9; PACKET_SIZES[50] = 3; PACKET_SIZES[51] = 7; PACKET_SIZES[52] = -1; PACKET_SIZES[53] = 3; PACKET_SIZES[54] = 3; PACKET_SIZES[55] = 3; PACKET_SIZES[56] = 4; PACKET_SIZES[57] = 0; PACKET_SIZES[58] = 3; PACKET_SIZES[59] = 8; PACKET_SIZES[60] = 4; PACKET_SIZES[61] = 7; PACKET_SIZES[62] = 7; PACKET_SIZES[63] = 2; PACKET_SIZES[64] = 0; PACKET_SIZES[65] = 4; PACKET_SIZES[66] = 4; PACKET_SIZES[67] = -1; PACKET_SIZES[68] = -1; PACKET_SIZES[69] = 8; PACKET_SIZES[70] = 1; PACKET_SIZES[71] = -1; PACKET_SIZES[72] = 3; PACKET_SIZES[73] = 3; PACKET_SIZES[74] = 5; PACKET_SIZES[75] = -1; PACKET_SIZES[76] = 8; PACKET_SIZES[77] = -1; PACKET_SIZES[78] = 4; PACKET_SIZES[79] = 3; PACKET_SIZES[80] = 8; PACKET_SIZES[81] = -1; PACKET_SIZES[82] = 9; PACKET_SIZES[83] = 6; PACKET_SIZES[84] = -1; PACKET_SIZES[85] = 9; PACKET_SIZES[86] = -1; PACKET_SIZES[87] = -1; PACKET_SIZES[88] = 3; PACKET_SIZES[89] = 15; PACKET_SIZES[90] = 6; PACKET_SIZES[91] = 9; PACKET_SIZES[92] = 1; PACKET_SIZES[93] = 4; PACKET_SIZES[94] = 1; PACKET_SIZES[95] = -2; PACKET_SIZES[96] = 15; PACKET_SIZES[97] = -2; PACKET_SIZES[98] = -1; PACKET_SIZES[99] = 12; PACKET_SIZES[100] = 0; PACKET_SIZES[101] = -1; PACKET_SIZES[102] = -2; PACKET_SIZES[103] = 8; PACKET_SIZES[104] = 3; PACKET_SIZES[105] = 2; PACKET_SIZES[106] = 11; PACKET_SIZES[107] = 17; } private final Player player; public WorldPacketsDecoder(Player player) { this.player = player; } private static final short[] IGNORED = {}; public static boolean isIgnored(int opcode) { for (short ignored : IGNORED) { if (ignored == opcode) { return true; } } return false; } private final int[] history = new int[5]; private int history_index; private int chatType; private int packetId = -1; private int packetSize = -1; @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { if (!(msg instanceof ByteBuf)) { return; } ByteBuf in = (ByteBuf) msg; while (in.isReadable()) { if (packetId == -1) { int opcode = in.readUnsignedByte(); if (opcode >= PACKET_SIZES.length) { ctx.channel().close(); return; } packetId = opcode; } else if (packetSize == -1) { int length = PACKET_SIZES[packetId]; if (length == -1) { if (!in.isReadable(1)) { return; } length = in.readUnsignedByte(); } else if (length == -2) { if (!in.isReadable(2)) { return; } length = in.readUnsignedShort(); } packetSize = length; } else { if (packetSize != 0 && !in.isReadable(packetSize)) { return; } byte[] buffer = new byte[packetSize]; if (packetSize != 0) { in.readBytes(buffer); } InputStream stream = new InputStream(buffer); try { processPackets(packetId, packetSize, stream); } catch (Throwable e) { e.printStackTrace(); } packetId = packetSize = -1; } } if (!in.isReadable()) { ReferenceCountUtil.release(msg); } } public void processPackets(final int opcode, final int length, InputStream stream) { player.setPacketsDecoderPing(Utils.currentTimeMillis()); if (opcode == PING_PACKET) { OutputStream packet = new OutputStream(1); packet.writePacket(player, 12); player.getSession().write(packet); } else if (opcode == MOUVE_MOUSE_PACKET || opcode == MOUVE_MOUSE_PACKET2 || opcode == CLICK_PACKET || opcode == CLICK_PACKET2) { } else if (opcode == KEY_TYPED_PACKET) { if (player.isDead() || player.hasFinished()) { return; } int keyPressed = stream.readByte(); int interfaceHash = stream.read24BitInt(); int keyIndex = keyPressed == 100 ? 7 : keyPressed >= 6 && keyPressed <= 12 ? keyPressed - 6 : -1; /* * int keyIndex = keyPressed == 100 ? 7 : keyPressed >= 6 && keyPressed <= 12 ? * keyPressed - 6 : -1; if (keyIndex == -1) { return; } */ switch (keyPressed) { case 13: if (player.getInterfaceManager().containsScreenInter()) { player.closeInterfaces(); } break; case 102: Magic.sendNormalTeleportSpell(player, 0, 0, player.getHomeTile()); break; } if (keyIndex == -1) { return; } int actionId = player.getKeyBinds()[keyIndex]; switch (actionId) { case 0: player.sm("You don't have any keybinds attached to " + (keyPressed >= 6 && keyPressed <= 12 ? "F" + keyPressed : "Insert") + "."); break; case 1: if (player.getRegionId() == 11601 || player.getRegionId() == 15178) { player.sm("You cannot bank in this area."); return; } if (player.getPerkManager().bankCommand) { if (!player.canSpawn()) { player.sendMessage("You cannot open your bank account at the moment."); return; } if (player.isLocked()) { player.sendMessage("You can't bank at the moment, please wait."); return; } if (!player.canSpawn() || player.getControlerManager().getControler() != null) { player.sendMessage("You can't bank while you're in this area."); return; } if (player.isUnderCombat()) { player.sendMessage("You can't bank while in combat, please wait."); return; } if (!player.promptList()) { player.getBank().openBank(); } else { player.getDialogueManager().startDialogue("BankList", false); } return; } else { player.sendMessage("You have to purchase the Bank Command perk in order to do this."); } break; case 2: if (player.getRegionId() == 11601 || player.getRegionId() == 15178) { player.sm("You cannot open grand exchange in this area."); return; } if (player.getPerkManager().bankCommand) { if (!player.canSpawn()) { player.sendMessage("You cannot open your bank account at the moment."); return; } if (player.isLocked()) { player.sendMessage("You can't bank at the moment, please wait."); return; } if (!player.canSpawn() || player.getControlerManager().getControler() != null) { player.sendMessage("You can't bank while you're in this area."); return; } if (player.isUnderCombat()) { player.sendMessage("You can't bank while in combat, please wait."); return; } player.getGEManager().openGrandExchange(); return; } else { player.sendMessage("You have to purchase the Bank Command perk in order to do this."); } break; case 3: player.getDialogueManager().startDialogue("BossTeleports"); break; case 4: ButtonHandler.submitSpecialRequest(player); break; case 5: player.getPrayer().switchQuickPrayers(); break; case 6: if (player.getFamiliar() != null && player.getFamiliar().getBOBSize() > 0) { player.getFamiliar().store(); } break; case 7: if (player.getFamiliar() != null && player.getFamiliar().hasSpecialOn()) { player.getFamiliar().submitSpecial(player); } break; case 8: if (player.getRegionId() == 11601 || player.getRegionId() == 15178) { player.sm("You cannot bank in this area."); return; } player.getBank().depositAllKeyBind(); player.getAppearence().generateAppearenceData(); break; } } else if (opcode == ITEM_ON_FLOOR_EXAMINE) { boolean forceRun = stream.readUnsignedByte() == 1; int y = stream.readUnsignedShortLE(); int x = stream.readUnsignedShort(); int id = stream.readUnsignedShort(); player.getPackets().sendItemMessage(0, 15263739, id, x, y, ItemExamines.getExamine(new Item(id))); // ChatboxMessage } else if (opcode == DISPLAY_PACKET) { int displayMode = stream.readUnsignedByte(); boolean switchScreenMode = stream.readUnsignedByte() == 1; player.setDisplayMode(displayMode); player.getInterfaceManager().removeAll(); player.getInterfaceManager().sendInterfaces(); } else if (opcode == INTERFACE_ON_INTERFACE) { InventoryOptionsHandler.handleItemOnItem(player, stream); } else if (opcode == RECEIVE_PACKET_COUNT_PACKET) { int packetcount = stream.readInt(); } else if (opcode == DIALOGUE_CONTINUE_PACKET) { int junk = stream.readUnsignedShortLE(); int interfaceHash = stream.readIntV1(); int interfaceId = interfaceHash >> 16; int buttonId = (interfaceHash & 0xFF); if (Utils.getInterfaceDefinitionsSize() <= interfaceId) { Logger.log("Dialogue_Continue_Packet error!"); return; } if (!player.isRunning()) { return; } if (Settings.DEBUG) { Logger.log(this, "Dialogue: " + interfaceId + ", " + buttonId + ", " + junk); } int componentId = interfaceHash - (interfaceId << 16); if (interfaceId == 667) { CosmeticsHandler.openCosmeticsHandler(player); if (junk == Equipment.SLOT_SHIELD) { Item weapon = player.getEquipment().getCosmeticItems().get(Equipment.SLOT_WEAPON); if (weapon != null) { boolean isTwoHandedWeapon = Equipment.isTwoHandedWeapon(weapon); if (isTwoHandedWeapon) { player.getPackets().sendGameMessage( "You have a two handed cosmetic weapon. You can't edit shield slot unless you remove it."); return; } } } if (junk == Equipment.SLOT_RING && player.getEquipment().getSavedCosmetics().isEmpty()) { player.getDialogueManager().startDialogue("SimpleMessage", "You don't have any saved costumes. To save your current costume do ::savecurrentcostume or ::savecurrentcosmetic ."); return; } player.getDialogueManager().startDialogue( (player.isShowSearchOption() && player.getEquipment().getCosmeticItems().get(junk) == null) ? "CosmeticsSelect" : "CosmeticsD", junk); } else { player.getDialogueManager().continueDialogue(interfaceId, componentId); } } else if (opcode == WORLD_MAP_CLICK) { int coordinateHash = stream.readIntLE(); int x = coordinateHash >> 14; int y = coordinateHash & 0x3fff; int plane = coordinateHash >> 28; Integer hash = (Integer) player.getTemporaryAttributtes().get("worldHash"); 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.getVarsManager().sendVar(1159, coordinateHash); } } else if (opcode == CLOSE_INTERFACE_PACKET) { if (player.isActive() && !player.hasFinished() && !player.isRunning()) { LoginManager.sendLogin(player); return; } player.stopAll(); } else if (opcode == ESCAPE_PRESSED_PACKET) { if (player.isActive() && !player.hasFinished() && !player.isRunning()) { LoginManager.sendLogin(player); return; } player.closeInterfaces(); } else if (opcode == ENTER_INTEGER_PACKET) { if (!player.isRunning() || player.isDead()) { return; } int value = stream.readInt(); /** Input event goes here! */ InputEvent<?> inputEvent = player.getInputEvent(); if (inputEvent instanceof InputIntegerEvent) { ((InputIntegerEvent) inputEvent).onEvent(value); player.resetInputEvent(); return; } if (player.getTemporaryAttributtes().get("ArtisansWorkShop") != null) { Object[] settings = (Object[]) player.getTemporaryAttributtes().remove("ArtisansWorkShop"); if (value <= 0) { return; } int itemId = (int) settings[0]; boolean deposit = (boolean) settings[1]; ArtisansWorkShop.withdrawDepositOre(player, itemId, value, deposit); return; } if (player.getTemporaryAttributtes().get("gr_withdraw") == Boolean.TRUE) { player.getGrManager().withdraw(value); player.getTemporaryAttributtes().put("gr_withdraw", Boolean.FALSE); } if (player.getTemporaryAttributtes().get("gr_deposit") == Boolean.TRUE) { player.getGrManager().deposit(value); player.getTemporaryAttributtes().put("gr_deposit", Boolean.FALSE); } if (player.getTemporaryAttributtes().get("gr_bet") == Boolean.TRUE) { player.getGrManager().changeBet(value); player.getTemporaryAttributtes().put("gr_bet", Boolean.FALSE); } if (player.getTemporaryAttributtes().get("set_tax") == Boolean.TRUE) { ThroneManager.setTax(player, value); player.getTemporaryAttributtes().put("set_tax", Boolean.FALSE); } if (player.getTemporaryAttributtes().get(Key.DROP_X) != null) { Object[] attributtes = (Object[]) player.getTemporaryAttributtes().remove(Key.DROP_X); Item item = (Item) attributtes[0]; int slotId = (int) attributtes[1]; if (item == null || value <= 0 || slotId >= 28) { return; } if (value > player.getInventory().getAmountOf(item.getId())) { value = player.getInventory().getAmountOf(item.getId()); } item = new Item(item.getId(), value); if (!player.getControlerManager().canDropItem(item)) { return; } InventoryOptionsHandler.handleItemOption7(player, slotId, item.getId(), item); return; } if (player.getTemporaryAttributtes().get(Key.FORGE_X) != null) { Integer index = (Integer) player.getTemporaryAttributtes().remove(Key.FORGE_X); if (index == null) { return; } boolean dungeoneering = false; if (index > 100) { index -= 100; dungeoneering = true; } player.closeInterfaces(); player.getActionManager().setAction(new DungeoneeringSmithing(index, value, dungeoneering)); return; } if (player.getInterfaceManager().containsInterface(DungeoneeringSummoning.POUCHES_INTERFACE) && player.getTemporaryAttributtes().get(Key.INFUSE_X) != null) { boolean dungeoneering = (boolean) player.getTemporaryAttributtes().remove(Key.INFUSE_X); int item = (int) player.getTemporaryAttributtes().remove(Key.INFUSE_ITEM); DungeoneeringSummoning.handlePouchInfusion(player, item >> 16, item & 0xFF, value, dungeoneering); return; } if (player.getTemporaryAttributtes().get("ChangeSkillIPVP") != null) { if (player.getControlerManager().getControler() == null /* * || !(player.getControlerManager().getControler() instanceof * InstancedPVPControler) */) { return; } int skill = (int) player.getTemporaryAttributtes().remove("ChangeSkillIPVP"); if (value <= 0 || value > 99) { player.getPackets().sendGameMessage("Please choose a valid level."); return; } player.getSkills().set(skill, value); player.getSkills().setXp(skill, Skills.getXPForLevel(value)); player.getAppearence().generateAppearenceData(); player.getPackets().sendGameMessage( "You have changed your " + Skills.SKILL_NAME[skill] + " level to " + value + "."); return; } if (player.getTemporaryAttributtes().get("Combination-X") != null) { int combinationItemId = (int) player.getTemporaryAttributtes().remove("Combination-X"); if (value <= 0) { return; } CombinationPotions.startCombinationAction(player, value, combinationItemId); return; } if (player.getTemporaryAttributtes().remove("ADD_RESTRICT_ID") != null) { if (value >= Utils.getItemDefinitionsSize() || value < 0) { player.getPackets().sendGameMessage("Not a vaild item id."); return; } player.getPetLootManager().getRestrictedItems().add(new RestrictedItem(value)); player.getPackets().sendGameMessage( "Restricted item (" + value + ") has been added to your restricted items list."); player.getPackets().sendGameMessage("Use ::petlootmanager or ::plm to edit/remove/disable it."); return; } if (player.getTemporaryAttributtes().remove("LOTTERY_TICKET_BUY") != null) { if (value <= 0) { return; } int price = (value * Lottery.TICKET_PRICE); if (player.getInventory().getCoinsAmount() < price) { player.getPackets().sendGameMessage("You don't have enough money to buy that many tickets."); return; } if (value + Lottery.getTicketsAmount(player) > Lottery.MAX_TICKETS_PER_PLAYER) { player.getPackets().sendGameMessage("You can't have more than 20 tickets, You currently have " + Lottery.getTicketsAmount(player) + " lottery tickets."); return; } if ((value * Lottery.TICKET_PRICE) + (Lottery.LOTTERY_TICKETS.size() * Lottery.TICKET_PRICE) <= 0) { player.getPackets() .sendGameMessage("You can't buy anymore tickets, JackPot amount can't go over 2147M."); return; } // more checks for security reason and glitch/exploit fix if (player.getMoneyPouchValue() < price) { player.getPackets().sendGameMessage("You need to have atleast " + value + "m in your moneypouch"); return; } player.getInventory().removeItemMoneyPouch(new Item(995, price)); Lottery.buyTicket(player, value); player.getPackets() .sendGameMessage("You have bought " + value + " X Lottery Tickets, You currently have " + Lottery.getTicketsAmount(player) + " Lottery Tickets."); return; } if (player.getInterfaceManager().containsInterface(335)) { if (player.getTemporaryAttributtes().remove("trade_money") != null) { Integer trade_X_money = (Integer) player.getTemporaryAttributtes().remove("trade_X_money"); if (value <= 0 || trade_X_money == null || player.getMoneyPouch().getTotal() == 0) { return; } if (value >= player.getMoneyPouch().getTotal()) { value = player.getMoneyPouch().getTotal(); } player.getTrade().addPouch(trade_X_money, value); } } else if (player.getTemporaryAttributtes().remove(Key.SELL_SPIRIT_SHARDS) != null) { PetShopOwner.sellShards(player, value); } else if (player.getInterfaceManager().containsInterface(400)) { Integer create_tab_X_component = (Integer) player.getTemporaryAttributtes() .remove("create_tab_X_component"); if (create_tab_X_component == null) { return; } TabletMaking.handleTabletCreation(player, create_tab_X_component, value); } if (player.getTemporaryAttributtes().get("xpSkillTarget") != null) { int xpTarget = value; Integer skillId = (Integer) player.getTemporaryAttributtes().remove("xpSkillTarget"); if (xpTarget < player.getSkills().getXp(player.getSkills().getSkillIdByTargetId(skillId)) || player.getSkills().getXp(player.getSkills().getSkillIdByTargetId(skillId)) >= 200000000) { return; } if (xpTarget > 200000000) { xpTarget = 200000000; } player.getSkills().setSkillTarget(false, skillId, xpTarget); } else if (player.getTemporaryAttributtes().get("levelSkillTarget") != null) { int levelTarget = value; Integer skillId = (Integer) player.getTemporaryAttributtes().remove("levelSkillTarget"); int curLevel = player.getSkills().getLevel(player.getSkills().getSkillIdByTargetId(skillId)); if (curLevel >= (skillId == 24 ? 120 : 99)) { return; } if (levelTarget > (skillId == 24 ? 120 : 99)) { levelTarget = skillId == 24 ? 120 : 99; } if (levelTarget < player.getSkills().getLevel(player.getSkills().getSkillIdByTargetId(skillId))) { return; } player.getSkills().setSkillTarget(true, skillId, levelTarget); } else if (player.getTemporaryAttributtes().remove("dung_store_xp") != null) { DungeonRewardShop.buyXP(player, value); } else if (player.getTemporaryAttributtes().get("create_x_pouch") != null) { Integer itemId = (Integer) player.getTemporaryAttributtes().remove("create_x_pouch"); Summoning.createPouch(player, itemId, value); } /* * if (player.getTemporaryAttributtes().get("coinsamount") != null && * !player.getInventory().containsCoins(value * 1000000)) { player.sm(Colors.RED * + "You do not have enough gold! 1million gp is equal to 1 Cashbag!"); return; * } else { if (player.getTemporaryAttributtes().remove("coinsamount") != null * && player.getInventory().containsCoins(value * 1000000)) { * player.getInventory().addItem(24954, value); * player.getInventory().deleteCoins(1000000 * value); player.sm(Colors.GREEN + * "You converted " + value + " Million GP into " + Colors.ORANGE + value + * " cash bag!"); } } */ if (player.getTemporaryAttributtes().get("soul_wars_x") != null) { final int item = (int) player.getTemporaryAttributtes().remove("soul_wars_x"); if (SoulWarsManager.MINUTES_BEFORE_NEXT_GAME.get() < 4) { return; } final WorldTile walked = (WorldTile) player.getTemporaryAttributtes().remove("soul_wars_walked"); if (walked != null && !player.matches(walked)) { return; } player.getInventory().addItem(item, value); return; } if (player.getTemporaryAttributtes().get("edit_price") != null) { if (value < 0) { player.getTemporaryAttributtes().remove("edit_price"); return; } if (player.getTemporaryAttributtes().get("edit_price") == Boolean.TRUE) { player.getTemporaryAttributtes().put("edit_price", Boolean.FALSE); player.getGEManager().modifyPricePerItem(value); player.getTemporaryAttributtes().remove("edit_price"); } return; } if (player.getTemporaryAttributtes().get("edit_quantity") != null) { if (value < 0) { player.getTemporaryAttributtes().remove("edit_quantity"); return; } if (player.getTemporaryAttributtes().get("edit_quantity") == Boolean.TRUE) { player.getTemporaryAttributtes().put("edit_quantity", Boolean.FALSE); player.getGEManager().modifyAmount(value); player.getTemporaryAttributtes().remove("edit_quantity"); } return; } if (player.getTemporaryAttributtes().get("loot_beam") != null) { player.getTemporaryAttributtes().remove("loot_beam"); if (value < 1 || value > 2147000000) { value = 50000; } player.getLootBeamManager().setLootBeamMinimumValue(value); player.getDialogueManager().startDialogue("SimpleMessage", "You've set your Loot Beam trigger price " + "to: " + Colors.RED + Utils.getFormattedNumber(value) + "</col>."); AccountInterfaceManager.sendInterface(player); return; } if (player.getTemporaryAttributtes().get("ports_plate") != null) { player.getTemporaryAttributtes().remove("ports_plate"); if (value < 1 || value > 2147000000) { value = 0; } int plate = player.getPorts().plate; if (value > plate) { value = plate; } if (value <= 0) { return; } player.getDialogueManager().startDialogue("SimpleNPCMessage", 18891, "I've exchanged " + value + " plate for " + (value * 5) + " Chime."); player.getPorts().chime += value * 5; player.getPorts().plate -= value; return; } if (player.getTemporaryAttributtes().get("ports_chiGlobe") != null) { player.getTemporaryAttributtes().remove("ports_chiGlobe"); if (value < 1 || value > 2147000000) { value = 0; } int plate = player.getPorts().chiGlobe; if (value > plate) { value = plate; } if (value <= 0) { return; } player.getDialogueManager().startDialogue("SimpleNPCMessage", 18891, "I've exchanged " + value + " chi globe for " + (value * 5) + " Chime."); player.getPorts().chime += value * 5; player.getPorts().chiGlobe -= value; return; } if (player.getTemporaryAttributtes().get("ports_lacquer") != null) { player.getTemporaryAttributtes().remove("ports_lacquer"); if (value < 1 || value > 2147000000) { value = 0; } int plate = player.getPorts().lacquer; if (value > plate) { value = plate; } if (value <= 0) { return; } player.getDialogueManager().startDialogue("SimpleNPCMessage", 18891, "I've exchanged " + value + " lacquer for " + (value * 5) + " Chime."); player.getPorts().chime += value * 5; player.getPorts().lacquer -= value; return; } /* * if (player.getInterfaceManager().containsInterface(631)) { if * (player.getTemporaryAttributtes().remove("duelmoneypouch_remove") != null) { * Integer duel_X_money = (Integer) * player.getTemporaryAttributtes().remove("duelmoneypouch_X_money"); if (value * <= 0 || duel_X_money == null || player.getMoneyPouch().getTotal() == 0) { * return; } if (value >= player.getMoneyPouch().getTotal()) { value = * player.getMoneyPouch().getTotal(); } ((DuelArena) * player.getControlerManager().getControler()).addPouch(duel_X_money, value); } * } */ if (player.getInterfaceManager().containsInterface(548) || player.getInterfaceManager().containsInterface(746)) { if (player.getTemporaryAttributtes().get("money_pouch_remove") == Boolean.TRUE) { player.getMoneyPouch().withdrawPouch(value); player.getTemporaryAttributtes().put("money_pouch_remove", Boolean.FALSE); return; } } if ((player.getInterfaceManager().containsInterface(762) && player.getInterfaceManager().containsInterface(763)) || player.getInterfaceManager().containsInterface(11)) { if (value < 0) { return; } if (player.getTemporaryAttributtes().get("clanBank") != null && player.getTemporaryAttributtes().get("clanBank") == Boolean.TRUE) { Integer bank_item_X_Slot = (Integer) player.getTemporaryAttributtes() .remove("clanbank_item_X_Slot"); if (bank_item_X_Slot == null) { return; } player.getBank().setLastX(value); player.getBank().refreshLastX(); if (player.getTemporaryAttributtes().remove("clanbank_isWithdraw") != null) { player.getClanManager().getClan().getClanBank().withdrawItem(player, bank_item_X_Slot, value); } else { player.getClanManager().getClan().getClanBank().depositItem(player, bank_item_X_Slot, value, player.getInterfaceManager().containsInterface(11) ? false : true); } } else { Integer bank_item_X_Slot = (Integer) player.getTemporaryAttributtes().remove("bank_item_X_Slot"); if (bank_item_X_Slot == null) { return; } player.getBank().setLastX(value); player.getBank().refreshLastX(); if (player.getTemporaryAttributtes().remove("bank_isWithdraw") != 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.getInterfaceManager().containsInterface(206) && 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_isRemove") != null) { player.getPriceCheckManager().removeItem(pc_item_X_Slot, value); } else { player.getPriceCheckManager().addItem(pc_item_X_Slot, value); } } else if (player.getInterfaceManager().containsInterface(671) && 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_isRemove") != 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(335) && player.getInterfaceManager().containsInterface(336)) { if (value < 0) { return; } Integer trade_item_X_Slot = (Integer) player.getTemporaryAttributtes().remove("trade_item_X_Slot"); if (trade_item_X_Slot == null) { return; } if (player.getTemporaryAttributtes().remove("trade_isRemove") != null) { player.getTrade().removeItem(trade_item_X_Slot, value); } else { player.getTrade().addItem(trade_item_X_Slot, value); } } else if (player.getInterfaceManager().containsInterface(628) || player.getInterfaceManager().containsInterface(631)) { if (value < 0) { return; } Integer duel_item_X_Slot = (Integer) player.getTemporaryAttributtes().remove("duel_item_X_Slot"); if (duel_item_X_Slot == null) { return; } /* * if (player.getTemporaryAttributtes().remove("duel_isRemove") != null) { * ((DuelArena) * player.getControlerManager().getControler()).removeItem(duel_item_X_Slot, * value); } else { ((DuelArena) * player.getControlerManager().getControler()).addItem(duel_item_X_Slot, * value); } ((DuelArena) * player.getControlerManager().getControler()).refresh(duel_item_X_Slot); */ } else if (player.getTemporaryAttributtes().get("Sawing") != null && player.getTemporaryAttributtes().get("Sawitem") != null) { int amount = value; int itemId = ((Integer) player.getTemporaryAttributtes().remove("Sawitem")).intValue(); Item item = new Item(itemId); if (amount == 0) { player.getDialogueManager().startDialogue("SimpleMessage", "..."); return; } if (player.getInventory().containsItem(960, amount)) { // todo action (lazy coding atm) player.getInventory().deleteItem(960, amount); player.setNextAnimation(new Animation(9031)); player.getSkills().addXp(Skills.CONSTRUCTION, 25 * amount); return; } else { player.getDialogueManager().startDialogue("SimpleMessage", "You dont have " + amount + " " + item.getName() + "s."); return; } } } else if (opcode == ENTER_NAME_PACKET) { if (!player.isRunning() || player.isDead()) { return; } String value = stream.readString(); InputEvent<?> inputEvent = player.getInputEvent(); if (inputEvent instanceof InputNameEvent) { ((InputNameEvent) inputEvent).onEvent(value); player.resetInputEvent(); return; } if (player.getTemporaryAttributtes().remove("SaveCosmetic") != null) { if (value.equals("")) { return; } ItemsContainer<Item> cosmeticItems = new ItemsContainer<Item>(19, false); for (int i = 0; i < player.getEquipment().getCosmeticItems().getSize(); i++) { cosmeticItems.set(i, player.getEquipment().getCosmeticItems().get(i)); } SavedCosmetic cosmetic = new SavedCosmetic(value, cosmeticItems); player.getEquipment().getSavedCosmetics().add(cosmetic); player.getPackets().sendGameMessage("<col=00ff00>You have succecfully added " + value + " to your saved costumes. You can find it by doing ::cosmetics and clicking on ring slot."); return; } if (player.getTemporaryAttributtes().get("CosmeticsKeyWord") != null) { int slotId = (int) player.getTemporaryAttributtes().remove("CosmeticsKeyWord"); int choosenOption = (int) player.getTemporaryAttributtes().remove("CosmeticsChoosenOption"); if (value.equals("")) { return; } if (choosenOption != -1) { player.getDialogueManager().startDialogue("CosmeticsD", slotId, value, choosenOption); } else { player.getDialogueManager().startDialogue("CosmeticsD", slotId, value); } return; } if (player.getTemporaryAttributtes().remove("CosmeticsStoreKeyWord") != null) { if (value.equals("")) { return; } CosmeticsHandler.openCosmeticsStore(player, value, 0); return; } if (player.getTemporaryAttributtes().remove("referralName") != null) { player.unlock(); if (value.equals("")) { return; } String name = Utils.formatPlayerNameForProtocol(value); if (Utils.formatPlayerNameForProtocol(player.getDisplayName()).equalsIgnoreCase(name)) { return; } if (!SerializableFilesManager.containsPlayer(name)) { player.getPackets().sendGameMessage("Account name " + Utils.formatString(name) + " doesn't exist."); return; } // /ReferralHandler.addReferral(Utils.formatPlayerNameForProtocol(player.getDisplayName()), // name); return; } if (value.equals("")) { return; } if (player.getTemporaryAttributtes().get("gr_cashout") == Boolean.TRUE) { player.getGrManager().changeCashout(value); player.getTemporaryAttributtes().put("gr_cashout", Boolean.FALSE); } if (player.getTemporaryAttributtes().get("xp_share") == Boolean.TRUE) { player.getXpSharing().submitEntry(value); player.getTemporaryAttributtes().put("xp_share", Boolean.FALSE); } if (player.getTemporaryAttributtes().remove(Key.DUNGEON_INVITE) != null) { player.getDungManager().invite(value); return; } if (player.getTemporaryAttributtes().remove("ADD_GEAR_NAME") != null) { player.getGearPresets().saveGear(value); return; } if (player.getTemporaryAttributtes().remove("SaveCosmetic") != null) { if (value.equals("")) { return; } boolean[] hiddenSlots = new boolean[15]; for (int i = 0; i < player.getEquipment().getHiddenSlots().length; i++) { hiddenSlots[i] = player.getEquipment().getHiddenSlots()[i]; } ItemsContainer<Item> cosmeticItems = new ItemsContainer<Item>(15, false); for (int i = 0; i < player.getEquipment().getCosmeticItems().getSize(); i++) { cosmeticItems.set(i, player.getEquipment().getCosmeticItems().get(i)); } SavedCosmetic cosmetic = new SavedCosmetic(value, cosmeticItems); player.getEquipment().getSavedCosmetics().add(cosmetic); player.getPackets().sendGameMessage("<col=00ff00>You have succecfully added " + value + " to your saved costumes. You can find it by doing ::cosmetics and clicking on ring slot."); return; } if (player.getTemporaryAttributtes().get("CosmeticsKeyWord") != null) { int slotId = (int) player.getTemporaryAttributtes().remove("CosmeticsKeyWord"); if (value.equals("")) { return; } player.getDialogueManager().startDialogue("CosmeticsD", slotId, value); return; } if (player.getTemporaryAttributtes().get("loanHrs") == Boolean.TRUE) { player.getTrade().updateHours(Integer.valueOf(value)); } if (player.getInterfaceManager().containsInterface(1108)) { player.getFriendsIgnores().setChatPrefix(value); } else if (player.getTemporaryAttributtes().remove("ADD_RESTRICT_NAME") != null) { player.getPetLootManager().getRestrictedItems().add(new RestrictedItem(value)); player.getPackets().sendGameMessage( "Restricted item (" + value + ") has been added to your restricted items list."); player.getPackets().sendGameMessage("Use ::petlootmanager or ::plm to edit/remove/disable it."); } else if (player.getTemporaryAttributtes().remove("setclan") != null) { ClansManager.createClan(player, value); } else if (player.getTemporaryAttributtes().remove("joinguestclan") != null) { ClansManager.connectToClan(player, value, true); } else if (player.getTemporaryAttributtes().remove("joinguesthouse") != null) { House.enterHouse(player, value); } else if (player.getTemporaryAttributtes().remove("banclanplayer") != null) { ClansManager.banPlayer(player, value); } else if (player.getTemporaryAttributtes().remove("unbanclanplayer") != null) { ClansManager.unbanPlayer(player, value); } else if (player.getTemporaryAttributtes().get("clanmessage_hex") != null) { player.getClanManager().getClan().setClanMessageHex(value); player.getTemporaryAttributtes().remove("clanmessage_hex"); } else if (player.getTemporaryAttributtes().remove("setdisplay") != 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; } DisplayNames.setDisplayName(player, value); player.displayNameChange = Utils.currentTimeMillis(); player.getPackets() .sendGameMessage("Display name successfully set to: " + player.getDisplayName() + "."); } else { Boss boss = (Boss) player.getTemporaryAttributtes().remove(Key.JOIN_BOSS_INSTANCE); if (boss != null) { BossInstanceHandler.joinInstance(player, boss, value.toLowerCase(), false); } } } else if (opcode == ENTER_LONG_TEXT_PACKET) { if (!player.isRunning() || player.isDead()) { return; } String value = stream.readString(); if (value.equals("")) { return; } else if (player.getDialogueManager().continueDialogue(value)) { return; } InputEvent<?> inputEvent = player.getInputEvent(); if (inputEvent instanceof InputLongStringEvent) { ((InputLongStringEvent) inputEvent).onEvent(value); player.resetInputEvent(); return; } if (player.getTemporaryAttributtes().remove("entering_note") == Boolean.TRUE) { player.getNotes().add(value); } else if (player.getTemporaryAttributtes().remove("editing_note") == Boolean.TRUE) { player.getNotes().edit(value); } else if (player.getTemporaryAttributtes().remove("setbankname") == Boolean.TRUE) { if (player.getTemporaryAttributtes().get("setnametarget") != null) { Bank target = (Bank) player.getTemporaryAttributtes().get("setnametarget"); target.setName(value); player.getDialogueManager().startDialogue("BankList", true); return; } } else if (player.getTemporaryAttributtes().remove("change_pass") == Boolean.TRUE) { if (value.length() < 5 || value.length() > 15) { player.getPackets().sendGameMessage("Password length is limited to 5-15 characters."); return; } player.setPassword(Encrypt.encryptSHA1(value)); player.getPackets() .sendGameMessage("You have changed your password! Your new password is \"" + value + "\"."); } else if (player.getTemporaryAttributtes().remove("change_troll_name") == Boolean.TRUE) { value = Utils.formatString(value); if (value.length() < 3 || value.length() > 14) { player.getPackets() .sendGameMessage("You can't use a name shorter than 3 or longer than 14 characters."); return; } if (value.equalsIgnoreCase("none")) { player.getPetManager().setTrollBabyName(null); } else { player.getPetManager().setTrollBabyName(value); if (player.getPet() != null && player.getPet().getId() == Pets.TROLL_BABY.getBabyNpcId()) { player.getPet().setName(value); } } } else if (player.getTemporaryAttributtes().remove("servermsg") == Boolean.TRUE) { player.getTemporaryAttributtes().put("servermsg", Boolean.FALSE); World.sendWorldMessage("<col=ff0000>[Sever Message]: " + Utils.fixChatMessage(value), false); } else if (player.getTemporaryAttributtes().remove("updatePersonalMsg") == Boolean.TRUE) { player.getTemporaryAttributtes().put("updatePersonalMsg", Boolean.TRUE); String[] bannedSts = { "Owner", "staff", "god", "cock", "anal", "anus", "ass", "ballsack", "bitch", "whore", "hoe", "damn", "fuck", "f u c k", "goddamn", "nigga", "penis", "piss", "shit", "sex", "s3x", "slut", "vagina", "pussy" }; for (String banned : bannedSts) { if (!player.isStaff() && value.contains(banned)) { player.getDialogueManager().startDialogue("SimpleMessage", "Your personal message was not updated because it contains a banned word: " + Colors.RED + banned); return; } } player.personalMessage = value; player.getDialogueManager().startDialogue("SimpleMessage", Colors.GREEN + "Success!</col> your new personal message:<br> " + player.personalMessage); } else if (player.getTemporaryAttributtes().remove("yellcolor") == Boolean.TRUE) { if (value.length() != 6) { player.getPackets().sendGameMessage( "The HEX yell color you wanted to pick cannot be longer and shorter then 6."); } else if (Utils.containsInvalidCharacter(value) || value.contains("_")) { player.getPackets().sendGameMessage( "The requested yell color can only contain numeric and regular characters."); } else { player.setYellColor(value); player.getPackets().sendGameMessage("Your yell color has been changed to <col=" + player.getYellColor() + ">" + player.getYellColor() + "</col>."); } } else if (player.getTemporaryAttributtes().remove("setdisplay") == Boolean.TRUE) { if (Utils.invalidAccountName(Utils.formatPlayerNameForProtocol(value))) { player.getPackets().sendGameMessage("Name contains invalid characters or is too short/long."); return; } if (!DisplayNames.setDisplayName(player, value)) { player.getPackets().sendGameMessage("This name is already in use."); return; } player.getPackets().sendGameMessage("Your display name was successfully changed."); } else if (player.getInterfaceManager().containsInterface(1103) && player.getClanManager().getInterfaceSelected() == 2) { player.getClanManager().getClan().setClanMessage(value); player.closeInterfaces(); player.getClanManager() .sendGlobalMessage("[<col=" + player.getClanManager().getClan().getCmHex() + ">" + player.getClanName() + " Message</col>]<col=" + player.getClanManager().getClan().getCmHex() + ">" + value); } else if (player.getInterfaceManager().containsInterface(1103) && player.getClanManager().getInterfaceSelected() == 1) { ClansManager.setClanMottoInterface(player, value); } } else if (opcode == COLOR_ID_PACKET) { if (!player.isActive()) { return; } int colorId = stream.readUnsignedShort(); if (player.getTemporaryAttributtes().get("SkillcapeCustomize") != null) { SkillCapeCustomizer.handleSkillCapeCustomizerColor(player, colorId); } else if (player.getTemporaryAttributtes().get("MottifCustomize") != null) { ClansManager.setMottifColor(player, colorId); } else if (player.getTemporaryAttributtes().remove("COSTUME_COLOR_CUSTOMIZE") != null) { SkillCapeCustomizer.handleCostumeColor(player, colorId); } } else if (opcode == SWITCH_INTERFACE_COMPONENTS_PACKET) { stream.readShortLE128(); int toSlot = stream.readUnsignedShortLE(); int toInterfaceHash = stream.readIntV1(); int fromSlot = stream.readUnsignedShort(); int fromInterfaceHash = stream.readIntV2(); stream.readUnsignedShortLE(); int toInterfaceId = toInterfaceHash >> 16; int toComponentId = toInterfaceHash - (toInterfaceId << 16); int fromInterfaceId = fromInterfaceHash >> 16; int fromComponentId = fromInterfaceHash - (fromInterfaceId << 16); if (Settings.DEBUG) { Logger.log(this, "fromSlot: " + fromSlot + ", ToSlot: " + toSlot + ", toInterfaceHash: " + toInterfaceHash + ", toInterfaceID: " + toInterfaceId + ", toComponent: " + toComponentId + ", frominterface: " + fromInterfaceId + ", from componentId: " + fromComponentId); } if (fromInterfaceId == 1265 && toInterfaceId == 1266 && player.getTemporaryAttributtes().get("shop_buying") != null) { if ((boolean) player.getTemporaryAttributtes().get("shop_buying") == true) { Shop shop = (Shop) player.getTemporaryAttributtes().get("Shop"); if (shop == null) { return; } shop.buy(player, fromSlot, 1); } } if (Utils.getInterfaceDefinitionsSize() <= fromInterfaceId || Utils.getInterfaceDefinitionsSize() <= toInterfaceId) { return; } if (!player.getInterfaceManager().containsInterface(fromInterfaceId) || !player.getInterfaceManager().containsInterface(toInterfaceId)) { return; } if (fromComponentId != -1 && Utils.getInterfaceDefinitionsComponentsSize(fromInterfaceId) <= fromComponentId) { return; } if (toComponentId != -1 && Utils.getInterfaceDefinitionsComponentsSize(toInterfaceId) <= toComponentId) { return; } if (fromInterfaceId == Inventory.INVENTORY_INTERFACE && fromComponentId == 0 && toInterfaceId == Inventory.INVENTORY_INTERFACE && toComponentId == 0) { toSlot -= 28; if (toSlot < 0 || toSlot >= player.getInventory().getItemsContainerSize() || fromSlot >= player.getInventory().getItemsContainerSize()) { return; } player.getInventory().switchItem(fromSlot, toSlot); } else if (fromInterfaceId == 763 && fromComponentId == 0 && toInterfaceId == 763 && toComponentId == 0) { if (toSlot >= player.getInventory().getItemsContainerSize() || fromSlot >= player.getInventory().getItemsContainerSize()) { return; } player.getInventory().switchItem(fromSlot, toSlot); } else if (fromInterfaceId == 762 && toInterfaceId == 762) { if (toSlot < 0) { toSlot = 65535; // temp fix } if (player.getBank().isInsertItems()) { player.getBank().insertItem(fromSlot, toSlot); } else { player.getBank().switchItem(fromSlot, toSlot, fromComponentId, toComponentId); } } else if (fromInterfaceId == 34 && toInterfaceId == 34) { player.getNotes().switchNotes(fromSlot, toSlot); } } else if (opcode == WALKING_PACKET || opcode == MINI_WALKING_PACKET || opcode == ITEM_TAKE_PACKET || opcode == GROUND_ITEM_OPTION_2_PACKET || opcode == PLAYER_OPTION_2_PACKET || opcode == PLAYER_OPTION_4_PACKET || opcode == PLAYER_OPTION_5_PACKET || opcode == PLAYER_OPTION_6_PACKET || opcode == PLAYER_OPTION_1_PACKET || opcode == PLAYER_OPTION_9_PACKET || opcode == ATTACK_NPC || opcode == INTERFACE_ON_PLAYER || opcode == INTERFACE_ON_NPC || opcode == NPC_CLICK1_PACKET || opcode == NPC_CLICK2_PACKET || opcode == NPC_CLICK3_PACKET || opcode == NPC_CLICK4_PACKET || opcode == OBJECT_CLICK1_PACKET || opcode == SWITCH_INTERFACE_COMPONENTS_PACKET || opcode == OBJECT_CLICK2_PACKET || opcode == OBJECT_CLICK3_PACKET || opcode == OBJECT_CLICK4_PACKET || opcode == OBJECT_CLICK5_PACKET || opcode == INTERFACE_ON_OBJECT) { player.addLogicPacketToQueue(new LogicPacket(opcode, length, stream)); player.increaseAFKTimer(); } else if (opcode == OBJECT_EXAMINE_PACKET) { ObjectHandler.handleOption(player, stream, -1); } else if (opcode == ADD_FRIEND_PACKET) { if (!player.isActive()) { return; } player.getFriendsIgnores().addFriend(stream.readString()); } else if (opcode == REMOVE_FRIEND_PACKET) { if (!player.isActive()) { return; } player.getFriendsIgnores().removeFriend(stream.readString()); } else if (opcode == ADD_IGNORE_PACKET) { if (!player.isActive()) { return; } player.getFriendsIgnores().addIgnore(stream.readString(), stream.readUnsignedByte() == 1); } else if (opcode == REMOVE_IGNORE_PACKET) { if (!player.isActive()) { return; } player.getFriendsIgnores().removeIgnore(stream.readString()); } else if (opcode == SEND_FRIEND_MESSAGE_PACKET) { if (player.getMuted() > Utils.currentTimeMillis() || player.isPermMuted()) { player.sendMessage("You are muted and cannot talk."); return; } if (IPMute.isMuted(player.getSession().getIP())) { player.sendMessage("You are IP-muted and cannot talk."); return; } String username = stream.readString(); String message = Huffman.decodeString(150, stream); Player p2 = World.getPlayerByDisplayName(username); if (p2 == null) { player.sendMessage(player.getDisplayName() + " is currently offline."); return; } LoggingSystem.logPM(player, p2, Utils.fixChatMessage(message)); player.getFriendsIgnores().sendMessage(p2, Utils.fixChatMessage(message)); } else if (opcode == ADD_FRIEND_PACKET) { if (!player.isActive()) { return; } player.getFriendsIgnores().addFriend(stream.readString()); } else if (opcode == REMOVE_FRIEND_PACKET) { if (!player.isActive()) { return; } player.getFriendsIgnores().removeFriend(stream.readString()); } else if (opcode == CHAT_TYPE_PACKET) { chatType = stream.readUnsignedByte(); } else if (opcode == CHAT_PACKET) { if (!player.isActive() || player.getLastPublicMessage() > Utils.currentTimeMillis()) { return; } int colorEffect = stream.readUnsignedByte(); int moveEffect = stream.readUnsignedByte(); String message = Huffman.decodeString(200, stream); if (message == null) { return; } if (message.startsWith("::") || message.startsWith(";;")) { if (message.startsWith("::")) { player.sendMessage("Please use ;; instead of :: to enter commands!"); return; } if (!player.getControlerManager().processCommand(message.replace("::", "").replace(";;", ""), false, false)) { return; } Commands.processCommand(player, message.replace("::", "").replace(";;", ""), false, false); return; } if (message.startsWith("\\") || message.startsWith("\\")) { Commands.processCommand(player, message.replace("\\", "answer ").replace("\\ ", "answer ").replace("\\ ", "answer "), false, false); return; } if (player.getMuted() > Utils.currentTimeMillis() || player.isPermMuted()) { player.sendMessage("You are muted and cannot talk."); return; } if (IPMute.isMuted(player.getSession().getIP())) { player.sendMessage("You are IP-muted and cannot talk."); return; } int effects = Utils.fixChatEffects(player.getUsername(), colorEffect, moveEffect); message = Profanity.processProfanity(message); if (chatType == 1) { player.sendFriendsChannelMessage(Utils.fixChatMessage(message)); if (player.getRights() < 2 && message.contains("@everyone") || message.contains("@here")) { return; } DiscordMessage.sendFriendsChatMessage(Utils.fixChatMessage(message), player.getDisplayName()); } else if (chatType == 2) { player.sendClanChannelMessage(new ChatMessage(Utils.fixChatMessage(message))); } else if (chatType == 3) { player.sendGuestClanChannelMessage(new ChatMessage(Utils.fixChatMessage(message))); } else { if (player.getControlerManager().getControler() instanceof EliteDungeonController) { for (Player party : player.getEliteDungeonsManager().getParty().getTeam()) { if (!party.getEliteDungeonsManager().isInside()) { continue; } party.getPackets().sendPublicMessage(player, new PublicChatMessage(Utils.fixChatMessage(message), effects)); } } else { player.sendPublicChatMessage(new PublicChatMessage(Utils.fixChatMessage(message), effects)); } } player.setLastPublicMessage(Utils.currentTimeMillis() + 300); LoggingSystem.logPublicChat(player, message); if (Settings.DEBUG) { Logger.log(this, "Chat type: " + chatType); } player.increaseAFKTimer(); } else if (opcode == JOIN_FRIEND_CHAT_PACKET) { FriendChatsManager.joinChat(stream.readString(), player); } else if (opcode == KICK_FRIEND_CHAT_PACKET) { if (!player.isActive()) { return; } player.setLastPublicMessage(Utils.currentTimeMillis() + 1000); // avoids // message // appearing player.kickPlayerFromFriendsChannel(stream.readString()); } else if (opcode == CHANGE_FRIEND_CHAT_PACKET) { if (!player.isActive() || !player.getInterfaceManager().containsInterface(1108)) { return; } player.getFriendsIgnores().changeRank(stream.readString(), stream.readUnsignedByte128()); } else if (opcode == GRAND_EXCHANGE_ITEM_SELECT_PACKET) { int itemId = stream.readUnsignedShort(); player.getGEManager().chooseItem(itemId); } else if (opcode == FORUM_THREAD_ID_PACKET) { String threadId = stream.readString(); if (player.getInterfaceManager().containsInterface(1100)) { ClansManager.setThreadIdInterface(player, threadId); } else if (Settings.DEBUG) { Logger.log(this, "Called FORUM_THREAD_ID_PACKET: " + threadId); } } else if (opcode == OPEN_URL_PACKET) { String type = stream.readString(); String path = stream.readString(); String unknown = stream.readString(); int flag = stream.readUnsignedByte(); } else if (opcode == COMMANDS_PACKET) { if (!player.isRunning()) { return; } boolean clientCommand = stream.readUnsignedByte() == 1; stream.readUnsignedByte(); String command = stream.readString(); if (!Commands.processCommand(player, command, true, clientCommand) && Settings.DEBUG) { Logger.log(this, "Command: " + command); } } else if (opcode == NPC_EXAMINE_PACKET) { NPCHandler.handleExamine(player, stream); } else if (opcode == GROUND_ITEM_OPTION_2_PACKET) { if (!player.isActive() || !player.clientHasLoadedMapRegion() || player.isDead()) { return; } long currentTime = Utils.currentTimeMillis(); if (player.getLockDelay() > currentTime) { return; } boolean forceRun = stream.readByte() == 1; int y = stream.readUnsignedShortLE(); int x = stream.readUnsignedShort(); final int id = stream.readUnsignedShort(); 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.setRouteEvent(new RouteEvent(item, new Runnable() { @Override public void run() { if (item == null) { return; } if (item.getOwner() != null) { if (item.getOwner() != null) { if (!player.getUsername().equalsIgnoreCase(item.getOwner()) && player.getIronman().isIronman()) { player.sendMessage("Ironmen cannot interact with other player owned items."); return; } if (!player.getUsername().equalsIgnoreCase(item.getOwner()) && player.getIronman().getMode(player, 2)) { player.sendMessage("Hardcore ironmen cannot interact with other player owned items."); return; } if (!player.getUsername().equalsIgnoreCase(item.getOwner()) && player.isWiki()) { player.sendMessage("Wiki cannot interact with other player owned items."); return; } } } player.setNextFaceWorldTile(tile); player.addWalkSteps(tile.getX(), tile.getY(), 1); if (Firemaking.isFiremaking(player, item.getId())) { World.removeGroundItem(player, item); return; } } })); if (Settings.DEBUG) { System.out.println("Item id: " + item.getId() + "."); } } else if (opcode == GROUND_ITEM_OPTION_EXAMINE) { if (!player.isActive() || !player.clientHasLoadedMapRegion() || player.isDead()) { return; } long currentTime = Utils.currentTimeMillis(); if (player.getLockDelay() > currentTime) { return; } boolean forceRun = stream.readByte() == 1; int y = stream.readUnsignedShortLE(); int x = stream.readUnsignedShort(); final int id = stream.readUnsignedShort(); 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.sendMessage(ItemExamines.getExamine(item)); } else if (opcode == DONE_LOADING_REGION_PACKET) { if (!player.clientHasLoadedMapRegion()) { // load objects and items player.setClientHasLoadedMapRegion(); } player.refreshSpawnedObjects(); } else if (opcode == PUBLIC_QUICK_CHAT_PACKET) { if (!player.isActive()) { return; } if (player.getLastPublicMessage() > Utils.currentTimeMillis()) { return; } player.setLastPublicMessage(Utils.currentTimeMillis() + 300); boolean secondClientScript = stream.readByte() == 1; int fileId = stream.readUnsignedShort(); if (!Utils.isValidQuickChat(fileId)) { return; } byte[] data = null; if (length > 3) { data = new byte[length - 3]; stream.readBytes(data); } data = Utils.completeQuickMessage(player, fileId, data); if (chatType == 0) { player.sendPublicChatMessage(new QuickChatMessage(fileId, data)); } else if (chatType == 1) { player.sendFriendsChannelQuickMessage(new QuickChatMessage(fileId, data)); } else if (chatType == 2) { player.sendClanChannelQuickMessage(new QuickChatMessage(fileId, data)); } else if (chatType == 3) { player.sendGuestClanChannelQuickMessage(new QuickChatMessage(fileId, data)); } else if (Settings.DEBUG) { Logger.log(this, "Unknown chat type: " + chatType); } player.increaseAFKTimer(); } else if (opcode == ACTION_BUTTON1_PACKET || opcode == ACTION_BUTTON2_PACKET || opcode == ACTION_BUTTON4_PACKET || opcode == ACTION_BUTTON5_PACKET || opcode == ACTION_BUTTON6_PACKET || opcode == ACTION_BUTTON7_PACKET || opcode == ACTION_BUTTON8_PACKET || opcode == ACTION_BUTTON3_PACKET || opcode == ACTION_BUTTON9_PACKET || opcode == ACTION_BUTTON10_PACKET) { ButtonHandler.handleButtons(player, stream, opcode); player.increaseAFKTimer(); } else if (opcode == DROP_ITEM_PACKET) { @SuppressWarnings("unused") int interfaceHash = stream.readIntV2(); final int slotId2 = stream.readUnsignedShort128(); final int slotId = stream.readUnsignedShortLE128(); if (slotId > 27 || player.getInterfaceManager().containsInventoryInter()) { return; } Item item = player.getInventory().getItem(slotId); if (item == null || item.getId() != slotId2) { return; } InventoryOptionsHandler.handleItemOption7(player, slotId, slotId2, item); player.increaseAFKTimer(); } else { if (Settings.DEBUG) { // Logger.log(this, "Unhandled Packet : " + opcode); } } } }
Editor is loading...