예제 #1
0
파일: Wear.java 프로젝트: Cocanuta/Marble
 public boolean wear(MOB mob, Item item, int locationIndex, boolean quiet) {
   String str = "<S-NAME> put(s) on <T-NAME>.";
   int msgType = CMMsg.MSG_WEAR;
   if (item.rawProperLocationBitmap() == Wearable.WORN_HELD) {
     str = "<S-NAME> hold(s) <T-NAME>.";
     msgType = CMMsg.MSG_HOLD;
   } else if ((item.rawProperLocationBitmap() == Wearable.WORN_WIELD)
       || (item.rawProperLocationBitmap() == (Wearable.WORN_HELD | Wearable.WORN_WIELD))) {
     str = "<S-NAME> wield(s) <T-NAME>.";
     msgType = CMMsg.MSG_WIELD;
   } else if (locationIndex != 0)
     str =
         "<S-NAME> put(s) <T-NAME> on <S-HIS-HER> "
             + Wearable.CODES.NAME(locationIndex).toLowerCase()
             + ".";
   CMMsg newMsg = CMClass.getMsg(mob, item, null, msgType, quiet ? null : str);
   newMsg.setValue(locationIndex);
   if (mob.location().okMessage(mob, newMsg)) {
     mob.location().send(mob, newMsg);
     return true;
   }
   return false;
 }
예제 #2
0
 public boolean mayICraft(final Item I) {
   if (I == null) return false;
   if (!super.mayBeCrafted(I)) return false;
   if ((I.material() & RawMaterial.MATERIAL_MASK) != RawMaterial.MATERIAL_LEATHER) return false;
   if (CMLib.flags().isDeadlyOrMaliciousEffect(I)) return false;
   if (I.basePhyStats().level() < 31) return (isANativeItem(I.Name()));
   if (I instanceof Armor) {
     final long noWearLocations =
         Wearable.WORN_LEFT_FINGER | Wearable.WORN_RIGHT_FINGER | Wearable.WORN_EARS;
     if ((I.rawProperLocationBitmap() & noWearLocations) > 0) return (isANativeItem(I.Name()));
     return true;
   }
   if (I instanceof Rideable) {
     Rideable R = (Rideable) I;
     int rideType = R.rideBasis();
     switch (rideType) {
       case Rideable.RIDEABLE_SLEEP:
       case Rideable.RIDEABLE_SIT:
       case Rideable.RIDEABLE_TABLE:
         return true;
       default:
         return false;
     }
   }
   if (I instanceof Shield) return true;
   if (I instanceof Weapon) {
     Weapon W = (Weapon) I;
     if ((W.requiresAmmunition()) || (W.weaponClassification() == Weapon.CLASS_FLAILED))
       return true;
     return (isANativeItem(I.Name()));
   }
   if (I instanceof Container) return true;
   if ((I instanceof Drink) && (!(I instanceof Potion))) return true;
   if (I instanceof FalseLimb) return true;
   if (I.rawProperLocationBitmap() == Wearable.WORN_HELD) return true;
   return (isANativeItem(I.Name()));
 }
예제 #3
0
 public boolean mayICraft(final Item I) {
   if (I == null) return false;
   if (!super.mayBeCrafted(I)) return false;
   if (I.material() == RawMaterial.RESOURCE_PAPER) return false;
   if ((I.material() != RawMaterial.RESOURCE_COTTON)
       && (I.material() != RawMaterial.RESOURCE_SILK)
       && (I.material() != RawMaterial.RESOURCE_HEMP)
       && (I.material() != RawMaterial.RESOURCE_VINE)
       && (I.material() != RawMaterial.RESOURCE_WHEAT)
       && (I.material() != RawMaterial.RESOURCE_SEAWEED)
       && (((I.material() & RawMaterial.MATERIAL_MASK) != RawMaterial.MATERIAL_VEGETATION)))
     return false;
   if (CMLib.flags().isDeadlyOrMaliciousEffect(I)) return false;
   if (I instanceof Rideable) {
     Rideable R = (Rideable) I;
     int rideType = R.rideBasis();
     switch (rideType) {
       case Rideable.RIDEABLE_LADDER:
       case Rideable.RIDEABLE_SLEEP:
       case Rideable.RIDEABLE_SIT:
       case Rideable.RIDEABLE_TABLE:
         return true;
       default:
         return false;
     }
   }
   if (I instanceof Shield) return true;
   if (I instanceof Weapon) return true;
   if (I instanceof Light) return true;
   if (I instanceof Armor) return (isANativeItem(I.Name()));
   if (I instanceof Container) return true;
   if ((I instanceof Drink) && (!(I instanceof Potion))) return true;
   if (I instanceof FalseLimb) return true;
   if (I instanceof Wand) return true;
   if (I.rawProperLocationBitmap() == Wearable.WORN_HELD) return true;
   return (isANativeItem(I.Name()));
 }
예제 #4
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;
  }