示例#1
0
  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;
  }
示例#2
0
  @Override
  public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException {
    final String whatToOpen = CMParms.combine(commands, 1);
    if (whatToOpen.length() == 0) {
      mob.tell(L("Open what?"));
      return false;
    }
    Environmental openThis = null;
    final int dirCode = Directions.getGoodDirectionCode(whatToOpen);
    if (dirCode >= 0) openThis = mob.location().getExitInDir(dirCode);
    if (openThis == null)
      openThis =
          mob.location().fetchFromMOBRoomItemExit(mob, null, whatToOpen, Wearable.FILTER_ANY);

    if ((openThis == null) || (!CMLib.flags().canBeSeenBy(openThis, mob))) {
      mob.tell(L("You don't see '@x1' here.", whatToOpen));
      return false;
    }
    open(mob, openThis, whatToOpen, dirCode, false);
    return false;
  }
示例#3
0
  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;
  }
示例#4
0
  public boolean invoke(
      MOB mob, Vector commands, Environmental givenTarget, boolean auto, int asLevel) {
    if ((commands.size() < 1) && (givenTarget == null)) {
      mob.tell("Wizard Lock what?.");
      return false;
    }
    String targetName = CMParms.combine(commands, 0);

    Environmental target = null;
    int dirCode = Directions.getGoodDirectionCode(targetName);
    if (dirCode >= 0) target = mob.location().getExitInDir(dirCode);
    if (target == null)
      target = getTarget(mob, mob.location(), givenTarget, commands, Wearable.FILTER_ANY);
    if (target == null) return false;

    if ((!(target instanceof Container)) && (!(target instanceof Exit))) {
      mob.tell("You can't lock that.");
      return false;
    }

    if (target instanceof Container) {
      Container container = (Container) target;
      if ((!container.hasALid()) || (!container.hasALock())) {
        mob.tell("You can't lock that!");
        return false;
      }
    } else if (target instanceof Exit) {
      Exit exit = (Exit) target;
      if (!exit.hasADoor()) {
        mob.tell("You can't lock that!");
        return false;
      }
    }

    if (target.fetchEffect(this.ID()) != null) {
      mob.tell(target.name() + " is already magically locked!");
      return false;
    }

    if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false;

    boolean success = proficiencyCheck(mob, 0, auto);

    if (success) {
      CMMsg msg =
          CMClass.getMsg(
              mob,
              target,
              this,
              verbalCastCode(mob, target, auto),
              auto ? "" : "^S<S-NAME> point(s) <S-HIS-HER> finger at <T-NAMESELF>, incanting.^?");
      if (mob.location().okMessage(mob, msg)) {
        mob.location().send(mob, msg);
        if (target instanceof Exit) {
          Exit exit = (Exit) target;
          exit.setDoorsNLocks(
              exit.hasADoor(),
              false,
              exit.defaultsClosed(),
              exit.hasALock(),
              true,
              exit.defaultsLocked());
          Room R = mob.location();
          Room R2 = null;
          for (int d = Directions.NUM_DIRECTIONS() - 1; d >= 0; d--)
            if (R.getExitInDir(d) == target) {
              R2 = R.getRoomInDir(d);
              break;
            }
          if ((CMLib.law().doesOwnThisProperty(mob, R))
              || ((R2 != null) && (CMLib.law().doesOwnThisProperty(mob, R2)))) {
            target.addNonUninvokableEffect((Ability) copyOf());
            CMLib.database().DBUpdateExits(R);
          } else beneficialAffect(mob, target, asLevel, Integer.MAX_VALUE / 2);
          mob.location().show(mob, target, CMMsg.MSG_OK_VISUAL, "<T-NAME> look(s) shut tight!");
        } else if (target instanceof Container) {
          beneficialAffect(mob, target, asLevel, Integer.MAX_VALUE / 2);
          Container container = (Container) target;
          container.setLidsNLocks(container.hasALid(), false, container.hasALock(), true);
          mob.location().show(mob, target, CMMsg.MSG_OK_VISUAL, "<T-NAME> look(s) shut tight!");
        }
        Ability lock = target.fetchEffect(ID());
        if (lock != null) {
          lock.setMiscText(Integer.toString(mob.envStats().level()));
          if (target instanceof Exit) {
            Room R = mob.location();
            if (!CMLib.law().doesHavePriviledgesHere(mob, R))
              for (int a = 0; a < R.numEffects(); a++)
                if ((R.fetchEffect(a) instanceof LandTitle)
                    && (((LandTitle) R.fetchEffect(a)).landOwner().length() > 0))
                  lock.setMiscText(lock.text() + " MALICIOUS");
          }
        }
      }

    } else
      beneficialWordsFizzle(
          mob, target, "<S-NAME> point(s) at <T-NAMESELF>, incanting, but nothing happens.");

    // return whether it worked
    return success;
  }
