Package org.moparscape.msc.gs.builders.client

Source Code of org.moparscape.msc.gs.builders.client.MiscPacketBuilder

package org.moparscape.msc.gs.builders.client;

import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import java.util.concurrent.CopyOnWriteArrayList;

import org.moparscape.msc.gs.Instance;
import org.moparscape.msc.gs.builders.RSCPacketBuilder;
import org.moparscape.msc.gs.config.Config;
import org.moparscape.msc.gs.config.Constants;
import org.moparscape.msc.gs.config.Formulae;
import org.moparscape.msc.gs.connection.RSCPacket;
import org.moparscape.msc.gs.model.InvItem;
import org.moparscape.msc.gs.model.Player;
import org.moparscape.msc.gs.model.container.Shop;
import org.moparscape.msc.gs.tools.Captcha;

public class MiscPacketBuilder {
  /**
   * List of packets waiting to be sent to the user
   */
  private List<RSCPacket> packets = new CopyOnWriteArrayList<RSCPacket>();
  /**
   * The player we are creating packets for
   */
  private Player player; // getArmourPoints

  /**
   * Constructs a new MiscPacketBuilder
   */
  public MiscPacketBuilder(Player player) {
    this.player = player;
  }

  /**
   * Clears old packets that have already been sent
   */
  public void clearPackets() {
    packets.clear();
  }

  /**
   * Gets a List of new packets since the last update
   */
  public List<RSCPacket> getPackets() {
    return packets;
  }

