@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (!(affected instanceof MOB)) return true; final MOB mob = (MOB) affected; // when this spell is on a MOBs Affected list, // it should consistantly prevent the mob // from trying to do ANYTHING except sleep if ((msg.amITarget(mob)) && (CMath.bset(msg.targetMajor(), CMMsg.MASK_MALICIOUS)) && (msg.source() == mob.amFollowing())) unInvoke(); if ((msg.amISource(mob)) && (CMath.bset(msg.targetMajor(), CMMsg.MASK_MALICIOUS)) && (msg.target() == mob.amFollowing())) { mob.tell(L("You like @x1 too much.", mob.amFollowing().charStats().himher())); return false; } else if ((msg.amISource(mob)) && (!mob.isMonster()) && (msg.target() instanceof Room) && ((msg.targetMinor() == CMMsg.TYP_LEAVE) || (msg.sourceMinor() == CMMsg.TYP_RECALL)) && (mob.amFollowing() != null) && (((Room) msg.target()).isInhabitant(mob.amFollowing()))) { mob.tell(L("You don't want to leave your friend.")); return false; } else if ((msg.amISource(mob)) && (mob.amFollowing() != null) && (msg.sourceMinor() == CMMsg.TYP_NOFOLLOW)) { mob.tell(L("You like @x1 too much.", mob.amFollowing().name())); return false; } return super.okMessage(myHost, msg); }
@Override public void executeMsg(final Environmental myHost, final CMMsg msg) { if ((msg.amITarget(this) || (msg.targetMinor() == CMMsg.TYP_ADVANCE) || (msg.targetMinor() == CMMsg.TYP_RETREAT)) && (!msg.source().isMonster()) && (msg.source().curState().getHitPoints() < msg.source().maxState().getHitPoints()) && (CMLib.dice().rollPercentage() == 1) && (CMLib.dice().rollPercentage() == 1) && (!CMSecurity.isDisabled(CMSecurity.DisFlag.AUTODISEASE))) { Ability A = null; if (CMLib.dice().rollPercentage() > 50) A = CMClass.getAbility("Disease_Chlamydia"); else A = CMClass.getAbility("Disease_Malaria"); if ((A != null) && (msg.source().fetchEffect(A.ID()) == null)) A.invoke(msg.source(), msg.source(), true, 0); } if (msg.amITarget(this) && (msg.targetMinor() == CMMsg.TYP_DRINK)) { final MOB mob = msg.source(); final boolean thirsty = mob.curState().getThirst() <= 0; final boolean full = !mob.curState().adjThirst(thirstQuenched(), mob.maxState().maxThirst(mob.baseWeight())); if (thirsty) mob.tell(L("You are no longer thirsty.")); else if (full) mob.tell(L("You have drunk all you can.")); if (CMLib.dice().rollPercentage() < 10) { Ability A = CMClass.getAbility("Disease_Malaria"); if ((A != null) && (msg.source().fetchEffect(A.ID()) == null)) A.invoke(msg.source(), msg.source(), true, 0); } } super.executeMsg(myHost, msg); }
@Override public void executeMsg(final Environmental myHost, final CMMsg msg) { super.executeMsg(myHost, msg); if (affected == null) { this.unInvoke(); return; } if (affected instanceof Item) { final Item body = (Item) affected; if (msg.amITarget(body)) { if ((msg.targetMinor() == CMMsg.TYP_OPEN) || (msg.targetMinor() == CMMsg.TYP_GIVE) || (msg.targetMinor() == CMMsg.TYP_GET) || (msg.targetMinor() == CMMsg.TYP_JUSTICE) || (msg.targetMinor() == CMMsg.TYP_GENERAL) || (msg.targetMinor() == CMMsg.TYP_LOCK) || (msg.targetMinor() == CMMsg.TYP_PULL) || (msg.targetMinor() == CMMsg.TYP_PUSH) || (msg.targetMinor() == CMMsg.TYP_UNLOCK)) { this.spring(msg.source()); return; } } } }
@Override public void executeMsg(Environmental affecting, CMMsg msg) { super.executeMsg(affecting, msg); if (msg.amITarget(affecting)) { boolean activated = false; if (affecting instanceof MOB) { if ((msg.targetMajor(CMMsg.MASK_MALICIOUS)) && (!msg.source().isMonster())) activated = true; } else if ((affecting instanceof Food) || (affecting instanceof Drink)) { if ((msg.targetMinor() == CMMsg.TYP_EAT) || (msg.targetMinor() == CMMsg.TYP_DRINK)) activated = true; } else if ((affecting instanceof Armor) || (affecting instanceof Weapon)) { if ((msg.targetMinor() == CMMsg.TYP_WEAR) || (msg.targetMinor() == CMMsg.TYP_HOLD) || (msg.targetMinor() == CMMsg.TYP_WIELD)) activated = true; } else if (affecting instanceof Item) { if ((msg.targetMinor() == CMMsg.TYP_GET) || (msg.targetMinor() == CMMsg.TYP_PUSH) || (msg.targetMinor() == CMMsg.TYP_PULL)) activated = true; } else activated = true; if (activated) { synchronized (killTrigger) { killTrigger[0] = true; if (!CMLib.threads().isTicking(this, Tickable.TICKID_MISCELLANEOUS)) CMLib.threads().startTickDown(this, Tickable.TICKID_MISCELLANEOUS, 500, 1); } } } }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (!super.okMessage(myHost, msg)) return false; final MOB mob = msg.source(); if (mob.location() == null) return true; if (msg.amITarget(this)) switch (msg.targetMinor()) { case CMMsg.TYP_HOLD: case CMMsg.TYP_WEAR: case CMMsg.TYP_WIELD: case CMMsg.TYP_GET: if ((!msg.source().charStats().getCurrentClass().ID().equals("Paladin")) || (!CMLib.flags().isGood(msg.source()))) { unWear(); mob.location() .show( mob, null, CMMsg.MSG_OK_ACTION, L("@x1 flashes and flies out of <S-HIS-HER> hands!", name())); if (msg.source().isMine(this)) CMLib.commands().postDrop(msg.source(), this, true, false, false); return false; } break; default: break; } return true; }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if ((affected != null) && (((msg.target() instanceof Room) && (msg.targetMinor() == CMMsg.TYP_ENTER)) || ((msg.target() instanceof Rideable) && (msg.targetMinor() == CMMsg.TYP_SIT))) && ((msg.amITarget(affected)) || (msg.tool() == affected) || (affected instanceof Area)) && (!CMLib.flags().isFalling(msg.source()))) { final HashSet<MOB> H = new HashSet<MOB>(); if (noFollow) H.add(msg.source()); else { msg.source().getGroupMembers(H); int hsize = 0; while (hsize != H.size()) { hsize = H.size(); final HashSet H2 = (HashSet) H.clone(); for (final Iterator e = H2.iterator(); e.hasNext(); ) { final Object O = e.next(); if (O instanceof MOB) ((MOB) O).getRideBuddies(H); } } } for (final Object O : H) { if ((!(O instanceof MOB)) || (passesMuster((MOB) O))) return super.okMessage(myHost, msg); } msg.source().tell(L("You are not allowed in there.")); return false; } return super.okMessage(myHost, msg); }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if ((myHost != null) && (myHost instanceof MOB) && (msg.amISource((MOB) myHost))) { if (((msg.targetMinor() == CMMsg.TYP_LEAVE) || (msg.sourceMinor() == CMMsg.TYP_ADVANCE) || (msg.sourceMinor() == CMMsg.TYP_RETREAT) || (msg.sourceMinor() == CMMsg.TYP_RECALL))) { msg.source().tell(L("You can't really go anywhere -- you're a rock!")); return false; } } else if (((msg.targetMajor() & CMMsg.MASK_MALICIOUS) > 0) && (myHost instanceof MOB) && (msg.amITarget(myHost)) && (!CMath.bset(msg.sourceMajor(), CMMsg.MASK_ALWAYS))) { final MOB target = (MOB) msg.target(); if ((!target.isInCombat()) && (msg.source().isMonster()) && (msg.source().location() == target.location()) && (msg.source().getVictim() != target)) { msg.source().tell(L("Attack a rock?!")); if (target.getVictim() == msg.source()) { target.makePeace(); target.setVictim(null); } return false; } } return super.okMessage(myHost, msg); }
@Override public void executeMsg(final Environmental myHost, final CMMsg msg) { if (msg.amITarget(this)) { final MOB mob = msg.source(); switch (msg.targetMinor()) { case CMMsg.TYP_GET: case CMMsg.TYP_REMOVE: { unWear(); setContainer(null); if (!mob.isMine(this)) { mob.setQuestPoint(mob.getQuestPoint() + 1); CMLib.players().bumpPrideStat(mob, PrideStat.QUESTPOINTS_EARNED, 1); } if (!CMath.bset(msg.targetMajor(), CMMsg.MASK_OPTIMIZE)) mob.location().recoverRoomStats(); destroy(); return; } default: break; } } super.executeMsg(myHost, msg); }
@Override public void executeMsg(final Environmental myHost, final CMMsg msg) { super.executeMsg(myHost, msg); if (msg.amITarget(this) && (msg.targetMinor() == CMMsg.TYP_DRINK)) { final MOB mob = msg.source(); final boolean thirsty = mob.curState().getThirst() <= 0; final boolean full = !mob.curState().adjThirst(thirstQuenched(), mob.maxState().maxThirst(mob.baseWeight())); if (thirsty) mob.tell(L("You are no longer thirsty.")); else if (full) mob.tell(L("You have drunk all you can.")); } else if ((msg.tool() == this) && (msg.targetMinor() == CMMsg.TYP_FILL) && (msg.target() instanceof Container) && (((Container) msg.target()).capacity() > 0)) { final Container container = (Container) msg.target(); final Item I = CMClass.getItem("GenLiquidResource"); I.setName(L("some milk")); I.setDisplayText(L("some milk has been left here.")); I.setDescription(L("It looks like milk")); I.setMaterial(RawMaterial.RESOURCE_MILK); I.setBaseValue(RawMaterial.CODES.VALUE(RawMaterial.RESOURCE_MILK)); I.basePhyStats().setWeight(1); CMLib.materials().addEffectsToResource(I); I.recoverPhyStats(); I.setContainer(container); if (container.owner() != null) if (container.owner() instanceof MOB) ((MOB) container.owner()).addItem(I); else if (container.owner() instanceof Room) ((Room) container.owner()).addItem(I, ItemPossessor.Expire.Resource); } }
public boolean okMessage(Environmental myHost, CMMsg msg) { if (affected == null) return true; if (!super.okMessage(myHost, msg)) return false; MOB mob = msg.source(); if (((!msg.amITarget(affected)) && (msg.tool() != affected)) || (msg.source() == invoker()) || (CMLib.law().doesHavePriviledgesHere(mob, msg.source().location())) && (text().toUpperCase().indexOf("MALICIOUS") < 0)) return true; switch (msg.targetMinor()) { case CMMsg.TYP_OPEN: mob.tell(affected.name() + " appears to be magically locked."); return false; case CMMsg.TYP_UNLOCK: mob.tell(affected.name() + " appears to be magically locked."); return false; case CMMsg.TYP_JUSTICE: if (!CMath.bset(msg.targetMajor(), CMMsg.MASK_DELICATE)) return true; case CMMsg.TYP_DELICATE_HANDS_ACT: mob.tell(affected.name() + " appears to be magically protected."); return false; default: break; } return true; }
@Override public void executeMsg(Environmental affecting, CMMsg msg) { super.executeMsg(affecting, msg); final MOB source = msg.source(); if (!canFreelyBehaveNormal(affecting)) return; final MOB observer = (MOB) affecting; if ((source != observer) && (msg.amITarget(observer)) && (msg.targetMinor() == CMMsg.TYP_GIVE) && (msg.tool() instanceof Coins)) { if ((CMLib.flags().canBeSeenBy(source, observer)) && (CMLib.flags().canBeSeenBy(observer, source))) { double value = ((Coins) msg.tool()).getTotalValue(); final String currency = ((Coins) msg.tool()).getCurrency().toUpperCase(); double takeCut = getMyCut(affecting, currency); double amountToTake = CMLib.beanCounter().abbreviatedRePrice(observer, value * takeCut); if ((amountToTake > 0.0) && (amountToTake < CMLib.beanCounter() .getLowestDenomination(CMLib.beanCounter().getCurrency(observer)))) amountToTake = CMLib.beanCounter().getLowestDenomination(CMLib.beanCounter().getCurrency(observer)); value -= amountToTake; observer.recoverPhyStats(); final Coins C = CMLib.beanCounter().makeBestCurrency(observer, value); if ((value > 0.0) && (C != null)) { // this message will actually end up triggering the hand-over. final CMMsg newMsg = CMClass.getMsg( observer, source, C, CMMsg.MSG_SPEAK, L("^T<S-NAME> say(s) 'Thank you for your business' to <T-NAMESELF>.^?")); C.setOwner(observer); final long num = C.getNumberOfCoins(); final String curr = C.getCurrency(); final double denom = C.getDenomination(); C.destroy(); C.setNumberOfCoins(num); C.setCurrency(curr); C.setDenomination(denom); msg.addTrailerMsg(newMsg); } else CMLib.commands().postSay(observer, source, L("Gee, thanks. :)"), true, false); ((Coins) msg.tool()).destroy(); } else if (!CMLib.flags().canBeSeenBy(source, observer)) CMLib.commands() .postSay(observer, null, L("Wha? Where did this come from? Cool!"), true, false); } else if ((msg.source() == observer) && (msg.target() instanceof MOB) && (msg.targetMinor() == CMMsg.TYP_SPEAK) && (msg.tool() instanceof Coins) && (((Coins) msg.tool()).amDestroyed()) && (!msg.source().isMine(msg.tool())) && (!((MOB) msg.target()).isMine(msg.tool()))) CMLib.beanCounter() .giveSomeoneMoney(msg.source(), (MOB) msg.target(), ((Coins) msg.tool()).getTotalValue()); }
public boolean okMessage(Environmental myHost, CMMsg msg) { if (!(myHost instanceof MOB)) return super.okMessage(myHost, msg); MOB myChar = (MOB) myHost; if (!super.okMessage(myChar, msg)) return false; if ((msg.amITarget(myChar)) && (msg.targetMinor() == CMMsg.TYP_DAMAGE) && (msg.sourceMinor() == CMMsg.TYP_ACID)) { int recovery = myChar.charStats().getClassLevel(this); msg.setValue(msg.value() - recovery); } else if ((msg.amITarget(myChar)) && (msg.targetMinor() == CMMsg.TYP_DAMAGE) && (msg.sourceMinor() == CMMsg.TYP_ELECTRIC)) { int recovery = msg.value(); msg.setValue(msg.value() + recovery); } return true; }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (affected == null) return super.okMessage(myHost, msg); if (affected instanceof MOB) { final MOB mob = (MOB) affected; if ((msg.amITarget(mob)) && (!msg.amISource(mob)) && (mob.location() != msg.source().location()) && (msg.tool() instanceof Ability) && (CMath.bset(((Ability) msg.tool()).flags(), Ability.FLAG_TRANSPORTING)) && (!mob.amDead())) { final Ability A = (Ability) msg.tool(); if (((A.classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_CHANT) || ((A.classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_SPELL) || ((A.classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_PRAYER) || ((A.classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_SONG)) msg.source() .location() .showHappens( CMMsg.MSG_OK_VISUAL, L("Magical energy fizzles and is absorbed into the air!")); return false; } } else if (affected instanceof Room) { final Room R = (Room) affected; if ((msg.tool() instanceof Ability) && (msg.source().location() != null) && (msg.sourceMinor() != CMMsg.TYP_LEAVE)) { final boolean summon = CMath.bset(((Ability) msg.tool()).flags(), Ability.FLAG_SUMMONING); final boolean teleport = CMath.bset(((Ability) msg.tool()).flags(), Ability.FLAG_TRANSPORTING); final boolean shere = (msg.source().location() == affected) || ((affected instanceof Area) && (((Area) affected).inMyMetroArea(msg.source().location().getArea()))); if ((!shere) && (!summon) && (teleport) && (!CMLib.law().doesHavePriviledgesHere(msg.source(), R))) { if ((msg.source().location() != null) && (msg.source().location() != R)) msg.source() .location() .showHappens( CMMsg.MSG_OK_VISUAL, L("Magical energy fizzles and is absorbed into the air!")); R.showHappens( CMMsg.MSG_OK_VISUAL, L("Magic energy fizzles and is absorbed into the air.")); return false; } } } return super.okMessage(myHost, msg); }
@Override public boolean okMessage(Environmental affecting, CMMsg msg) { if (!super.okMessage(affecting, msg)) return false; final MOB source = msg.source(); if (!canFreelyBehaveNormal(affecting)) return true; final MOB observer = (MOB) affecting; if ((source != observer) && (msg.amITarget(observer)) && (msg.targetMinor() == CMMsg.TYP_GIVE) && (!CMSecurity.isAllowed(source, source.location(), CMSecurity.SecFlag.CMDROOMS)) && (msg.tool() != null)) { if (!(msg.tool() instanceof Coins)) { CMLib.commands() .postSay(observer, source, L("I'm sorry, I can only accept money."), true, false); return false; } else if (!doIExchangeThisCurrency(affecting, ((Coins) msg.tool()).getCurrency())) { CMLib.commands() .postSay( observer, source, L("I'm sorry, I don't accept that kind of currency."), true, false); return false; } double value = ((Coins) msg.tool()).getTotalValue(); final String currency = ((Coins) msg.tool()).getCurrency().toUpperCase(); double takeCut = getMyCut(affecting, currency); double amountToTake = CMLib.beanCounter().abbreviatedRePrice(observer, value * takeCut); if ((amountToTake > 0.0) && (amountToTake < CMLib.beanCounter() .getLowestDenomination(CMLib.beanCounter().getCurrency(observer)))) amountToTake = CMLib.beanCounter().getLowestDenomination(CMLib.beanCounter().getCurrency(observer)); value -= amountToTake; observer.recoverPhyStats(); final Coins C = CMLib.beanCounter().makeBestCurrency(observer, value); if ((value <= 0) || (C == null)) { CMLib.commands() .postSay( observer, source, L("I'm sorry, I can not change such a small amount."), true, false); return false; } } return true; }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (CMLib.flags().isSleeping(this)) return super.okMessage(myHost, msg); if ((msg.targetMinor() == CMMsg.TYP_ENTER) && (msg.amITarget(this))) { final Rideable ladder = CMLib.tracking().findALadder(msg.source(), this); if (ladder != null) { msg.source().setRiding(ladder); msg.source().recoverPhyStats(); } if ((getRoomInDir(Directions.DOWN) != msg.source().location())) return true; } return super.okMessage(myHost, msg); }
public void executeMsg(Environmental myHost, CMMsg msg) { if (processing) return; processing = true; if (affected == null) return; Item myItem = (Item) affected; if (myItem.owner() == null) return; switch (msg.sourceMinor()) { case CMMsg.TYP_DRINK: if ((myItem instanceof Drink) && (msg.amITarget(myItem))) addMeIfNeccessary(msg.source(), msg.source(), 0); break; case CMMsg.TYP_EAT: if ((myItem instanceof Food) && (msg.amITarget(myItem))) addMeIfNeccessary(msg.source(), msg.source(), 0); break; case CMMsg.TYP_GET: if ((!(myItem instanceof Drink)) && (!(myItem instanceof Food)) && (msg.amITarget(myItem))) addMeIfNeccessary(msg.source(), msg.source(), 0); break; } processing = false; }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (!(myHost instanceof MOB)) return super.okMessage(myHost, msg); final MOB myChar = (MOB) myHost; if (msg.tool() instanceof Ability) { if (msg.amISource(myChar) && (!myChar.isMonster()) && (msg.sourceMinor() != CMMsg.TYP_PREINVOKE)) { final WeakReference<Ability> curRef = invokable; if ((curRef != null) && (msg.tool() == curRef.get())) { curRef.clear(); final Ability A = ((Ability) msg.tool()); final int[] usageCost = A.usageCost(myChar, false); if (CMath.bset(A.usageType(), Ability.USAGE_MANA)) myChar.curState().adjMana(usageCost[Ability.USAGEINDEX_MANA] / 4, myChar.maxState()); if (CMath.bset(A.usageType(), Ability.USAGE_MOVEMENT)) myChar .curState() .adjMovement(usageCost[Ability.USAGEINDEX_MOVEMENT] / 4, myChar.maxState()); if (CMath.bset(A.usageType(), Ability.USAGE_HITPOINTS)) myChar .curState() .adjHitPoints(usageCost[Ability.USAGEINDEX_HITPOINTS] / 4, myChar.maxState()); } } else if (msg.amITarget(myChar)) { if (((((Ability) msg.tool()).classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_SPELL) && ((((Ability) msg.tool()).classificationCode() & Ability.ALL_DOMAINS) == Ability.DOMAIN_DIVINATION) && (CMLib.dice().roll(1, 100, 0) < (myChar.charStats().getClassLevel(this) * 4))) { myChar .location() .show( msg.source(), myChar, CMMsg.MSG_OK_ACTION, L( "<T-NAME> fool(s) <S-NAMESELF>, causing <S-HIM-HER> to fizzle @x1.", msg.tool().name())); return false; } } } return super.okMessage(myHost, msg); }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if ((!super.okMessage(myHost, msg)) || (affected == null) || (!(affected instanceof Item))) { unInvoke(); return false; } if (msg.amITarget(affected)) switch (msg.targetMinor()) { case CMMsg.TYP_GET: case CMMsg.TYP_PUSH: case CMMsg.TYP_PULL: case CMMsg.TYP_REMOVE: unInvoke(); break; } return true; }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (!(affected instanceof MOB)) return true; final MOB mob = (MOB) affected; if ((msg.amITarget(mob)) && (CMath.bset(msg.targetMajor(), CMMsg.MASK_MALICIOUS)) && (msg.tool() instanceof Ability) && (!mob.amDead())) { final Ability A = (Ability) msg.tool(); if (CMath.bset(A.flags(), Ability.FLAG_PARALYZING)) { msg.addTrailerMsg( CMClass.getMsg( mob, null, CMMsg.MSG_OK_VISUAL, L("The uninhibiting barrier around <S-NAME> repels the @x1.", A.name()))); return false; } final MOB newMOB = CMClass.getFactoryMOB(); final CMMsg msg2 = CMClass.getMsg(newMOB, null, null, CMMsg.MSG_SIT, null); newMOB.recoverPhyStats(); try { A.affectPhyStats(newMOB, newMOB.phyStats()); if ((!CMLib.flags().aliveAwakeMobileUnbound(newMOB, true)) || (CMath.bset(A.flags(), Ability.FLAG_PARALYZING)) || (!A.okMessage(newMOB, msg2))) { msg.addTrailerMsg( CMClass.getMsg( mob, null, CMMsg.MSG_OK_VISUAL, L("The uninhibiting barrier around <S-NAME> repels the @x1.", A.name()))); newMOB.destroy(); return false; } } catch (final Exception e) { } newMOB.destroy(); } return true; }
@Override public void executeMsg(final Environmental myHost, final CMMsg msg) { if ((System.currentTimeMillis() - lastClanCheck) > TimeManager.MILI_HOUR) { lastClanCheck = System.currentTimeMillis(); if ((clanID().length() > 0) && (CMLib.clans().getClan(clanID()) == null)) { destroy(); return; } } if (StdClanItem.stdExecuteMsg(this, msg)) { super.executeMsg(myHost, msg); if ((msg.amITarget(this)) && (clanID().length() > 0) && (msg.source().getClanRole(clanID()) != null)) { final Room R = msg.source().location(); if (R == null) return; if ((msg.targetMinor() == CMMsg.TYP_DROP) && (msg.trailerMsgs() == null)) { msg.addTrailerMsg(CMClass.getMsg(msg.source(), this, CMMsg.MSG_LOOK, null)); setRightfulOwner(R); } else if ((msg.targetMinor() == CMMsg.TYP_LOOK) || (msg.targetMinor() == CMMsg.TYP_EXAMINE)) { final LegalBehavior B = CMLib.law().getLegalBehavior(R); String s = ""; if (B != null) s = B.conquestInfo(CMLib.law().getLegalObject(R)); if (s.length() > 0) msg.source().tell(s); else msg.source().tell(L("This area is under the control of the Archons.")); return; } else if ((msg.targetMinor() == CMMsg.TYP_SPEAK) && (CMSecurity.isAllowed(msg.source(), R, CMSecurity.SecFlag.CMDROOMS)) && (msg.targetMessage() != null)) { final String msgStr = CMStrings.getSayFromMessage(msg.targetMessage().toUpperCase()); final String alert = "I HEREBY DECLARE THIS AREA"; final int msgIndex = msgStr.indexOf(alert); if (msgIndex >= 0) { final LegalBehavior B = CMLib.law().getLegalBehavior(R); if (B != null) B.setControlPoints(clanID(), B.controlPoints() + 1); } } } } }
public boolean okMessage(Environmental myHost, CMMsg msg) { if ((affected == null) || (!(affected instanceof MOB))) return super.okMessage(myHost, msg); MOB mob = (MOB) affected; if ((msg.amITarget(mob)) && (CMath.bset(msg.targetCode(), CMMsg.MASK_MALICIOUS)) && (msg.targetMinor() == CMMsg.TYP_CAST_SPELL) && (msg.tool() != null) && (msg.tool().ID().equalsIgnoreCase("Spell_MagicMissile")) && (!mob.amDead()) && ((mob.fetchAbility(ID()) == null) || proficiencyCheck(null, 0, false))) { mob.location() .show( mob, msg.source(), CMMsg.MSG_OK_VISUAL, "The barrier around <S-NAME> absorbs a magic missile from <T-NAME>!"); return false; } return super.okMessage(myHost, msg); }
@Override public boolean okMessage(Environmental host, CMMsg msg) { if (msg.amITarget(this)) { switch (msg.targetMinor()) { case CMMsg.TYP_ACTIVATE: if (!isInstalled()) { if (!CMath.bset(msg.targetMajor(), CMMsg.MASK_CNTRLMSG)) msg.source().tell(L("@x1 is not installed or connected.", name())); return false; } else if (!isAllWiringHot(this)) { if (!CMath.bset(msg.targetMajor(), CMMsg.MASK_CNTRLMSG)) msg.source() .tell(L("The panel containing @x1 is not activated or connected.", name())); return false; } break; case CMMsg.TYP_DEACTIVATE: break; case CMMsg.TYP_LOOK: break; case CMMsg.TYP_POWERCURRENT: if ((!(this instanceof FuelConsumer)) && (!(this instanceof PowerGenerator)) && activated() && (powerNeeds() > 0) && (msg.value() > 0)) { double amtToTake = Math.min((double) powerNeeds(), (double) msg.value()); msg.setValue(msg.value() - (int) Math.round(amtToTake)); amtToTake *= getFinalManufacturer().getEfficiencyPct(); if (subjectToWearAndTear() && (usesRemaining() <= 200)) amtToTake *= CMath.div(usesRemaining(), 100.0); setPowerRemaining(Math.min(powerCapacity(), Math.round(amtToTake) + powerRemaining())); } break; } } return super.okMessage(host, msg); }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if ((affected != null) && (affected instanceof MOB) && (msg.amITarget(affected)) && (msg.targetMinor() == CMMsg.TYP_DAMAGE) && (!msg.amISource((MOB) affected)) && (CMLib.flags().aliveAwakeMobile((MOB) affected, true)) && (msg.tool() instanceof Weapon)) { final MOB mob = (MOB) affected; if (mob.location() .show( mob, msg.source(), this, CMMsg.MSG_OK_ACTION, L("<S-NAME> shrug(s) off the attack from <T-NAME>."))) { unInvoke(); return false; } } return super.okMessage(myHost, msg); }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (!super.okMessage(myHost, msg)) return false; if (!(affected instanceof MOB)) return true; final MOB mob = (MOB) affected; if ((msg.amITarget(mob)) && (msg.sourceMinor() == CMMsg.TYP_FIRE) && (msg.targetMinor() == CMMsg.TYP_DAMAGE)) { final int recovery = (int) Math.round(CMath.div((msg.value()), 2.0)); mob.location() .show( mob, null, CMMsg.MSG_OK_VISUAL, L("The flame attack heals <S-NAME> @x1 points.", "" + recovery)); CMLib.combat() .postHealing(mob, mob, this, recovery, CMMsg.MASK_ALWAYS | CMMsg.TYP_CAST_SPELL, null); return false; } return true; }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if ((affected != null) && (((msg.target() instanceof Room) && (msg.targetMinor() == CMMsg.TYP_ENTER)) || ((msg.target() instanceof Rideable) && (msg.targetMinor() == CMMsg.TYP_SIT))) && (!CMLib.flags().isFalling(msg.source())) && ((msg.amITarget(affected)) || (msg.tool() == affected) || (affected instanceof Area))) { if ((!msg.source().isMonster()) && (!msg.source().isAttribute(MOB.Attrib.PLAYERKILL))) { msg.source().tell(L("You must have your playerkill flag set to enter here.")); return false; } } if ((!msg.source().isMonster()) && (!msg.source().isAttribute(MOB.Attrib.PLAYERKILL))) { final Room R = CMLib.map().roomLocation(msg.source()); if ((R != null) && ((R == affected) || (R.getArea() == affected) || ((affected instanceof Area) && (((Area) affected).inMyMetroArea(R.getArea()))))) { msg.source().tell(L("Your PLAYERKILL flag is now ON!")); msg.source().setAttribute(MOB.Attrib.PLAYERKILL, true); } } return super.okMessage(myHost, msg); }
@Override public void executeMsg(final Environmental myHost, final CMMsg msg) { final MOB mob = msg.source(); switch (msg.targetMinor()) { case CMMsg.TYP_WAND_USE: if (msg.amITarget(this) && ((msg.tool() == null) || (msg.tool() instanceof Physical))) waveIfAble(mob, (Physical) msg.tool(), msg.targetMessage()); break; case CMMsg.TYP_SPEAK: if ((msg.sourceMinor() == CMMsg.TYP_SPEAK) && (!amWearingAt(Wearable.IN_INVENTORY))) { boolean alreadyWanding = false; final List<CMMsg> trailers = msg.trailerMsgs(); if (trailers != null) for (final CMMsg msg2 : trailers) if (msg2.targetMinor() == CMMsg.TYP_WAND_USE) alreadyWanding = true; final String said = CMStrings.getSayFromMessage(msg.sourceMessage()); if ((!alreadyWanding) && (checkWave(mob, said))) msg.addTrailerMsg( CMClass.getMsg( msg.source(), this, msg.target(), CMMsg.NO_EFFECT, null, CMMsg.MASK_ALWAYS | CMMsg.TYP_WAND_USE, said, CMMsg.NO_EFFECT, null)); } break; default: break; } super.executeMsg(myHost, msg); }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (msg.amITarget(this) && (msg.targetMinor() == CMMsg.TYP_DRINK)) return true; return super.okMessage(myHost, msg); }
@Override public void executeMsg(Environmental host, CMMsg msg) { if (msg.amITarget(this)) { switch (msg.targetMinor()) { case CMMsg.TYP_ACTIVATE: if ((msg.source().location() != null) && (!CMath.bset(msg.targetMajor(), CMMsg.MASK_CNTRLMSG))) msg.source() .location() .show(msg.source(), this, CMMsg.MSG_OK_VISUAL, L("<S-NAME> activate(s) <T-NAME>.")); this.activate(true); break; case CMMsg.TYP_DEACTIVATE: if ((msg.source().location() != null) && (!CMath.bset(msg.targetMajor(), CMMsg.MASK_CNTRLMSG))) msg.source() .location() .show( msg.source(), this, CMMsg.MSG_OK_VISUAL, L("<S-NAME> deactivate(s) <T-NAME>.")); this.activate(false); break; case CMMsg.TYP_LOOK: super.executeMsg(host, msg); if (CMLib.flags().canBeSeenBy(this, msg.source())) msg.source() .tell( L( "@x1 is currently @x2", name(), (activated() ? "connected.\n\r" : "deactivated/disconnected.\n\r"))); return; case CMMsg.TYP_REPAIR: if (CMLib.dice().rollPercentage() < msg.value()) { setUsesRemaining(usesRemaining() < 100 ? 100 : usesRemaining()); msg.source().tell(L("@x1 is now repaired.\n\r", name())); } else { final int repairRequired = 100 - usesRemaining(); if (repairRequired > 0) { int repairApplied = (int) Math.round(CMath.mul(repairRequired, CMath.div(msg.value(), 100))); if (repairApplied < 0) repairApplied = 1; setUsesRemaining(usesRemaining() + repairApplied); msg.source().tell(L("@x1 is now @x2% repaired.\n\r", name(), "" + usesRemaining())); } } break; case CMMsg.TYP_ENHANCE: if ((CMLib.dice().rollPercentage() < msg.value()) && (CMLib.dice().rollPercentage() < 50)) { float addAmt = 0.01f; if (getInstalledFactor() < 1.0) { addAmt = (float) (CMath.div(100.0, msg.value()) * 0.1); if (addAmt < 0.1f) addAmt = 0.1f; } setInstalledFactor(this.getInstalledFactor() + addAmt); msg.source().tell(msg.source(), this, null, L("<T-NAME> is now enhanced.\n\r")); } else { msg.source() .tell( msg.source(), this, null, L("Your attempt to enhance <T-NAME> has failed.\n\r")); } break; } } super.executeMsg(host, msg); }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if ((clanID().length() > 0) && (msg.amITarget(this))) { if (msg.source().getClanRole(clanID()) == null) { if ((msg.targetMinor() == CMMsg.TYP_GET) || (msg.targetMinor() == CMMsg.TYP_PUSH) || (msg.targetMinor() == CMMsg.TYP_PULL) || (msg.targetMinor() == CMMsg.TYP_CAST_SPELL)) { final Room R = CMLib.map().roomLocation(this); if (CMLib.clans().findRivalrousClan(msg.source()) == null) { msg.source().tell(L("You must belong to an elligible clan to take a clan item.")); return false; } else if (R != null) { for (int i = 0; i < R.numInhabitants(); i++) { final MOB M = R.fetchInhabitant(i); if ((M != null) && (M.isMonster()) && (M.getClanRole(clanID()) != null) && (CMLib.flags().aliveAwakeMobileUnbound(M, true)) && (CMLib.flags().canBeSeenBy(this, M)) && (!CMLib.flags().isAnimalIntelligence(M))) { R.show( M, null, CMMsg.MSG_QUIETMOVEMENT, L("<S-NAME> guard(s) @x1 closely.", name())); return false; } } String rulingClan = ""; final LegalBehavior B = CMLib.law().getLegalBehavior(R); if (B != null) rulingClan = B.rulingOrganization(); if (msg.source().getClanRole(rulingClan) == null) { msg.source() .tell(L("You must conquer and fully control this area to take the clan flag.")); return false; } if ((B != null) && (!B.isFullyControlled())) { msg.source().tell(L("Your clan does not yet fully control the area.")); return false; } } } else if ((msg.targetMinor() == CMMsg.TYP_DROP) && (!CMath.bset(msg.targetMajor(), CMMsg.MASK_INTERMSG))) { final Room R = msg.source().location(); LandTitle T = null; Area A = null; LegalBehavior B = null; if (R != null) { A = R.getArea(); T = CMLib.law().getLandTitle(R); } if ((T == null) || ((!T.getOwnerName().equals(clanID())) && ((!T.getOwnerName().equals(msg.source().getLiegeID())) || (!msg.source().isMarriedToLiege())) && (!T.getOwnerName().equals(msg.source().Name())))) { boolean ok = false; if (A != null) { B = CMLib.law().getLegalBehavior(R); if (B != null) ok = B.controlPoints() > 0; } if (!ok) { msg.source() .tell( L("You can not place a flag here, this place is controlled by the Archons.")); return false; } } } } else if ((msg.targetMinor() == CMMsg.TYP_GET) && (msg.source().location() != null) && (msg.source().isMonster())) { boolean foundOne = false; for (int i = 0; i < msg.source().location().numInhabitants(); i++) { final MOB M = msg.source().location().fetchInhabitant(i); if ((M != null) && (!M.isMonster()) && (M.getClanRole(clanID()) != null)) { foundOne = true; break; } } if (!foundOne) { msg.source().tell(L("You are guarding @x1 too closely.", name())); return false; } } } if (StdClanItem.stdOkMessage(this, msg)) { if ((clanID().length() > 0) && (msg.amITarget(this)) && (msg.targetMinor() == CMMsg.TYP_DROP)) { final LegalBehavior B = CMLib.law().getLegalBehavior(msg.source().location()); final String rulingClan = (B != null) ? B.rulingOrganization() : ""; if (rulingClan.length() == 0) msg.source() .tell( L("Area '@x1' is presently neutral.", msg.source().location().getArea().name())); else { msg.source() .tell( L( "Area '@x1' is presently controlled by @x2.", msg.source().location().getArea().name(), rulingClan)); if (!rulingClan.equals(clanID())) { int relation = Clan.REL_WAR; final Clan C = CMLib.clans().getClan(clanID()); if (C == null) { msg.source().tell(L("This ancient relic from a lost clan fades out of existence.")); this.destroy(); return false; } relation = C.getClanRelations(rulingClan); if (relation != Clan.REL_WAR) { msg.source() .tell( L("You must be at war with this clan to put down your flag on their area.")); return false; } } } } return super.okMessage(myHost, msg); } return false; }