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; }