Пример #1
0
 public boolean supportsMending(Physical item) {
   if (!(item instanceof MOB)) return false;
   MOB caster = CMClass.getFactoryMOB();
   caster.basePhyStats().setLevel(CMProps.getIntVar(CMProps.SYSTEMI_LASTPLAYERLEVEL));
   caster.phyStats().setLevel(CMProps.getIntVar(CMProps.SYSTEMI_LASTPLAYERLEVEL));
   boolean canMend = returnOffensiveAffects(caster, item).size() > 0;
   caster.destroy();
   return canMend;
 }
Пример #2
0
 public double combatCastingTime(final MOB mob, final List<String> cmds) {
   return CMProps.getCombatActionSkillCost(
       ID(), CMath.div(CMProps.getIntVar(CMProps.SYSTEMI_DEFCOMABLETIME), 50.0));
 }
Пример #3
0
  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;
  }
Пример #4
0
  public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) {
    MOB target = mob;
    if ((auto) && (givenTarget != null) && (givenTarget instanceof MOB)) target = (MOB) givenTarget;
    if (target.fetchEffect(ID()) != null) {
      mob.tell(target, null, null, "<S-NAME> <S-IS-ARE> already squatting.");
      return false;
    }
    if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false;

    if (CMLib.law().doesHavePriviledgesHere(mob, mob.location())) {
      mob.tell("This is your place already!");
      return false;
    }
    LandTitle T = CMLib.law().getLandTitle(mob.location());
    boolean confirmed = false;
    for (final Enumeration<Ability> a = mob.location().effects(); a.hasMoreElements(); ) {
      final Ability A = a.nextElement();
      if (A == T) confirmed = true;
    }
    if (T == null) {
      mob.tell("This property is not available for sale, and cannot be squatted upon.");
      return false;
    }
    MOB warnMOB = null;
    if (T.landOwner().length() > 0) {
      Clan C = CMLib.clans().getClan(T.landOwner());
      if (C == null) {
        MOB M = CMLib.players().getLoadPlayer(T.landOwner());
        if (M != null) warnMOB = M;
      } else {
        for (Session S : CMLib.sessions().localOnlineIterable()) {
          if ((S.mob() != null) && (S.mob() != mob) && (S.mob().getClanID().equals(C.clanID())))
            warnMOB = S.mob();
        }
      }
      if ((warnMOB == null) || (!CMLib.flags().isInTheGame(warnMOB, true))) {
        mob.tell("The owners must be in the game for you to begin squatting.");
        return false;
      }
    }
    if (!confirmed) {
      mob.tell("You cannot squat on an area for sale.");
      return false;
    }
    if (!CMLib.flags().isSitting(mob)) {
      mob.tell("You must be sitting!");
      return false;
    }

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

    CMMsg msg =
        CMClass.getMsg(
            mob,
            null,
            this,
            auto ? CMMsg.MASK_ALWAYS : CMMsg.MSG_DELICATE_SMALL_HANDS_ACT,
            CMMsg.MSG_DELICATE_SMALL_HANDS_ACT,
            CMMsg.MSG_DELICATE_SMALL_HANDS_ACT,
            auto ? "" : "<S-NAME> start(s) squatting.");
    if (!success)
      return beneficialVisualFizzle(
          mob, null, auto ? "" : "<S-NAME> can't seem to get comfortable here.");
    else if (mob.location().okMessage(mob, msg)) {
      mob.location().send(mob, msg);
      failed = false;
      room = mob.location();
      title = T;
      beneficialAffect(mob, target, asLevel, (CMProps.getIntVar(CMProps.SYSTEMI_TICKSPERMUDMONTH)));
      if (warnMOB != null)
        warnMOB.tell(
            "You've heard a rumor that someone is squatting on " + T.landOwner() + "'s property.");
    }
    return success;
  }