Package org.moparscape.msc.gs.phandler.client

Source Code of org.moparscape.msc.gs.phandler.client.BankHandler

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

import org.apache.mina.common.IoSession;
import org.moparscape.msc.gs.Instance;
import org.moparscape.msc.gs.connection.Packet;
import org.moparscape.msc.gs.connection.RSCPacket;
import org.moparscape.msc.gs.model.Player;
import org.moparscape.msc.gs.model.World;
import org.moparscape.msc.gs.model.container.Bank;
import org.moparscape.msc.gs.model.container.Inventory;
import org.moparscape.msc.gs.model.definition.EntityHandler;
import org.moparscape.msc.gs.model.snapshot.Activity;
import org.moparscape.msc.gs.phandler.PacketHandler;
import org.moparscape.msc.gs.util.Logger;

public class BankHandler implements PacketHandler {
  /**
   * World instance
   */
  public static final World world = Instance.getWorld();

  public void handlePacket(Packet p, IoSession session) throws Exception {
    Player player = (Player) session.getAttachment();
    int pID = ((RSCPacket) p).getID();
    if (player.isBusy() || player.isRanging() || player.isTrading()
        || player.isDueling()) {
      player.resetBank();
      return;
    }
    if (!player.accessingBank()) {
      player.setSuspiciousPlayer(true);
      player.resetBank();
      return;
    }
    Bank bank = player.getBank();
    Inventory inventory = player.getInventory();
    int itemID, amount, slot;
    switch (pID) {
    case 48: // Close bank
      player.resetBank();
      break;
    case 198: // Deposit item
      itemID = p.readShort();
      amount = p.readInt();
      if (amount < 1 || inventory.countId(itemID) < amount) {
        world.addEntryToSnapshots(new Activity(player.getUsername(),
            player.getUsername() + " tried to deposit ID: "
                + itemID + " amount: " + amount));
        player.setSuspiciousPlayer(true);
        return;
      }
      world.addEntryToSnapshots(new Activity(player.getUsername(), player
          .getUsername()
          + " deposited ID: "
          + itemID
          + " amount: "
          + amount));
      if (EntityHandler.getItemDef(itemID).isMembers()
          && !World.isMembers()) {
        player.getActionSender().sendMessage(
            "This feature is only avaliable on a members server");
        return;
      }
      if (bank.canHold(itemID, amount)
          && inventory.remove(itemID, amount, false)) {
        bank.add(itemID, amount, false);
      } else {
        player.getActionSender().sendMessage(
            "You don't have room for that in your bank");
      }
      slot = bank.getLastItemSlot(itemID);
      if (slot > -1) {
        player.getActionSender().sendInventory();
        player.getActionSender().updateBankItem(slot, itemID,
            bank.countId(itemID));
      }
      break;
    case 183: // Withdraw item
      itemID = p.readShort();
      amount = p.readInt();
      if (amount < 1 || bank.countId(itemID) < amount) {
        world.addEntryToSnapshots(new Activity(player.getUsername(),
            player.getUsername() + " tried to withdraw ID: "
                + itemID + " amount: " + amount));
        player.setSuspiciousPlayer(true);
        return;
      }
      if (EntityHandler.getItemDef(itemID).isMembers()
          && !World.isMembers()) {
        player.getActionSender().sendMessage(
            "This feature is only avaliable on a members server");
        return;
      }

      if (!inventory.isStackable(itemID) && amount > 1) {
        Logger.println(player.getUsername() + " tried to withdraw ID: "
            + itemID + " amount: " + amount + " unstackable items");
        player.setSuspiciousPlayer(true);
      }

      slot = bank.getLastItemSlot(itemID);
      if (!inventory.canHold(itemID, amount)) {
        amount = inventory.maxSize() - inventory.size();
        if (amount == 0) {
          return;
        }
      }
      world.addEntryToSnapshots(new Activity(player.getUsername(), player
          .getUsername()
          + " withrew ID: "
          + itemID
          + " amount: "
          + amount));

      if (bank.remove(itemID, amount, false)) {
        inventory.add(itemID, amount, false);
      }

      if (slot > -1) {
        player.getActionSender().sendInventory();
        player.getActionSender().updateBankItem(slot, itemID,
            bank.countId(itemID));
      }
      break;
    }
  }

}
TOP

Related Classes of org.moparscape.msc.gs.phandler.client.BankHandler

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.