  /**
   * Hides the bank windows
   */
  public void hideBank() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(171);
    packets.add(s.toPacket());
  }

  /**
   * Hides a question menu
   */
  public void hideMenu() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(127);
    packets.add(s.toPacket());
  }

  // rade
  /**
   * Hides the shop window
   */
  public void hideShop() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(220);
    packets.add(s.toPacket());
  }

  /**
   * Sends a message box
   */
  public void sendAlert(String message, boolean big) {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(big ? 64 : 148);
    s.addBytes(message.getBytes());
    packets.add(s.toPacket());
  }

  public void sendAppearanceScreen() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(207);
    packets.add(s.toPacket());
  }

  /**
   * Deny logging out
   */
  public void sendCantLogout() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(136);
    packets.add(s.toPacket());
  }

  /**
   * Sends the players combat style
   */
  public void sendCombatStyle() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(129);
    s.addByte((byte) player.getCombatStyle());
    packets.add(s.toPacket());
  }

  /**
   * Alert the client that they just died
   */
  public void sendDied() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(165);
    packets.add(s.toPacket());
  }

  public void sendDuelAccept() {
    Player with = player.getWishToDuel();
    if (with == null) { // This shouldn't happen
      return;
    }
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(147);
    s.addLong(with.getUsernameHash());
    s.addByte((byte) with.getDuelOffer().size());
    for (InvItem item : with.getDuelOffer()) {
      s.addShort(item.id);
      s.addInt(item.amount);
    }
    s.addByte((byte) player.getDuelOffer().size());
    for (InvItem item : player.getDuelOffer()) {
      s.addShort(item.id);
      s.addInt(item.amount);
    }

    s.addByte((byte) (player.getDuelSetting(0) ? 1 : 0)); // duelCantRetreat
    // = data[i7++]
    // & 0xff;
    s.addByte((byte) (player.getDuelSetting(1) ? 1 : 0)); // duelUseMagic =
    // data[i7++] &
    // 0xff;
    s.addByte((byte) (player.getDuelSetting(2) ? 1 : 0)); // duelUsePrayer =
    // data[i7++] &
    // 0xff;
    s.addByte((byte) (player.getDuelSetting(3) ? 1 : 0)); // duelUseWeapons
    // = data[i7++]
    // & 0xff;

    packets.add(s.toPacket());
  }

  public void sendDuelAcceptUpdate() {
    Player with = player.getWishToDuel();
    if (with == null) { // This shouldn't happen
      return;
    }
    RSCPacketBuilder s1 = new RSCPacketBuilder();
    s1.setID(97);
    s1.addByte((byte) (player.isDuelOfferAccepted() ? 1 : 0));
    packets.add(s1.toPacket());

    RSCPacketBuilder s2 = new RSCPacketBuilder();
    s2.setID(65);
    s2.addByte((byte) (with.isDuelOfferAccepted() ? 1 : 0));
    packets.add(s2.toPacket());
  }

  public void sendDuelItems() {
    Player with = player.getWishToDuel();
    if (with == null) { // This shouldn't happen
      return;
    }
    ArrayList<InvItem> items = with.getDuelOffer();
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(63);
    s.addByte((byte) items.size());
    for (InvItem item : items) {
      s.addShort(item.id);
      s.addInt(item.amount);
    }
    packets.add(s.toPacket());
  }

  public void sendDuelSettingUpdate() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(198);
    s.addByte((byte) (player.getDuelSetting(0) ? 1 : 0));
    s.addByte((byte) (player.getDuelSetting(1) ? 1 : 0));
    s.addByte((byte) (player.getDuelSetting(2) ? 1 : 0));
    s.addByte((byte) (player.getDuelSetting(3) ? 1 : 0));
    packets.add(s.toPacket());
  }// sendSound

  public void sendDuelWindowClose() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(160);
    packets.add(s.toPacket());
  }

  public void sendDuelWindowOpen() {
    Player with = player.getWishToDuel();
    if (with == null) { // This shouldn't happen
      return;
    }
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(229);
    s.addShort(with.getIndex());
    packets.add(s.toPacket());
  }

  /**
   * Enter Sleep
   */
  public void sendEnterSleep() {
    player.setSleeping(true);
    byte[] image = Captcha.generateCaptcha(player);
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(206);
    s.addBytes(image, 0, image.length);
    packets.add(s.toPacket());
  }

  /**
   * Updates the equipment status
   */
  public void sendEquipmentStats() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(177);
    s.addShort(player.getArmourPoints());
    s.addShort(player.getWeaponAimPoints());
    s.addShort(player.getWeaponPowerPoints());
    s.addShort(player.getMagicPoints());
    s.addShort(player.getPrayerBonus());
    s.addShort(player.getRangePoints());
    packets.add(s.toPacket());
  }

  /**
   * Updates the fatigue percentage
   */
  public void sendFatigue() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(126);
    s.addShort(player.getFatigue() / 10);
    packets.add(s.toPacket());
  }

  /**
   * Sends the whole friendlist
   */
  public void sendFriendList() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(249);
    s.addByte((byte) player.getFriendList().size());
    for (Entry<Long, Integer> friend : player.getFriendList()) {
      int world = friend.getValue();
      s.addLong(friend.getKey());
      s.addByte((byte) (world == Config.WORLD_ID ? 99 : world));
    }
    packets.add(s.toPacket());
  }

  /**
   * Updates a friends login status
   */
  public void sendFriendUpdate(long usernameHash, int world) {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(25);
    s.addLong(usernameHash);
    s.addByte((byte) (world == Config.WORLD_ID ? 99 : world));
    packets.add(s.toPacket());
  }

  /**
   * Updates game settings, ie sound effects etc
   */
  public void sendGameSettings() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(152);
    s.addByte((byte) (player.getGameSetting(0) ? 1 : 0));
    s.addByte((byte) (player.getGameSetting(2) ? 1 : 0));
    s.addByte((byte) (player.getGameSetting(3) ? 1 : 0));
    s.addByte((byte) (player.getGameSetting(4) ? 1 : 0));
    s.addByte((byte) (player.getGameSetting(5) ? 1 : 0));
    s.addByte((byte) (player.getGameSetting(6) ? 1 : 0));
    packets.add(s.toPacket());
  }

  /**
   * Sends the whole ignore list
   */
  public void sendIgnoreList() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(2);
    s.addByte((byte) player.getIgnoreList().size());
    for (Long usernameHash : player.getIgnoreList()) {
      s.addLong(usernameHash.longValue());
    }
    packets.add(s.toPacket());
  }

  /**
   * Incorrect sleep word!
   */
  public void sendIncorrectSleepword() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(225);
    packets.add(s.toPacket());
  }

  public void sendInventory() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(114);
    s.addByte((byte) player.getInventory().size());
    List<InvItem> items = player.getInventory().getItems();
    for (InvItem item : items) {
      s.addShort(item.id + (item.wielded ? 32768 : 0));
      if (item.getDef().isStackable()) {
        s.addInt(item.amount);
      }
    }
    packets.add(s.toPacket());
  }

  /**
   * Displays the login box and last IP and login date
   */
  public void sendLoginBox() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(248);
    s.addShort(player.getDaysSinceLastLogin());
    s.addShort(player.getDaysSubscriptionLeft());
    s.addBytes(player.getLastIP().getBytes());
    packets.add(s.toPacket());
  }

  /**
   * Confirm logout allowed
   */
  public RSCPacket sendLogout() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(222);
    RSCPacket packet = s.toPacket();
    packets.add(packet);
    return packet;
  }

  /**
   * Shows a question menu
   */
  public void sendMenu(String[] options) {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(223);
    s.addByte((byte) options.length);
    for (String option : options) {
      s.addByte((byte) option.length());
      s.addBytes(option.getBytes());
    }
    packets.add(s.toPacket());
  }

  public void sendMessage(String message) {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(48);
    s.addBytes(message.getBytes());
    packets.add(s.toPacket());
  }

  public void sendOnlinePlayers() {
    this.sendMessage("@yel@Players Online: @whi@"
        + (int) (Instance.getWorld().getPlayers().size() * 1.1)
        + " @yel@Accepted Connections: @whi@"
        + Constants.GameServer.ACCEPTED_CONNECTIONS);
  }

  /**
   * Sends the prayer list of activated/deactivated prayers
   */
  public void sendPrayers() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(209);
    for (int x = 0; x < 14; x++) {
      s.addByte((byte) (player.isPrayerActivated(x) ? 1 : 0));
    }
    packets.add(s.toPacket());
  }

  /**
   * Updates privacy settings, ie pm block etc
   */
  public void sendPrivacySettings() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(158);
    s.addByte((byte) (player.getPrivacySetting(0) ? 1 : 0));
    s.addByte((byte) (player.getPrivacySetting(1) ? 1 : 0));
    s.addByte((byte) (player.getPrivacySetting(2) ? 1 : 0));
    s.addByte((byte) (player.getPrivacySetting(3) ? 1 : 0));
    packets.add(s.toPacket());
  }

  /**
   * Send a private message
   */
  public void sendPrivateMessage(long usernameHash, byte[] message) {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(170);
    s.addLong(usernameHash);
    s.addBytes(message);
    packets.add(s.toPacket());
  }

  /**
   * Sends base quest information
   */
  public void sendQuestData() {
    /*
     * RSCPacketBuilder s = new RSCPacketBuilder(); s.setID(233);
     * s.addByte((byte)player.getQuestPoints()); int size =
     * world.getQuestManager().getQuests().size(); s.addByte((byte)size);
     * for (int i = 0; i < size; i++) { Quest quest =
     * world.getQuestManager().getQuests().get(i);
     * s.addByte((byte)quest.getUniqueID()); Integer objectInteger =
     * player.getQuestStages().get(quest.getUniqueID()); if
     * (objectInteger.intValue() == Quest.COMPLETE) s.addByte((byte) 2);
     * else if (objectInteger.intValue() >= 1) s.addByte((byte) 1); else
     * s.addByte((byte) 0); }
     *
     * packets.add(s.toPacket());
     */
  }

  // ATTACKER
  /**
   * Sends this player's quest info
   */
  public void sendQuestInfo() {
    /*
     * RSCPacketBuilder s = new RSCPacketBuilder(); s.setID(233);
     * s.addByte((byte) player.getQuestPoints()); // TODO: Send quest info
     * int size = 17; s.addByte((byte) size); for (int i = 0; i < size; i++)
     * { s.addByte((byte) i); s.addByte((byte) 0); }
     */
    /*
     * for (int i = 0; i < size; i++) { //Quest quest =
     * World.getQuestManager().getQuests().get(i); s.addByte((byte)
     * quest.getUniqueID()); Integer objectInteger =
     * player.getQuestStages().get( quest.getUniqueID()); if
     * (objectInteger.intValue() == Quest.COMPLETE) s.addByte((byte) 2);
     * else if (objectInteger.intValue() >= 1) s.addByte((byte) 1); else
     * s.addByte((byte) 0); }
     */

    // packets.add(s.toPacket());
    /*
     * RSCPacketBuilder s = new RSCPacketBuilder(); // setID(183)
     * s.setID(233); s.addByte((byte)player.getQuestPoints()); HashMap qs =
     * player.getQuestStages(); Set set = qs.entrySet(); Iterator i =
     * set.iterator(); int idx = 0;
     *
     * while (i.hasNext()) { Map.Entry qe = (Map.Entry) i.next(); Integer
     * objectInteger = (Integer) qe.getValue(); s.addByte() if
     * (objectInteger.intValue() == Quest.COMPLETE) s.addByte((byte) 2);
     * else if (objectInteger.intValue() >= 1) s.addByte((byte) 1); else
     * s.addByte((byte) 0); }
     *
     * packets.add(s.toPacket());
     */
  }

  /**
   * Tells the client to save a screenshot
   */
  public void sendScreenshot() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(181);
    packets.add(s.toPacket());
  }

  public void sendServerInfo() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(110);
    s.addLong(Config.START_TIME);
    s.addBytes(Config.SERVER_LOCATION.getBytes());
    packets.add(s.toPacket());
  }

  /**
   * Sends a sound effect
   */
  public void sendSound(String soundName) {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(11);
    s.addBytes(soundName.getBytes());
    packets.add(s.toPacket());
  }

  /**
   * Updates just one stat
   */
  public void sendStat(int stat) {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(208);
    s.addByte((byte) stat);
    s.addByte((byte) player.getCurStat(stat));
    s.addByte((byte) player.getMaxStat(stat));
    s.addInt(player.getExp(stat));
    packets.add(s.toPacket());
  }

  /**
   * Updates the users stats
   */
  public void sendStats() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(180);
    for (int lvl : player.getCurStats())
      s.addByte((byte) lvl);
    for (int lvl : player.getMaxStats())
      s.addByte((byte) lvl);
    for (int exp : player.getExps())
      s.addInt(exp);
    packets.add(s.toPacket());
  }

  public void sendTeleBubble(int x, int y, boolean grab) {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(23);
    s.addByte((byte) (grab ? 1 : 0));
    s.addByte((byte) (x - player.getX()));
    s.addByte((byte) (y - player.getY()));
    packets.add(s.toPacket());
  }

  public void sendTradeAccept() {
    Player with = player.getWishToTrade();
    if (with == null) { // This shouldn't happen
      return;
    }
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(251);
    s.addLong(with.getUsernameHash());
    s.addByte((byte) with.getTradeOffer().size());
    for (InvItem item : with.getTradeOffer()) {
      s.addShort(item.id);
      s.addInt(item.amount);
    }
    s.addByte((byte) player.getTradeOffer().size());
    for (InvItem item : player.getTradeOffer()) {
      s.addShort(item.id);
      s.addInt(item.amount);
    }
    packets.add(s.toPacket());
  }

  public void sendTradeAcceptUpdate() {
    Player with = player.getWishToTrade();
    if (with == null) { // This shouldn't happen
      return;
    }
    RSCPacketBuilder s1 = new RSCPacketBuilder();
    s1.setID(18);
    s1.addByte((byte) (player.isTradeOfferAccepted() ? 1 : 0));
    packets.add(s1.toPacket());

    RSCPacketBuilder s2 = new RSCPacketBuilder();
    s2.setID(92);
    s2.addByte((byte) (with.isTradeOfferAccepted() ? 1 : 0));
    packets.add(s2.toPacket());
  }

  public void sendTradeItems() {
    Player with = player.getWishToTrade();
    if (with == null) { // This shouldn't happen
      return;
    }
    ArrayList<InvItem> items = with.getTradeOffer();
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(250);
    s.addByte((byte) items.size());
    for (InvItem item : items) {
      s.addShort(item.id);
      s.addInt(item.amount);
    }
    packets.add(s.toPacket());
  }

  public void sendTradeWindowClose() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(187);
    packets.add(s.toPacket());
  }

  public void sendTradeWindowOpen() {
    Player with = player.getWishToTrade();
    if (with == null) { // This shouldn't happen
      return;
    }
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(4);
    s.addShort(with.getIndex());
    packets.add(s.toPacket());
  }

  public void sendUpdateItem(int slot) {
    InvItem item = player.getInventory().getSlot(slot);
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(228);
    s.addByte((byte) slot);
    s.addShort(item.id + (item.wielded ? 32768 : 0));
    if (item.getDef().isStackable()) {
      s.addInt(item.amount);
    }
    packets.add(s.toPacket());
  }

  public void sendWakeUp(boolean heh) {
    if (heh) {
      player.setFatigue(0);
      player.getActionSender().sendFatigue();
      player.getActionSender().sendMessage(
          "You wake up - feeling refreshed");
    }
    player.setSleeping(false);
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(224);
    packets.add(s.toPacket());
  }

  /*
   * public void sendWakeUp1() { RSCPacketBuilder s = new RSCPacketBuilder();
   * s.setID(224); packets.add(s.toPacket()); }
   *
   * public void sendWakeUp2() { player.isSleeping = false; RSCPacketBuilder s
   * = new RSCPacketBuilder(); s.setID(224); packets.add(s.toPacket()); }
   */

  /**
   * Sent when the user changes coords incase they moved up/down a level
   */
  public void sendWorldInfo() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(131);
    s.addShort(player.getIndex());
    s.addShort(2304);
    s.addShort(1776);
    s.addShort(Formulae.getHeight(player.getLocation()));
    s.addShort(944);
    packets.add(s.toPacket());
  }

  /**
   * Show the bank window
   */
  public void showBank() {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(93);
    s.addByte((byte) player.getBank().size());
    s.addByte((byte) player.getBank().maxSize());
    for (InvItem i : player.getBank().getItems()) {
      s.addShort(i.id);
      s.addInt(i.amount);
    }
    packets.add(s.toPacket());
  }

  /**
   * Show the bank window
   */
  public void showShop(Shop shop) {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(253);
    s.addByte((byte) shop.size());
    s.addByte((byte) (shop.general() ? 1 : 0));
    s.addByte((byte) shop.sellModifier());
    s.addByte((byte) shop.buyModifier());
    for (InvItem i : shop.getItems()) {
      s.addShort(i.id);
      s.addShort(i.amount);
      s.addInt(Formulae.getPrice(
          shop.getItems().get(Formulae.getItemPos(shop, i.id)), shop,
          true));
      s.addInt(Formulae.getPrice(
          shop.getItems().get(Formulae.getItemPos(shop, i.id)), shop,
          false));
    }
    packets.add(s.toPacket());
  }

  /**
   * Sends a system update message
   */
  public void startShutdown(int seconds) {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(172);
    s.addShort((int) (((double) seconds / 32D) * 50));
    packets.add(s.toPacket());
  }

  /**
   * Updates the id and amount of an item in the bank
   */
  public void updateBankItem(int slot, int newId, int amount) {
    RSCPacketBuilder s = new RSCPacketBuilder();
    s.setID(139);
    s.addByte((byte) slot);
    s.addShort(newId);
    s.addInt(amount);
    packets.add(s.toPacket());
  }

  public void addPacket(RSCPacket packet) {
    packets.add(packet);
  }
}
TOP

Related Classes of org.moparscape.msc.gs.builders.client.MiscPacketBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.