예제 #1
0
  public void removeMyAffectsFrom(Physical P) {
    if (P == null) return;

    int x = 0;
    final Vector<Ability> eff = new Vector<Ability>();
    Ability thisAffect = null;
    for (x = 0; x < P.numEffects(); x++) // personal
    {
      thisAffect = P.fetchEffect(x);
      if (thisAffect != null) eff.addElement(thisAffect);
    }
    if (eff.size() > 0) {
      final Map<String, String> h = makeMySpellsH(getMySpellsV());
      if (unrevocableSpells != null) {
        for (int v = unrevocableSpells.size() - 1; v >= 0; v--) {
          thisAffect = unrevocableSpells.get(v);
          if (h.containsKey(thisAffect.ID())) P.delEffect(thisAffect);
        }
      } else
        for (x = 0; x < eff.size(); x++) {
          thisAffect = eff.elementAt(x);
          final String ID = h.get(thisAffect.ID());
          if ((ID != null) && (thisAffect.invoker() == getInvokerMOB(P, P))) {
            thisAffect.unInvoke();
            if ((!uninvocable) && (!thisAffect.canBeUninvoked())) P.delEffect(thisAffect);
          }
        }
      unrevocableSpells = null;
    }
  }
예제 #2
0
  @Override
  public boolean invoke(
      MOB mob, List<String> commands, Physical givenTarget, boolean auto, int asLevel) {
    if (commands.size() < 1) {
      mob.tell(
          L(
              "You must specify an item to fence, and possibly a ShopKeeper (unless it is implied)."));
      return false;
    }

    commands.add(0, "SELL"); // will be instantly deleted by parseshopkeeper
    final Environmental shopkeeper =
        CMLib.english().parseShopkeeper(mob, commands, L("Fence what to whom?"));
    if (shopkeeper == null) return false;
    if (commands.size() == 0) {
      mob.tell(L("Fence what?"));
      return false;
    }

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

    final boolean success = proficiencyCheck(mob, 0, auto);
    if (success) {
      final CMMsg msg =
          CMClass.getMsg(
              mob,
              shopkeeper,
              this,
              CMMsg.MSG_SPEAK,
              auto ? "" : L("<S-NAME> fence(s) stolen loot to <T-NAMESELF>."));
      if (mob.location().okMessage(mob, msg)) {
        mob.location().send(mob, msg);
        invoker = mob;
        addBackMap.clear();
        mob.addEffect(this);
        mob.recoverCharStats();
        commands.add(0, CMStrings.capitalizeAndLower("SELL"));
        mob.doCommand(commands, MUDCmdProcessor.METAFLAG_FORCED);
        commands.add(shopkeeper.name());
        mob.delEffect(this);
        for (Item I : addBackMap.keySet()) {
          if (mob.isMine(I)) {
            I.addEffect(addBackMap.get(I));
          }
        }
        addBackMap.clear();
        mob.recoverCharStats();
      }
    } else
      beneficialWordsFizzle(
          mob,
          shopkeeper,
          L(
              "<S-NAME> attempt(s) to fence stolen loot to <T-NAMESELF>, but make(s) <T-HIM-HER> too nervous."));

    // return whether it worked
    return success;
  }
예제 #3
0
 @Override
 public void adjustAbilityAdjustment(String ableID, int newValue) {
   Map<String, Integer> prof = this.profAdj;
   if (prof == null) {
     prof = new TreeMap<String, Integer>();
     this.profAdj = prof;
   }
   prof.put(ableID, Integer.valueOf(newValue));
 }
예제 #4
0
  @Override
  public int getAbilityAdjustment(String ableID) {

    final Map<String, Integer> prof = this.profAdj;
    if (prof == null) return 0;
    final Integer value = prof.get(ableID);
    if (value == null) return 0;
    return value.intValue();
  }
