public boolean isLaw(MOB mob) { if (mob == null) return false; if (affected instanceof Room) { LegalBehavior law = CMLib.law().getLegalBehavior((Room) affected); if (law != null) { Area A = CMLib.law().getLegalObject((Room) affected); if (law.isAnyOfficer(A, mob) || law.isJudge(A, mob)) return true; } } return false; }
public boolean isLawHere(Room R) { if (R != null) { LegalBehavior law = CMLib.law().getLegalBehavior(R); if (law != null) { Area A = CMLib.law().getLegalObject(R); MOB M = null; for (int r = 0; r < R.numInhabitants(); r++) { M = R.fetchInhabitant(r); if ((M != null) && (law.isAnyOfficer(A, M) || law.isJudge(A, M))) return true; } } } return false; }
@Override public boolean invoke( MOB mob, List<String> commands, Physical givenTarget, boolean auto, int asLevel) { if (commands.size() < 1) { mob.tell(L("Pay Off Whom?")); return false; } final MOB target = this.getTarget(mob, commands, givenTarget); if (target == null) return false; if ((target.charStats().getStat(CharStats.STAT_INTELLIGENCE) < 3) || (!target.isMonster())) { mob.tell(L("You can't pay off @x1.", target.name(mob))); return false; } final LegalBehavior B = CMLib.law().getLegalBehavior(mob.location()); final Area A = (B == null) ? null : CMLib.law().getLegalObject(mob.location()); if ((A == null) || (B == null)) { mob.tell(L("There's no point in paying off @x1.", target.name(mob))); return false; } boolean isJudge = B.isJudge(A, target); if ((!isJudge) && (!B.isAnyOfficer(A, target))) { mob.tell(L("Paying off @x1 won't help you.", target.name(mob))); return false; } final List<LegalWarrant> warrants = B.getWarrantsOf(A, mob); if ((warrants == null) || (warrants.size() == 0)) { mob.tell(L("Pay off @x1? Why? You aren't in any trouble.", target.name(mob))); return false; } if (target.fetchEffect(ID()) != null) { mob.tell(L("@x1 is already paid off.", target.name(mob))); return false; } if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; double amountRequired = CMLib.beanCounter().getTotalAbsoluteNativeValue(target) + ((double) ((100l - ((mob.charStats().getStat(CharStats.STAT_CHARISMA) + (2l * getXLEVELLevel(mob))) * 2))) * target.phyStats().level()); if (isJudge) amountRequired *= 2; final String currency = CMLib.beanCounter().getCurrency(target); boolean success = proficiencyCheck(mob, 0, auto); if ((!success) || (CMLib.beanCounter().getTotalAbsoluteValue(mob, currency) < amountRequired)) { final CMMsg msg = CMClass.getMsg( mob, target, this, CMMsg.MSG_SPEAK, L( "^T<S-NAME> attempt(s) to pay off <T-NAMESELF> to '@x1', but no deal is reached.^?", CMParms.combine(commands, 0))); if (mob.location().okMessage(mob, msg)) mob.location().send(mob, msg); if (CMLib.beanCounter().getTotalAbsoluteValue(mob, currency) < amountRequired) { final String costWords = CMLib.beanCounter().nameCurrencyShort(currency, amountRequired); mob.tell(L("@x1 requires @x2 to do this.", target.charStats().HeShe(), costWords)); } success = false; } else { final String costWords = CMLib.beanCounter().nameCurrencyShort(target, amountRequired); final CMMsg msg = CMClass.getMsg( mob, target, this, CMMsg.MSG_THIEF_ACT, L("^T<S-NAME> pay(s) off <T-NAMESELF>.^?", CMParms.combine(commands, 0), costWords)); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); CMLib.beanCounter().subtractMoney(mob, currency, amountRequired); CMLib.beanCounter().addMoney(mob, currency, amountRequired); if (isJudge) { for (LegalWarrant W : warrants) { if (W.punishment() > 0) W.setPunishment(W.punishment() - 1); } } else { clearWarrants(target, mob, mob.location(), A, B); super.beneficialAffect(mob, target, asLevel, 0); } } target.recoverPhyStats(); } return success; }