public ClanPosition getPosition(String pos) { if (pos == null) return null; pos = pos.trim(); if (CMath.isInteger(pos)) { int i = CMath.s_int(pos); if ((i >= 0) && (i < positions.length)) return positions[i]; } for (ClanPosition P : positions) if (P.getID().equalsIgnoreCase(pos)) return P; return null; }
protected List<List<String>> loadRecipes() { String filename = parametersFile(); List<List<String>> recipes = (List<List<String>>) Resources.getResource("PARSED_RECIPE: " + filename); if (recipes == null) { StringBuffer str = new CMFile(Resources.buildResourcePath("skills") + filename, null, true).text(); recipes = loadList(str); if (recipes.size() == 0) Log.errOut("LeatherWorking", "Recipes not found!"); else { List<List<String>> pleaseAdd = new Vector(); for (int r = 0; r < recipes.size(); r++) { List<String> V = recipes.get(r); if (V.size() > 0) { String name = (String) V.get(RCP_FINALNAME); int baseLevel = CMath.s_int((String) V.get(RCP_LEVEL)) + 2; List<String> V1 = new XVector<String>(V); V1.set(RCP_FINALNAME, "Cuirbouli " + name); V1.set(RCP_LEVEL, "" + (baseLevel + 37)); pleaseAdd.add(V1); V1 = new XVector<String>(V); V1.set(RCP_FINALNAME, "Reinforced " + name); V1.set(RCP_LEVEL, "" + (baseLevel + 45)); pleaseAdd.add(V1); V1 = new XVector<String>(V); V1.set(RCP_FINALNAME, "Masterwork " + name); V1.set(RCP_LEVEL, "" + (baseLevel + 54)); pleaseAdd.add(V1); V1 = new XVector<String>(V); V1.set(RCP_FINALNAME, "Laminar " + name); V1.set(RCP_LEVEL, "" + (baseLevel + 63)); pleaseAdd.add(V1); V1 = new XVector<String>(V); V1.set(RCP_FINALNAME, "Battlemoulded " + name); V1.set(RCP_LEVEL, "" + (baseLevel + 72)); pleaseAdd.add(V1); V.set(RCP_FINALNAME, "Designer " + name); V.set(RCP_LEVEL, "" + (baseLevel + 30)); } } for (int i = 0; i < pleaseAdd.size(); i++) recipes.add(pleaseAdd.get(i)); } Resources.submitResource("PARSED_RECIPE: " + filename, recipes); } return recipes; }
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 void setStat(String code, String val) { int num = 0; int numDex = code.length(); while ((numDex > 0) && (Character.isDigit(code.charAt(numDex - 1)))) numDex--; if (numDex < code.length()) { num = CMath.s_int(code.substring(numDex)); code = code.substring(0, numDex); } final GOVT_STAT_CODES stat = getStatIndex(code); if (stat == null) { return; } switch (stat) { case NAME: name = val; break; case AUTOROLE: { ClanPosition P = getPosition(val); if (P != null) autoRole = P.getRoleID(); break; } case ACCEPTPOS: { ClanPosition P = getPosition(val); if (P != null) acceptPos = P.getRoleID(); break; } case SHORTDESC: shortDesc = val; break; case LONGDESC: longDesc = val; break; case XPLEVELFORMULA: setXpCalculationFormulaStr(val); break; case REQUIREDMASK: requiredMaskStr = val; break; case ISPUBLIC: isPublic = CMath.s_bool(val); break; case ISFAMILYONLY: isFamilyOnly = CMath.s_bool(val); break; case OVERRIDEMINMEMBERS: { if (val.length() == 0) overrideMinMembers = null; else overrideMinMembers = Integer.valueOf(CMath.s_int(val)); break; } case CONQUESTENABLED: conquestEnabled = CMath.s_bool(val); break; case CONQUESTITEMLOYALTY: conquestItemLoyalty = CMath.s_bool(val); break; case CONQUESTDEITYBASIS: conquestByWorship = CMath.s_bool(val); break; case MAXVOTEDAYS: maxVoteDays = CMath.s_int(val); break; case VOTEQUORUMPCT: voteQuorumPct = CMath.s_int(val); break; case AUTOPROMOTEBY: { Clan.AutoPromoteFlag flag = (Clan.AutoPromoteFlag) CMath.s_valueOf(Clan.AutoPromoteFlag.values(), val); if (flag != null) autoPromoteBy = flag; break; } case VOTEFUNCS: { final Vector<String> funcs = CMParms.parseCommas(val.toUpperCase().trim(), true); for (ClanPosition pos : positions) { for (int a = 0; a < Function.values().length; a++) if (pos.getFunctionChart()[a] == Authority.MUST_VOTE_ON) pos.getFunctionChart()[a] = Authority.CAN_NOT_DO; for (final String funcName : funcs) { Authority auth = (Authority) CMath.s_valueOf(Function.values(), funcName); if (auth != null) pos.getFunctionChart()[auth.ordinal()] = Authority.MUST_VOTE_ON; } } break; } case NUMRABLE: clanAbilityMap = null; if (CMath.s_int(val) == 0) { clanAbilityNames = null; clanAbilityProficiencies = null; clanAbilityQuals = null; clanAbilityLevels = null; } else { clanAbilityNames = new String[CMath.s_int(val)]; clanAbilityProficiencies = new int[CMath.s_int(val)]; clanAbilityQuals = new boolean[CMath.s_int(val)]; clanAbilityLevels = new int[CMath.s_int(val)]; } break; case GETRABLE: { if (clanAbilityNames == null) clanAbilityNames = new String[num + 1]; clanAbilityNames[num] = val; break; } case GETRABLEPROF: { if (clanAbilityProficiencies == null) clanAbilityProficiencies = new int[num + 1]; clanAbilityProficiencies[num] = CMath.s_parseIntExpression(val); break; } case GETRABLEQUAL: { if (clanAbilityQuals == null) clanAbilityQuals = new boolean[num + 1]; clanAbilityQuals[num] = CMath.s_bool(val); break; } case GETRABLELVL: { if (clanAbilityLevels == null) clanAbilityLevels = new int[num + 1]; clanAbilityLevels[num] = CMath.s_parseIntExpression(val); break; } case NUMREFF: clanEffectMap = null; if (CMath.s_int(val) == 0) { clanEffectNames = null; clanEffectParms = null; clanEffectLevels = null; } else { clanEffectNames = new String[CMath.s_int(val)]; clanEffectParms = new String[CMath.s_int(val)]; clanEffectLevels = new int[CMath.s_int(val)]; } break; case GETREFF: { if (clanEffectNames == null) clanEffectNames = new String[num + 1]; clanEffectNames[num] = val; break; } case GETREFFPARM: { if (clanEffectParms == null) clanEffectParms = new String[num + 1]; clanEffectParms[num] = val; break; } case GETREFFLVL: { if (clanEffectLevels == null) clanEffectLevels = new int[num + 1]; clanEffectLevels[num] = CMath.s_int(val); break; } default: Log.errOut("Clan", "setStat:Unhandled:" + stat.toString()); break; } }
public String getStat(String code) { int num = 0; int numDex = code.length(); while ((numDex > 0) && (Character.isDigit(code.charAt(numDex - 1)))) numDex--; if (numDex < code.length()) { num = CMath.s_int(code.substring(numDex)); code = code.substring(0, numDex); } final GOVT_STAT_CODES stat = getStatIndex(code); if (stat == null) { return ""; } switch (stat) { case NAME: return name; case AUTOROLE: return (autoRole < 0 || autoRole > positions.length) ? "" : positions[autoRole].getID(); case ACCEPTPOS: return (acceptPos < 0 || acceptPos > positions.length) ? "" : positions[acceptPos].getID(); case SHORTDESC: return shortDesc; case LONGDESC: return longDesc; case XPLEVELFORMULA: return xpCalculationFormulaStr == null ? "" : xpCalculationFormulaStr; case REQUIREDMASK: return requiredMaskStr; case ISPUBLIC: return Boolean.toString(isPublic); case ISFAMILYONLY: return Boolean.toString(isFamilyOnly); case OVERRIDEMINMEMBERS: return overrideMinMembers == null ? "" : overrideMinMembers.toString(); case CONQUESTENABLED: return Boolean.toString(conquestEnabled); case CONQUESTITEMLOYALTY: return Boolean.toString(conquestItemLoyalty); case CONQUESTDEITYBASIS: return Boolean.toString(conquestByWorship); case MAXVOTEDAYS: return Integer.toString(maxVoteDays); case VOTEQUORUMPCT: return Integer.toString(voteQuorumPct); case AUTOPROMOTEBY: return autoPromoteBy.toString(); case VOTEFUNCS: { final StringBuilder str = new StringBuilder(""); for (ClanPosition pos : positions) { for (int a = 0; a < Function.values().length; a++) if (pos.getFunctionChart()[a] == Authority.MUST_VOTE_ON) { if (str.length() > 0) str.append(","); str.append(Function.values()[a]); } break; } return str.toString(); } case NUMRABLE: return (clanAbilityNames == null) ? "0" : ("" + clanAbilityNames.length); case GETRABLE: return (clanAbilityNames == null) ? "" : ("" + clanAbilityNames[num]); case GETRABLEPROF: return (clanAbilityProficiencies == null) ? "0" : ("" + clanAbilityProficiencies[num]); case GETRABLEQUAL: return (clanAbilityQuals == null) ? "false" : ("" + clanAbilityQuals[num]); case GETRABLELVL: return (clanAbilityLevels == null) ? "0" : ("" + clanAbilityLevels[num]); case NUMREFF: return (clanEffectNames == null) ? "0" : ("" + clanEffectNames.length); case GETREFF: return (clanEffectNames == null) ? "" : ("" + clanEffectNames[num]); case GETREFFPARM: return (clanEffectParms == null) ? "0" : ("" + clanEffectParms[num]); case GETREFFLVL: return (clanEffectLevels == null) ? "0" : ("" + clanEffectLevels[num]); default: Log.errOut("Clan", "getStat:Unhandled:" + stat.toString()); break; } return ""; }
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 { if ((commands.size() == 1) && (((String) commands.firstElement()).startsWith("QUESTW"))) commands.addElement("WON"); if ((commands.size() > 1) && (((String) commands.elementAt(1)).equalsIgnoreCase("WON"))) { Vector qVec = new Vector(); for (int q = 0; q < CMLib.quests().numQuests(); q++) { Quest Q = CMLib.quests().fetchQuest(q); if (Q.wasWinner(mob.Name())) { String name = Q.displayName().trim().length() > 0 ? Q.displayName() : Q.name(); if (!qVec.contains(name)) qVec.addElement(name); } } Collections.sort(qVec); StringBuffer msg = new StringBuffer("^HQuests you are listed as having won:^?^N\n\r"); for (int i = 0; i < qVec.size(); i++) msg.append(((String) qVec.elementAt(i)) + "^N\n\r"); if (!mob.isMonster()) mob.tell(msg.toString()); } else if ((commands.size() > 2) && (((String) commands.elementAt(1)).equalsIgnoreCase("DROP"))) { ScriptingEngine foundS = null; for (Enumeration<ScriptingEngine> e = mob.scripts(); e.hasMoreElements(); ) { ScriptingEngine SE = e.nextElement(); if (SE == null) continue; if ((SE.defaultQuestName().length() > 0) && (CMLib.quests().findQuest(SE.defaultQuestName()) == null)) foundS = SE; } if (foundS != null) mob.delScript(foundS); foundS = null; String rest = CMParms.combine(commands, 2); Quest Q = CMLib.quests().findQuest(rest); if (Q == null) { mob.tell("There is no such quest as '" + rest + "'."); return false; } for (Enumeration<ScriptingEngine> e = mob.scripts(); e.hasMoreElements(); ) { ScriptingEngine SE = e.nextElement(); if (SE == null) continue; if ((SE.defaultQuestName().length() > 0) && (SE.defaultQuestName().equalsIgnoreCase(Q.name()))) foundS = SE; } if (foundS == null) { mob.tell("You have not accepted a quest called '" + rest + "'. Enter QUESTS for a list."); return false; } if ((!mob.isMonster() && (mob.session() .confirm("Drop the quest '" + Q.name() + "', are you sure (y/N)?", "N")))) { CMLib.coffeeTables().bump(Q, CoffeeTableRow.STAT_QUESTDROPPED); mob.delScript(foundS); mob.tell("Quest dropped."); return false; } } else if (commands.size() == 1) { List<Quest> qQVec = CMLib.quests().getPlayerPersistantQuests(mob); Vector<String> qVec = new Vector<String>(); for (Quest Q : qQVec) { String name = Q.displayName().trim().length() > 0 ? Q.displayName() : Q.name(); if (!qVec.contains(name)) qVec.addElement(name); } Collections.sort(qVec); StringBuffer msg = new StringBuffer("^HQuests you are listed as having accepted:^?^N\n\r"); for (int i = 0; i < qVec.size(); i++) msg.append(((String) qVec.elementAt(i)) + "^N\n\r"); if (!mob.isMonster()) mob.tell(msg.toString() + "\n\r^HEnter QUEST [QUEST NAME] for more information.^N^."); } else { String rest = CMParms.combine(commands, 1); Quest Q = CMLib.quests().findQuest(rest); if (Q == null) { mob.tell("There is no such quest as '" + rest + "'."); return false; } ScriptingEngine foundS = null; for (Enumeration<ScriptingEngine> e = mob.scripts(); e.hasMoreElements(); ) { ScriptingEngine SE = e.nextElement(); if (SE == null) continue; if ((SE.defaultQuestName().length() > 0) && (SE.defaultQuestName().equalsIgnoreCase(Q.name()))) foundS = SE; } if (foundS == null) { mob.tell("You have not accepted a quest called '" + rest + "'. Enter QUESTS for a list."); return false; } String name = Q.displayName().trim().length() > 0 ? Q.displayName() : Q.name(); if (!Q.name().equals(name)) name += " (" + Q.name() + ")"; mob.tell("^HQuest Information: ^w" + name + "^N"); String instructions = null; if ((instructions == null) || (instructions.length() == 0)) instructions = foundS.getVar("*", "INSTRUCTIONS"); if ((instructions == null) || (instructions.length() == 0)) instructions = Q.isStat("INSTRUCTIONS") ? Q.getStat("INSTRUCTIONS") : null; if ((instructions == null) || (instructions.length() == 0)) instructions = "No further information available."; String timeRemaining = foundS.getVar("*", "TIME_REMAINING"); if ((timeRemaining != null) && (timeRemaining.length() > 0)) { String timeRemainingType = foundS.getVar("*", "TIME_REMAINING_TYPE"); if (((timeRemainingType.equalsIgnoreCase("TICKS") || (timeRemainingType.length() == 0)) && (CMath.isInteger(timeRemaining)))) { long ticks = CMath.s_int(timeRemaining); ticks *= CMProps.getTickMillis(); if (ticks > 60000) timeRemaining = (ticks / 60000) + " minutes"; else timeRemaining = (ticks / 1000) + " seconds"; } else if (timeRemainingType.length() > 0) timeRemaining += " " + timeRemainingType; } String progress = foundS.getVar("*", "PROGRESS"); mob.tell("^w" + instructions + "^N"); if ((timeRemaining != null) && (timeRemaining.length() > 0)) mob.tell("\n\r^yTime Remaining: ^w" + timeRemaining + "^N"); if ((progress != null) && (progress.length() > 0)) mob.tell("\n\r^yProgress: ^w" + progress + "^N"); } return false; }
public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException { if ((!mob.isMonster()) && CMath.bset(mob.getBitmap(), MOB.ATT_QUIET)) { mob.tell("You have QUIET mode on. You must turn it off first."); return false; } if (commands.size() < 3) { mob.tell("Tell whom what?"); return false; } commands.removeElementAt(0); if (((String) commands.firstElement()).equalsIgnoreCase("last") && (CMath.isNumber(CMParms.combine(commands, 1))) && (mob.playerStats() != null)) { java.util.List<String> V = mob.playerStats().getTellStack(); if ((V.size() == 0) || (CMath.bset(metaFlags, Command.METAFLAG_AS)) || (CMath.bset(metaFlags, Command.METAFLAG_POSSESSED))) mob.tell("No telling."); else { int num = CMath.s_int(CMParms.combine(commands, 1)); if (num > V.size()) num = V.size(); Session S = mob.session(); try { if (S != null) S.snoopSuspension(1); for (int i = V.size() - num; i < V.size(); i++) mob.tell((String) V.get(i)); } finally { if (S != null) S.snoopSuspension(-1); } } return false; } MOB targetM = null; String targetName = ((String) commands.elementAt(0)).toUpperCase(); targetM = CMLib.sessions().findPlayerOnline(targetName, true); if (targetM == null) targetM = CMLib.sessions().findPlayerOnline(targetName, false); for (int i = 1; i < commands.size(); i++) { String s = (String) commands.elementAt(i); if (s.indexOf(' ') >= 0) commands.setElementAt("\"" + s + "\"", i); } String combinedCommands = CMParms.combine(commands, 1); if (combinedCommands.equals("")) { mob.tell("Tell them what?"); return false; } combinedCommands = CMProps.applyINIFilter(combinedCommands, CMProps.SYSTEM_SAYFILTER); if (targetM == null) { if (targetName.indexOf('@') >= 0) { String mudName = targetName.substring(targetName.indexOf('@') + 1); targetName = targetName.substring(0, targetName.indexOf('@')); if (CMLib.intermud().i3online() || CMLib.intermud().imc2online()) CMLib.intermud().i3tell(mob, targetName, mudName, combinedCommands); else mob.tell("Intermud is unavailable."); return false; } mob.tell("That person doesn't appear to be online."); return false; } if (CMath.bset(targetM.getBitmap(), MOB.ATT_QUIET)) { mob.tell("That person can not hear you."); return false; } Session ts = targetM.session(); try { if (ts != null) ts.snoopSuspension(1); CMLib.commands().postSay(mob, targetM, combinedCommands, true, true); } finally { if (ts != null) ts.snoopSuspension(-1); } if ((targetM.session() != null) && (targetM.session().afkFlag())) mob.tell(targetM.session().afkMessage()); return false; }