示例#5
0
  @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;
  }
示例#6
0
  public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) {
    boolean saveTheTrap = false;
    if ((commands.size() > 0) && (commands.lastElement() instanceof Boolean)) {
      saveTheTrap = ((Boolean) commands.lastElement()).booleanValue();
      commands.removeElementAt(commands.size() - 1);
    }
    String whatTounlock = CMParms.combine(commands, 0);
    Physical unlockThis = null;
    int dirCode = Directions.getGoodDirectionCode(whatTounlock);
    Room R = mob.location();
    Room nextRoom = null;
    if (dirCode >= 0) {
      nextRoom = R.getRoomInDir(dirCode);
      unlockThis = R.getExitInDir(dirCode);
    }
    if ((unlockThis == null)
        && (whatTounlock.equalsIgnoreCase("room") || whatTounlock.equalsIgnoreCase("here")))
      unlockThis = R;
    if (unlockThis == null)
      unlockThis = getAnyTarget(mob, commands, givenTarget, Wearable.FILTER_UNWORNONLY);
    if (unlockThis == null) return false;
    int oldProficiency = proficiency();

    if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false;

    boolean success =
        proficiencyCheck(
            mob,
            +(((mob.phyStats().level() + (getXLEVELLevel(mob) * 2)) - unlockThis.phyStats().level())
                * 3),
            auto);
    Vector<Physical> permSetV = new Vector<Physical>();
    Trap theTrap = CMLib.utensils().fetchMyTrap(unlockThis);
    if (theTrap != null) permSetV.addElement(unlockThis);
    Trap opTrap = null;
    boolean permanent = false;
    if ((unlockThis instanceof Room) && (CMLib.law().doesOwnThisProperty(mob, ((Room) unlockThis))))
      permanent = true;
    else if (unlockThis instanceof Exit) {
      Room R2 = null;
      if (dirCode < 0)
        for (int d = Directions.NUM_DIRECTIONS() - 1; d >= 0; d--)
          if (R.getExitInDir(d) == unlockThis) {
            dirCode = d;
            R2 = R.getRoomInDir(d);
            break;
          }
      if ((CMLib.law().doesOwnThisProperty(mob, R))
          || ((R2 != null) && (CMLib.law().doesOwnThisProperty(mob, R2)))) permanent = true;
      if (dirCode >= 0) {
        Exit exit = R.getReverseExit(dirCode);
        if (exit != null) opTrap = CMLib.utensils().fetchMyTrap(exit);
        if (opTrap != null) permSetV.addElement(exit);
        Trap roomTrap = null;
        if (nextRoom != null) roomTrap = CMLib.utensils().fetchMyTrap(nextRoom);
        if (roomTrap != null) permSetV.addElement(nextRoom);
        if ((theTrap != null) && (theTrap.disabled()) && (roomTrap != null)) {
          opTrap = null;
          unlockThis = nextRoom;
          theTrap = roomTrap;
        }
      }
    }
    if (unlockThis == null) {
      mob.tell("You can't seem to remember how this works.");
      return false;
    }
    CMMsg msg =
        CMClass.getMsg(
            mob,
            unlockThis,
            this,
            auto ? CMMsg.MSG_OK_ACTION : CMMsg.MSG_DELICATE_HANDS_ACT,
            CMMsg.MSG_DELICATE_HANDS_ACT,
            CMMsg.MSG_OK_ACTION,
            auto
                ? unlockThis.name() + " begins to glow."
                : "<S-NAME> attempt(s) to safely deactivate a trap on " + unlockThis.name() + ".");
    if ((success) && (!lastDone.contains("" + unlockThis))) {
      while (lastDone.size() > 40) lastDone.removeElementAt(0);
      lastDone.addElement("" + unlockThis);
      msg.setValue(1);
    } else msg.setValue(0);
    if (R.okMessage(mob, msg)) {
      R.send(mob, msg);
      if ((unlockThis == lastChecked) && ((theTrap == null) || (theTrap.disabled())))
        setProficiency(oldProficiency);
      if (success) {
        if (theTrap != null) {
          theTrap.disable();
          if (saveTheTrap) commands.addElement(theTrap);
        }
        if (opTrap != null) {
          opTrap.disable();
          if (saveTheTrap) commands.addElement(opTrap);
        }
        if (permanent) {
          for (int i = 0; i < permSetV.size(); i++) {
            if (theTrap != null) {
              theTrap.unInvoke();
              ((Physical) permSetV.elementAt(i)).delEffect(theTrap);
            }
            if (opTrap != null) {
              opTrap.unInvoke();
              ((Physical) permSetV.elementAt(i)).delEffect(opTrap);
            }
          }
          CMLib.database().DBUpdateRoom(R);
          CMLib.database().DBUpdateExits(R);
        }
      }
      if ((!auto) && (!saveTheTrap)) mob.tell("You have completed your attempt.");
      lastChecked = unlockThis;
    }

    return success;
  }
