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

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

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.event.ShortEvent;
import org.moparscape.msc.gs.event.WalkToMobEvent;
import org.moparscape.msc.gs.model.Bubble;
import org.moparscape.msc.gs.model.InvItem;
import org.moparscape.msc.gs.model.Npc;
import org.moparscape.msc.gs.model.Player;
import org.moparscape.msc.gs.model.World;
import org.moparscape.msc.gs.model.snapshot.Activity;
import org.moparscape.msc.gs.phandler.PacketHandler;
import org.moparscape.msc.gs.states.Action;
import org.moparscape.msc.gs.tools.DataConversions;

public class InvUseOnNpc 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();
    if (player.isBusy()) {
      player.resetPath();
      return;
    }
    player.resetAll();
    int sh = -125534;
    try {
      sh = p.readShort();
    } catch (NullPointerException npe) {
      return;
    }

    final Npc affectedNpc = world.getNpc(sh);
    final InvItem item = player.getInventory().getSlot(p.readShort());
    if (affectedNpc == null || item == null) { // This shouldn't happen
      return;
    }
    world.addEntryToSnapshots(new Activity(player.getUsername(), player
        .getUsername()
        + " used item "
        + item.getDef().getName()
        + "("
        + item.id
        + ")"
        + " [CMD: "
        + item.getDef().getCommand()
        + "] ON A NPC "
        + affectedNpc.getDef().getName()
        + "("
        + affectedNpc.getID()
        + ")"
        + " at: "
        + player.getX()
        + "/"
        + player.getY()));

    player.setFollowing(affectedNpc);
    player.setStatus(Action.USING_INVITEM_ON_NPC);
    Instance.getDelayedEventHandler().add(
        new WalkToMobEvent(player, affectedNpc, 1) {
          public void arrived() {
            owner.resetPath();
            owner.resetFollowing();
            if (!owner.getInventory().contains(item.id)
                || owner.isBusy()
                || owner.isRanging()
                || !owner.nextTo(affectedNpc)
                || affectedNpc.isBusy()
                || owner.getStatus() != Action.USING_INVITEM_ON_NPC) {
              return;
            }
            owner.resetAll();
            switch (affectedNpc.getID()) {
            case 2: // Sheep
              if (!itemId(new int[] { 144 })) {
                owner.getActionSender().sendMessage(
                    "Nothing interesting happens.");
                return;
              }
              owner.setBusy(true);
              affectedNpc.blockedBy(owner);
              affectedNpc.resetPath();
              showBubble();
              owner.getActionSender().sendMessage(
                  "You attempt to shear the sheep");
              Instance.getDelayedEventHandler().add(
                  new ShortEvent(owner) {
                    public void action() {
                      if (DataConversions.random(0, 4) != 0) {
                        owner.getActionSender()
                            .sendMessage(
                                "You get some wool");
                        owner.getInventory().add(145,
                            1, false);
                        owner.getActionSender()
                            .sendInventory();
                      } else {
                        owner.getActionSender()
                            .sendMessage(
                                "The sheep manages to get away from you!");
                      }
                      owner.setBusy(false);
                      affectedNpc.unblock();
                    }
                  });
              break;
            case 217:// Cow
            case 6:
              if (item.id != 21) {
                owner.getActionSender().sendMessage(
                    "Nothing interesting happens.");
                return;
              }
              owner.setBusy(true);
              affectedNpc.blockedBy(owner);
              affectedNpc.resetPath();
              Bubble bubble = new Bubble(owner, 21);
              for (Player p : owner.getViewArea()
                  .getPlayersInView()) {
                p.informOfBubble(bubble);
              }
              owner.getActionSender().sendMessage(
                  "You try to milk the cow.");
              Instance.getDelayedEventHandler().add(
                  new ShortEvent(owner) {
                    public void action() {
                      if (DataConversions.random(0, 4) != 0) {
                        if (!owner.getInventory()
                            .remove(item.id,
                                item.amount,
                                false))
                          return;
                        owner.getActionSender()
                            .sendMessage(
                                "You get some milk");
                        owner.getInventory().add(22, 1,
                            false);
                        owner.getActionSender()
                            .sendInventory();
                      } else {
                        owner.getActionSender()
                            .sendMessage(
                                "The cow runs away before you could get any milk");
                      }
                      owner.setBusy(false);
                      affectedNpc.unblock();
                    }
                  });
              break;
            case 160:// Thrander
              int newID;
              switch (item.id) {
              case 308: // Bronze top
                newID = 117;
                break;
              case 312: // Iron top
                newID = 8;
                break;
              case 309: // Steel top
                newID = 118;
                break;
              case 313: // Black top
                newID = 196;
                break;
              case 310: // Mithril top
                newID = 119;
                break;
              case 311: // Adamantite top
                newID = 120;
                break;
              case 407: // Rune top
                newID = 401;
                break;
              case 117: // Bronze body
                newID = 308;
                break;
              case 8: // Iron body
                newID = 312;
                break;
              case 118: // Steel body
                newID = 309;
                break;
              case 196: // Black body
                newID = 313;
                break;
              case 119: // Mithril body
                newID = 310;
                break;
              case 120: // Adamantite body
                newID = 311;
                break;
              case 401: // Rune body
                newID = 407;
                break;
              case 214: // Bronze skirt
                newID = 206;
                break;
              case 215: // Iron skirt
                newID = 9;
                break;
              case 225: // Steel skirt
                newID = 121;
                break;
              case 434: // Black skirt
                newID = 248;
                break;
              case 226: // Mithril skirt
                newID = 122;
                break;
              case 227: // Adamantite skirt
                newID = 123;
                break;
              case 406: // Rune skirt
                newID = 402;
                break;
              case 206: // Bronze legs
                newID = 214;
                break;
              case 9: // Iron legs
                newID = 215;
                break;
              case 121: // Steel legs
                newID = 225;
                break;
              case 248: // Black legs
                newID = 434;
                break;
              case 122: // Mithril legs
                newID = 226;
                break;
              case 123: // Adamantite legs
                newID = 227;
                break;
              case 402: // Rune legs
                newID = 406;
                break;
              default:
                owner.getActionSender().sendMessage(
                    "Nothing interesting happens.");
                return;
              }
              final InvItem newPlate = new InvItem(newID, 1);
              owner.getActionSender().sendMessage(
                  "Thrander hammers the armour");
              Instance.getDelayedEventHandler().add(
                  new ShortEvent(owner) {
                    public void action() {
                      if (owner.getInventory()
                          .remove(item.id,
                              item.amount, false)) {
                        owner.getInventory().add(
                            newPlate.id,
                            newPlate.amount, false);
                        owner.getActionSender()
                            .sendInventory();
                      }
                      affectedNpc.unblock();
                    }
                  });
              affectedNpc.blockedBy(owner);
              break;
            default:
              owner.getActionSender().sendMessage(
                  "Nothing interesting happens.");
              break;
            }
          }

          private boolean itemId(int[] ids) {
            return DataConversions.inArray(ids, item.id);
          }

          private void showBubble() {
            Bubble bubble = new Bubble(owner, item.id);
            for (Player p : owner.getViewArea().getPlayersInView()) {
              p.informOfBubble(bubble);
            }
          }
        });
  }

}
TOP

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

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.