@Override public void executeMsg(final Environmental myHost, final CMMsg msg) { if ((msg.tool() == this) && (msg.targetMinor() == CMMsg.TYP_WEAPONATTACK) && (weaponClassification() == Weapon.CLASS_THROWN)) return; // msg.addTrailerMsg(CMClass.getMsg(msg.source(),this,CMMsg.MSG_DROP,null)); else if ((msg.tool() == this) && (msg.targetMinor() == CMMsg.TYP_DAMAGE) && (msg.target() != null) && (msg.target() instanceof MOB) && (weaponClassification() == Weapon.CLASS_THROWN)) { unWear(); msg.addTrailerMsg( CMClass.getMsg(msg.source(), this, CMMsg.MASK_ALWAYS | CMMsg.MSG_DROP, null)); msg.addTrailerMsg( CMClass.getMsg((MOB) msg.target(), this, CMMsg.MASK_ALWAYS | CMMsg.MSG_GET, null)); msg.addTrailerMsg( CMClass.getMsg( msg.source(), msg.target(), this, CMMsg.MASK_ALWAYS | CMMsg.TYP_GENERAL, null)); } else if ((msg.tool() == this) && (msg.target() instanceof MOB) && (msg.targetMinor() == CMMsg.TYP_GENERAL) && (((MOB) msg.target()).isMine(this)) && (msg.sourceMessage() == null)) { final Ability A = CMClass.getAbility("Thief_Bind"); if (A != null) { A.setAffectedOne(this); A.invoke(msg.source(), (MOB) msg.target(), true, phyStats().level()); } } else super.executeMsg(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; if ((msg.target() == affected) && (msg.tool() instanceof Ability) && (msg.source() != affected) && (msg.targetMinor() == CMMsg.TYP_CAST_SPELL) && (msg.isTarget(CMMsg.MASK_MALICIOUS)) && (CMLib.dice().rollPercentage() > 50) && ((((Ability) msg.tool()).classificationCode() & Ability.ALL_DOMAINS) == Ability.DOMAIN_CURSING) && (((Ability) msg.tool()).castingQuality(msg.source(), (MOB) msg.target()) == Ability.QUALITY_MALICIOUS)) { msg.source() .location() .show( (MOB) affected, msg.source(), CMMsg.MSG_OK_VISUAL, L("An curse from <T-NAME> against <S-NAME> is magically repelled.")); return false; } return true; }
public boolean okMessage(Environmental myHost, CMMsg msg) { if (!super.okMessage(myHost, msg)) return false; if (affected == null) return true; MOB mob = (MOB) affected; if ((msg.amISource(mob)) && (mob.location() != null) && (msg.target() != null) && (msg.target() instanceof Room)) { if ((msg.sourceMinor() == CMMsg.TYP_ENTER) && ((mob.location().domainType() == Room.DOMAIN_OUTDOORS_WATERSURFACE) || (mob.location().domainType() == Room.DOMAIN_INDOORS_WATERSURFACE)) && (msg.target() == mob.location().getRoomInDir(Directions.UP))) { msg.source() .tell("Your water walking magic prevents you from ascending from the water surface."); return false; } else if ((msg.sourceMinor() == CMMsg.TYP_LEAVE) && (mob.location().domainType() != Room.DOMAIN_OUTDOORS_WATERSURFACE) && (mob.location().domainType() != Room.DOMAIN_INDOORS_WATERSURFACE) && (msg.tool() != null) && (msg.tool() instanceof Exit)) { for (int d = Directions.NUM_DIRECTIONS() - 1; d >= 0; d--) { Room R = mob.location().getRoomInDir(d); if ((R != null) && (mob.location().getReverseExit(d) == msg.tool()) && ((R.domainType() == Room.DOMAIN_OUTDOORS_WATERSURFACE) || (R.domainType() == Room.DOMAIN_INDOORS_WATERSURFACE))) { triggerNow = true; msg.source().recoverEnvStats(); return true; } } } } return true; }
public boolean okMessage(Environmental myHost, CMMsg msg) { if (!super.okMessage(myHost, msg)) return false; switch (msg.targetMinor()) { case CMMsg.TYP_PUT: if (affected instanceof Item) { if (msg.amITarget(affected) && (msg.tool() instanceof Decayable)) ((Decayable) msg.tool()).setDecayTime(Long.MAX_VALUE); } break; case CMMsg.TYP_GET: if ((msg.target() instanceof Decayable) && (msg.target() instanceof Item)) { if ((affected instanceof Item) && (((Item) msg.target()).container() == affected)) ((Decayable) msg.tool()).setDecayTime(0); // will cause a recalc on next msg if ((affected instanceof Room) && (((Item) msg.target()).owner() == affected)) ((Decayable) msg.tool()).setDecayTime(0); // will cause a recalc on next msg } break; case CMMsg.TYP_DROP: if (affected instanceof Room) { if (msg.target() instanceof Decayable) ((Decayable) msg.target()).setDecayTime(Long.MAX_VALUE); } break; } return true; }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if ((affected instanceof MOB) && (msg.amISource((MOB) affected)) && (msg.targetMinor() == CMMsg.TYP_DAMAGE) && (msg.tool() instanceof Weapon) && (msg.value() > 0) && (msg.target() instanceof MOB) && (((Weapon) msg.tool()).weaponClassification() == Weapon.CLASS_THROWN)) { if (CMLib.dice().rollPercentage() < 25) helpProficiency((MOB) affected, 0); final CMMsg msg2 = CMClass.getMsg( (MOB) msg.target(), msg.tool(), this, CMMsg.MSG_OK_VISUAL, L("^F^<FIGHT^><T-NAME> fragment(s) in <S-NAME>!^</FIGHT^>^?")); CMLib.color().fixSourceFightColor(msg2); msg.addTrailerMsg(msg2); msg.setValue( msg.value() + (int) Math.round( CMath.mul( 3.0 * msg.value(), CMath.div(proficiency(), 100.0 - (10.0 * getXLEVELLevel(invoker())))))); } return super.okMessage(myHost, msg); }
@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()); }
@Override public void executeMsg(final Environmental myHost, final CMMsg msg) { super.executeMsg(myHost, msg); // the sex rules if (!(affected instanceof MOB)) return; final MOB myChar = (MOB) affected; if (msg.target() instanceof MOB) { final MOB mate = (MOB) msg.target(); if ((msg.amISource(myChar)) && (msg.tool() instanceof Social) && (msg.tool().Name().equals("MATE <T-NAME>") || msg.tool().Name().equals("SEX <T-NAME>")) && (msg.sourceMinor() != CMMsg.TYP_CHANNEL) && (myChar.charStats().getStat(CharStats.STAT_GENDER) != mate.charStats().getStat(CharStats.STAT_GENDER)) && ((mate.charStats().getStat(CharStats.STAT_GENDER) == ('M')) || (mate.charStats().getStat(CharStats.STAT_GENDER) == ('F'))) && ((myChar.charStats().getStat(CharStats.STAT_GENDER) == ('M')) || (myChar.charStats().getStat(CharStats.STAT_GENDER) == ('F'))) && (!mate.charStats().getMyRace().canBreedWith(myChar.charStats().getMyRace())) && (myChar.location() == mate.location()) && (myChar .fetchWornItems( Wearable.WORN_LEGS | Wearable.WORN_WAIST, (short) -2048, (short) 0) .size() == 0) && (mate.fetchWornItems( Wearable.WORN_LEGS | Wearable.WORN_WAIST, (short) -2048, (short) 0) .size() == 0) && ((mate.charStats().getStat(CharStats.STAT_AGE) == 0) || ((mate.charStats().ageCategory() > Race.AGE_CHILD) && (mate.charStats().ageCategory() < Race.AGE_OLD))) && ((myChar.charStats().getStat(CharStats.STAT_AGE) == 0) || ((myChar.charStats().ageCategory() > Race.AGE_CHILD) && (myChar.charStats().ageCategory() < Race.AGE_OLD)))) { MOB female = myChar; MOB male = mate; if ((mate.charStats().getStat(CharStats.STAT_GENDER) == ('F'))) { female = mate; male = myChar; } final Ability A = CMClass.getAbility("Pregnancy"); if ((A != null) && (female.fetchAbility(A.ID()) == null) && (female.fetchEffect(A.ID()) == null)) { A.invoke(male, female, true, 0); unInvoke(); } } } }
@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); }
@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 void executeMsg(final Environmental myHost, final CMMsg msg) { super.executeMsg(myHost, msg); if ((affected != null) && (affected instanceof MOB) && (msg.amISource((MOB) affected))) { if (msg.sourceMinor() == CMMsg.TYP_RECALL) { damageToTake = 0; unInvoke(); } else if ((msg.tool() instanceof Ability) && (CMath.bset(((Ability) msg.tool()).flags(), Ability.FLAG_TRANSPORTING))) { damageToTake = 0; unInvoke(); } } }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (affected == null) return super.okMessage(myHost, msg); if ((msg.sourceMinor() == CMMsg.TYP_CAST_SPELL) && (msg.tool() instanceof Ability) && ((((Ability) msg.tool()).classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_PRAYER) && (CMath.bset(((Ability) msg.tool()).flags(), Ability.FLAG_UNHOLY)) && (!CMath.bset(((Ability) msg.tool()).flags(), Ability.FLAG_HOLY))) { msg.source().tell(L("This place is blocking unholy magic!")); return false; } return super.okMessage(myHost, msg); }
@Override public void executeMsg(Environmental host, CMMsg msg) { if (host instanceof MOB) { final MOB myChar = (MOB) host; if (msg.amISource(myChar) && (msg.tool() instanceof Ability) && (!myChar.isMonster()) && (msg.sourceMinor() == CMMsg.TYP_PREINVOKE) && (myChar.isMine(msg.tool())) && (myChar.charStats().getClassLevel(this) >= 30) && (CMLib.ableMapper().getQualifyingLevel(ID(), true, msg.tool().ID()) < 1)) invokable = new WeakReference(msg.tool()); } super.executeMsg(host, msg); Bard.visitationBonusMessage(host, msg); }
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; }
public boolean okMessage(Environmental myHost, CMMsg msg) { if (!super.okMessage(myHost, msg)) return false; if (msg.targetMinor() == CMMsg.TYP_ENTER) { if (msg.target() == this) { MOB mob = msg.source(); if ((mob.location() != null) && (mob.location().roomID().length() > 0)) { int direction = -1; for (int d = Directions.NUM_DIRECTIONS() - 1; d >= 0; d--) { if (mob.location().getRoomInDir(d) == this) direction = d; } if (direction < 0) { mob.tell("Some great evil is preventing your movement that way."); return false; } msg.modify( msg.source(), getAltRoomFrom(mob.location(), direction), msg.tool(), msg.sourceCode(), msg.sourceMessage(), msg.targetCode(), msg.targetMessage(), msg.othersCode(), msg.othersMessage()); } } } return true; }
@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); } }
@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(Environmental host, CMMsg msg) { if (!super.okMessage(host, msg)) return false; if ((msg.tool() == affected) && (msg.sourceMinor() == CMMsg.TYP_SELL)) { unInvoke(); if (affected != null) affected.delEffect(this); } return true; }
public void executeMsg(Environmental myHost, CMMsg msg) { super.executeMsg(myHost, msg); if ((myHost == null) || (!(myHost instanceof MOB))) return; MOB mob = (MOB) myHost; if (msg.amISource(mob) && (msg.tool() != null)) { if (msg.tool() instanceof Ability) { Ability A = mob.fetchAbility(msg.tool().ID()); if ((A != null) && (!CMLib.ableMapper().getDefaultGain(ID(), false, A.ID())) && ((A.classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_SPELL)) { mob.delAbility(A); mob.recoverMaxState(); } } else if (msg.tool().ID().equalsIgnoreCase("Skill_ScrollCopy")) { } } }
public boolean open( MOB mob, Environmental openThis, String openableWord, int dirCode, boolean quietly) { final String openWord = (!(openThis instanceof Exit)) ? "open" : ((Exit) openThis).openWord(); final String openMsg = quietly ? null : ("<S-NAME> " + openWord + "(s) <T-NAMESELF>.") + CMLib.protocol().msp("dooropen.wav", 10); final CMMsg msg = CMClass.getMsg(mob, openThis, null, CMMsg.MSG_OPEN, openMsg, openableWord, openMsg); if (openThis instanceof Exit) { final 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)) { final Room opR = mob.location().getRoomInDir(dirCode); final Exit opE = mob.location().getPairedExit(dirCode); if (opE != null) { final CMMsg altMsg = CMClass.getMsg( msg.source(), opE, msg.tool(), msg.sourceCode(), null, msg.targetCode(), null, msg.othersCode(), null); opE.executeMsg(msg.source(), altMsg); } final int opCode = Directions.getOpDirectionCode(dirCode); if ((opE != null) && (opE.isOpen()) && (((Exit) openThis).isOpen())) { final boolean useShipDirs = (opR instanceof BoardableShip) || (opR.getArea() instanceof BoardableShip); final String inDirName = useShipDirs ? Directions.getShipInDirectionName(opCode) : Directions.getInDirectionName(opCode); opR.showHappens(CMMsg.MSG_OK_ACTION, L("@x1 @x2 opens.", opE.name(), inDirName)); } return true; } } } else if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); return true; } return false; }
public boolean okMessage(Environmental myHost, CMMsg msg) { if (!(myHost instanceof MOB)) return super.okMessage(myHost, msg); MOB myChar = (MOB) myHost; if ((msg.tool() == null) || (!(msg.tool() instanceof Ability))) return super.okMessage(myChar, msg); if (msg.amISource(myChar) && (myChar.isMine(msg.tool()))) { if ((msg.sourceMinor() == CMMsg.TYP_CAST_SPELL) && (!CMLib.ableMapper().getDefaultGain(ID(), true, msg.tool().ID()))) { if (CMLib.dice().rollPercentage() > (myChar.charStats().getStat(CharStats.STAT_INTELLIGENCE) * ((myChar.charStats().getCurrentClass().ID().equals(ID())) ? 1 : 2))) { myChar.location().show(myChar, null, CMMsg.MSG_OK_VISUAL, "<S-NAME> fizzle(s) a spell."); return false; } } } return super.okMessage(myChar, msg); }
@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; }
public void roomAffectFully(CMMsg msg, Room room, int dirCode) { room.send(msg.source(), msg); if ((msg.target() == null) || (!(msg.target() instanceof Exit))) return; if (dirCode < 0) { for (int d = Directions.NUM_DIRECTIONS() - 1; d >= 0; d--) if (room.getExitInDir(d) == msg.target()) { dirCode = d; break; } } if (dirCode < 0) return; Exit pair = room.getPairedExit(dirCode); if (pair != null) { CMMsg altMsg = null; if ((msg.targetCode() == CMMsg.MSG_OPEN) && (pair.isLocked())) { altMsg = CMClass.getMsg( msg.source(), pair, msg.tool(), CMMsg.MSG_UNLOCK, null, CMMsg.MSG_UNLOCK, null, CMMsg.MSG_UNLOCK, null); pair.executeMsg(msg.source(), altMsg); } altMsg = CMClass.getMsg( msg.source(), pair, msg.tool(), msg.sourceCode(), null, msg.targetCode(), null, msg.othersCode(), null); pair.executeMsg(msg.source(), altMsg); } }
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.amISource(myChar) && (!myChar.isMonster()) && (msg.sourceMinor() == CMMsg.TYP_CAST_SPELL) && (msg.tool() instanceof Ability) && ((((Ability) msg.tool()).classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_CHANT) && (myChar.isMine(msg.tool())) && (isQualifyingAuthority(myChar, (Ability) msg.tool())) && (CMLib.dice().rollPercentage() < 50)) { if (((Ability) msg.tool()).appropriateToMyFactions(myChar)) return true; myChar.tell("Extreme emotions disrupt your chant."); return false; } return true; }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (!super.okMessage(myHost, msg)) return false; if ((msg.tool() == this) && (msg.targetMinor() == CMMsg.TYP_DAMAGE) && (msg.value() > 0) && (msg.target() != null) && (msg.target() instanceof MOB) && (weaponClassification() == Weapon.CLASS_THROWN)) { msg.setValue(0); } return true; }
public static boolean robberyCheck(LandTitle A, CMMsg msg) { if (((msg.targetMinor() == CMMsg.TYP_GET) && (!msg.isTarget(CMMsg.MASK_INTERMSG))) || (msg.targetMinor() == CMMsg.TYP_PUSH) || (msg.targetMinor() == CMMsg.TYP_PULL)) { if ((msg.target() instanceof Item) && (((Item) msg.target()).owner() == msg.source().location()) && ((!(msg.tool() instanceof Item)) || (msg.source().isMine(msg.tool()))) && (!msg.sourceMajor(CMMsg.MASK_ALWAYS)) && (A.getOwnerName().length() > 0) && (msg.source().location() != null) && (msg.othersMessage() != null) && (msg.othersMessage().length() > 0) && (!shopkeeperMobPresent(msg.source().location())) && (!CMLib.law().doesHavePriviledgesHere(msg.source(), msg.source().location()))) { final Room R = msg.source().location(); final LegalBehavior B = CMLib.law().getLegalBehavior(R); if (B != null) { for (int m = 0; m < R.numInhabitants(); m++) { final MOB M = R.fetchInhabitant(m); if (CMLib.law().doesHavePriviledgesHere(M, R)) return true; } MOB D = null; final Clan C = CMLib.clans().getClan(A.getOwnerName()); if (C != null) D = C.getResponsibleMember(); else D = CMLib.players().getLoadPlayer(A.getOwnerName()); if (D == null) return true; B.accuse( CMLib.law().getLegalObject(R), msg.source(), D, new String[] {"PROPERTYROB", "THIEF_ROBBERY"}); } } return true; } return false; }
@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 void executeMsg(final Environmental myHost, final CMMsg msg) { super.executeMsg(myHost, msg); if ((msg.source().location() != null) && (msg.targetMinor() == CMMsg.TYP_DAMAGE) && ((msg.value()) > 0) && (msg.tool() == this) && (msg.target() instanceof MOB) && (!((MOB) msg.target()).amDead()) && (CMLib.flags().isEvil((MOB) msg.target()))) { final CMMsg msg2 = CMClass.getMsg( msg.source(), msg.target(), new HolyAvenger(), CMMsg.MSG_OK_ACTION, CMMsg.MSK_MALICIOUS_MOVE | CMMsg.TYP_UNDEAD, CMMsg.MSG_NOISYMOVEMENT, null); if (msg.source().location().okMessage(msg.source(), msg2)) { msg.source().location().send(msg.source(), msg2); int damage = CMLib.dice().roll(1, 15, 0); if (msg.value() > 0) damage = damage / 2; msg.addTrailerMsg( CMClass.getMsg( msg.source(), msg.target(), CMMsg.MSG_OK_ACTION, L( "@x1 dispels evil within <T-NAME> and @x2 <T-HIM-HER>>!", name(), CMLib.combat().standardHitWord(Weapon.TYPE_BURSTING, damage)))); final CMMsg msg3 = CMClass.getMsg( msg.source(), msg.target(), null, CMMsg.MSG_OK_VISUAL, CMMsg.MSG_DAMAGE, CMMsg.NO_EFFECT, null); msg3.setValue(damage); msg.addTrailerMsg(msg3); } } }
@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(final Environmental myHost, final CMMsg msg) { if ((myHost == null) || (!(myHost instanceof MOB))) return super.okMessage(myHost, msg); final MOB mob = (MOB) myHost; if ((msg.amISource(mob)) && (mob.charStats().getClassLevel(this) > 4)) { if (((msg.sourceMinor() == CMMsg.TYP_BUY) || (msg.sourceMinor() == CMMsg.TYP_LIST)) && (msg.tool() instanceof Potion)) { mob.basePhyStats().setDisposition(mob.basePhyStats().disposition() | PhyStats.IS_BONUS); mob.recoverPhyStats(); mob.recoverCharStats(); } else if ((mob.basePhyStats().disposition() & PhyStats.IS_BONUS) == PhyStats.IS_BONUS) { mob.basePhyStats().setDisposition(mob.basePhyStats().disposition() - PhyStats.IS_BONUS); mob.recoverPhyStats(); mob.recoverCharStats(); } } return super.okMessage(myHost, msg); }
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); }