public void executeMsg(final Environmental myHost, final CMMsg msg) { super.executeMsg(myHost, msg); if ((affected != null) && (affected instanceof Room) && (invoker() != null) && (invoker().location() != null) && (sourceRoom != null) && (!invoker().isInCombat()) && (invoker().location() == sourceRoom)) { if (invoker().location() == room) { if ((msg.sourceMinor() == CMMsg.TYP_SPEAK) && (msg.othersCode() == CMMsg.NO_EFFECT) && (msg.othersMessage() == null) && (msg.sourceMessage() != null) && (!msg.amISource(invoker())) && (!msg.amITarget(invoker())) && (!lastSaid.equals(msg.sourceMessage()))) { lastSaid = msg.sourceMessage(); if ((invoker().phyStats().level() + (getXLEVELLevel(invoker()) * 10)) > msg.source().phyStats().level()) invoker().tell(msg.source(), msg.target(), msg.tool(), msg.sourceMessage()); else invoker() .tell( msg.source(), null, null, "<S-NAME> said something, but you couldn't quite make it out."); } } else if ((msg.sourceMinor() == CMMsg.TYP_SPEAK) && (msg.othersMinor() == CMMsg.TYP_SPEAK) && (msg.othersMessage() != null) && (msg.sourceMessage() != null) && (!lastSaid.equals(msg.sourceMessage()))) { lastSaid = msg.sourceMessage(); if ((invoker().phyStats().level() + (getXLEVELLevel(invoker()) * 10)) > msg.source().phyStats().level()) invoker().tell(msg.source(), msg.target(), msg.tool(), msg.sourceMessage()); else invoker() .tell( msg.source(), null, null, "<S-NAME> said something, but you couldn't quite make it out."); } } else unInvoke(); }
public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (!super.okMessage(myHost, msg)) return false; if (msg.amITarget(this)) { MOB mob = msg.source(); switch (msg.targetMinor()) { case CMMsg.TYP_DRINK: if ((mob.isMine(this)) || (phyStats().weight() > 1000) || (!CMLib.flags().isGettable(this))) { if (!containsDrink()) { mob.tell(name() + " is empty."); return false; } if ((liquidType() == RawMaterial.RESOURCE_SALTWATER) || (liquidType() == RawMaterial.RESOURCE_LAMPOIL)) { mob.tell( "You don't want to be drinking " + RawMaterial.CODES.NAME(liquidType()).toLowerCase() + "."); return false; } return true; } mob.tell("You don't have that."); return false; case CMMsg.TYP_FILL: if ((liquidRemaining() >= amountOfLiquidHeld) && (liquidHeld() < 500000)) { mob.tell(name() + " is full."); return false; } if ((msg.tool() != null) && (msg.tool() != msg.target()) && (msg.tool() instanceof Drink)) { Drink thePuddle = (Drink) msg.tool(); if (!thePuddle.containsDrink()) { mob.tell(thePuddle.name() + " is empty."); return false; } if ((liquidRemaining() > 0) && (liquidType() != thePuddle.liquidType())) { mob.tell( "There is still some " + RawMaterial.CODES.NAME(liquidType()).toLowerCase() + " left in " + name() + ". You must empty it before you can fill it with " + RawMaterial.CODES.NAME(thePuddle.liquidType()).toLowerCase() + "."); return false; } return true; } mob.tell("You can't fill " + name() + " from that."); return false; default: break; } } return true; }
public void executeMsg(final Environmental myHost, final CMMsg msg) { try { super.executeMsg(myHost, msg); if (spy == null) return; if (invoker == null) return; if ((msg.amISource(spy)) && ((msg.sourceMinor() == CMMsg.TYP_LOOK) || (msg.sourceMinor() == CMMsg.TYP_EXAMINE)) && (msg.target() != null) && ((invoker.location() != spy.location()) || (!(msg.target() instanceof Room)))) { disable = true; CMMsg newAffect = CMClass.getMsg(invoker, msg.target(), msg.sourceMinor(), null); msg.target().executeMsg(invoker, newAffect); } else if ((!msg.amISource(invoker)) && (invoker.location() != spy.location()) && (msg.source().location() == spy.location()) && (msg.othersCode() != CMMsg.NO_EFFECT) && (msg.othersMessage() != null) && (!disable)) { disable = true; invoker.executeMsg(invoker, msg); } else if (msg.amISource(invoker) && (!disable) && (msg.sourceMinor() == CMMsg.TYP_SPEAK) && (msg.sourceMessage() != null) && ((msg.sourceMajor() & CMMsg.MASK_MAGIC) == 0)) { int start = msg.sourceMessage().indexOf("\'"); int end = msg.sourceMessage().lastIndexOf("\'"); if ((start > 0) && (end > start)) { String msg2 = msg.sourceMessage().substring(start + 1, end).trim(); if (msg2.length() > 0) spy.enqueCommand(CMParms.parse(msg2.trim()), Command.METAFLAG_FORCED, 0); } } } finally { disable = false; if ((spy != null) && ((spy.amFollowing() != invoker) || (spy.amDead()) || (!CMLib.flags().isInTheGame(spy, false)) || (!CMLib.flags().isInTheGame(invoker, true)))) unInvoke(); } }
public boolean okMessage(Environmental host, CMMsg msg) { if (!super.okMessage(host, msg)) return false; if ((msg.target() == affected) && (msg.targetMinor() == CMMsg.TYP_ENTER) && (affected instanceof Room) && (isLaw(msg.source()))) { msg.source().tell("You don't think there's anything going on in there."); return false; } return true; }
public void executeMsg(Environmental host, CMMsg msg) { if (affected instanceof MOB) { MOB mob = (MOB) affected; if ((msg.source() == mob) && (msg.target() == mob.location()) && (msg.targetMinor() == CMMsg.TYP_LEAVE)) { failed = true; unInvoke(); } else if ((CMLib.flags().isStanding(mob)) || (mob.location() != room)) { failed = true; unInvoke(); } } super.executeMsg(host, msg); }
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 okMessage(Environmental host, CMMsg msg) { if (!super.okMessage(host, msg)) return false; Room R = msg.source().location(); if ((host instanceof Area) && (R != null) && (R.getArea() != host)) return true; int weather = weather(host, R); // first handle the effect of storms on ranged // weapons if ((msg.targetMinor() == CMMsg.TYP_WEAPONATTACK) && (msg.source().rangeToTarget() != 0) && (msg.tool() instanceof Item) && (!(msg.tool() instanceof Electronics)) && ((msg.sourceMinor() == CMMsg.TYP_THROW) || ((msg.tool() instanceof Weapon) && ((((Weapon) msg.tool()).weaponClassification() == Weapon.CLASS_RANGED) || (((Weapon) msg.tool()).weaponClassification() == Weapon.CLASS_THROWN))))) { switch (weather) { case Climate.WEATHER_WINDY: case Climate.WEATHER_THUNDERSTORM: case Climate.WEATHER_BLIZZARD: case Climate.WEATHER_DUSTSTORM: { if ((CMLib.dice().rollPercentage() < windsheer) && (R != null)) { R.show( msg.source(), msg.target(), msg.tool(), CMMsg.MSG_OK_ACTION, "^WThe strong wind blows <S-YOUPOSS> attack against <T-NAMESELF> with <O-NAME> off target.^?"); return false; } break; } } } // then try to handle slippage in wet weather if (((msg.sourceMajor(CMMsg.MASK_MOVE))) && (R != null)) { String what = null; switch (weather) { case Climate.WEATHER_BLIZZARD: case Climate.WEATHER_SNOW: if (CMLib.dice().rollPercentage() < snowSlipChance) what = "cold wet"; break; case Climate.WEATHER_RAIN: case Climate.WEATHER_THUNDERSTORM: if (CMLib.dice().rollPercentage() < rainSlipChance) what = "slippery wet"; break; case Climate.WEATHER_SLEET: if (CMLib.dice().rollPercentage() < sleetSlipChance) what = "icy"; break; } if ((what != null) && (!CMLib.flags().isInFlight(msg.source())) && (R.domainType() != Room.DOMAIN_OUTDOORS_AIR) && (R.domainType() != Room.DOMAIN_OUTDOORS_WATERSURFACE) && (R.domainType() != Room.DOMAIN_OUTDOORS_UNDERWATER) && (CMLib.dice().rollPercentage() > ((msg.source().charStats().getStat(CharStats.STAT_DEXTERITY) * 3) + 25))) { int oldDisposition = msg.source().basePhyStats().disposition(); oldDisposition = oldDisposition & (~(PhyStats.IS_SLEEPING | PhyStats.IS_SNEAKING | PhyStats.IS_SITTING)); msg.source().basePhyStats().setDisposition(oldDisposition | PhyStats.IS_SITTING); msg.source().recoverPhyStats(); R.show( msg.source(), null, CMMsg.MSG_OK_ACTION, "^W<S-NAME> slip(s) on the " + what + " ground.^?"); return false; } } if ((R != null) && (weather == Climate.WEATHER_BLIZZARD)) { Ability A = CMClass.getAbility("Spell_ObscureSelf"); if (A != null) { A.setAffectedOne(msg.source()); if (!A.okMessage(msg.source(), msg)) return false; } } return true; }