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(); }
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; }