Esempio n. 1
0
  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;
  }