예제 #5
0
  protected final Map<String, Double> getRatesFor(final Environmental affecting, String currency) {
    if (spaceMaxCut <= 0.0) return rates;
    currency = currency.toUpperCase();
    if (rates.containsKey(currency)) return rates;
    String myCurrency = CMLib.beanCounter().getCurrency(affecting);
    if (myCurrency.equalsIgnoreCase(currency)) {
      rates.put(currency, Double.valueOf(cut));
      return rates;
    }
    SpaceObject homeO = CMLib.map().getSpaceObject(affecting, false);
    if (homeO != null) {
      myCurrency = CMLib.beanCounter().getCurrency(homeO);
      if (myCurrency.equalsIgnoreCase(currency)) {
        rates.put(currency, Double.valueOf(cut));
        return rates;
      }
    } else {
      // no space object, wtf? this SHOULD fail
      if (!complainedAboutSpaceError) {
        complainedAboutSpaceError = true;
        Log.errOut(
            "MoneyChanger", affecting.Name() + " is not on a planet, so space rates cannot apply!");
      }
      return rates;
    }
    for (Enumeration<Area> a = CMLib.map().spaceAreas(); a.hasMoreElements(); ) {
      Area A = a.nextElement();
      if ((A != null) && (A != homeO)) {
        myCurrency = CMLib.beanCounter().getCurrency(A);
        if (myCurrency.equalsIgnoreCase(currency)) {
          SpaceObject oA = (SpaceObject) A;
          long distance = CMLib.map().getDistanceFrom(homeO, oA);
          if ((distance < 0) || (distance > spaceMaxDistance)) {
            rates.put(currency, Double.valueOf(spaceMaxCut));
          } else {
            double pct = CMath.div(distance, spaceMaxDistance);
            double amt = spaceMaxCut * pct;
            if (amt < cut) amt = cut;
            rates.put(currency, Double.valueOf(cut));
          }
          return rates;
        }
      }
    }

    return rates;
  }
예제 #6
0
 @Override
 public void setParms(String newParm) {
   super.setParms(newParm);
   rates.clear();
   cut = 0.05;
   spaceMaxCut = 0.0;
   spaceMaxDistance = SpaceObject.Distance.GalaxyRadius.dm;
   newParm = newParm.toUpperCase();
   int x = newParm.indexOf('=');
   while (x > 0) {
     int lastSp = newParm.lastIndexOf(' ', x);
     if (lastSp < 0) lastSp = 0;
     if ((lastSp >= 0) && (lastSp < x - 1) && (Character.isLetter(newParm.charAt(x - 1)))) {
       String parm = newParm.substring(lastSp, x).trim().toUpperCase();
       while ((x < newParm.length()) && (newParm.charAt(x) != '=')) x++;
       if (x < newParm.length()) {
         while ((x < newParm.length())
             && (!Character.isDigit(newParm.charAt(x)))
             && (newParm.charAt(x) != '.')) x++;
         if (x < newParm.length()) {
           newParm = newParm.substring(x);
           x = 0;
           while ((x < newParm.length())
               && ((Character.isDigit(newParm.charAt(x))) || (newParm.charAt(x) == '.'))) x++;
           double val = CMath.s_double(newParm.substring(0, x));
           if (newParm.substring(0, x).indexOf('.') < 0)
             val = CMath.s_long(newParm.substring(0, x));
           if (x < newParm.length()) newParm = newParm.substring(x + 1);
           else newParm = "";
           if (parm.equalsIgnoreCase("default")) parm = "";
           if (parm.equalsIgnoreCase("spacemaxcut")) spaceMaxCut = val / 100.0;
           else if (parm.equalsIgnoreCase("spacemaxdistance"))
             spaceMaxDistance =
                 Math.round(CMath.mul(SpaceObject.Distance.GalaxyRadius.dm, val / 100.0));
           else if (parm.equalsIgnoreCase("cut")) cut = val / 100.0;
           else rates.put(parm, Double.valueOf(val / 100.0));
         }
       }
     }
     x = newParm.indexOf('=');
   }
 }
예제 #7
0
 @Override
 public boolean okMessage(Environmental myHost, CMMsg msg) {
   if ((msg.source() == affected)
       && (msg.targetMinor() == CMMsg.TYP_SELL)
       && (msg.tool() instanceof Item)) {
     Ability A = ((Item) msg.tool()).fetchEffect("Prop_PrivateProperty");
     if (A != null) {
       ((Item) msg.tool()).delEffect(A);
       addBackMap.put((Item) msg.tool(), A);
     }
   }
   return super.okMessage(myHost, msg);
 }
예제 #8
0
 protected double getMyCut(final Environmental affecting, final String currency) {
   final Map<String, Double> rates = getRatesFor(affecting, currency);
   if ((rates.size() > 0) && (rates.containsKey(currency.toUpperCase())))
     return rates.get(currency.toUpperCase()).doubleValue();
   return cut;
 }
예제 #9
0
 protected boolean doIExchangeThisCurrency(final Environmental affecting, final String currency) {
   final Map<String, Double> rates = getRatesFor(affecting, currency);
   return ((rates.size() == 0) || (rates.containsKey(currency.toUpperCase())));
 }
예제 #10
0
 protected String getDeviation(int val, Map<String, String> vals, String key) {
   if (!vals.containsKey(key)) return " - ";
   final int val2 = CMath.s_int(vals.get(key));
   return getDeviation(val, val2);
 }