Guest User

ActionSender

a guest
Apr 1st, 2013
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 56.73 KB | None | 0 0
  1. package org.dementhium.net;
  2.  
  3. import java.util.Random;
  4.  
  5. import org.dementhium.action.ProduceAction;
  6. import org.dementhium.cache.format.LandscapeParser;
  7. import org.dementhium.content.clans.Clan;
  8. import org.dementhium.event.impl.interfaces.MagicBookListener;
  9. import org.dementhium.model.Container;
  10. import org.dementhium.model.Item;
  11. import org.dementhium.model.Location;
  12. import org.dementhium.model.Mob;
  13. import org.dementhium.model.Projectile;
  14. import org.dementhium.model.World;
  15. import org.dementhium.model.map.GameObject;
  16. import org.dementhium.model.map.ObjectManager;
  17. import org.dementhium.model.map.region.DynamicRegion;
  18. import org.dementhium.model.map.region.RegionBuilder;
  19. import org.dementhium.model.mask.ChatMessage;
  20. import org.dementhium.model.misc.GroundItem;
  21. import org.dementhium.model.misc.GroundItemManager;
  22. import org.dementhium.model.misc.IconManager.Icon;
  23. import org.dementhium.model.player.Player;
  24. import org.dementhium.model.player.Skills;
  25. import org.dementhium.net.message.Message.PacketType;
  26. import org.dementhium.net.message.MessageBuilder;
  27. import org.dementhium.util.InterfaceSettings;
  28. import org.dementhium.util.MapXTEA;
  29. import org.dementhium.util.Misc;
  30. import org.dementhium.util.TextUtils;
  31.  
  32. public class ActionSender {
  33.      public static final String[] DONATORS = { "nexon", "test ltd", "sparkle", "avengedpvm", "nom hunterz", "aubtin93", "keeptrollin4", "leemon69", "0wn3d pl0x"}; 
  34.     // public static final String[] SUPERDONATORS = { "nexon", "test ltd", "sparkle", "nom hunterz, }; 
  35.        
  36.      public static final String[] ADMINS = {"Felix"};//ad names here for admins
  37.    
  38.      public static final String[] MODERATORS = {"Paul"}; //add names here for mods
  39.    
  40.     public static void packet108(Player player, int i1, int i2) {
  41.         MessageBuilder bldr = new MessageBuilder(108);
  42.         bldr.writeByteA(i1);
  43.         bldr.writeByteS(i2);
  44.         player.write(bldr.toMessage());
  45.     }
  46.  
  47.     public static int NO_BLACKOUT = 0, BLACKOUT_ORB = 1, BLACKOUT_MAP = 2,
  48.             BLACKOUT_ORB_AND_MAP = 5;
  49.  
  50.     public static int messageCounter = 1;
  51.             public static final Random r = new Random();
  52.             public static final String[] OWNERS = {"Mod"};
  53.             public static final String[] ADMINS = {"Felix"};
  54.             public static final String[] MODERATORS = {"Paul"};
  55.      
  56.    
  57.    
  58.    
  59.    
  60.    
  61.    
  62.     public static final Random r = new Random();
  63.  
  64.     public static void sendAnimateObject(Player player, GameObject obj, int anim) { // its
  65.                                                                                     // wrong
  66.                                                                                     // but
  67.                                                                                     // I
  68.                                                                                     // dont
  69.                                                                                     // need
  70.                                                                                     // it
  71.                                                                                     // nvm.
  72.         /*
  73.          * int i_119_ =
  74.          * Class48_Sub1_Sub2.aClass98_Sub22_Sub1_5514.readByteC((byte) 102); int
  75.          * i_120_ = Class53.anInt430 + (i_119_ >> 2113611716 & 0x7); int i_121_
  76.          * = Class335.anInt2819 + (0x7 & i_119_); int i_122_ =
  77.          * Class48_Sub1_Sub2.aClass98_Sub22_Sub1_5514.readShort1((byte) 49); int
  78.          * i_123_ =
  79.          * Class48_Sub1_Sub2.aClass98_Sub22_Sub1_5514.readUnsignedByte((byte)
  80.          * 45);
  81.          */
  82.         int localX = obj.getLocation().getX()
  83.                 - (player.getRegion().getLastMapRegion().getRegionX() - 6) * 8;
  84.         int localY = obj.getLocation().getY()
  85.                 - (player.getRegion().getLastMapRegion().getRegionY() - 6) * 8;
  86.         if (!updateTilePosition(player, obj.getLocation()))
  87.             return;
  88.         MessageBuilder bldr = new MessageBuilder(81);
  89.         bldr.writeByteS(((localX - ((localX >> 3) << 3)) << 4)
  90.                 | ((localY - ((localY >> 3) << 3)) & 0x7));
  91.         bldr.writeLEShortA(anim);
  92.         bldr.writeByteA((obj.getType() << 2) + (obj.getRotation() & 3));
  93.         player.write(bldr.toMessage());
  94.     }
  95.  
  96.     public static void packet66(Player player) {
  97.         // MessageBuilder bldr = new MessageBuilder(5);
  98.         // bldr.writeLEShortA(1043);
  99.         // bldr.writeLEInt(4771);
  100.         // player.write(bldr.toMessage());
  101.         // player.write(new MessageBuilder(106)
  102.         // .writeLEInt(4771)
  103.         // .writeLEShortA(1043)
  104.         // .toMessage());
  105.     }
  106.    
  107.     public static void sendSound(Player player, int soundId, int volume,
  108.             int soundSpeed, boolean voice) {
  109.         player.write(new MessageBuilder(voice ? 7 : 69).writeShort(soundId) // sound
  110.                                                                             // id
  111.                 .writeByte(1) // times played
  112.                 .writeShort(0) // delay before starting
  113.                 .writeByte(volume).writeShort(soundSpeed) // speed of the sound,
  114.                                                             // 255 seems normal
  115.                 .toMessage());
  116.     }
  117.  
  118.     public static void spawnPositionedGraphic(Location location, int graphicId) {
  119.         for (Player player : World.getWorld().getPlayers()) {
  120.             if (player.getLocation().distance(location) <= 16) {
  121.                 sendPositionedGraphic(player, location, graphicId);
  122.             }
  123.         }
  124.     }
  125.  
  126.     public static void sendPositionedGraphic(Player player, Location location,
  127.             int graphicId) {
  128.         if (!updateTilePosition(player, location))
  129.             return;
  130.         int regionX = location.getX()
  131.                 - (player.getLocation().getRegionX() << 3);
  132.         int regionY = location.getY()
  133.                 - (player.getLocation().getRegionY() << 3);
  134.         player.write(new MessageBuilder(87)
  135.                 .writeByte((regionX & 0x7) << 4 | regionY & 0x7)
  136.                 .writeShort(graphicId).writeByte(0).writeShort(0).writeByte(0)
  137.                 .toMessage());
  138.     }
  139.  
  140.     public static void sendObject(Player player, GameObject object) {
  141.         sendObject(player, object.getId(), object.getLocation().getX(), object
  142.                 .getLocation().getY(), object.getLocation().getZ(),
  143.                 object.getType(), object.getRotation());
  144.     }
  145.  
  146.     public static void sendObject(Player player, int objectId, int x, int y,
  147.             int z, int type, int rotation) {
  148.         if (player == null)
  149.             return;
  150.         int viewportX = x
  151.                 - (player.getRegion().getLastMapRegion().getRegionX() - 6) * 8;
  152.         int viewportY = y
  153.                 - (player.getRegion().getLastMapRegion().getRegionY() - 6) * 8;
  154.         if (!updateTilePosition(player, Location.locate(x, y, z)))
  155.             return;
  156.         MessageBuilder bldr = new MessageBuilder(78);
  157.         bldr.writeByteC(((viewportX - ((viewportX >> 3) << 3)) << 4)
  158.                 | ((viewportY - ((viewportY >> 3) << 3)) & 0x7));
  159.         bldr.writeLEShort(objectId);
  160.         bldr.writeByte((type << 2) + (rotation & 3));
  161.         player.write(bldr.toMessage());
  162.     }
  163.  
  164.     public static void deleteObject(Player player, int objectId, int x, int y,
  165.             int z, int type, int rotation) {
  166.         int localX = x
  167.                 - (player.getRegion().getLastMapRegion().getRegionX() - 6) * 8;
  168.         int localY = y
  169.                 - (player.getRegion().getLastMapRegion().getRegionY() - 6) * 8;
  170.         if (!updateTilePosition(player, Location.locate(x, y, z)))
  171.             return;
  172.         player.write(new MessageBuilder(19)
  173.                 .writeByteC((type << 2) + (rotation & 3))
  174.                 .writeByteS(
  175.                         ((localX - ((localX >> 3) << 3)) << 4)
  176.                                 | ((localY - ((localY >> 3) << 3)) & 0x7))
  177.                 .toMessage());
  178.     }
  179.  
  180.     /*
  181.      * public static void sendIcon(Player p, Icon icon) { MessageBuilder bldr =
  182.      * new MessageBuilder(0); bldr.writeByte(icon.getSlot() << 5 |
  183.      * icon.getTargetType()); if (icon.getTargetType() > 0) {
  184.      * bldr.writeByte(icon.getArrowId()); if (icon.getTargetType() == 1 ||
  185.      * icon.getTargetType() == 10) { bldr.writeShort(icon.getIndex());
  186.      * bldr.skip(6); } bldr.writeShort(icon.getModelId()); } else {
  187.      * bldr.skip(11); } p.write(bldr.toMessage()); }
  188.      */
  189.  
  190.     public static void sendHintIcon(Player p, Icon icon) {
  191.         MessageBuilder bldr = new MessageBuilder(0);
  192.         bldr.writeByte(icon.getSlot() << 5 | icon.getTargetType());
  193.         bldr.writeByte(icon.getArrowId());
  194.         if (icon.getIndex() > -1) {
  195.             bldr.writeShort(icon.getIndex());
  196.             bldr.writeShort(icon.getDistance());
  197.             bldr.skip(4);
  198.         } else if (icon.getLocation() != null) {
  199.             bldr.writeByte(1); // TODO: Identify.
  200.             bldr.writeShort(icon.getLocation().getX());
  201.             bldr.writeShort(icon.getLocation().getY());
  202.             bldr.writeByte(icon.getLocation().getZ());
  203.             bldr.writeShort(icon.getDistance());
  204.         } else {
  205.             bldr.skip(11);
  206.         }
  207.         bldr.writeShort(icon.getModelId());
  208.         p.write(bldr.toMessage());
  209.     }
  210.  
  211.     public static void sendSystemUpdate(Player p, double seconds) {
  212.         long l = Math.round(seconds);
  213.         int value = Math.round(l);
  214.         MessageBuilder bldr = new MessageBuilder(77);
  215.         if (value > 0) {
  216.             bldr.writeShort(value);
  217.         }
  218.         p.write(bldr.toMessage());
  219.     }
  220.     public static void rotateCamera(Player p, int x, int y, int speed, int angle) {
  221.         MessageBuilder bldr = new MessageBuilder(93);
  222.         bldr.writeByteA(0); // idk
  223.         bldr.writeByteS(x); // y coord to look at
  224.         bldr.writeByte(y); // x coord to look at?
  225.         bldr.writeByteC(speed);
  226.         bldr.writeShort(0); // idk
  227.         p.write(bldr.toMessage());
  228.  
  229.     }
  230.  
  231.     public static void moveCamera(Player p, int speed,
  232.             int backAndForthDistance, int sideToSideDistance, int floorHeight,
  233.             int cameraHeight) {
  234.         MessageBuilder bldr = new MessageBuilder(100);
  235.         bldr.writeByteS(floorHeight); // speed to move
  236.         bldr.writeByteA(sideToSideDistance);
  237.         bldr.writeShort(cameraHeight); // sizeX (dont go over like 10 or so)
  238.         bldr.writeByteA(backAndForthDistance);
  239.         bldr.writeByteA(speed); // nothing?
  240.         p.write(bldr.toMessage());
  241.     }
  242.  
  243.     public static void resetCamera(Player player) {
  244.         player.write(new MessageBuilder(79).toMessage());
  245.     }
  246.  
  247.     public static void shakeCamera(Player p, int speed) {
  248.         MessageBuilder bldr = new MessageBuilder(26);
  249.         bldr.writeLEShortA(14); // idk
  250.         bldr.writeByteA(speed); // speed
  251.         bldr.writeByteS(1);// nooo idea
  252.         bldr.writeByteS(0); // idk lol
  253.         bldr.writeByteC(0); // idk lol
  254.         p.write(bldr.toMessage());
  255.     }
  256.  
  257.     public static void sendItems(Player player, int interfaceId, int childId,
  258.             int type, Container items) {
  259.         int main = interfaceId * 65536 + childId;
  260.         MessageBuilder bldr = new MessageBuilder(120, PacketType.VAR_SHORT);
  261.         bldr.writeInt(main);
  262.         bldr.writeShort(type);
  263.         bldr.writeShort(items.getSize());
  264.         for (int i = 0; i < items.getSize(); i++) {
  265.             Item item = items.get(i);
  266.             int id, amt;
  267.             if (item == null) {
  268.                 id = -1;
  269.                 amt = 0;
  270.             } else {
  271.                 id = item.getDefinition().getId();
  272.                 amt = item.getAmount();
  273.             }
  274.             if (amt > 254) {
  275.                 bldr.writeByteC((byte) 255);
  276.                 bldr.writeInt1(amt);
  277.             } else {
  278.                 bldr.writeByteC(amt);
  279.             }
  280.             bldr.writeLEShort(id + 1);
  281.         }
  282.         player.getConnection().write(bldr.toMessage());
  283.     }
  284.  
  285.     public static void closeInventoryInterface(Player p) {
  286.         if (p == null || p.getConnection() == null)
  287.             return;
  288.         boolean fullscreen = p.getConnection().getDisplayMode() == 2;
  289.         sendCloseInterface(p, fullscreen ? 746 : 548, fullscreen ? 84 : 197);
  290.     }
  291.  
  292.     public static void closeSideInterface(Player p) {
  293.         boolean fullscreen = p.getConnection().getDisplayMode() == 2;
  294.         sendCloseInterface(p, fullscreen ? 746 : 548, 195);
  295.     }
  296.  
  297.     // 55, 53, 58, 53, 995, 15, 184, 140, 15, 37, 16, 64 Magic shortbow.
  298.  
  299.     /**
  300.      * Sends a projectile.
  301.      *
  302.      * @param p
  303.      *            The player.
  304.      * @param projectile
  305.      *            The projectile to send.
  306.      */
  307.     public static void sendProjectile(Player player, Projectile projectile) {
  308.         if (player == null || projectile == null
  309.                 || player.getRegion().getLastMapRegion() == null) {
  310.             return;
  311.         }
  312.         MessageBuilder bldr = new MessageBuilder(15, PacketType.VAR_SHORT);
  313.         Location end = projectile.isLocationBased() ? projectile
  314.                 .getEndLocation() : projectile.getVictim().getLocation();
  315.         Location start = projectile.getSourceLocation();
  316.         int x = start.getX()
  317.                 - (player.getRegion().getLastMapRegion().getRegionX() - 6) * 8;
  318.         int y = start.getY()
  319.                 - (player.getRegion().getLastMapRegion().getRegionY() - 6) * 8;
  320.         bldr.writeByte(end.getZ()).writeByteC(y >> 3).writeByteA(x >> 3);
  321.         bldr.writeByte(13);
  322.         x = start.getX() - (start.getRegionX() << 3);
  323.         y = start.getY() - (start.getRegionY() << 3);
  324.         bldr.writeByte((x & 0x7) << 3 | y & 0x7)
  325.                 .writeByte((start.getX() - end.getX()) * -1)
  326.                 .writeByte((start.getY() - end.getY()) * -1)
  327.                 .writeShort(
  328.                         projectile.getVictim() != null ? (projectile
  329.                                 .getVictim().isPlayer() ? -(projectile
  330.                                 .getVictim().getIndex() + 1) : (projectile
  331.                                 .getVictim().getIndex() + 1)) : -1)
  332.                 .writeShort(projectile.getProjectileId())
  333.                 .writeByte(projectile.getStartHeight())
  334.                 .writeByte(projectile.getEndHeight())
  335.                 .writeShort(projectile.getType())
  336.                 .writeShort(projectile.getSpeed())
  337.                 .writeByte(projectile.getAngle())
  338.                 .writeShort(projectile.getDistance());
  339.         player.write(bldr.toMessage());
  340.     }
  341.  
  342.     /**
  343.      * @author Maxime Meire
  344.      */
  345.     public static void sendProjectile(Player player, Mob mob, int projectileId,
  346.             Location start, Location end, int startHeight, int endHeight,
  347.             int speed, int delay, int curve, int startDistanceOffset,
  348.             int creatorSize) {
  349.         if (player == null || start == null || end == null
  350.                 || player.getRegion().getLastMapRegion() == null) {
  351.             return;
  352.         }
  353.         MessageBuilder bldr = new MessageBuilder(15, PacketType.VAR_SHORT);
  354.         int x = start.getX()
  355.                 - (player.getRegion().getLastMapRegion().getRegionX() - 6) * 8;
  356.         int y = start.getY()
  357.                 - (player.getRegion().getLastMapRegion().getRegionY() - 6) * 8;
  358.         int distance = start.getDistance(end);
  359.         int duration = (distance * 30 / ((speed / 10) < 1 ? 1 : (speed / 10)))
  360.                 + delay;
  361.         bldr.writeByte(player.getLocation().getZ()).writeByteC(y >> 3)
  362.                 .writeByteA(x >> 3);
  363.         bldr.writeByte(13); // projectile subopcode
  364.         x = start.getX() - (start.getRegionX() << 3);
  365.         y = start.getY() - (start.getRegionY() << 3);
  366.         bldr.writeByte((x & 0x7) << 3 | y & 0x7)
  367.                 .writeByte((start.getX() - end.getX()) * -1)
  368.                 .writeByte((start.getY() - end.getY()) * -1)
  369.                 .writeShort(
  370.                         mob != null ? (mob.isPlayer() ? -(mob.getIndex() + 1)
  371.                                 : (mob.getIndex() + 1)) : -1)
  372.                 .writeShort(projectileId).writeByte(startHeight)
  373.                 .writeByte(endHeight).writeShort(delay).writeShort(duration)
  374.                 .writeByte(curve);
  375.         if (creatorSize == 11) {
  376.             bldr.writeShort(11);
  377.         } else {
  378.             bldr.writeShort(64 + startDistanceOffset * 64);
  379.         }
  380.         player.write(bldr.toMessage());
  381.     }
  382.  
  383.     /*
  384.      * @Override public Protocol sendProjectile(Player player, Entity receiver,
  385.      * int projectileId, Tile start, Tile end, int startHeight, int endHeight,
  386.      * int speed, int delay, int curve, int startDistanceOffset, int
  387.      * creatorSize) { FrameBuilder fb = new FrameBuilder(94,
  388.      * Frame.FrameType.VAR_SHORT); int distance = start.distance(end); int
  389.      * duration = (distance * 30 / ((speed / 10) < 1 ? 1 : (speed / 10))) +
  390.      * delay; int x = start.getPartX() -
  391.      * (player.getMapRegionUpdatePosition().getPartX() - 6); int y =
  392.      * start.getPartY() - (player.getMapRegionUpdatePosition().getPartY() - 6);
  393.      * fb.writeByteS(x) .writeByteC(y) .writeByteS(player.getZ());
  394.      * fb.writeByte(2); // projectile subopcode x = start.getX() -
  395.      * (start.getPartX() << 3); y = start.getY() - (start.getPartY() << 3);
  396.      * fb.writeByte((x & 0x7) << 3 | y & 0x7); fb.writeByte(end.getX() -
  397.      * start.getX()) .writeByte(end.getY() - start.getY());
  398.      * fb.writeShort(receiver != null ? (receiver instanceof Player ?
  399.      * -(receiver.getIndex() + 1) : receiver.getIndex() + 1) : 0);
  400.      * fb.writeShort(projectileId); fb.writeByte(startHeight);
  401.      * fb.writeByte(endHeight); fb.writeShort(delay); fb.writeShort(duration);
  402.      * fb.writeByte(curve); fb.writeShort(creatorSize * 64 + startDistanceOffset
  403.      * * 64); fb.write(player.getSession()); return this; }
  404.      */
  405.  
  406.     public static void sendBlankClientScript(Player player, int id) {
  407.         MessageBuilder bldr = new MessageBuilder(98, PacketType.VAR_SHORT);
  408.         bldr.writeShort(0);
  409.         bldr.writeRS2String("");
  410.         bldr.writeInt(id);
  411.         player.getConnection().write(bldr.toMessage());
  412.     }
  413.  
  414.     public static void sendGroundItem(Player player, Location tile, int itemId,
  415.             boolean uniqueDrop) {
  416.         int deltaX = tile.getX() - (tile.getRegionX() << 3);
  417.         int deltaY = tile.getY() - (tile.getRegionY() << 3);
  418.         MessageBuilder bldr = new MessageBuilder(29);
  419.         if (!updateTilePosition(player, tile))
  420.             return;
  421.         bldr.writeLEShortA(itemId);
  422.         bldr.writeByteS((deltaX & 0x7) << 4 | deltaY & 0x7);
  423.         bldr.writeLEShortA(1);
  424.         player.write(bldr.toMessage());
  425.     }
  426.  
  427.     private static boolean updateTilePosition(Player player, Location loc) {
  428.         if (player.getLocation().distance(loc) >= 50) {
  429.             return false;
  430.         }
  431.         int x = loc.getRegionX()
  432.                 - (player.getRegion().getLastMapRegion().getRegionX() - 6);
  433.         int y = loc.getRegionY()
  434.                 - (player.getRegion().getLastMapRegion().getRegionY() - 6);
  435.         player.write(new MessageBuilder(114).writeByteA(x)
  436.                 .writeByteC(loc.getZ()).writeByteA(y).toMessage());
  437.         return true;
  438.     }
  439.  
  440.     public static void sendPublicChatMessage(Player player, int playerIndex,
  441.             int rights, ChatMessage chat) {
  442.         if (chat == null) {
  443.             return;
  444.         }
  445.         MessageBuilder bldr = new MessageBuilder(62, PacketType.VAR_BYTE);
  446.         bldr.writeShort(playerIndex);
  447.         bldr.writeShort(chat.getEffects());
  448.         bldr.writeByte(rights);
  449.         byte[] chatStr = new byte[256];
  450.         chatStr[0] = (byte) chat.getChatText().length();
  451.         int offset = 1 + TextUtils.huffmanCompress(chat.getChatText(), chatStr,
  452.                 1);
  453.         bldr.writeBytes(chatStr, 0, offset);
  454.         player.write(bldr.toMessage());
  455.     }
  456.  
  457.     public static void sendChatMessage(Player player, int TextType, String Text) {
  458.         if (Text == null || Text.length() < 1) {
  459.             return;
  460.         }
  461.         MessageBuilder bldr = new MessageBuilder(53, PacketType.VAR_BYTE);
  462.         bldr.writeByte(TextType);
  463.         bldr.writeInt(0);
  464.         bldr.writeByte(0);
  465.         bldr.writeRS2String(Text);
  466.         player.write(bldr.toMessage());
  467.     }
  468.  
  469.     public static void sendTradeReq(Player player, String user, String message) {
  470.         MessageBuilder bldr = new MessageBuilder(53, PacketType.VAR_BYTE);
  471.         bldr.writeByte(100);
  472.         bldr.writeInt(0);
  473.         bldr.writeByte(0x1);
  474.         bldr.writeRS2String(Misc.formatPlayerNameForDisplay(user));
  475.         bldr.writeRS2String(message);
  476.         player.write(bldr.toMessage());
  477.     }
  478.  
  479.     public static void sendDuelReq(Player player, String user, String message) {
  480.         MessageBuilder bldr = new MessageBuilder(53, PacketType.VAR_BYTE);
  481.         bldr.writeByte(101);
  482.         bldr.writeInt(0);
  483.         bldr.writeByte(0x1);
  484.         bldr.writeRS2String(Misc.formatPlayerNameForDisplay(user));
  485.         bldr.writeRS2String(message);
  486.         player.write(bldr.toMessage());
  487.     }
  488.  
  489.     public static void sendMessage(Player player, String text) {
  490.         sendChatMessage(player, 0, text);
  491.     }
  492.  
  493.     public static void sendFriend(Player player, String Username,
  494.             String displayName, int world, boolean writeOnline,
  495.             boolean WarnMessage, boolean isLobby) {
  496.         if (Username.length() > 16 || displayName.length() > 16) {
  497.             Username = "null";
  498.             displayName = "null";
  499.         }
  500.         short WorldId = 1;
  501.         MessageBuilder bldr = new MessageBuilder(10, PacketType.VAR_SHORT);
  502.         bldr.writeByte(0);
  503.         bldr.writeRS2String(displayName);
  504.         bldr.writeRS2String(Username);
  505.         bldr.writeShort(writeOnline ? (world == WorldId ? 1 : 2) : 0);
  506.         Clan clan = World.getWorld().getClanManager()
  507.                 .getClan(player.getUsername());
  508.         bldr.writeByte(clan != null ? clan.getRank(Username) : 0);
  509.         if (writeOnline) {
  510.             bldr.writeRS2String(isLobby ? "<col=00FF00>Lobby"
  511.                     : "<col=00FF00>Nexon-World");
  512.             bldr.writeByte(0);
  513.         }
  514.         player.write(bldr.toMessage());
  515.     }
  516.  
  517.     public static void sendIgnore(Player player, String name, String displayName) {
  518.         MessageBuilder bldr = new MessageBuilder(85, PacketType.VAR_BYTE);
  519.         bldr.writeByte(0);
  520.         if (displayName.equalsIgnoreCase(name))
  521.             name = "";
  522.         bldr.writeRS2String(displayName);
  523.         bldr.writeRS2String(displayName);
  524.         bldr.writeRS2String(name);
  525.         bldr.writeRS2String(displayName);
  526.         player.write(bldr.toMessage());
  527.     }
  528.  
  529.     public static void sendPrivateMessage(Player player, String username,
  530.             String message) {
  531.         byte[] bytes = new byte[256];
  532.         int length = TextUtils.huffmanCompress(message, bytes, 0);
  533.         MessageBuilder bldr = new MessageBuilder(76, PacketType.VAR_BYTE);
  534.         bldr.writeRS2String(Misc.formatPlayerNameForDisplay(username));
  535.         bldr.writeByte(message.length());
  536.         bldr.writeBytes(bytes, 0, length);
  537.         player.write(bldr.toMessage());
  538.     }
  539.  
  540.     public static void receivePrivateMessage(Player player, String username,
  541.             String displayName, int rights, String message) {
  542.         long id = (long) (++messageCounter + ((Math.random() * Long.MAX_VALUE) + (Math
  543.                 .random() * Long.MIN_VALUE)));
  544.         byte[] bytes = new byte[256];
  545.         bytes[0] = (byte) message.length();
  546.         int length = 1 + TextUtils.huffmanCompress(message, bytes, 1);
  547.         MessageBuilder bldr = new MessageBuilder(30, PacketType.VAR_BYTE);
  548.         bldr.writeByte(0); // has a previous name?
  549.         bldr.writeRS2String(Misc.formatPlayerNameForDisplay(username));
  550.         bldr.writeShort((int) (id >> 32));
  551.         bldr.writeMediumInt((int) (id - ((id >> 32) << 32)));
  552.         bldr.writeByte(rights);
  553.         bldr.writeBytes(bytes, 0, length);
  554.         player.write(bldr.toMessage());
  555.     }
  556.  
  557.     public static void sendUnlockIgnoreList(Player player) {
  558.         player.write(new MessageBuilder(12).toMessage());
  559.     }
  560.  
  561.     public static void sendMusic(Player player, int music) {
  562.         MessageBuilder bldr = new MessageBuilder(76);
  563.         bldr.writeByte(255);
  564.         bldr.writeShortA(music);
  565.         bldr.writeByte(50);
  566.         player.getConnection().write(bldr.toMessage());
  567.     }
  568.  
  569.     public static void sendLoginInterfaces(Player player) {
  570.         InterfaceSettings.sendInterfaces(player);
  571.         // ActionSender.sendWindowsPane(player, 1028, 0);
  572.         // ActionSender.sendAMask(player, 2, 1028, 45, 0, 204);
  573.         // ActionSender.sendAMask(player, 2, 1028, 111, 0, 204);
  574.         // ActionSender.sendAMask(player, 2, 1028, 107, 0, 204);
  575.     }
  576.  
  577.     public static void sendHideAllTabs(Player player) {
  578.         /*
  579.          * Access Mask start
  580.          */
  581.         switch (player.getConnection().getDisplayMode()) {
  582.         case 0:
  583.         case 1:
  584.             sendInterfaceConfig(player, 548, 80, false);
  585.             sendInterfaceConfig(player, 548, 127, false);
  586.             break;
  587.         case 2:
  588.         case 3:
  589.             sendInterfaceConfig(player, 746, 19, false);
  590.             sendInterfaceConfig(player, 746, 20, false);
  591.             break;
  592.         }
  593.     }
  594.  
  595.     public static void sendShowAllTabs(Player player) {
  596.         /*
  597.          * Access Mask start
  598.          */
  599.         switch (player.getConnection().getDisplayMode()) {
  600.         case 0:
  601.         case 1:
  602.             sendInterfaceConfig(player, 548, 80, true);
  603.             sendInterfaceConfig(player, 548, 127, true);
  604.             break;
  605.         case 2:
  606.         case 3:
  607.             sendInterfaceConfig(player, 746, 19, true);
  608.             sendInterfaceConfig(player, 746, 20, true);
  609.             break;
  610.         }
  611.     }
  612.  
  613.     public static void sendLoginConfigurations(Player player) {
  614.         sendRunEnergy(player);
  615.         sendConfig(player, 1240, player.getSkills().getHitPoints() * 2);
  616.         /*
  617.          * Access Mask start
  618.          */
  619.         switch (player.getConnection().getDisplayMode()) {
  620.         case 0:
  621.         case 1:
  622.             InterfaceSettings.sendFixedAMasks(player);
  623.             break;
  624.         case 2:
  625.         case 3:
  626.             InterfaceSettings.sendFullScreenAMasks(player);
  627.             break;
  628.         }
  629.         /*
  630.          * Configuration start
  631.          */
  632.         // sendConfig(player, 2159, 0);
  633.         sendConfig(player, 173, 0);
  634.         sendConfig(player, 101, 100);// Number of completed Quests
  635.         sendConfig(player, 904, 100);// Total number of quests available.
  636.         sendConfig(player, 313, -1);// Emotes
  637.         sendConfig(player, 465, -1);
  638.         sendConfig(player, 802, -1);
  639.         sendConfig(player, 1085, 12);// Zombie Hand enable
  640.         sendConfig(player, 2032, 7341);// Seal of approval
  641.         sendConfig(player, 2033, 1043648799);// Seal of approval req?
  642.         sendConfig(player, 1921, -893736236);// Puppet master emote
  643.         // sendConfig(player, 1404, 67108864);//Around the world in Eggety days
  644.         // and dramatic point emote
  645.         // sendConfig(player, 1405, 1720);
  646.         // sendConfig(player, 1407, 5370);
  647.         sendConfig(player, 1160, -1);
  648.         sendConfig(player, 1583, 511305630);
  649.         sendConfig(player, 281, 1000);// Unlock questlist and chat sort tabs
  650.         sendConfig(player, 1384, 512);// Clear quest sort options
  651.         // TODO sendConfig(player, 43, player.getAttackStyle());
  652.         // sendConfig(player, 1584, 1);
  653.         sendConfig(player, 1584, player.getPrayer().isAncientCurses() ? 1 : 0);
  654.         sendConfig(player, 172, player.isAutoRetaliating() ? 1 : 0);
  655.         organizeSpells(player);
  656.  
  657.         sendConfig(player, 1960, 1);
  658.         sendConfig(player, 1961, 524160);// Task list
  659.         sendConfig(player, 1962, 8384512);// Task list
  660.         sendConfig(player, 1963, 299354);// Task list
  661.         sendConfig(player, 1964, 1499501);// Task list
  662.         sendConfig(player, 1965, 1470822);// Task list
  663.         sendConfig(player, 1178, 28893);// Wolf Whistle Completed
  664.         sendConfig(player, 20, -1);// Unlock Music
  665.         sendConfig(player, 21, -1);// Unlock Music
  666.         sendConfig(player, 22, -1);// Unlock Music
  667.         sendConfig(player, 23, -1);// Unlock Music
  668.         sendConfig(player, 24, -1);// Unlock Music
  669.         sendConfig(player, 25, -1);// Unlock Music
  670.         sendConfig(player, 311, -1);// Unlock Music
  671.         sendConfig(player, 346, -1);// Unlock Music
  672.         sendConfig(player, 414, -1);// Unlock Music
  673.         sendConfig(player, 598, -1);// Unlock Music
  674.         sendConfig(player, 662, -1);// Unlock Music
  675.         sendConfig(player, 906, -1);// Unlock Music
  676.         sendConfig(player, 1009, -1);// Unlock Music
  677.         /*
  678.          * Free Quests Completed Start
  679.          */
  680.         sendConfig(player, 130, 4);// Black Knight's Fortress
  681.         sendConfig(player, 29, 2);// Cook's Assistant
  682.         sendConfig(player, 222, 3);// Demon Slayer
  683.         sendConfig(player, 31, 100);// Doric's Quest
  684.         sendConfig(player, 176, 10);// Dragon Slayer
  685.         sendConfig(player, 32, 3);// Ernest The Chicken
  686.         sendConfig(player, 62, 6);// Goblin Diplomacy
  687.         sendConfig(player, 160, 2);// Imp Catcher
  688.         sendConfig(player, 122, 7);// The Knight's Sword
  689.         sendConfig(player, 71, 4);// Pirate's Treasure
  690.         sendConfig(player, 273, 110);// Prince Ali Rescue
  691.         sendConfig(player, 107, 5);// The Restless Ghost
  692.         sendConfig(player, 144, 100);// Romeo & Juliet
  693.         sendConfig(player, 63, 6);// Rune Mysteries
  694.         sendConfig(player, 179, 21);// Sheep Shearer
  695.         sendConfig(player, 145, 7);// Shield of Arrav
  696.         sendConfig(player, 178, 3);// Vampire Slayer
  697.         sendConfig(player, 67, 3);// Witch's Potion
  698.         sendConfig(player, 293, 100);// Big Chompy Bird Hunting
  699.         sendConfig(player, 68, 100);// Biohazard
  700.         sendConfig(player, 655, 200);// Cabin Fever
  701.         sendConfig(player, 10, 100);// Clocktower
  702.         sendConfig(player, 399, 100);// Creature of Fenkenstrain
  703.         sendConfig(player, 314, 100);// Death Plateau
  704.         sendConfig(player, 131, 100);// The Dig Site
  705.         sendConfig(player, 80, 100);// Drudric Ritual
  706.         sendConfig(player, 0, 100);// Dwarf Cannon
  707.         sendConfig(player, 355, 200);// Eadgars Ruse
  708.         sendConfig(player, 299, -1);// Elemental Workshop 1
  709.         sendConfig(player, 148, 100);// Family Crest
  710.         sendConfig(player, 17, 100);// Fight Arena
  711.         sendConfig(player, 11, 100);// Fishing Contest
  712.         sendConfig(player, 347, 100);// The Fremennik Trails
  713.         sendConfig(player, 65, 100);// The waterfall quest
  714.         sendConfig(player, 180, 100);// Gertrude's Cat
  715.         sendConfig(player, 150, 200);// The Grand Tree
  716.         sendConfig(player, 382, 100);// Haunted Mine
  717.         sendConfig(player, 223, 100);// Hazeel Cult
  718.         sendConfig(player, 188, 100);// Heros Quest
  719.         sendConfig(player, 5, 100);// The Holy Grail
  720.         sendConfig(player, 287, 200);// In Search of the Myreque
  721.         sendConfig(player, 175, 100);// Jungle Potion
  722.         sendConfig(player, 139, 100);// Legands Quest
  723.         sendConfig(player, 147, 100);// Lost City
  724.         sendConfig(player, 14, 100);// Merlin's Crystal
  725.         sendConfig(player, 365, 100);// Monkey Madness
  726.         sendConfig(player, 30, 100);// Monks friend
  727.         sendConfig(player, 517, 100);// Mourning's Ends Part 1
  728.         sendConfig(player, 192, 100);// Murder mystery
  729.         sendConfig(player, 307, 200);// Nature Spirit
  730.         sendConfig(player, 112, 100);// Observatory Quest
  731.         sendConfig(player, 416, 300);// One Small Favour
  732.         sendConfig(player, 165, 100);// Plague City
  733.         sendConfig(player, 302, 100);// Priest in Peril
  734.         sendConfig(player, 328, 100);// Regicide
  735.         sendConfig(player, 402, 100);// Roving Elves
  736.         sendConfig(player, 600, 100);// Rum deal
  737.         sendConfig(player, 76, 100);// Scorpian Catcher
  738.         sendConfig(player, 159, 100);// Sea Slug
  739.         sendConfig(player, 339, 100);// Shades of Mort'ton
  740.         sendConfig(player, 60, 100);// Sheep Herder
  741.         sendConfig(player, 116, 100);// Shilo Village
  742.         sendConfig(player, 320, 100);// Tai Bwo Wannai Trio
  743.         sendConfig(player, 26, 100);// Temple of Ikov
  744.         sendConfig(player, 359, 100);// Throne of Miscellania
  745.         sendConfig(player, 197, 100);// The Tourist Trap
  746.         sendConfig(player, 226, 100);// Witch's House
  747.         sendConfig(player, 111, 100);// Tree Gnome Village
  748.         sendConfig(player, 200, 100);// Tribal Totem
  749.         sendConfig(player, 385, 100);// Troll Romance
  750.         sendConfig(player, 317, 100);// Troll Stronghold
  751.         sendConfig(player, 212, 100);// Watchtower
  752.         sendConfig(player, 980, 200);// The Great Brain Robbery
  753.         sendConfig(player, 939, -1);// Animal Magnetism
  754.         sendConfig(player, 433, 200);// Between a Rock...
  755.         sendConfig(player, 964, 100);// Contact!
  756.         sendConfig(player, 455, 400);// Zogre Flesh Eaters
  757.         sendConfig(player, 869, 400);// Darkness of Hallowvale
  758.         sendConfig(player, 794, 100);// Death to the Dorgeshuun
  759.         sendConfig(player, 1801, player.getSkills().getExperienceCounter() * 10);
  760.         /*
  761.          * Bottom Configuration start
  762.          */
  763.         sendBConfig(player, 768, 3);
  764.         sendBConfig(player, 234, 0);
  765.         sendBConfig(player, 181, 0);
  766.         sendBConfig(player, 168, 4);
  767.         sendBConfig(player, 695, 0);
  768.         sendInterfaceConfig(player, 34, 13, false);
  769.         sendInterfaceConfig(player, 34, 13, false);
  770.         sendInterfaceConfig(player, 34, 3, false);
  771.         sendConfig(player, 172, player.isAutoRetaliating() ? 0 : 1);
  772.         player.write(new MessageBuilder(66).writeByte(0).toMessage());
  773.     }
  774.  
  775.     public static void organizeSpells(Player player) {
  776.         if (player.getSettings().getSpellBook() == 192) {
  777.             sendConfig(player, 439, 0);
  778.             MagicBookListener.refreshModern(player);
  779.         } else if (player.getSettings().getSpellBook() == 193) {
  780.             sendConfig(player, 439, 1);
  781.             MagicBookListener.refreshAncient(player);
  782.         } else {
  783.             sendConfig(player, 439, 2);
  784.             MagicBookListener.refreshLunar(player);
  785.         }
  786.     }
  787.  
  788.     public static void sendOtherLoginPackets(Player player) {
  789.     sendMessage(player, "Willkommen, Runescape by Felix K.");
  790.     sendMessage(player, "Moderators are always ready to give you help if it's needed.");
  791.     sendMessage(player, "Die Rechte des Servers unterliegen dem Eigentum von Felix K.");
  792.     if (!player.hasStarter()) {
  793.         for (Player p : World.getWorld().getPlayers()) {
  794.         }
  795.     }
  796.     if (player.getDonor() > 0) {
  797.         player.setSpecialAmount(1000);
  798.     }
  799.     if (player.getDonor() == 1) {
  800.         player.sendMessage("You are currently: Donator.");
  801.     } else if (player.getDonor() == 2) {
  802.         player.sendMessage("You are currently: Super Donator.");
  803.         }
  804.         player.getInventory().refresh();
  805.         player.getEquipment().refresh();
  806.         player.getSkills().refresh();
  807.         ActionSender.sendPlayerOption(player, "Follow", 2, false);
  808.         ActionSender.sendPlayerOption(player, "Trade with", 3, false);
  809.         if (player.getDonator() == 0) {
  810.         sendMessage(player, "You're currently not a Nexon-World Donator.");
  811.         sendMessage(player, "Werde VIP und Spende für Runescape.");
  812.     }
  813.         if (player.getDonator() == 1) {
  814.             sendMessage(player, "You are currently <#FFA500>Donator");
  815.             sendMessage(player, "Thank you for supporting Nexon-World.");
  816.     }      
  817.         sendConfig(player, 287, player.getSettings().getPrivateTextColor());
  818.         sendConfig(player, 170, 0);
  819.         sendConfig(player, 300, player.getSettings().getSpecialAmount());
  820.         }
  821.  
  822.     public static void sendRunEnergy(Player player) {
  823.         MessageBuilder bldr = new MessageBuilder(13);
  824.         bldr.writeByte(player.getWalkingQueue().getRunEnergy());
  825.         player.write(bldr.toMessage());
  826.     }
  827.  
  828.     public static void sendSkillLevel(Player player, int skill) {
  829.         ActionSender.sendConfig(player, 1801, player.getSkills()
  830.                 .getExperienceCounter() * 10);
  831.         MessageBuilder bldr = new MessageBuilder(8);
  832.         bldr.writeInt1((int) player.getSkills().getXp(skill));
  833.         bldr.writeByteS(skill);
  834.         if (skill == Skills.PRAYER) {
  835.             bldr.writeByteS((int) Math.ceil(player.getSkills()
  836.                     .getPrayerPoints()));
  837.         } else {
  838.             bldr.writeByteS((byte) player.getSkills().getLevel(skill));
  839.         }
  840.         player.write(bldr.toMessage());
  841.     }
  842.  
  843.     public static void updateMinimap(Player player, int state) {
  844.         player.write(new MessageBuilder(32).writeByte(state).toMessage());
  845.     }
  846.  
  847.     public static void sendPlayerOption(Player player, String option, int slot,
  848.             boolean top) {
  849.         if (option.equals(player.getSettings().getPlayerOptions()[slot])) {
  850.             return;
  851.         }
  852.         MessageBuilder bldr = new MessageBuilder(120, PacketType.VAR_BYTE);
  853.         bldr.writeShortA(slot == 1 && top ? 42 : 65535); // sprite id for the
  854.                                                             // option
  855.         bldr.writeByteS(top ? 1 : 0);
  856.         bldr.writeRS2String(option);
  857.         bldr.writeByteS(slot);
  858.         player.write(bldr.toMessage());
  859.         player.getSettings().getPlayerOptions()[slot] = option;
  860.     }
  861.  
  862.     public static void sendTradeOptions(Player player) {
  863.         Object[] tparams1 = new Object[] { "", "", "", "Value<col=FF9040>",
  864.                 "Remove-X", "Remove-All", "Remove-10", "Remove-5", "Remove",
  865.                 -1, 0, 7, 4, 90, 335 << 16 | 31 };
  866.         sendClientScript(player, 150, tparams1, "IviiiIsssssssss");
  867.         sendAMask(player, 1150, 335, 31, 0, 27);
  868.         Object[] tparams3 = new Object[] { "", "", "", "", "", "", "", "",
  869.                 "Value<col=FF9040>", -1, 0, 7, 4, 90, 335 << 16 | 34 };
  870.         sendClientScript(player, 695, tparams3, "IviiiIsssssssss");
  871.         sendAMask(player, 1026, 335, 34, 0, 27);
  872.         Object[] tparams2 = new Object[] { "", "", "Lend", "Value<col=FF9040>",
  873.                 "Offer-X", "Offer-All", "Offer-10", "Offer-5", "Offer", -1, 0,
  874.                 7, 4, 93, 336 << 16 };
  875.         sendClientScript(player, 150, tparams2, "IviiiIsssssssss");
  876.         sendAMask(player, 1278, 336, 0, 0, 27);
  877.     }
  878.  
  879.     public static void TradeIcons(Player player, int TradeSlot) {
  880.         Object[] tparams4 = new Object[]{TradeSlot, 7, 4, 21954593};
  881.         sendClientScript(player, 143, tparams4, "Iiii");
  882.     }
  883.  
  884.     public static void sendAMask(Player player, int set1, int set2,
  885.             int interfaceId1, int childId1, int interfaceId2, int childId2) {
  886.         MessageBuilder bldr = new MessageBuilder(119);
  887.         bldr.writeInt2(interfaceId2 << 16 | childId2);
  888.         bldr.writeShortA(set2);
  889.         bldr.writeShortA(set1);
  890.         bldr.writeLEInt(interfaceId1 << 16 | childId1);
  891.         player.write(bldr.toMessage());
  892.     }
  893.  
  894.     public static void sendAMask(Player p, int set, int interfaceId,
  895.             int childId, int off, int len) {
  896.         p.write(new MessageBuilder(119).writeInt2(set).writeShortA(len)
  897.                 .writeShortA(off).writeLEInt(interfaceId << 16 | childId)
  898.                 .toMessage());
  899.         /*
  900.          * int i_259_ =
  901.          * Class48_Sub1_Sub2.aClass98_Sub22_Sub1_5514.readInt2(-108); int i_260_
  902.          * = Class48_Sub1_Sub2.aClass98_Sub22_Sub1_5514.readShortA(i +
  903.          * -525200459); if (i_260_ == 65535) i_260_ = -1; int i_261_ =
  904.          * Class48_Sub1_Sub2.aClass98_Sub22_Sub1_5514.readShortA(74); if
  905.          * ((i_261_ ^ 0xffffffff) == -65536) i_261_ = -1; int i_262_ =
  906.          * Class48_Sub1_Sub2.aClass98_Sub22_Sub1_5514.readIntReverse(true);
  907.          */
  908.     }
  909.  
  910.     public static void sendInterfaceConfig(Player player, int interfaceId,
  911.             int childId, boolean hidden) {
  912.         player.write(new MessageBuilder(3)
  913.                 .writeInt2((interfaceId << 16) | childId)
  914.                 .writeByteC(hidden ? 0 : 1).toMessage());
  915.     }
  916.  
  917.     public static void sendBConfig(Player player, int id, int value) {
  918.         MessageBuilder bldr;
  919.         if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE) {
  920.             bldr = new MessageBuilder(5).writeLEShortA(id).writeLEInt(value);
  921.         } else {
  922.             bldr = new MessageBuilder(51).writeLEShort(id).writeByte(value);
  923.         }
  924.         player.write(bldr.toMessage());
  925.     }
  926.  
  927.     public static void sendConfig(Player player, int id, int value) {
  928.         MessageBuilder bldr;
  929.         if (value < 0 || value >= 128) {
  930.             bldr = new MessageBuilder(27).writeInt1(value).writeShort(id);
  931.         } else {
  932.             bldr = new MessageBuilder(21).writeShortA(id).writeByteS(value);
  933.         }
  934.         player.write(bldr.toMessage());
  935.     }
  936.  
  937.     public static void sendEntityOnInterface(Player player, boolean isPlayer,
  938.             int entityId, int interId, int childId) {
  939.         if (isPlayer)
  940.             ActionSender.sendPlayerOnInterface(player, interId, childId); // ...
  941.                                                                             // oh
  942.                                                                             // sorry
  943.                                                                             // :p
  944.         else
  945.             ActionSender.sendNpcOnInterface(player, interId, childId, entityId);
  946.     }
  947.  
  948.     public static void sendPlayerOnInterface(Player player, int interId,
  949.             int childId) {
  950.         MessageBuilder bldr = new MessageBuilder(54);
  951.         bldr.writeInt1(interId << 16 | childId);
  952.         player.write(bldr.toMessage());
  953.     }
  954.  
  955.     public static void sendNpcOnInterface(Player player, int interId,
  956.             int childId, int npcId) {
  957.         MessageBuilder bldr = new MessageBuilder(71);
  958.         bldr.writeInt2(interId << 16 | childId);
  959.         bldr.writeLEShort(npcId);
  960.         player.write(bldr.toMessage());
  961.         // MessageBuilder bldr = new MessageBuilder(4);
  962.         // bldr.writeLEShort(205);
  963.         // bldr.writeInt(interId << 16 | childId); idk//this could be send
  964.         // sprite yeah
  965.         // player.write(bldr.toMessage());
  966.     }
  967.  
  968.     public static void sendSprite(Player player, int interId, int childId,
  969.             int spriteId) {
  970.         MessageBuilder bldr = new MessageBuilder(4);
  971.         bldr.writeLEShort(spriteId);
  972.         bldr.writeInt(interId << 16 | childId); // idk//this could be send
  973.                                                 // sprite yeah
  974.         player.write(bldr.toMessage());
  975.     }
  976.  
  977.     public static void sendInterAnimation(Player player, int emoteId,
  978.             int interId, int childId) {
  979.         MessageBuilder bldr = new MessageBuilder(86);
  980.         bldr.writeInt1(interId << 16 | childId);
  981.         bldr.writeLEShortA(emoteId);
  982.         player.write(bldr.toMessage());
  983.  
  984.         // MessageBuilder bldr = new MessageBuilder(84); Whole player on
  985.         // interface
  986.         // bldr.writeInt2(interId << 16 | childId);
  987.         // player.write(bldr.toMessage());
  988.         // MessageBuilder bldr = new MessageBuilder(96);//Weird ass shit
  989.         // bldr.writeShort(1);
  990.         // bldr.writeLEInt(interId << 16 | childId);
  991.         // bldr.writeLEShortA(interId);
  992.         // bldr.writeShortA(childId);
  993.         // player.write(bldr.toMessage());
  994.         // some type of quick chat packet
  995.         // MessageBuilder bldr = new MessageBuilder(74);
  996.         // bldr.writeInt2(interId << 16 | childId);
  997.         // bldr.writeByteS(0); // frame index
  998.         // bldr.writeShort(emoteId);
  999.         // player.write(bldr.toMessage());
  1000.     }
  1001.  
  1002.     public static void sendQuickChat(Player player) {
  1003.         MessageBuilder bldr = new MessageBuilder(74);
  1004.         bldr.writeShort(1);
  1005.         bldr.writeShort(1);
  1006.         bldr.writeByteS(1);
  1007.         player.write(bldr.toMessage());
  1008.     }
  1009.  
  1010.     public static void sendString(Player player, String string,
  1011.             int interfaceId, int childId) {
  1012.         MessageBuilder bldr = new MessageBuilder(33, PacketType.VAR_SHORT);
  1013.         bldr.writeRS2String(string);
  1014.         bldr.writeLEInt(interfaceId << 16 | childId);
  1015.         player.write(bldr.toMessage());
  1016.     }
  1017.  
  1018.     public static void sendString(Player player, int interfaceId, int childId,
  1019.             String string) {
  1020.         MessageBuilder bldr = new MessageBuilder(33, PacketType.VAR_SHORT);
  1021.         bldr.writeRS2String(string);
  1022.         bldr.writeLEInt(interfaceId << 16 | childId);
  1023.         player.write(bldr.toMessage());
  1024.     }
  1025.  
  1026.     public static void sendOverlay(Player p, int childId) {
  1027.         switch (p.getConnection().getDisplayMode()) {
  1028.         case 0:
  1029.         case 1:
  1030.             sendInterface(p, 1, 548, 7, childId);
  1031.             break;
  1032.         case 2:
  1033.         case 3:
  1034.             sendInterface(p, 1, 746, 7, childId);
  1035.             break;
  1036.         }
  1037.     }
  1038.  
  1039.     public static void sendInterface(Player player, int childId) {
  1040.         if (player.getPriceCheck().isOpen()) {
  1041.             player.getPriceCheck().close();
  1042.         }
  1043.         switch (player.getConnection().getDisplayMode()) {
  1044.         case 0:
  1045.         case 1:
  1046.             ActionSender.sendInterface(player, 0, 548, 18, childId);
  1047.             break;
  1048.         case 2:
  1049.         case 3:
  1050.             ActionSender.sendInterface(player, 0, 746, 9, childId);
  1051.             break;
  1052.         }
  1053.     }
  1054.  
  1055.     public static void sendTab(Player player, int tabId, int childId) {
  1056.         ActionSender.sendInterface(player, 1, childId == 137 ? 752 : 548,
  1057.                 tabId, childId);
  1058.     }
  1059.  
  1060.     public static void sendChatboxInterface(Player player, int childId) {
  1061.         ActionSender.sendInterface(player, 1, 752, 13, childId);
  1062.     }
  1063.  
  1064.     public static void sendCloseChatBox(Player player) {
  1065.         ActionSender.sendCloseInterface(player, 752, 13); // 752, 7,
  1066.         // ActionSender.sendCloseInterface(player, 752, 7);
  1067.         for (int i = 0; i < ProduceAction.CONFIG_IDS.length; i++) {
  1068.             ActionSender.sendBConfig(player, ProduceAction.CONFIG_IDS[i], -1);
  1069.             ActionSender.sendSpecialString(player, ProduceAction.NAME_IDS[i],
  1070.                     "");
  1071.         }
  1072.     }
  1073.  
  1074.     public static void sendCloseInterface(Player player, int window, int tab) {
  1075.         if (window != 752 && tab != 13
  1076.                 && player.getAttribute("inBank", Boolean.FALSE) == Boolean.TRUE) {
  1077.             player.removeAttribute("inBank");
  1078.         }
  1079.         MessageBuilder bldr = new MessageBuilder(61);
  1080.         bldr.writeLEInt(window << 16 | tab);
  1081.         player.write(bldr.toMessage());
  1082.     }
  1083.  
  1084.     public static void zoom(Player p) {
  1085.         MessageBuilder bldr = new MessageBuilder(71);
  1086.         bldr.writeInt2(155);
  1087.         bldr.writeShort(0);
  1088.         p.write(bldr.toMessage());
  1089.     }
  1090.  
  1091.     public static void sendCloseInterface(Player player) {
  1092.         int winId = player.getConnection().getDisplayMode() < 2 ? 548 : 746;
  1093.         int slotId = player.getConnection().getDisplayMode() < 2 ? 18 : 9;
  1094.         sendCloseInterface(player, winId, slotId);
  1095.     }
  1096.  
  1097.     public static void sendCloseOverlay(Player player) {
  1098.         int winId = player.getConnection().getDisplayMode() < 2 ? 548 : 746;
  1099.         int slotId = player.getConnection().getDisplayMode() < 2 ? 7 : 6;
  1100.         sendCloseInterface(player, winId, slotId);
  1101.     }
  1102.  
  1103.     public static void sendInventoryInterface(Player player, int childId) {
  1104.         switch (player.getConnection().getDisplayMode()) {
  1105.         case 0:
  1106.         case 1:
  1107.             ActionSender.sendInterface(player, 0, 548, 197, childId);
  1108.             break;
  1109.         case 2:
  1110.             ActionSender.sendInterface(player, 0, 746, 84, childId);
  1111.             break;
  1112.         }
  1113.     }
  1114.  
  1115.     public static void sendCloseInventoryInterface(Player player) {
  1116.         switch (player.getConnection().getDisplayMode()) {
  1117.         case 0:
  1118.         case 1:
  1119.             sendCloseInterface(player, 548, 193);
  1120.             break;
  1121.         case 2:
  1122.         case 3:
  1123.             sendCloseInterface(player, 746, 83);
  1124.             break;
  1125.         }
  1126.     }
  1127.  
  1128.     public static void sendInterface(Player player, int showId, int windowId,
  1129.             int interfaceId, int childId) {
  1130.         MessageBuilder bldr = new MessageBuilder(50);
  1131.         bldr.writeInt2(windowId * 65536 + interfaceId);
  1132.         bldr.writeLEShortA(interfaceId >> 16 | childId);
  1133.         bldr.writeByteC(showId);
  1134.         player.write(bldr.toMessage());
  1135.     }
  1136.  
  1137.     public static void sendInterfaceOnChild(Player player, int interfaceId,
  1138.             int childId) {
  1139.         switch (player.getConnection().getDisplayMode()) {
  1140.         case 0:
  1141.         case 1:
  1142.             ActionSender.sendInterface(player, 0, 548, interfaceId, childId);
  1143.             break;
  1144.         case 2:
  1145.             ActionSender.sendInterface(player, 0, 746, interfaceId, childId);
  1146.             break;
  1147.         }
  1148.     }
  1149.  
  1150.     public static void sendWindowsPane(Player player, int pane, int subWindowsId) {
  1151.         MessageBuilder bldr = new MessageBuilder(36);
  1152.         bldr.writeByteA(subWindowsId);
  1153.         bldr.writeShortA(pane);
  1154.         player.write(bldr.toMessage());
  1155.     }
  1156.  
  1157.     public static void sendDynamicRegion(final Player player) {
  1158.         MessageBuilder bldr = new MessageBuilder(31, PacketType.VAR_SHORT);
  1159.         int regionX = player.getLocation().getRegionX();
  1160.         int regionY = player.getLocation().getRegionY();
  1161.         bldr.writeByteA(1); // loading type
  1162.         bldr.writeByteA(player.getViewportDepth()); // map size
  1163.         bldr.writeShortA(regionY);
  1164.         bldr.writeLEShort(regionX);
  1165.         bldr.writeByteA(1); // force reload
  1166.         int mapHash = Location.VIEWPORT_SIZES[player.getViewportDepth()] >> 4;
  1167.         int[] realRegionIds = new int[4 * mapHash * mapHash];
  1168.         int realRegionIdsCount = 0;
  1169.         bldr.startBitAccess();
  1170.         for (int plane = 0; plane < 4; plane++) {
  1171.             for (int thisRegionX = (regionX - mapHash); thisRegionX <= ((regionX + mapHash)); thisRegionX++) { // real
  1172.                                                                                                                 // x
  1173.                                                                                                                 // calcs
  1174.                 for (int thisRegionY = (regionY - mapHash); thisRegionY <= ((regionY + mapHash)); thisRegionY++) { // real
  1175.                                                                                                                     // y
  1176.                                                                                                                     // calcs
  1177.                     int regionId = (((thisRegionX / 8) << 8) + (thisRegionY / 8));
  1178.                     DynamicRegion dynamicRegion = RegionBuilder
  1179.                             .getDynamicRegion(regionId);
  1180.                     int realRegionX;
  1181.                     int realRegionY;
  1182.                     int realPlane;
  1183.                     int rotation;
  1184.                     if (dynamicRegion != null) { // generated map
  1185.                         int[] regionCoords = dynamicRegion.getRegionCoords()[plane][thisRegionX
  1186.                                 - ((thisRegionX / 8) * 8)][thisRegionY
  1187.                                 - ((thisRegionY / 8) * 8)];
  1188.                         realRegionX = regionCoords[0];
  1189.                         realRegionY = regionCoords[1];
  1190.                         realPlane = regionCoords[2];
  1191.                         rotation = regionCoords[3];
  1192.                     } else { // real map
  1193.                         // base region + difference * 8 so gets real region
  1194.                         // coords
  1195.                         realRegionX = thisRegionX;
  1196.                         realRegionY = thisRegionY;
  1197.                         realPlane = plane;
  1198.                         rotation = 0;// no rotation
  1199.                     }
  1200.                     // invalid region, not built region
  1201.                     if (realRegionX == 0 || realRegionY == 0)
  1202.                         bldr.writeBits(1, 0);
  1203.                     else {
  1204.                         bldr.writeBits(1, 1);
  1205.                         bldr.writeBits(26, (rotation << 1) | (realPlane << 24)
  1206.                                 | (realRegionX << 14) | (realRegionY << 3));
  1207.                         int realRegionId = (((realRegionX / 8) << 8) + (realRegionY / 8));
  1208.                         boolean found = false;
  1209.                         for (int index = 0; index < realRegionIdsCount; index++)
  1210.                             if (realRegionIds[index] == realRegionId) {
  1211.                                 found = true;
  1212.                                 break;
  1213.                             }
  1214.                         if (!found)
  1215.                             realRegionIds[realRegionIdsCount++] = realRegionId;
  1216.                     }
  1217.  
  1218.                 }
  1219.             }
  1220.         }
  1221.         bldr.finishBitAccess();
  1222.         for (int index = 0; index < realRegionIdsCount; index++) {
  1223.             int regionId = realRegionIds[index];
  1224.             int[] xteas = MapXTEA.getKey(regionId);
  1225.             if (xteas == null)
  1226.                 xteas = new int[4];
  1227.             for (int keyIndex = 0; keyIndex < 4; keyIndex++)
  1228.                 bldr.writeInt(xteas[keyIndex]);
  1229.             if (!LandscapeParser.parseLandscape(regionId, xteas)) {
  1230.                 player.teleport(Mob.DEFAULT);
  1231.             }
  1232.         }
  1233.         player.getRegion().setLastMapRegion(player.getLocation());
  1234.         player.getRegion().setDidMapRegionChange(false);
  1235.         player.write(bldr.toMessage());
  1236.         player.getActionManager().stopNonWalkableActions();
  1237.         ObjectManager.refresh(player);
  1238.         GroundItemManager.refresh(player);
  1239.     }
  1240.  
  1241.     public static void updateMapRegion(final Player player, boolean loggedin) {
  1242.         MessageBuilder bldr = new MessageBuilder(80, PacketType.VAR_SHORT);
  1243.         if (!loggedin) {
  1244.             player.getGpi().loginData(bldr);
  1245.         }
  1246.         bldr.writeLEShortA(player.getLocation().getRegionY());
  1247.         bldr.writeShortA(player.getLocation().getRegionX());
  1248.         bldr.writeByte(player.getViewportDepth());
  1249.         bldr.writeByteA(1);
  1250.         for (int region : player.getMapRegionIds()) {
  1251.             int[] keys = MapXTEA.getKey(region);
  1252.             if (keys == null) {
  1253.                 keys = new int[4];
  1254.             }
  1255.             for (int i = 0; i < 4; i++) {
  1256.                 bldr.writeInt(keys[i]);
  1257.             }
  1258.             if (!LandscapeParser.parseLandscape(region, keys)) {
  1259.                 // System.out.println("II " + region);
  1260.                 player.teleport(Mob.DEFAULT);
  1261.             }
  1262.         }
  1263.         player.getRegion().setLastMapRegion(player.getLocation());
  1264.         player.getRegion().setDidMapRegionChange(false);
  1265.         player.write(bldr.toMessage());
  1266.         player.getActionManager().stopNonWalkableActions();
  1267.         ObjectManager.refresh(player);
  1268.         GroundItemManager.refresh(player);
  1269.     }
  1270.  
  1271.     public static void sendItems(Player player, int type, Container inventory,
  1272.             boolean split) {
  1273.         MessageBuilder bldr = new MessageBuilder(113, PacketType.VAR_SHORT);
  1274.         bldr.writeShort(type);
  1275.         bldr.writeByte((split ? 1 : 0));
  1276.         bldr.writeShort(inventory.getSize());
  1277.         for (int i = 0; i < inventory.getSize(); i++) {
  1278.             Item item = inventory.get(i);
  1279.             int id, amt;
  1280.             if (item == null) {
  1281.                 id = -1;
  1282.                 amt = 0;
  1283.             } else {
  1284.                 id = item.getDefinition().getId();
  1285.                 amt = item.getAmount();
  1286.             }
  1287.             bldr.writeShortA(id + 1);
  1288.             bldr.writeByteC(amt > 254 ? 0xff : amt);
  1289.             if (amt > 0xfe)
  1290.                 bldr.writeInt1(amt);
  1291.         }
  1292.         player.write(bldr.toMessage());
  1293.     }
  1294.  
  1295.     public static void loginResponse(Player player) {
  1296.         for (String owner : ADMINS)
  1297.             if (player.getUsername().equalsIgnoreCase("Felix"))
  1298.                     player.getDefinition().setRights(3);
  1299.             for (String owner : ADMINS)
  1300.                 if (player.getUsername().equalsIgnoreCase("Fate"))
  1301.                         player.getDefinition().setRights(3);
  1302.                 for (String admin : ADMINS)
  1303.                         if (player.getUsername().equalsIgnoreCase("Test"))
  1304.                                 player.getDefinition().setRights(2);
  1305.        
  1306.                                     for (String mod : MODERATORS)
  1307.                                         if (player.getUsername().equalsIgnoreCase("Paul"))
  1308.                                                 player.getDefinition().setRights(1);
  1309.  
  1310.    
  1311.    
  1312.    
  1313.    
  1314.    
  1315.    
  1316.    
  1317.     /*      for (String admin : ADMINS)
  1318.             if (player.getUsername().equalsIgnoreCase(admin))
  1319.                 player.getDefinition().setRights(2);
  1320.                 for (String mod : MODERATORS)
  1321.                     if (player.getUsername().equalsIgnoreCase(mod))
  1322.                         player.getDefinition().setRights(1);
  1323. */
  1324.     /*  for (String donator : DONATORS)
  1325.     if (player.getUsername().equalsIgnoreCase(donator))
  1326.     player.getDefinition().setDonator(1);
  1327.    
  1328. /*  for (String donator : SUPERDONATORS) //(NEXON IS A ANIMAL)
  1329.         if (player.getUsername().equalsIgnoreCave(superdonator))
  1330.     */// TODO:
  1331.     /* - Super Donator rank
  1332.      * - Finish Features for regular donator
  1333.      * - Make a automated donation system
  1334.      */
  1335.    
  1336. /*      if (player.getUsername().equalsIgnoreCase("felix"))
  1337.         player.getDefinition().setRights(2);
  1338.         */
  1339.        
  1340.         MessageBuilder bldr = new MessageBuilder();
  1341.         bldr.writeByte(13); // length
  1342.         bldr.writeByte(player.getRights());
  1343.         bldr.writeByte(0);
  1344.         bldr.writeByte(0);
  1345.         bldr.writeByte(0);
  1346.         bldr.writeByte(1);
  1347.         bldr.writeByte(0);
  1348.         bldr.writeShort(player.getIndex());
  1349.         bldr.writeByte(1);
  1350.         bldr.writeMediumInt(0);
  1351.         bldr.writeByte(1); // members
  1352.         player.write(bldr.toMessage());
  1353.         player.updateRegionArea();
  1354.         ActionSender.updateMapRegion(player, false);
  1355.         ActionSender.sendLoginInterfaces(player);
  1356.     }
  1357.  
  1358.     public static void sendLogout(Player player, int button) {
  1359.         if (player.getCombatExecutor().getLastAttacker() != null) {
  1360.             player.sendMessage("You have to be 10 seconds out of combat before logging out of the game.");
  1361.             return;
  1362.         }
  1363.         if (!player.getActivity().canLogout(player, true)) {
  1364.             return;
  1365.         }
  1366.         MessageBuilder bldr = new MessageBuilder(button == 5 ? 45 : 23);
  1367.         player.write(bldr.toMessage());
  1368.         World.getWorld().unregister(player);
  1369.     }
  1370.  
  1371.     public static void sendClientScript(Player player, int id, Object[] params,
  1372.             String types) {
  1373.         if (params.length != types.length())
  1374.             throw new IllegalArgumentException(
  1375.                     "params size should be the same as types length");
  1376.         MessageBuilder bldr = new MessageBuilder(16, PacketType.VAR_SHORT);
  1377.         // bldr.writeShort(ActionSender.frameIndex++);
  1378.         bldr.writeRS2String(types);
  1379.         int idx = 0;
  1380.         for (int i = types.length() - 1; i >= 0; i--) {
  1381.             if (types.charAt(i) == 's')
  1382.                 bldr.writeRS2String((String) params[idx]);
  1383.             else
  1384.                 bldr.writeInt((Integer) params[idx]);
  1385.             idx++;
  1386.         }
  1387.         bldr.writeInt(id);
  1388.         player.write(bldr.toMessage());
  1389.     }
  1390.  
  1391.     public static void sendItemKeptOnDeath(Player player) {
  1392.         sendAMask(player, 211, 0, 2, 102, 18, 4);
  1393.         sendAMask(player, 212, 0, 2, 102, 21, 42);
  1394.         Object[] params = new Object[] { 11510, 12749, "", 0, 0, -1, 4151,
  1395.                 15441, 15443, 3, 0 };
  1396.         sendClientScript(player, 118, params, "Iviiiiiiiiiiiissssssssssss");
  1397.         sendBConfig(player, 199, 442);
  1398.     }
  1399.  
  1400.     public static void sendSpecialString(Player p, int id, String name) {
  1401.         MessageBuilder bldr = new MessageBuilder(88, PacketType.VAR_SHORT);
  1402.         bldr.writeRS2String(name);
  1403.         bldr.writeLEShortA(id);
  1404.         p.write(bldr.toMessage());
  1405.     }
  1406.  
  1407.     public static void sendGESell(Player player) {
  1408.         sendConfig(player, 1112, -1);
  1409.         sendConfig(player, 1113, -1);
  1410.         sendConfig(player, 1111, 1);
  1411.         sendConfig(player, 1109, -1);
  1412.         sendAMask(player, 6, 209, 105, -1, -1);
  1413.         sendAMask(player, 6, 211, 105, -1, -1);
  1414.         sendInterface(player, 105);
  1415.         sendInventoryInterface(player, 107);
  1416.     }
  1417.  
  1418.     public static void sendGrandExchange(Player player, int slot, int progress,
  1419.             int item, int price, int amount, int currentAmount) {
  1420.         MessageBuilder bldr = new MessageBuilder(22);
  1421.         bldr.writeByte((byte) slot);
  1422.         bldr.writeByte((byte) progress);
  1423.         bldr.writeShort(item);
  1424.         bldr.writeInt(price);
  1425.         bldr.writeInt(amount);
  1426.         bldr.writeInt(currentAmount);
  1427.         bldr.writeInt(price * currentAmount);
  1428.         player.getConnection().write(bldr.toMessage());
  1429.     }
  1430.  
  1431.     public static void switchPanes(Player player, int paneFrom,
  1432.             int windowPosFrom, int paneTo, int windowPosTo) {
  1433.         MessageBuilder bldr = new MessageBuilder(72);
  1434.         bldr.writeInt(paneTo << 16 | windowPosTo);
  1435.         bldr.writeInt(paneFrom << 16 | windowPosFrom);
  1436.         bldr.writeLEShort(0); // frame index
  1437.         player.getConnection().write(bldr.toMessage());
  1438.     }
  1439.  
  1440.     public static void resetGe(Player p, int i) {
  1441.         MessageBuilder bldr = new MessageBuilder(22);
  1442.         bldr.writeByte((byte) i);
  1443.         bldr.writeByte((byte) 0);
  1444.         bldr.writeShort(0);
  1445.         bldr.writeInt(0);
  1446.         bldr.writeInt(0);
  1447.         bldr.writeInt(0);
  1448.         bldr.writeInt(0);
  1449.         p.getConnection().write(bldr.toMessage());
  1450.     }
  1451.  
  1452.     public static void removeGroundItem(Player player, GroundItem item) {
  1453.         removeGroundItem(player, item.getLocation(), item.getItem());
  1454.     }
  1455.  
  1456.     public static void sendLocation(Player player, Location location) {
  1457.         int x = location.getRegionX()
  1458.                 - (player.getRegion().getLastMapRegion().getRegionX() - 6);
  1459.         int y = location.getRegionY()
  1460.                 - (player.getRegion().getLastMapRegion().getRegionX() - 6);
  1461.         MessageBuilder pb = new MessageBuilder(91);
  1462.         pb.writeByteS((byte) location.getZ()).writeByteA(y)
  1463.                 .writeByte((byte) (byte) x);
  1464.         player.getConnection().getChannel().write(pb.toMessage());
  1465.     }
  1466.  
  1467.     public static void sendUnlockFriendList(Player player) {
  1468.         MessageBuilder bldr = new MessageBuilder(10, PacketType.VAR_SHORT);
  1469.         player.write(bldr.toMessage());
  1470.     }
  1471.  
  1472.     public static void sendLobbyResponse(Player player) {
  1473.         MessageBuilder bldr = new MessageBuilder();
  1474.         bldr.writeByte((byte) 0);
  1475.         bldr.writeByte((byte) 0);
  1476.         bldr.writeByte((byte) 0);
  1477.         bldr.writeByte((byte) 0);
  1478.         bldr.writeByte((byte) 0);
  1479.         bldr.writeShort(30); // member days left
  1480.         bldr.writeShort(1); // recovery questions
  1481.         bldr.writeShort(0); // unread messages
  1482.         bldr.writeShort(3229); // 3229 - lastDays
  1483.         int ipHash = Misc.IPAddressToNumber("127.0.0.1");
  1484.         bldr.writeInt(ipHash); // last ip
  1485.         bldr.writeByte((byte) 3); // email status (0 - no email, 1 - pending
  1486.         // parental confirmation, 2 - pending
  1487.         // confirmation, 3 - registered)
  1488.         bldr.writeShort(0);
  1489.         bldr.writeShort(0);
  1490.         bldr.writeByte((byte) 0);
  1491.         bldr.putGJString(player.getUsername());
  1492.         bldr.writeByte((byte) 0);
  1493.         bldr.writeInt(1);
  1494.         bldr.writeShort(1); // current world id
  1495.         bldr.putGJString("127.0.0.1");
  1496.         MessageBuilder lobbyResponse = new MessageBuilder();
  1497.         lobbyResponse.writeByte((byte) bldr.position());
  1498.         lobbyResponse.writeBytes(bldr.getBuffer());
  1499.         player.getConnection().write(lobbyResponse.toMessage());
  1500.     }
  1501.  
  1502.     public static void removeGroundItem(Player player, Location tile, Item item) {
  1503.         if (tile == null || item == null || player == null
  1504.                 || player.getRegion().getLastMapRegion() == null) {
  1505.             return;
  1506.         }
  1507.         int deltaX = tile.getX() - (tile.getRegionX() << 3);
  1508.         int deltaY = tile.getY() - (tile.getRegionY() << 3);
  1509.         MessageBuilder bldr = new MessageBuilder(59);
  1510.         if (!updateTilePosition(player, tile))
  1511.             return;
  1512.         bldr.writeByteS((0x7 & deltaX) << 4 | deltaY & 0x7);
  1513.         bldr.writeShortA(item.getId());
  1514.         player.write(bldr.toMessage());
  1515.     }
  1516.  
  1517.     public static void sendAccessMask(Player player, int range1, int range2,
  1518.             int interfaceId1, int childId1, int interfaceId2, int childId2) {
  1519.         MessageBuilder pb = new MessageBuilder(35);
  1520.         pb.writeLEShortA(range2).writeLEInt(interfaceId1 << 16 | childId1)
  1521.                 .writeLEShortA(0).writeShortA(range1)
  1522.                 .writeInt2(interfaceId2 << 16 | childId2);
  1523.         player.getConnection().getChannel().write(pb.toMessage());
  1524.     }
  1525.  
  1526.     public static void sendDuelOptions(Player p) {
  1527.         sendAMask(p, 1278, 631, 94, 0, 27); // brb food
  1528.         sendAMask(p, 1278, 628, 0, 0, 27);
  1529.         Object[] tparams1 = new Object[] { "", "", "", "", "Remove X",
  1530.                 "Remove All", "Remove 10", "Remove 5", "Remove", 1, 0, 2, 2,
  1531.                 134, 631 << 16 | 94 };
  1532.         sendClientScript(p, 150, tparams1, "IviiiIsssssssss");
  1533.         Object[] tparams2 = new Object[] { "", "", "", "", "Stake X",
  1534.                 "Stake All", "Stake 10", "Stake 5", "Stake", -1, 0, 7, 4, 93,
  1535.                 628 << 16 };
  1536.         sendClientScript(p, 150, tparams2, "IviiiIsssssssss");
  1537.     }
  1538.  
  1539.     public static void sendItemOnInterface(Player player, int interfaceId,
  1540.             int child, int size, int id) {
  1541.         player.write(new MessageBuilder(91).writeLEShortA(id).writeInt(size)
  1542.                 .writeInt2(interfaceId << 16 | child).toMessage());
  1543.     }
  1544.  
  1545.     public static void sendVariableItemOnInterface(Player player,
  1546.             int interfaceId, int child, int size, int id) {
  1547.         player.write(new MessageBuilder(56)
  1548.                 .writeLEInt(interfaceId << 16 | child).writeShortA(0)
  1549.                 .writeShort(0).writeShort(1300).toMessage());
  1550.     }
  1551.  
  1552.     public static void sendItemSearch(Player player, String string) {
  1553.         sendConfig(player, 1111, 1);
  1554.         sendConfig(player, 1112, -1);
  1555.         sendConfig(player, 1113, -1);
  1556.         sendConfig(player, 1112, 0);
  1557.         sendConfig(player, 1113, 0);
  1558.         sendInterface(player, 1, 752, 7, 389);
  1559.         sendClientScript(player, 570, new Object[] { string }, "s");
  1560.     }
  1561.  
  1562.     public static void sendGroundItem(Player player, GroundItem groundItem) {
  1563.         if (player == null || groundItem.getLocation() == null) {
  1564.             return;
  1565.         }
  1566.         sendGroundItem(player, groundItem.getLocation(), groundItem);
  1567.     }
  1568.  
  1569.     public static void sendGroundItem(Player player, Location tile,
  1570.             GroundItem item) {
  1571.         int deltaX = tile.getX() - (tile.getRegionX() << 3);
  1572.         int deltaY = tile.getY() - (tile.getRegionY() << 3);
  1573.         MessageBuilder bldr = new MessageBuilder(29);
  1574.         if (!updateTilePosition(player, tile))
  1575.             return;
  1576.         bldr.writeLEShortA(item.getItem().getId());
  1577.         bldr.writeByteS((deltaX & 0x7) << 4 | deltaY & 0x7);
  1578.         bldr.writeLEShortA(item.getItem().getAmount());
  1579.         player.write(bldr.toMessage());
  1580.     }
  1581.  
  1582.     public static void CreatePouchOptions(Player player) {
  1583.         // TODO Auto-generated method stub
  1584.        
  1585.     }
  1586. }
Advertisement
Add Comment
Please, Sign In to add comment