public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { String dir = CMParms.combine(commands, 0); if (commands.size() > 0) dir = (String) commands.lastElement(); int dirCode = Directions.getGoodDirectionCode(dir); if (!preInvoke(mob, commands, givenTarget, auto, asLevel, 0, 0.0)) return false; MOB highestMOB = getHighestLevelMOB(mob, null); int levelDiff = mob.phyStats().level() + (2 * super.getXLEVELLevel(mob)) - getMOBLevel(highestMOB); if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; boolean success = false; CMMsg msg = CMClass.getMsg( mob, null, this, auto ? CMMsg.MSG_OK_VISUAL : CMMsg.MSG_DELICATE_HANDS_ACT, "<S-NAME> walk(s) carefully " + Directions.getDirectionName(dirCode) + "."); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); if (levelDiff < 0) levelDiff = levelDiff * 8; else levelDiff = levelDiff * 10; success = proficiencyCheck(mob, levelDiff, auto); int oldDex = mob.baseCharStats().getStat(CharStats.STAT_DEXTERITY); if (success) mob.baseCharStats().setStat(CharStats.STAT_DEXTERITY, oldDex + 100); mob.recoverCharStats(); CMLib.tracking().walk(mob, dirCode, false, false); if (oldDex != mob.baseCharStats().getStat(CharStats.STAT_DEXTERITY)) mob.baseCharStats().setStat(CharStats.STAT_DEXTERITY, oldDex); mob.recoverCharStats(); } return success; }
public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException { boolean quiet = false; if (mob == null) return false; Room R = mob.location(); if (R == null) return false; if ((commands.size() > 2) && (commands.lastElement() instanceof String) && (((String) commands.lastElement()).equalsIgnoreCase("UNOBTRUSIVELY"))) { commands.removeElementAt(commands.size() - 1); quiet = true; } if ((commands.size() > 1) && (commands.elementAt(1) instanceof MOB)) return processFollow(mob, (MOB) commands.elementAt(1), quiet); if (commands.size() < 2) { mob.tell("Follow whom?"); return false; } String whomToFollow = CMParms.combine(commands, 1); if ((whomToFollow.equalsIgnoreCase("self") || whomToFollow.equalsIgnoreCase("me")) || (mob.name().toUpperCase().startsWith(whomToFollow))) { nofollow(mob, true, quiet); return false; } MOB target = R.fetchInhabitant(whomToFollow); if ((target == null) || (!CMLib.flags().canBeSeenBy(target, mob))) { mob.tell("I don't see them here."); return false; } if ((target.isMonster()) && (!mob.isMonster())) { mob.tell("You cannot follow '" + target.name() + "'."); return false; } if (CMath.bset(target.getBitmap(), MOB.ATT_NOFOLLOW)) { mob.tell(target.name() + " is not accepting followers."); return false; } MOB ultiTarget = target.amUltimatelyFollowing(); if ((ultiTarget != null) && (CMath.bset(ultiTarget.getBitmap(), MOB.ATT_NOFOLLOW))) { mob.tell(ultiTarget.name() + " is not accepting followers."); return false; } processFollow(mob, target, quiet); return false; }
public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { int autoGenerate = 0; if ((auto) && (commands.size() > 0) && (commands.firstElement() instanceof Integer)) { autoGenerate = ((Integer) commands.firstElement()).intValue(); commands.removeElementAt(0); givenTarget = null; } DVector enhancedTypes = enhancedTypes(mob, commands); randomRecipeFix(mob, addRecipes(mob, loadRecipes()), commands, autoGenerate); if (commands.size() == 0) { commonTell( mob, "Make what? Enter \"mleatherwork list\" for a list, \"mleatherwork refit <item>\" to resize, \"mleatherwork learn <item>\", \"mleatherwork scan\", or \"mleatherwork mend <item>\"."); return false; } if ((!auto) && (commands.size() > 0) && (((String) commands.firstElement()).equalsIgnoreCase("bundle"))) { bundling = true; if (super.invoke(mob, commands, givenTarget, auto, asLevel)) return super.bundle(mob, commands); return false; } List<List<String>> recipes = addRecipes(mob, loadRecipes()); String str = (String) commands.elementAt(0); playSound = "scissor.wav"; String startStr = null; bundling = false; int multiplier = 4; int duration = 4; if (str.equalsIgnoreCase("list")) { String mask = CMParms.combine(commands, 1); StringBuffer buf = new StringBuffer(""); int toggler = 1; int toggleTop = 2; for (int r = 0; r < toggleTop; r++) buf.append( CMStrings.padRight("Item", 30) + " " + CMStrings.padRight("Lvl", 3) + " " + CMStrings.padRight("Amt", 3) + " "); buf.append("\n\r"); for (int r = 0; r < recipes.size(); r++) { List<String> V = recipes.get(r); if (V.size() > 0) { String item = replacePercent((String) V.get(RCP_FINALNAME), ""); int level = CMath.s_int((String) V.get(RCP_LEVEL)); String wood = getComponentDescription(mob, V, RCP_WOOD); if (wood.length() > 5) { if (toggler > 1) buf.append("\n\r"); toggler = toggleTop; } if ((level <= xlevel(mob)) && ((mask == null) || (mask.length() == 0) || mask.equalsIgnoreCase("all") || CMLib.english().containsString(item, mask))) { buf.append( CMStrings.padRight(item, 30) + " " + CMStrings.padRight("" + (level), 3) + " " + CMStrings.padRightPreserve("" + wood, 3) + ((toggler != toggleTop) ? " " : "\n\r")); if (++toggler > toggleTop) toggler = 1; } } } if (toggler != 1) buf.append("\n\r"); commonTell(mob, buf.toString()); enhanceList(mob); return true; } else if ((commands.firstElement() instanceof String) && (((String) commands.firstElement())).equalsIgnoreCase("learn")) { return doLearnRecipe(mob, commands, givenTarget, auto, asLevel); } else if (str.equalsIgnoreCase("scan")) return publicScan(mob, commands); else if (str.equalsIgnoreCase("mend")) { building = null; activity = CraftingActivity.CRAFTING; messedUp = false; Vector newCommands = CMParms.parse(CMParms.combine(commands, 1)); building = getTarget(mob, mob.location(), givenTarget, newCommands, Wearable.FILTER_UNWORNONLY); if (!canMend(mob, building, false)) return false; activity = CraftingActivity.MENDING; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; startStr = "<S-NAME> start(s) mending " + building.name() + "."; displayText = "You are mending " + building.name(); verb = "mending " + building.name(); } else if (str.equalsIgnoreCase("refit")) { building = null; activity = CraftingActivity.CRAFTING; messedUp = false; Vector newCommands = CMParms.parse(CMParms.combine(commands, 1)); building = getTarget(mob, mob.location(), givenTarget, newCommands, Wearable.FILTER_UNWORNONLY); if (building == null) return false; if ((building.material() & RawMaterial.MATERIAL_MASK) != RawMaterial.MATERIAL_LEATHER) { commonTell(mob, "That's not made of leather. That can't be refitted."); return false; } if (!(building instanceof Armor)) { commonTell(mob, "You don't know how to refit that sort of thing."); return false; } if (building.phyStats().height() == 0) { commonTell(mob, building.name() + " is already the right size."); return false; } activity = CraftingActivity.REFITTING; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; startStr = "<S-NAME> start(s) refitting " + building.name() + "."; displayText = "You are refitting " + building.name(); verb = "refitting " + building.name(); } else { building = null; activity = CraftingActivity.CRAFTING; messedUp = false; aborted = false; int amount = -1; if ((commands.size() > 1) && (CMath.isNumber((String) commands.lastElement()))) { amount = CMath.s_int((String) commands.lastElement()); commands.removeElementAt(commands.size() - 1); } String recipeName = CMParms.combine(commands, 0); List<String> foundRecipe = null; List<List<String>> matches = matchingRecipeNames(recipes, recipeName, true); for (int r = 0; r < matches.size(); r++) { List<String> V = matches.get(r); if (V.size() > 0) { String name = (String) V.get(RCP_FINALNAME); int level = CMath.s_int((String) V.get(RCP_LEVEL)); if ((level <= xlevel(mob)) && (name.toUpperCase().indexOf("BATTLEMOULDED") >= 0)) { multiplier = 9; foundRecipe = V; break; } else if ((level <= xlevel(mob)) && (name.toUpperCase().indexOf("LAMINAR") >= 0)) { multiplier = 8; foundRecipe = V; break; } else if ((level <= (xlevel(mob))) && (name.toUpperCase().indexOf("MASTERWORK") >= 0)) { multiplier = 7; foundRecipe = V; break; } else if ((level <= xlevel(mob)) && (name.toUpperCase().indexOf("REINFORCED") >= 0)) { multiplier = 6; foundRecipe = V; break; } else if ((level <= (xlevel(mob))) && (name.toUpperCase().indexOf("CUIRBOULI") >= 0)) { multiplier = 5; foundRecipe = V; break; } else if (level <= (xlevel(mob))) { multiplier = 4; foundRecipe = V; break; } } } if (foundRecipe == null) { commonTell( mob, "You don't know how to make a '" + recipeName + "'. Try \"mleatherwork list\" for a list."); return false; } final String woodRequiredStr = (String) foundRecipe.get(RCP_WOOD); final List<Object> componentsFoundList = getAbilityComponents( mob, woodRequiredStr, "make " + CMLib.english().startWithAorAn(recipeName), autoGenerate); if (componentsFoundList == null) return false; int woodRequired = CMath.s_int(woodRequiredStr); woodRequired = adjustWoodRequired(woodRequired, mob); if (amount > woodRequired) woodRequired = amount; int[] pm = {RawMaterial.MATERIAL_LEATHER}; int[] pm1 = {RawMaterial.MATERIAL_METAL, RawMaterial.MATERIAL_MITHRIL}; String misctype = (String) foundRecipe.get(RCP_MISCTYPE); bundling = misctype.equalsIgnoreCase("BUNDLE"); int[][] data = fetchFoundResourceData( mob, woodRequired, "leather", pm, (multiplier == 6) ? 1 : 0, (multiplier == 6) ? "metal" : null, (multiplier == 6) ? pm1 : null, bundling, autoGenerate, enhancedTypes); if (data == null) return false; fixDataForComponents(data, componentsFoundList); woodRequired = data[0][FOUND_AMT]; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; int lostValue = autoGenerate > 0 ? 0 : CMLib.materials() .destroyResources( mob.location(), woodRequired, data[0][FOUND_CODE], data[1][FOUND_CODE], null) + CMLib.ableMapper().destroyAbilityComponents(componentsFoundList); building = CMClass.getItem((String) foundRecipe.get(RCP_CLASSTYPE)); if (building == null) { commonTell(mob, "There's no such thing as a " + foundRecipe.get(RCP_CLASSTYPE) + "!!!"); return false; } duration = getDuration(multiplier * CMath.s_int((String) foundRecipe.get(RCP_TICKS)), mob, 30, 4); String itemName = (replacePercent( (String) foundRecipe.get(RCP_FINALNAME), RawMaterial.CODES.NAME(data[0][FOUND_CODE]))) .toLowerCase(); if (bundling) itemName = "a " + woodRequired + "# " + itemName; else if (itemName.endsWith("s")) itemName = "some " + itemName; else itemName = CMLib.english().startWithAorAn(itemName); building.setName(itemName); startStr = "<S-NAME> start(s) making " + building.name() + "."; displayText = "You are making " + building.name(); verb = "making " + building.name(); building.setDisplayText(itemName + " lies here"); building.setDescription(itemName + ". "); building .basePhyStats() .setWeight( (int) Math.round((double) woodRequired * this.getItemWeightMultiplier(bundling))); building.setBaseValue(CMath.s_int((String) foundRecipe.get(RCP_VALUE)) * multiplier); building.setMaterial(data[0][FOUND_CODE]); building.setSecretIdentity(getBrand(mob)); int hardness = RawMaterial.CODES.HARDNESS(data[0][FOUND_CODE]) - 2; building .basePhyStats() .setLevel(CMath.s_int((String) foundRecipe.get(RCP_LEVEL)) + (2 * hardness)); int capacity = CMath.s_int((String) foundRecipe.get(RCP_CAPACITY)); long canContain = getContainerType((String) foundRecipe.get(RCP_CONTAINMASK)); int armordmg = CMath.s_int((String) foundRecipe.get(RCP_ARMORDMG)); if (armordmg != 0) armordmg = armordmg + (multiplier - 1); if (bundling) building.setBaseValue(lostValue); String spell = (foundRecipe.size() > RCP_SPELL) ? ((String) foundRecipe.get(RCP_SPELL)).trim() : ""; addSpells(building, spell); if (building instanceof Weapon) { ((Weapon) building) .basePhyStats() .setAttackAdjustment(abilityCode() + (hardness * 5) + (abilityCode() - 1) - 1); ((Weapon) building).setWeaponClassification(Weapon.CLASS_FLAILED); setWeaponTypeClass((Weapon) building, misctype, Weapon.TYPE_SLASHING); building.basePhyStats().setDamage(armordmg + hardness); ((Weapon) building).setRawProperLocationBitmap(Wearable.WORN_WIELD | Wearable.WORN_HELD); ((Weapon) building).setRawLogicalAnd((capacity > 1)); } if (building instanceof Armor) { if (capacity > 0) { ((Armor) building).setCapacity(capacity + woodRequired); ((Armor) building).setContainTypes(canContain); } ((Armor) building).basePhyStats().setArmor(0); if (armordmg != 0) ((Armor) building).basePhyStats().setArmor(armordmg + (abilityCode() - 1) + hardness); setWearLocation(building, misctype, 0); } if (building instanceof Drink) { if (CMLib.flags().isGettable(building)) { ((Drink) building).setLiquidRemaining(0); ((Drink) building).setLiquidHeld(capacity * 50); ((Drink) building).setThirstQuenched(250); if ((capacity * 50) < 250) ((Drink) building).setThirstQuenched(capacity * 50); } } building.recoverPhyStats(); building.text(); building.recoverPhyStats(); } messedUp = !proficiencyCheck(mob, 0, auto); if (bundling) { messedUp = false; duration = 1; verb = "bundling " + RawMaterial.CODES.NAME(building.material()).toLowerCase(); startStr = "<S-NAME> start(s) " + verb + "."; displayText = "You are " + verb; } if (autoGenerate > 0) { commands.addElement(building); return true; } CMMsg msg = CMClass.getMsg(mob, building, this, CMMsg.MSG_NOISYMOVEMENT, startStr); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); building = (Item) msg.target(); beneficialAffect(mob, mob, asLevel, duration); enhanceItem(mob, building, enhancedTypes); } else if (bundling) { messedUp = false; aborted = false; unInvoke(); } return true; }
public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { int autoGenerate = 0; if ((auto) && (commands.size() > 0) && (commands.firstElement() instanceof Integer)) { autoGenerate = ((Integer) commands.firstElement()).intValue(); commands.removeElementAt(0); givenTarget = null; } DVector enhancedTypes = enhancedTypes(mob, commands); randomRecipeFix(mob, addRecipes(mob, loadRecipes()), commands, autoGenerate); if (commands.size() == 0) { commonTell( mob, "Weave what? Enter \"weave list\" for a list, \"weave refit <item>\" to resize, \"weave learn <item>\", \"weave scan\", or \"weave mend <item>\"."); return false; } if ((!auto) && (commands.size() > 0) && (((String) commands.firstElement()).equalsIgnoreCase("bundle"))) { bundling = true; if (super.invoke(mob, commands, givenTarget, auto, asLevel)) return super.bundle(mob, commands); return false; } List<List<String>> recipes = addRecipes(mob, loadRecipes()); String str = (String) commands.elementAt(0); bundling = false; String startStr = null; int duration = 4; if (str.equalsIgnoreCase("list")) { String mask = CMParms.combine(commands, 1); StringBuffer buf = new StringBuffer(""); int toggler = 1; int toggleTop = 2; for (int r = 0; r < toggleTop; r++) buf.append( CMStrings.padRight("Item", 22) + " " + CMStrings.padRight("Lvl", 3) + " " + CMStrings.padRight("Material", 10) + " "); buf.append("\n\r"); for (int r = 0; r < recipes.size(); r++) { List<String> V = recipes.get(r); if (V.size() > 0) { String item = replacePercent((String) V.get(RCP_FINALNAME), ""); int level = CMath.s_int((String) V.get(RCP_LEVEL)); String wood = getComponentDescription(mob, V, RCP_WOOD); if (wood.length() > 5) { if (toggler > 1) buf.append("\n\r"); toggler = toggleTop; } if ((level <= xlevel(mob)) && ((mask == null) || (mask.length() == 0) || mask.equalsIgnoreCase("all") || CMLib.english().containsString(item, mask))) { buf.append( CMStrings.padRight(item, 22) + " " + CMStrings.padRight("" + level, 3) + " " + CMStrings.padRightPreserve("" + wood, 10) + ((toggler != toggleTop) ? " " : "\n\r")); if (++toggler > toggleTop) toggler = 1; } } } if (toggler != 1) buf.append("\n\r"); commonTell(mob, buf.toString()); enhanceList(mob); return true; } else if ((commands.firstElement() instanceof String) && (((String) commands.firstElement())).equalsIgnoreCase("learn")) { return doLearnRecipe(mob, commands, givenTarget, auto, asLevel); } else if (str.equalsIgnoreCase("scan")) return publicScan(mob, commands); else if (str.equalsIgnoreCase("mend")) { building = null; activity = CraftingActivity.CRAFTING; messedUp = false; key = null; Vector newCommands = CMParms.parse(CMParms.combine(commands, 1)); building = getTarget(mob, mob.location(), givenTarget, newCommands, Wearable.FILTER_UNWORNONLY); if (!canMend(mob, building, false)) return false; activity = CraftingActivity.MENDING; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; startStr = "<S-NAME> start(s) mending " + building.name() + "."; displayText = "You are mending " + building.name(); verb = "mending " + building.name(); } else if (str.equalsIgnoreCase("refit")) { building = null; activity = CraftingActivity.CRAFTING; key = null; messedUp = false; Vector newCommands = CMParms.parse(CMParms.combine(commands, 1)); building = getTarget(mob, mob.location(), givenTarget, newCommands, Wearable.FILTER_UNWORNONLY); if (building == null) return false; if ((building.material() != RawMaterial.RESOURCE_COTTON) && (building.material() != RawMaterial.RESOURCE_SILK) && (building.material() != RawMaterial.RESOURCE_HEMP) && (building.material() != RawMaterial.RESOURCE_VINE) && (building.material() != RawMaterial.RESOURCE_WHEAT) && (building.material() != RawMaterial.RESOURCE_SEAWEED)) { commonTell(mob, "That's not made of any sort of weavable material. It can't be refitted."); return false; } if (!(building instanceof Armor)) { commonTell(mob, "You don't know how to refit that sort of thing."); return false; } if (building.phyStats().height() == 0) { commonTell(mob, building.name() + " is already the right size."); return false; } activity = CraftingActivity.REFITTING; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; startStr = "<S-NAME> start(s) refitting " + building.name() + "."; displayText = "You are refitting " + building.name(); verb = "refitting " + building.name(); } else { building = null; activity = CraftingActivity.CRAFTING; messedUp = false; aborted = false; key = null; int amount = -1; if ((commands.size() > 1) && (CMath.isNumber((String) commands.lastElement()))) { amount = CMath.s_int((String) commands.lastElement()); commands.removeElementAt(commands.size() - 1); } String recipeName = CMParms.combine(commands, 0); List<String> foundRecipe = null; List<List<String>> matches = matchingRecipeNames(recipes, recipeName, true); for (int r = 0; r < matches.size(); r++) { List<String> V = matches.get(r); if (V.size() > 0) { int level = CMath.s_int((String) V.get(RCP_LEVEL)); if (level <= xlevel(mob)) { foundRecipe = V; break; } } } if (foundRecipe == null) { commonTell( mob, "You don't know how to weave a '" + recipeName + "'. Try \"weave list\" for a list."); return false; } final String woodRequiredStr = (String) foundRecipe.get(RCP_WOOD); final List<Object> componentsFoundList = getAbilityComponents( mob, woodRequiredStr, "make " + CMLib.english().startWithAorAn(recipeName), autoGenerate); if (componentsFoundList == null) return false; int woodRequired = CMath.s_int(woodRequiredStr); woodRequired = adjustWoodRequired(woodRequired, mob); if (amount > woodRequired) woodRequired = amount; int[] pm = { RawMaterial.RESOURCE_COTTON, RawMaterial.RESOURCE_SILK, RawMaterial.RESOURCE_HEMP, RawMaterial.RESOURCE_VINE, RawMaterial.RESOURCE_WHEAT, RawMaterial.RESOURCE_SEAWEED }; String misctype = (String) foundRecipe.get(RCP_MISCTYPE); String spell = (foundRecipe.size() > RCP_SPELL) ? ((String) foundRecipe.get(RCP_SPELL)).trim() : ""; bundling = spell.equalsIgnoreCase("BUNDLE") || misctype.equalsIgnoreCase("BUNDLE"); int[][] data = fetchFoundResourceData( mob, woodRequired, "weavable material", pm, 0, null, null, false, autoGenerate, enhancedTypes); if (data == null) return false; fixDataForComponents(data, componentsFoundList); woodRequired = data[0][FOUND_AMT]; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; int lostValue = autoGenerate > 0 ? 0 : CMLib.materials() .destroyResources(mob.location(), woodRequired, data[0][FOUND_CODE], 0, null) + CMLib.ableMapper().destroyAbilityComponents(componentsFoundList); building = CMClass.getItem((String) foundRecipe.get(RCP_CLASSTYPE)); if (building == null) { commonTell(mob, "There's no such thing as a " + foundRecipe.get(RCP_CLASSTYPE) + "!!!"); return false; } duration = getDuration( CMath.s_int((String) foundRecipe.get(RCP_TICKS)), mob, CMath.s_int((String) foundRecipe.get(RCP_LEVEL)), 4); String itemName = replacePercent( (String) foundRecipe.get(RCP_FINALNAME), RawMaterial.CODES.NAME(data[0][FOUND_CODE])) .toLowerCase(); if (bundling) itemName = "a " + woodRequired + "# " + itemName; else if (itemName.endsWith("s")) itemName = "some " + itemName; else itemName = CMLib.english().startWithAorAn(itemName); building.setName(itemName); startStr = "<S-NAME> start(s) weaving " + building.name() + "."; displayText = "You are weaving " + building.name(); verb = "weaving " + building.name(); building.setDisplayText(itemName + " lies here"); building.setDescription(itemName + ". "); building .basePhyStats() .setWeight( (int) Math.round((double) woodRequired * this.getItemWeightMultiplier(bundling))); building.setBaseValue(CMath.s_int((String) foundRecipe.get(RCP_VALUE))); building.setMaterial(data[0][FOUND_CODE]); building.basePhyStats().setLevel(CMath.s_int((String) foundRecipe.get(RCP_LEVEL))); building.setSecretIdentity(getBrand(mob)); int capacity = CMath.s_int((String) foundRecipe.get(RCP_CAPACITY)); long canContain = getContainerType((String) foundRecipe.get(RCP_CONTAINMASK)); int armordmg = CMath.s_int((String) foundRecipe.get(RCP_ARMORDMG)); if (bundling) { building.setBaseValue(lostValue); building.basePhyStats().setWeight(woodRequired); } addSpells(building, spell); if (building instanceof Weapon) { ((Weapon) building).setWeaponClassification(Weapon.CLASS_FLAILED); for (int cl = 0; cl < Weapon.CLASS_DESCS.length; cl++) { if (misctype.equalsIgnoreCase(Weapon.CLASS_DESCS[cl])) ((Weapon) building).setWeaponClassification(cl); } building.basePhyStats().setDamage(armordmg); ((Weapon) building).setRawProperLocationBitmap(Wearable.WORN_WIELD | Wearable.WORN_HELD); ((Weapon) building).setRawLogicalAnd((capacity > 1)); } key = null; if (building instanceof Armor) { if (capacity > 0) { ((Armor) building).setCapacity(capacity + woodRequired); ((Armor) building).setContainTypes(canContain); } ((Armor) building).basePhyStats().setArmor(0); if (armordmg != 0) ((Armor) building).basePhyStats().setArmor(armordmg + (abilityCode() - 1)); setWearLocation(building, misctype, 0); } else if (building instanceof Container) { if (capacity > 0) { ((Container) building).setCapacity(capacity + woodRequired); ((Container) building).setContainTypes(canContain); } if (misctype.equalsIgnoreCase("LID")) ((Container) building).setLidsNLocks(true, false, false, false); else if (misctype.equalsIgnoreCase("LOCK")) { ((Container) building).setLidsNLocks(true, false, true, false); ((Container) building).setKeyName(Double.toString(Math.random())); key = CMClass.getItem("GenKey"); ((DoorKey) key).setKey(((Container) building).keyName()); key.setName("a key"); key.setDisplayText("a small key sits here"); key.setDescription("looks like a key to " + building.name()); key.recoverPhyStats(); key.text(); } } if (building instanceof Rideable) { setRideBasis((Rideable) building, misctype); } building.recoverPhyStats(); building.text(); building.recoverPhyStats(); } messedUp = !proficiencyCheck(mob, 0, auto); if (bundling) { messedUp = false; duration = 1; verb = "bundling " + RawMaterial.CODES.NAME(building.material()).toLowerCase(); startStr = "<S-NAME> start(s) " + verb + "."; displayText = "You are " + verb; } if (autoGenerate > 0) { if (key != null) commands.addElement(key); commands.addElement(building); return true; } CMMsg msg = CMClass.getMsg(mob, building, this, CMMsg.MSG_NOISYMOVEMENT, startStr); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); building = (Item) msg.target(); beneficialAffect(mob, mob, asLevel, duration); enhanceItem(mob, building, enhancedTypes); } else if (bundling) { messedUp = false; aborted = false; unInvoke(); } return true; }
public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException { commands.removeElementAt(0); MOB leader = CMLib.combat().getFollowedLeader(mob); List<MOB>[] done = CMLib.combat().getFormation(mob); if (commands.size() == 0) { StringBuffer str = new StringBuffer(""); for (int i = 0; i < done.length; i++) if (done[i] != null) { if (i == 0) str.append("^xfront - ^.^?"); else str.append("^xrow +" + i + " - ^.^?"); for (int i2 = 0; i2 < done[i].size(); i2++) str.append(((i2 > 0) ? ", " : "") + ((MOB) done[i].get(i2)).name()); str.append("\n\r"); } mob.session().colorOnlyPrintln(str.toString()); } else if (commands.size() == 1) mob.tell("Put whom in what row?"); else if (mob.numFollowers() == 0) mob.tell("Noone is following you!"); else { String row = (String) commands.lastElement(); if ("FRONT".startsWith(row.toUpperCase())) row = "0"; commands.removeElementAt(commands.size() - 1); String name = CMParms.combine(commands, 0); MOB who = null; if (CMLib.english().containsString(mob.name(), name) || CMLib.english().containsString(mob.Name(), name)) { mob.tell("You can not move your own position. You are always the leader of your party."); return false; } for (int f = 0; f < mob.numFollowers(); f++) { MOB M = mob.fetchFollower(f); if (M == null) continue; if (CMLib.english().containsString(M.name(), name) || CMLib.english().containsString(M.Name(), name)) { who = M; break; } } if (who == null) { mob.tell("There is noone following you called " + name + "."); return false; } if ((!CMath.isNumber(row)) || (CMath.s_int(row) < 0)) mob.tell( "'" + row + "' is not a valid row in which to put " + who.name() + ". Try number greater than 0."); else { int leaderRow = -1; for (int f = 0; f < done.length; f++) if ((done[f] != null) && (done[f].contains(leader))) { leaderRow = f; break; } if (leaderRow < 0) mob.tell("You do not exist."); else if (CMath.s_int(row) < leaderRow) mob.tell( "You can not place " + who.name() + " behind your own position, which is " + leaderRow + "."); else { mob.addFollower(who, CMath.s_int(row) - leaderRow); mob.tell("You have positioned " + who.name() + " to row " + CMath.s_int(row)); } } } return false; }
public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException { String whatToDrop = null; Environmental target = mob; Vector V = new Vector(); if (commands.size() < 2) { mob.tell("Empty what where?"); return false; } commands.removeElementAt(0); if (commands.size() > 1) { String s = (String) commands.lastElement(); if (s.equalsIgnoreCase("here")) target = mob.location(); else if (s.equalsIgnoreCase("me")) target = mob; else if (s.equalsIgnoreCase("self")) target = mob; else if ("INVENTORY".startsWith(s.toUpperCase())) target = mob; else if (s.equalsIgnoreCase("floor")) target = mob.location(); else if (s.equalsIgnoreCase("ground")) target = mob.location(); else { target = CMLib.english().possibleContainer(mob, commands, false, Wearable.FILTER_UNWORNONLY); if (target == null) target = mob.location().fetchFromRoomFavorItems(null, s); else commands.addElement("delme"); } if (target != null) commands.removeElementAt(commands.size() - 1); } if ((target == null) || (!CMLib.flags().canBeSeenBy(target, mob))) { mob.tell("Empty it where?"); return false; } int maxToDrop = CMLib.english().calculateMaxToGive(mob, commands, true, mob, false); if (maxToDrop < 0) return false; whatToDrop = CMParms.combine(commands, 0); boolean allFlag = (commands.size() > 0) ? ((String) commands.elementAt(0)).equalsIgnoreCase("all") : false; if (whatToDrop.toUpperCase().startsWith("ALL.")) { allFlag = true; whatToDrop = "ALL " + whatToDrop.substring(4); } if (whatToDrop.toUpperCase().endsWith(".ALL")) { allFlag = true; whatToDrop = "ALL " + whatToDrop.substring(0, whatToDrop.length() - 4); } int addendum = 1; String addendumStr = ""; Drink drink = null; boolean doBugFix = true; while (doBugFix || ((allFlag) && (addendum <= maxToDrop))) { doBugFix = false; Item dropThis = mob.fetchCarried(null, whatToDrop + addendumStr); if ((dropThis == null) && (V.size() == 0) && (addendumStr.length() == 0) && (!allFlag)) { dropThis = mob.fetchWornItem(whatToDrop); if ((dropThis != null) && (dropThis instanceof Container)) { if ((!dropThis.amWearingAt(Wearable.WORN_HELD)) && (!dropThis.amWearingAt(Wearable.WORN_WIELD))) { mob.tell("You must remove that first."); return false; } CMMsg newMsg = CMClass.getMsg(mob, dropThis, null, CMMsg.MSG_REMOVE, null); if (mob.location().okMessage(mob, newMsg)) mob.location().send(mob, newMsg); else return false; } } if (dropThis == null) break; if (dropThis instanceof Drink) drink = (Drink) dropThis; if ((CMLib.flags().canBeSeenBy(dropThis, mob)) && (dropThis instanceof Container) && (!V.contains(dropThis))) V.addElement(dropThis); addendumStr = "." + (++addendum); } String str = "<S-NAME> empt(ys) <T-NAME>"; if (target instanceof Room) str += " here."; else if (target instanceof MOB) str += "."; else str += " into " + target.Name() + "."; if ((V.size() == 0) && (drink != null)) { mob.tell(drink.name() + " must be POURed out."); return false; } if (V.size() == 0) mob.tell("You don't seem to be carrying that."); else if ((V.size() == 1) && (V.firstElement() == target)) mob.tell("You can't empty something into itself!"); else if ((V.size() == 1) && (V.firstElement() instanceof Drink) && (!((Drink) V.firstElement()).containsDrink())) mob.tell(mob, (Drink) V.firstElement(), null, "<T-NAME> is already empty."); else for (int v = 0; v < V.size(); v++) { Container C = (Container) V.elementAt(v); if (C == target) continue; List<Item> V2 = C.getContents(); boolean skipMessage = false; if ((C instanceof Drink) && (((Drink) C).containsDrink())) { if (target instanceof Drink) { Command C2 = CMClass.getCommand("Pour"); C2.execute( mob, new XVector("POUR", "$" + C.Name() + "$", "$" + target.Name() + "$"), metaFlags); skipMessage = true; } else { ((Drink) C).setLiquidRemaining(0); if (((Drink) C).disappearsAfterDrinking()) C.destroy(); } } CMMsg msg = CMClass.getMsg(mob, C, CMMsg.MSG_QUIETMOVEMENT, str); Room R = mob.location(); if (skipMessage || (R.okMessage(mob, msg))) { if (!skipMessage) R.send(mob, msg); for (int v2 = 0; v2 < V2.size(); v2++) { Item I = (Item) V2.get(v2); if (I instanceof Coins) ((Coins) I).setContainer(null); if (((I.container() == null) || (Get.get(mob, C, I, true, null, true))) && (I.container() == null)) { if (target instanceof Room) drop(mob, I, true, true); else if (target instanceof Container) { CMMsg putMsg = CMClass.getMsg(mob, target, I, CMMsg.MASK_OPTIMIZE | CMMsg.MSG_PUT, null); if (R.okMessage(mob, putMsg)) R.send(mob, putMsg); } if (I instanceof Coins) ((Coins) I).putCoinsBack(); if (I instanceof RawMaterial) ((RawMaterial) I).rebundle(); } } } } mob.location().recoverRoomStats(); mob.location().recoverRoomStats(); return false; }
public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { boolean saveTheTrap = false; if ((commands.size() > 0) && (commands.lastElement() instanceof Boolean)) { saveTheTrap = ((Boolean) commands.lastElement()).booleanValue(); commands.removeElementAt(commands.size() - 1); } String whatTounlock = CMParms.combine(commands, 0); Physical unlockThis = null; int dirCode = Directions.getGoodDirectionCode(whatTounlock); Room R = mob.location(); Room nextRoom = null; if (dirCode >= 0) { nextRoom = R.getRoomInDir(dirCode); unlockThis = R.getExitInDir(dirCode); } if ((unlockThis == null) && (whatTounlock.equalsIgnoreCase("room") || whatTounlock.equalsIgnoreCase("here"))) unlockThis = R; if (unlockThis == null) unlockThis = getAnyTarget(mob, commands, givenTarget, Wearable.FILTER_UNWORNONLY); if (unlockThis == null) return false; int oldProficiency = proficiency(); if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; boolean success = proficiencyCheck( mob, +(((mob.phyStats().level() + (getXLEVELLevel(mob) * 2)) - unlockThis.phyStats().level()) * 3), auto); Vector<Physical> permSetV = new Vector<Physical>(); Trap theTrap = CMLib.utensils().fetchMyTrap(unlockThis); if (theTrap != null) permSetV.addElement(unlockThis); Trap opTrap = null; boolean permanent = false; if ((unlockThis instanceof Room) && (CMLib.law().doesOwnThisProperty(mob, ((Room) unlockThis)))) permanent = true; else if (unlockThis instanceof Exit) { Room R2 = null; if (dirCode < 0) for (int d = Directions.NUM_DIRECTIONS() - 1; d >= 0; d--) if (R.getExitInDir(d) == unlockThis) { dirCode = d; R2 = R.getRoomInDir(d); break; } if ((CMLib.law().doesOwnThisProperty(mob, R)) || ((R2 != null) && (CMLib.law().doesOwnThisProperty(mob, R2)))) permanent = true; if (dirCode >= 0) { Exit exit = R.getReverseExit(dirCode); if (exit != null) opTrap = CMLib.utensils().fetchMyTrap(exit); if (opTrap != null) permSetV.addElement(exit); Trap roomTrap = null; if (nextRoom != null) roomTrap = CMLib.utensils().fetchMyTrap(nextRoom); if (roomTrap != null) permSetV.addElement(nextRoom); if ((theTrap != null) && (theTrap.disabled()) && (roomTrap != null)) { opTrap = null; unlockThis = nextRoom; theTrap = roomTrap; } } } if (unlockThis == null) { mob.tell("You can't seem to remember how this works."); return false; } CMMsg msg = CMClass.getMsg( mob, unlockThis, this, auto ? CMMsg.MSG_OK_ACTION : CMMsg.MSG_DELICATE_HANDS_ACT, CMMsg.MSG_DELICATE_HANDS_ACT, CMMsg.MSG_OK_ACTION, auto ? unlockThis.name() + " begins to glow." : "<S-NAME> attempt(s) to safely deactivate a trap on " + unlockThis.name() + "."); if ((success) && (!lastDone.contains("" + unlockThis))) { while (lastDone.size() > 40) lastDone.removeElementAt(0); lastDone.addElement("" + unlockThis); msg.setValue(1); } else msg.setValue(0); if (R.okMessage(mob, msg)) { R.send(mob, msg); if ((unlockThis == lastChecked) && ((theTrap == null) || (theTrap.disabled()))) setProficiency(oldProficiency); if (success) { if (theTrap != null) { theTrap.disable(); if (saveTheTrap) commands.addElement(theTrap); } if (opTrap != null) { opTrap.disable(); if (saveTheTrap) commands.addElement(opTrap); } if (permanent) { for (int i = 0; i < permSetV.size(); i++) { if (theTrap != null) { theTrap.unInvoke(); ((Physical) permSetV.elementAt(i)).delEffect(theTrap); } if (opTrap != null) { opTrap.unInvoke(); ((Physical) permSetV.elementAt(i)).delEffect(opTrap); } } CMLib.database().DBUpdateRoom(R); CMLib.database().DBUpdateExits(R); } } if ((!auto) && (!saveTheTrap)) mob.tell("You have completed your attempt."); lastChecked = unlockThis; } return success; }
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; }