@Override public boolean invoke( MOB mob, List<String> commands, Physical givenTarget, boolean auto, int asLevel) { if (commands.size() < 1) { mob.tell( L( "You must specify an item to fence, and possibly a ShopKeeper (unless it is implied).")); return false; } commands.add(0, "SELL"); // will be instantly deleted by parseshopkeeper final Environmental shopkeeper = CMLib.english().parseShopkeeper(mob, commands, L("Fence what to whom?")); if (shopkeeper == null) return false; if (commands.size() == 0) { mob.tell(L("Fence what?")); return false; } if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; final boolean success = proficiencyCheck(mob, 0, auto); if (success) { final CMMsg msg = CMClass.getMsg( mob, shopkeeper, this, CMMsg.MSG_SPEAK, auto ? "" : L("<S-NAME> fence(s) stolen loot to <T-NAMESELF>.")); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); invoker = mob; addBackMap.clear(); mob.addEffect(this); mob.recoverCharStats(); commands.add(0, CMStrings.capitalizeAndLower("SELL")); mob.doCommand(commands, MUDCmdProcessor.METAFLAG_FORCED); commands.add(shopkeeper.name()); mob.delEffect(this); for (Item I : addBackMap.keySet()) { if (mob.isMine(I)) { I.addEffect(addBackMap.get(I)); } } addBackMap.clear(); mob.recoverCharStats(); } } else beneficialWordsFizzle( mob, shopkeeper, L( "<S-NAME> attempt(s) to fence stolen loot to <T-NAMESELF>, but make(s) <T-HIM-HER> too nervous.")); // return whether it worked return success; }
@Override public void setParms(String newParm) { super.setParms(newParm); rates.clear(); cut = 0.05; spaceMaxCut = 0.0; spaceMaxDistance = SpaceObject.Distance.GalaxyRadius.dm; newParm = newParm.toUpperCase(); int x = newParm.indexOf('='); while (x > 0) { int lastSp = newParm.lastIndexOf(' ', x); if (lastSp < 0) lastSp = 0; if ((lastSp >= 0) && (lastSp < x - 1) && (Character.isLetter(newParm.charAt(x - 1)))) { String parm = newParm.substring(lastSp, x).trim().toUpperCase(); while ((x < newParm.length()) && (newParm.charAt(x) != '=')) x++; if (x < newParm.length()) { while ((x < newParm.length()) && (!Character.isDigit(newParm.charAt(x))) && (newParm.charAt(x) != '.')) x++; if (x < newParm.length()) { newParm = newParm.substring(x); x = 0; while ((x < newParm.length()) && ((Character.isDigit(newParm.charAt(x))) || (newParm.charAt(x) == '.'))) x++; double val = CMath.s_double(newParm.substring(0, x)); if (newParm.substring(0, x).indexOf('.') < 0) val = CMath.s_long(newParm.substring(0, x)); if (x < newParm.length()) newParm = newParm.substring(x + 1); else newParm = ""; if (parm.equalsIgnoreCase("default")) parm = ""; if (parm.equalsIgnoreCase("spacemaxcut")) spaceMaxCut = val / 100.0; else if (parm.equalsIgnoreCase("spacemaxdistance")) spaceMaxDistance = Math.round(CMath.mul(SpaceObject.Distance.GalaxyRadius.dm, val / 100.0)); else if (parm.equalsIgnoreCase("cut")) cut = val / 100.0; else rates.put(parm, Double.valueOf(val / 100.0)); } } } x = newParm.indexOf('='); } }