示例#1
0
 public void confirmWearability(MOB mob) {
   if (mob == null) return;
   Race R = mob.charStats().getMyRace();
   DVector reWearSet = new DVector(2);
   Item item = null;
   for (int i = 0; i < mob.inventorySize(); i++) {
     item = mob.fetchInventory(i);
     if ((item != null) && (!item.amWearingAt(Wearable.IN_INVENTORY))) {
       Long oldCode = Long.valueOf(item.rawWornCode());
       item.unWear();
       if (reWearSet.size() == 0) reWearSet.addElement(item, oldCode);
       else {
         short layer = (item instanceof Armor) ? ((Armor) item).getClothingLayer() : 0;
         int d = 0;
         for (; d < reWearSet.size(); d++)
           if (reWearSet.elementAt(d, 1) instanceof Armor) {
             if (((Armor) reWearSet.elementAt(d, 1)).getClothingLayer() > layer) break;
           } else if (0 > layer) break;
         if (d >= reWearSet.size()) reWearSet.addElement(item, oldCode);
         else reWearSet.insertElementAt(d, item, oldCode);
       }
     }
   }
   for (int r = 0; r < reWearSet.size(); r++) {
     item = (Item) reWearSet.elementAt(r, 1);
     long oldCode = ((Long) reWearSet.elementAt(r, 2)).longValue();
     int msgCode = CMMsg.MSG_WEAR;
     if ((oldCode & Wearable.WORN_WIELD) > 0) msgCode = CMMsg.MSG_WIELD;
     else if ((oldCode & Wearable.WORN_HELD) > 0) msgCode = CMMsg.MSG_HOLD;
     CMMsg msg =
         CMClass.getMsg(
             mob, item, null, CMMsg.NO_EFFECT, null, msgCode, null, CMMsg.NO_EFFECT, null);
     if ((R.okMessage(mob, msg))
         && (item.okMessage(item, msg))
         && ((mob.charStats().getWearableRestrictionsBitmap() & oldCode) == 0)
         && (item.canWear(mob, oldCode))) item.wearAt(oldCode);
   }
   // why wasn't that here before?
   mob.recoverEnvStats();
   mob.recoverCharStats();
   mob.recoverMaxState();
 }
示例#2
0
文件: Wear.java 项目: Cocanuta/Marble
  public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException {
    if (commands.size() < 2) {
      mob.tell("Wear what?");
      return false;
    }
    Wearable.CODES codes = Wearable.CODES.instance();
    commands.removeElementAt(0);
    if (commands.firstElement() instanceof Item) {
      Item wearWhat = (Item) commands.firstElement();
      boolean quietly = false;
      int wearLocationIndex = 0;
      commands.removeElementAt(0);
      if (commands.size() > 0) {
        if (commands.firstElement() instanceof Integer) {
          wearLocationIndex = ((Integer) commands.firstElement()).intValue();
          commands.removeElementAt(0);
        } else if (commands.firstElement() instanceof String) {
          int newDex = codes.findDex_ignoreCase((String) commands.firstElement());
          if (newDex > 0) {
            wearLocationIndex = newDex;
            commands.removeElementAt(0);
          }
        }
        if ((commands.size() > 0)
            && (commands.lastElement() instanceof String)
            && (((String) commands.lastElement()).equalsIgnoreCase("QUIETLY"))) quietly = true;
      }
      return wear(mob, wearWhat, wearLocationIndex, quietly);
    }

    // discover if a wear location was specified
    int wearLocationIndex = 0;
    for (int i = commands.size() - 2; i > 0; i--)
      if (((String) commands.elementAt(i)).equalsIgnoreCase("on")) {
        if ((i < commands.size() - 2)
            && ((String) commands.elementAt(i + 1)).equalsIgnoreCase("my"))
          commands.removeElementAt(i + 1);
        String possibleWearLocation = CMParms.combine(commands, i + 1).toLowerCase().trim();
        int possIndex = CMParms.indexOfIgnoreCase(Wearable.CODES.NAMES(), possibleWearLocation);
        if (possIndex < 0) possIndex = Wearable.CODES.FINDDEX_endsWith(" " + possibleWearLocation);
        if (possIndex > 0) {
          wearLocationIndex = possIndex;
          while (commands.size() > i) commands.removeElementAt(commands.size() - 1);
          break;
        } else {
          mob.tell("You can't wear anything on your '" + possibleWearLocation + "'");
          return false;
        }
        // will always break out here, one way or the other.
      }
    List<Item> items =
        CMLib.english().fetchItemList(mob, mob, null, commands, Wearable.FILTER_UNWORNONLY, true);
    if (items.size() == 0) mob.tell("You don't seem to be carrying that.");
    else {
      // sort hold-onlys down.
      Item I = null;
      for (int i = items.size() - 2; i >= 0; i--) {
        I = (Item) items.get(i);
        if (I.rawProperLocationBitmap() == Wearable.WORN_HELD) {
          items.remove(i);
          items.add(I);
        }
      }
      for (int i = 0; i < items.size(); i++) {
        I = (Item) items.get(i);
        if ((items.size() == 1) || (I.canWear(mob, 0))) wear(mob, I, wearLocationIndex, false);
      }
    }
    return false;
  }