示例#7
0
  public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException {
    String whatToOpen = CMParms.combine(commands, 1);
    if (whatToOpen.length() == 0) {
      mob.tell("Open what?");
      return false;
    }
    Environmental openThis = null;
    int dirCode = Directions.getGoodDirectionCode(whatToOpen);
    if (dirCode >= 0) openThis = mob.location().getExitInDir(dirCode);
    if (openThis == null)
      openThis = mob.location().fetchFromMOBRoomItemExit(mob, null, whatToOpen, Item.WORNREQ_ANY);

    if ((openThis == null) || (!CMLib.flags().canBeSeenBy(openThis, mob))) {
      mob.tell("You don't see '" + whatToOpen + "' here.");
      return false;
    }
    String openWord = (!(openThis instanceof Exit)) ? "open" : ((Exit) openThis).openWord();
    CMMsg msg =
        CMClass.getMsg(
            mob,
            openThis,
            null,
            CMMsg.MSG_OPEN,
            ("<S-NAME> " + openWord + "(s) <T-NAMESELF>.") + CMProps.msp("dooropen.wav", 10));
    if (openThis instanceof Exit) {
      boolean open = ((Exit) openThis).isOpen();
      if ((mob.location().okMessage(msg.source(), msg)) && (!open)) {
        mob.location().send(msg.source(), msg);

        if (dirCode < 0)
          for (int d = Directions.NUM_DIRECTIONS() - 1; d >= 0; d--)
            if (mob.location().getExitInDir(d) == openThis) {
              dirCode = d;
              break;
            }
        if ((dirCode >= 0) && (mob.location().getRoomInDir(dirCode) != null)) {
          Room opR = mob.location().getRoomInDir(dirCode);
          Exit opE = mob.location().getPairedExit(dirCode);
          if (opE != null) {
            CMMsg altMsg =
                CMClass.getMsg(
                    msg.source(),
                    opE,
                    msg.tool(),
                    msg.sourceCode(),
                    null,
                    msg.targetCode(),
                    null,
                    msg.othersCode(),
                    null);
            opE.executeMsg(msg.source(), altMsg);
          }
          int opCode = Directions.getOpDirectionCode(dirCode);
          if ((opE != null) && (opE.isOpen()) && (((Exit) openThis).isOpen()))
            opR.showHappens(
                CMMsg.MSG_OK_ACTION,
                opE.name() + " " + Directions.getInDirectionName(opCode) + " opens.");
        }
      }
    } else if (mob.location().okMessage(mob, msg)) mob.location().send(mob, msg);
    return false;
  }
示例#8
0
  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;
  }