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 preInvoke( MOB mob, List<String> commands, Physical givenTarget, boolean auto, int asLevel, int secondsElapsed, double actionsRemaining) { if (secondsElapsed == 0) { String dir = CMParms.combine(commands, 0); if (commands.size() > 0) dir = (String) commands.get(commands.size() - 1); int dirCode = Directions.getGoodDirectionCode(dir); if (dirCode < 0) { mob.tell("Step where?"); return false; } if (mob.isInCombat()) { mob.tell("Not while you are fighting!"); return false; } if ((mob.location().getRoomInDir(dirCode) == null) || (mob.location().getExitInDir(dirCode) == null)) { mob.tell("Step where?"); return false; } CMMsg msg = CMClass.getMsg( mob, null, this, auto ? CMMsg.MSG_OK_VISUAL : CMMsg.MSG_DELICATE_HANDS_ACT, "<S-NAME> start(s) walking carefully " + Directions.getDirectionName(dirCode) + "."); if (mob.location().okMessage(mob, msg)) mob.location().send(mob, msg); else return false; } return true; }
@Override public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException { final Room R = mob.location(); boolean quiet = false; if ((commands != null) && (commands.size() > 1) && (((String) commands.lastElement()).equalsIgnoreCase("UNOBTRUSIVELY"))) { commands.remove(commands.size() - 1); quiet = true; } final String textMsg = "<S-NAME> look(s) "; if (R == null) return false; if ((commands != null) && (commands.size() > 1)) { Environmental thisThang = null; if ((commands.size() > 2) && (((String) commands.get(1)).equalsIgnoreCase("at"))) commands.remove(1); else if ((commands.size() > 2) && (((String) commands.get(1)).equalsIgnoreCase("to"))) commands.remove(1); final String ID = CMParms.combine(commands, 1); if ((ID.toUpperCase().startsWith("EXIT") && (commands.size() == 2)) && (CMProps.getIntVar(CMProps.Int.EXVIEW) != 1)) { final CMMsg exitMsg = CMClass.getMsg(mob, R, null, CMMsg.MSG_LOOK_EXITS, null); if ((CMProps.getIntVar(CMProps.Int.EXVIEW) >= 2) != mob.isAttribute(MOB.Attrib.BRIEF)) exitMsg.setValue(CMMsg.MASK_OPTIMIZE); if (R.okMessage(mob, exitMsg)) R.send(mob, exitMsg); return false; } if (ID.equalsIgnoreCase("SELF") || ID.equalsIgnoreCase("ME")) thisThang = mob; if (thisThang == null) thisThang = R.fetchFromMOBRoomFavorsItems(mob, null, ID, noCoinFilter); if (thisThang == null) thisThang = R.fetchFromMOBRoomFavorsItems(mob, null, ID, Wearable.FILTER_ANY); if ((thisThang == null) && (commands.size() > 2) && (((String) commands.get(1)).equalsIgnoreCase("in"))) { commands.remove(1); final String ID2 = CMParms.combine(commands, 1); thisThang = R.fetchFromMOBRoomFavorsItems(mob, null, ID2, Wearable.FILTER_ANY); if ((thisThang != null) && ((!(thisThang instanceof Container)) || (((Container) thisThang).capacity() == 0))) { mob.tell(L("That's not a container.")); return false; } } int dirCode = -1; Environmental lookingTool = null; if (thisThang == null) { dirCode = Directions.getGoodDirectionCode(ID); if (dirCode >= 0) { final Room room = R.getRoomInDir(dirCode); final Exit exit = R.getExitInDir(dirCode); if ((room != null) && (exit != null)) { thisThang = exit; lookingTool = room; } else { mob.tell(L("You don't see anything that way.")); return false; } } } if (thisThang != null) { String name = "at <T-NAMESELF>"; if ((thisThang instanceof Room) || (thisThang instanceof Exit)) { if (thisThang == R) name = "around"; else if (dirCode >= 0) name = ((R instanceof BoardableShip) || (R.getArea() instanceof BoardableShip)) ? Directions.getShipDirectionName(dirCode) : Directions.getDirectionName(dirCode); } final CMMsg msg = CMClass.getMsg(mob, thisThang, lookingTool, CMMsg.MSG_LOOK, textMsg + name + "."); if ((thisThang instanceof Room) && (mob.isAttribute(MOB.Attrib.AUTOEXITS)) && (CMProps.getIntVar(CMProps.Int.EXVIEW) != 1)) { final CMMsg exitMsg = CMClass.getMsg(mob, thisThang, lookingTool, CMMsg.MSG_LOOK_EXITS, null); if ((CMProps.getIntVar(CMProps.Int.EXVIEW) >= 2) != mob.isAttribute(MOB.Attrib.BRIEF)) exitMsg.setValue(CMMsg.MASK_OPTIMIZE); msg.addTrailerMsg(exitMsg); } if (R.okMessage(mob, msg)) R.send(mob, msg); } else mob.tell(L("You don't see that here!")); } else { if ((commands != null) && (commands.size() > 0)) if (((String) commands.get(0)).toUpperCase().startsWith("E")) { mob.tell(L("Examine what?")); return false; } final CMMsg msg = CMClass.getMsg( mob, R, null, CMMsg.MSG_LOOK, (quiet ? null : textMsg + "around."), CMMsg.MSG_LOOK, (quiet ? null : textMsg + "at you."), CMMsg.MSG_LOOK, (quiet ? null : textMsg + "around.")); if ((mob.isAttribute(MOB.Attrib.AUTOEXITS)) && (CMProps.getIntVar(CMProps.Int.EXVIEW) != 1) && (CMLib.flags().canBeSeenBy(R, mob))) { final CMMsg exitMsg = CMClass.getMsg(mob, R, null, CMMsg.MSG_LOOK_EXITS, null); if ((CMProps.getIntVar(CMProps.Int.EXVIEW) >= 2) != mob.isAttribute(MOB.Attrib.BRIEF)) exitMsg.setValue(CMMsg.MASK_OPTIMIZE); msg.addTrailerMsg(exitMsg); } if (R.okMessage(mob, msg)) R.send(mob, msg); } return false; }
public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; Room target = mob.location(); if ((auto) && (givenTarget != null) && (givenTarget instanceof Room)) target = (Room) givenTarget; Ability A = target.fetchEffect(ID()); if (A != null) { mob.tell("This place is already a safehouse."); return false; } if ((!auto) && (CMLib.law().getLegalBehavior(target) == null)) { mob.tell("There is no law here!"); return false; } if (!isGoodSafehouse(target)) { TrackingLibrary.TrackingFlags flags; flags = new TrackingLibrary.TrackingFlags() .plus(TrackingLibrary.TrackingFlag.OPENONLY) .plus(TrackingLibrary.TrackingFlag.AREAONLY) .plus(TrackingLibrary.TrackingFlag.NOEMPTYGRIDS) .plus(TrackingLibrary.TrackingFlag.NOAIR) .plus(TrackingLibrary.TrackingFlag.NOWATER); List<Room> V = CMLib.tracking().getRadiantRooms(target, flags, 50 + (2 * getXLEVELLevel(mob))); Room R = null; int v = 0; for (; v < V.size(); v++) { R = (Room) V.get(v); if ((isGoodSafehouse(R)) && (!isLawHere(R))) break; } mob.tell("A place like this can't be a safehouse."); if ((isGoodSafehouse(R)) && (!isLawHere(R))) { V = CMLib.tracking() .findBastardTheBestWay( target, new XVector(R), flags, 50 + (2 * getXLEVELLevel(mob))); StringBuffer trail = new StringBuffer(""); int dir = CMLib.tracking().trackNextDirectionFromHere(V, target, true); while (target != R) { if ((dir < 0) || (dir >= Directions.NUM_DIRECTIONS()) || (target == null)) break; trail.append(Directions.getDirectionName(dir)); if (target.getRoomInDir(dir) != R) trail.append(", "); target = target.getRoomInDir(dir); dir = CMLib.tracking().trackNextDirectionFromHere(V, target, true); } if (target == R) mob.tell("You happen to know of one nearby though. Go: " + trail.toString()); } return false; } boolean success = proficiencyCheck(mob, 0, auto); CMMsg msg = CMClass.getMsg( mob, null, this, auto ? CMMsg.MASK_ALWAYS : CMMsg.MSG_DELICATE_HANDS_ACT, CMMsg.MSG_OK_VISUAL, CMMsg.MSG_OK_VISUAL, auto ? "" : "<S-NAME> hide(s) out from the law here."); if (!success) return beneficialVisualFizzle( mob, null, auto ? "" : "<S-NAME> attempt(s) hide out from the law here, but things are just too hot."); else if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); beneficialAffect(mob, target, asLevel, (CMProps.getIntVar(CMProps.SYSTEMI_TICKSPERMUDMONTH))); } return success; }
public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { String whom = CMParms.combine(commands, 0); int dirCode = Directions.getGoodDirectionCode(whom); if (!CMLib.flags().canHear(mob)) { mob.tell("You don't hear anything."); return false; } if (room != null) for (final Enumeration<Ability> a = room.effects(); a.hasMoreElements(); ) { final Ability A = a.nextElement(); if ((A.ID().equals(ID())) && (invoker() == mob)) A.unInvoke(); } room = null; if (dirCode < 0) room = mob.location(); else { if ((mob.location().getRoomInDir(dirCode) == null) || (mob.location().getExitInDir(dirCode) == null)) { mob.tell("Listen which direction?"); return false; } room = mob.location().getRoomInDir(dirCode); if ((room.domainType() & Room.INDOORS) == 0) { mob.tell("You can only listen indoors."); return false; } } if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; boolean success = false; CMMsg msg = CMClass.getMsg( mob, null, this, auto ? CMMsg.MSG_OK_ACTION : (CMMsg.MSG_DELICATE_SMALL_HANDS_ACT), CMMsg.MSG_OK_VISUAL, CMMsg.MSG_OK_VISUAL, "<S-NAME> listen(s)" + ((dirCode < 0) ? "" : " " + Directions.getDirectionName(dirCode)) + "."); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); success = proficiencyCheck(mob, 0, auto); int numberHeard = 0; int levelsHeard = 0; for (int i = 0; i < room.numInhabitants(); i++) { MOB inhab = room.fetchInhabitant(i); if ((inhab != null) && (!CMLib.flags().isSneaking(inhab)) && (!CMLib.flags().isHidden(inhab)) && (inhab != mob)) { numberHeard++; if (inhab.phyStats().level() > (mob.phyStats().level() + (2 * super.getXLEVELLevel(mob)))) levelsHeard += (inhab.phyStats().level() - (mob.phyStats().level() + (2 * super.getXLEVELLevel(mob)))); } } if ((success) && (numberHeard > 0)) { if (((proficiency() + (getXLEVELLevel(mob) * 10)) > (50 + levelsHeard)) || (room == mob.location())) { mob.tell("You definitely hear " + numberHeard + " creature(s)."); if (proficiency() > ((room == mob.location()) ? 50 : 75)) { sourceRoom = mob.location(); beneficialAffect(mob, room, asLevel, ((room == mob.location()) ? 0 : 10)); } } else mob.tell("You definitely hear something."); } else mob.tell("You don't hear anything."); } return success; }