@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 void executeMsg(final Environmental myHost, final CMMsg msg) { super.executeMsg(myHost, msg); if ((reRollFlag) && (affected instanceof MOB) && (msg.sourceMinor() == CMMsg.TYP_LOOK) && (msg.source() == affected)) { final MOB M = msg.source(); if ((M.session() != null) && (M.playerStats() != null)) { final Ability me = this; CMLib.threads() .executeRunnable( new Runnable() { @Override public void run() { try { CMLib.login() .promptBaseCharStats( M.playerStats().getTheme(), M, 300, M.session(), bonusPointsPerStat); M.recoverCharStats(); if (rePickClass) M.baseCharStats() .setCurrentClass( CMLib.login() .promptCharClass(M.playerStats().getTheme(), M, M.session())); M.recoverCharStats(); M.delEffect(me); M.baseCharStats().getCurrentClass().grantAbilities(M, false); } catch (final IOException e) { } } }); } } }
@Override public void executeMsg(final Environmental myHost, final CMMsg msg) { super.executeMsg(myHost, msg); if (((msg.sourceMinor() == CMMsg.TYP_SHUTDOWN) || ((msg.targetMinor() == CMMsg.TYP_EXPIRE) && (msg.target() == affected)) || (msg.sourceMinor() == CMMsg.TYP_ROOMRESET)) && (affected instanceof Room)) { updateLot(null); final Vector mobs = new Vector(); Room R = (Room) affected; if (R != null) { synchronized (("SYNC" + R.roomID()).intern()) { R = CMLib.map().getRoom(R); for (int m = 0; m < R.numInhabitants(); m++) { final MOB M = R.fetchInhabitant(m); if ((M != null) && (M.isSavable()) && (M.getStartRoom() == R) && ((M.basePhyStats().rejuv() == 0) || (M.basePhyStats().rejuv() == PhyStats.NO_REJUV))) { CMLib.catalog().updateCatalogIntegrity(M); mobs.addElement(M); } } if (!CMSecurity.isSaveFlag(CMSecurity.SaveFlag.NOPROPERTYMOBS)) CMLib.database().DBUpdateTheseMOBs(R, mobs); } } } }
@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); }
public void executeMsg(Environmental affecting, CMMsg msg) { super.executeMsg(affecting, msg); if ((msg.target() == null) || (!(msg.target() instanceof MOB))) return; MOB source = msg.source(); MOB observer = (MOB) affecting; MOB target = (MOB) msg.target(); if ((source != observer) && (target != observer) && (source != target) && (CMath.bset(msg.targetCode(), CMMsg.MASK_MALICIOUS)) && (!observer.isInCombat()) && (CMLib.flags().canBeSeenBy(source, observer)) && (CMLib.flags().canBeSeenBy(target, observer)) && (!BrotherHelper.isBrother(source, observer, false)) && ((CMLib.flags().isEvil(target) && CMLib.flags().isEvil(observer)) || (CMLib.flags().isNeutral(target) && CMLib.flags().isNeutral(observer)) || (CMLib.flags().isGood(target) && CMLib.flags().isGood(observer)))) { Aggressive.startFight( observer, source, true, false, CMLib.flags().getAlignmentName(observer) + " PEOPLE UNITE! CHARGE!"); } }
public boolean invoke( MOB mob, Vector commands, Environmental givenTarget, boolean auto, int asLevel) { if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; HashSet h = properTargets(mob, givenTarget, auto); if (h == null) return false; boolean success = proficiencyCheck(mob, 0, auto); boolean nothingDone = true; if (success) { for (Iterator e = h.iterator(); e.hasNext(); ) { MOB target = (MOB) e.next(); // it worked, so build a copy of this ability, // and add it to the affects list of the // affected MOB. Then tell everyone else // what happened. CMMsg msg = CMClass.getMsg( mob, target, this, verbalCastCode(mob, target, auto) | CMMsg.MASK_MALICIOUS, auto ? "" : "^S<S-NAME> " + prayForWord(mob) + " an unholy paralysis upon <T-NAMESELF>.^?"); CMMsg msg2 = CMClass.getMsg( mob, target, this, CMMsg.MASK_MALICIOUS | CMMsg.TYP_PARALYZE | (auto ? CMMsg.MASK_ALWAYS : 0), null); if ((target != mob) && (mob.location().okMessage(mob, msg)) && (mob.location().okMessage(mob, msg2))) { int levelDiff = target.envStats().level() - (mob.envStats().level() + (2 * super.getXLEVELLevel(mob))); if (levelDiff < 0) levelDiff = 0; if (levelDiff > 6) levelDiff = 6; mob.location().send(mob, msg); mob.location().send(mob, msg2); if ((msg.value() <= 0) && (msg2.value() <= 0)) { success = maliciousAffect(mob, target, asLevel, 8 - levelDiff, -1); mob.location().show(target, null, CMMsg.MSG_OK_VISUAL, "<S-NAME> can't move!"); } nothingDone = false; } } } if (nothingDone) return maliciousFizzle( mob, null, "<S-NAME> attempt(s) to paralyze everyone, but flub(s) it."); // return whether it worked return success; }
@Override public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { final MOB target = this.getTarget(mob, commands, givenTarget); if (target == null) return false; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; boolean success = proficiencyCheck(mob, 0, auto); if (success) { invoker = mob; final CMMsg msg = CMClass.getMsg( mob, target, this, verbalCastCode(mob, target, auto), auto ? "" : L("^S<S-NAME> incant(s) at <T-NAMESELF>.^?")); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); if (msg.value() <= 0) { mob.location().show(target, null, CMMsg.MSG_OK_VISUAL, L("<S-NAME> get(s) sick!")); success = maliciousAffect(mob, target, asLevel, 0, -1) != null; } } } else return maliciousFizzle( mob, target, L("<S-NAME> incant(s) at <T-NAMESELF>, but the spell fizzles.")); // return whether it worked return success; }
@Override public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { final MOB target = getTarget(mob, commands, givenTarget); if (target == null) return false; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; final boolean success = proficiencyCheck(mob, 0, auto); if (success) { invoker = mob; final CMMsg msg = CMClass.getMsg( mob, target, this, verbalCastCode(mob, target, auto), auto ? "" : L("^S<S-NAME> incant(s) to <T-NAMESELF>.^?")); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); if (msg.value() <= 0) { target .curState() .adjThirst( -150 - ((mob.phyStats().level() + (2 * getXLEVELLevel(mob))) * 100), target.maxState().maxThirst(target.baseWeight())); mob.location() .show(target, null, CMMsg.MSG_OK_VISUAL, L("<S-NAME> feel(s) incredibly thirsty!")); } } } else return maliciousFizzle( mob, target, L("<S-NAME> incant(s) to <T-NAMESELF>, but the spell fades.")); // return whether it worked return success; }
@Override public void executeMsg(Environmental host, CMMsg msg) { super.executeMsg(host, msg); if ((msg.sourceMinor() == CMMsg.TYP_DEATH) && (msg.source() != host) && (msg.source().location() != CMLib.map().roomLocation(host))) DoneEquipping = false; }
@Override public boolean invoke( MOB mob, List<String> commands, Physical givenTarget, boolean auto, int asLevel) { MOB target = null; Ability reAffect = null; if (mob.isInCombat()) { if (mob.rangeToTarget() > 0) { mob.tell(L("You are too far away to touch!")); return false; } final MOB victim = mob.getVictim(); reAffect = victim.fetchEffect("Undead_WeakEnergyDrain"); if (reAffect == null) reAffect = victim.fetchEffect("Undead_EnergyDrain"); if (reAffect != null) target = victim; } if (target == null) target = this.getTarget(mob, commands, givenTarget); if (target == null) return false; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; boolean success = proficiencyCheck(mob, 0, auto); String str = null; if (success) { str = auto ? "" : L("^S<S-NAME> extend(s) an energy draining hand to <T-NAMESELF>!^?"); final CMMsg msg = CMClass.getMsg( mob, target, this, CMMsg.MSK_MALICIOUS_MOVE | CMMsg.TYP_UNDEAD | (auto ? CMMsg.MASK_ALWAYS : 0), str); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); if (msg.value() <= 0) { mob.location().show(target, null, CMMsg.MSG_OK_VISUAL, L("<S-NAME> <S-IS-ARE> drained!")); if (reAffect != null) { if (reAffect instanceof Undead_EnergyDrain) ((Undead_EnergyDrain) reAffect).levelsDown++; ((StdAbility) reAffect) .setTickDownRemaining( ((StdAbility) reAffect).getTickDownRemaining() + mob.phyStats().level()); mob.recoverPhyStats(); mob.recoverCharStats(); mob.recoverMaxState(); } else { direction = 1; if (target.charStats().getMyRace().racialCategory().equalsIgnoreCase("Undead")) direction = -1; success = maliciousAffect(mob, target, asLevel, 0, -1) != null; } } } } else return maliciousFizzle( mob, target, L("<S-NAME> attempt(s) to drain <T-NAMESELF>, but fail(s).")); return success; }
@Override public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { final MOB target = this.getTarget(mob, commands, givenTarget); if (target == null) return false; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; // now see if it worked final boolean success = proficiencyCheck(mob, 0, auto); if (success) { final CMMsg msg = CMClass.getMsg( mob, target, this, somanticCastCode(mob, target, auto), L( (auto ? "A " : "^S<S-NAME> incant(s) and point(s) at <T-NAMESELF>. A ") + "long shard of ice streaks through the air!^?") + CMLib.protocol().msp("spelldam2.wav", 40)); final CMMsg msg2 = CMClass.getMsg( mob, target, this, CMMsg.MSK_CAST_MALICIOUS_VERBAL | CMMsg.TYP_COLD | (auto ? CMMsg.MASK_ALWAYS : 0), null); if ((mob.location().okMessage(mob, msg)) && (mob.location().okMessage(mob, msg2))) { mob.location().send(mob, msg); invoker = mob; int damage = 0; final int maxDie = (adjustedLevel(mob, asLevel) + (2 * super.getX1Level(mob))) / 2; damage += CMLib.dice().roll(maxDie, 6, 15); mob.location().send(mob, msg2); if ((msg2.value() > 0) || (msg.value() > 0)) damage = (int) Math.round(CMath.div(damage, 2.0)); if (target.location() == mob.location()) CMLib.combat() .postDamage( mob, target, this, damage, CMMsg.MASK_ALWAYS | CMMsg.TYP_COLD, Weapon.TYPE_FROSTING, L("The lance <DAMAGE> <T-NAME>!")); } } else return maliciousFizzle( mob, target, L("<S-NAME> incant(s) and point(s) at <T-NAMESELF>, but flub(s) the spell.")); // return whether it worked return success; }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if ((affected instanceof MOB) && (msg.amISource((MOB) affected)) && (msg.sourceMinor() == CMMsg.TYP_QUIT)) unInvoke(); else if (msg.sourceMinor() == CMMsg.TYP_SHUTDOWN) unInvoke(); return super.okMessage(myHost, msg); }
@Override public boolean invoke( MOB mob, List<String> commands, Physical givenTarget, boolean auto, int asLevel) { final MOB target = this.getTarget(mob, commands, givenTarget); if (target == null) return false; final boolean undead = CMLib.flags().isUndead(target); 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, target, this, (undead ? 0 : CMMsg.MASK_MALICIOUS) | verbalCastCode(mob, target, auto), L( auto ? "A seriously painful burst assaults <T-NAME>." : "^S<S-NAME> " + prayWord(mob) + " for a serious burst of pain at <T-NAMESELF>!^?") + CMLib.protocol().msp("spelldam1.wav", 40)); final CMMsg msg2 = CMClass.getMsg( mob, target, this, CMMsg.MSK_CAST_MALICIOUS_VERBAL | CMMsg.TYP_UNDEAD | (auto ? CMMsg.MASK_ALWAYS : 0), null); final Room R = target.location(); if ((R != null) && (R.okMessage(mob, msg)) && ((R.okMessage(mob, msg2)))) { R.send(mob, msg); R.send(mob, msg2); if ((msg.value() <= 0) && (msg2.value() <= 0)) { final int harming = CMLib.dice().roll(1, adjustedLevel(mob, asLevel) + 6, 4); CMLib.combat() .postDamage( mob, target, this, harming, CMMsg.MASK_ALWAYS | CMMsg.TYP_UNDEAD, Weapon.TYPE_BURSTING, L("The unholy spell <DAMAGE> <T-NAME>!")); } } } else return maliciousFizzle( mob, target, L("<S-NAME> point(s) at <T-NAMESELF> and @x1, but nothing happens.", prayWord(mob))); // return whether it worked return success; }
@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; }
@Override public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; final boolean success = proficiencyCheck(mob, 0, auto); final String str = auto ? L("The unholy word is spoken.") : L("^S<S-NAME> speak(s) the unholy word@x1 to <T-NAMESELF>.^?", ofDiety(mob)); final Room room = mob.location(); if (room != null) for (int i = 0; i < room.numInhabitants(); i++) { final MOB target = room.fetchInhabitant(i); if (target == null) break; int affectType = CMMsg.MSG_CAST_VERBAL_SPELL; if (auto) affectType = affectType | CMMsg.MASK_ALWAYS; if (CMLib.flags().isGood(target)) affectType = affectType | CMMsg.MASK_MALICIOUS; if (success) { final CMMsg msg = CMClass.getMsg(mob, target, this, affectType, str); if (room.okMessage(mob, msg)) { room.send(mob, msg); if (msg.value() <= 0) { if (CMLib.flags().canBeHeardSpeakingBy(mob, target)) { final Item I = Prayer_Curse.getSomething(mob, true); if (I != null) { Prayer_Curse.endLowerBlessings(I, CMLib.ableMapper().lowestQualifyingLevel(ID())); I.recoverPhyStats(); } Prayer_Curse.endLowerBlessings( target, CMLib.ableMapper().lowestQualifyingLevel(ID())); beneficialAffect(mob, target, asLevel, 0); target.recoverPhyStats(); } else if (CMath.bset(affectType, CMMsg.MASK_MALICIOUS)) maliciousFizzle(mob, target, L("<T-NAME> did not hear the unholy word!")); else beneficialWordsFizzle(mob, target, L("<T-NAME> did not hear the unholy word!")); } } } else { if (CMath.bset(affectType, CMMsg.MASK_MALICIOUS)) maliciousFizzle( mob, target, L("<S-NAME> attempt(s) to speak the unholy word to <T-NAMESELF>, but flub(s) it.")); else beneficialWordsFizzle( mob, target, L("<S-NAME> attempt(s) to speak the unholy word to <T-NAMESELF>, but flub(s) it.")); return false; } } // return whether it worked return success; }
public void executeMsg(Environmental myHost, CMMsg msg) { super.executeMsg(myHost, msg); if ((affected instanceof Item) && (((Item) affected).owner() instanceof Room) && (((Room) ((Item) affected).owner()).isContent((Item) affected)) && (msg.sourceMinor() == CMMsg.TYP_SPEAK) && (invoker != null) && (invoker.location() != ((Room) ((Item) affected).owner())) && (msg.othersMessage() != null)) invoker.executeMsg(invoker, msg); }
@Override public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { final MOB target = this.getTarget(mob, commands, givenTarget); if (target == null) return false; Room R = CMLib.map().roomLocation(target); if (R == null) R = mob.location(); 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, target, this, somanticCastCode(mob, target, auto), L( auto ? "<T-NAME> <T-IS-ARE> sprayed with acid." : "^S<S-NAME> reach(es) for <T-NAMESELF>, spraying acid all over <T-HIM-HER>!^?") + CMLib.protocol().msp("spelldam1.wav", 40)); final CMMsg msg2 = CMClass.getMsg( mob, target, this, CMMsg.MSK_CAST_MALICIOUS_VERBAL | CMMsg.TYP_ACID | (auto ? CMMsg.MASK_ALWAYS : 0), null); if ((R.okMessage(mob, msg)) && ((R.okMessage(mob, msg2)))) { R.send(mob, msg); R.send(mob, msg2); invoker = mob; final int numDice = (adjustedLevel(mob, asLevel) + (2 * super.getX1Level(invoker()))) / 2; int damage = CMLib.dice().roll(2, numDice, 1); if ((msg2.value() > 0) || (msg.value() > 0)) damage = (int) Math.round(CMath.div(damage, 2.0)); CMLib.combat() .postDamage( mob, target, this, damage, CMMsg.MASK_ALWAYS | CMMsg.TYP_ACID, Weapon.TYPE_MELTING, L("The acid <DAMAGE> <T-NAME>!")); maliciousAffect(mob, target, asLevel, 3, -1); } } else return maliciousFizzle( mob, target, L("<S-NAME> reach(es) for <T-NAMESELF>, but nothing more happens.")); return success; }
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 static void doAnimalFollowerLevelingCheck(CharClass C, Environmental host, CMMsg msg) { if ((msg.sourceMessage() == null) && (msg.sourceMinor() == CMMsg.TYP_LEVEL) && (msg.source().isMonster())) { final MOB druidM = msg.source().amUltimatelyFollowing(); if ((druidM != null) && (!druidM.isMonster()) && (druidM.charStats().getCurrentClass().ID().equals(C.ID())) && (CMLib.flags().isAnimalIntelligence(msg.source()) || msg.source() .charStats() .getMyRace() .racialCategory() .equalsIgnoreCase("Vegetation") || msg.source() .charStats() .getMyRace() .racialCategory() .equalsIgnoreCase("Stone Golem"))) { final int xp = msg.source().phyStats().level() * 5; if (xp > 0) { druidM.tell( CMLib.lang().L("Your stewardship has benefitted @x1.", msg.source().name(druidM))); CMLib.leveler().postExperience(druidM, null, null, xp, false); } } } }
@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 invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { final MOB target = this.getTarget(mob, commands, givenTarget); if (target == null) 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, target, this, CMMsg.MSK_CAST_MALICIOUS_VERBAL | CMMsg.TYP_UNDEAD | (auto ? CMMsg.MASK_ALWAYS : 0), null); final CMMsg msg2 = CMClass.getMsg( mob, target, this, verbalCastCode(mob, target, auto), auto ? "" : L("^S<S-NAME> reach(es) at <T-NAMESELF>, @x1!^?", prayingWord(mob))); if ((mob.location().okMessage(mob, msg)) && (mob.location().okMessage(mob, msg2))) { mob.location().send(mob, msg2); mob.location().send(mob, msg); if ((msg.value() <= 0) && (msg2.value() <= 0)) { final int damage = CMLib.dice().roll(1, adjustedLevel(mob, asLevel), 0); CMLib.combat() .postDamage( mob, target, this, damage, CMMsg.MASK_ALWAYS | CMMsg.TYP_UNDEAD, Weapon.TYPE_BURSTING, auto ? L("<T-NAME> shudder(s) in a draining magical wake.") : L("The draining grasp <DAMAGE> <T-NAME>.")); if (mob != target) CMLib.combat() .postHealing( mob, mob, this, CMMsg.MASK_ALWAYS | CMMsg.TYP_CAST_SPELL, damage, null); } } } else return maliciousFizzle( mob, target, L("<S-NAME> reach(es) for <T-NAMESELF>, @x1, but the spell fades.", prayingWord(mob))); // return whether it worked return success; }
@Override public boolean invoke( MOB mob, List<String> commands, Physical givenTarget, boolean auto, int asLevel) { final MOB target = this.getTarget(mob, commands, givenTarget); if (target == null) return false; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; final boolean success = proficiencyCheck(mob, 0, auto); final Room R = target.location(); if (success) { final Prayer_Thunderbolt newOne = (Prayer_Thunderbolt) this.copyOf(); final CMMsg msg = CMClass.getMsg( mob, target, newOne, verbalCastCode(mob, target, auto), L( auto ? "<T-NAME> is filled with a holy charge!" : "^S<S-NAME> " + prayForWord(mob) + " to strike down <T-NAMESELF>!^?") + CMLib.protocol().msp("lightning.wav", 40)); final CMMsg msg2 = CMClass.getMsg( mob, target, this, CMMsg.MSK_CAST_MALICIOUS_VERBAL | CMMsg.TYP_ELECTRIC | (auto ? CMMsg.MASK_ALWAYS : 0), null); if ((R.okMessage(mob, msg)) && ((R.okMessage(mob, msg2)))) { R.send(mob, msg); R.send(mob, msg2); if ((msg.value() <= 0) && (msg2.value() <= 0)) { final int harming = CMLib.dice().roll(1, adjustedLevel(mob, asLevel), adjustedLevel(mob, asLevel)); CMLib.combat() .postDamage( mob, target, this, harming, CMMsg.MASK_ALWAYS | CMMsg.TYP_ELECTRIC, Weapon.TYPE_STRIKING, L("^SThe STRIKE of @x1 <DAMAGES> <T-NAME>!^?", hisHerDiety(mob))); } } } else return maliciousFizzle(mob, target, L("<S-NAME> @x1, but nothing happens.", prayWord(mob))); // return whether it worked return success; }
@Override public void executeMsg(final Environmental myHost, final CMMsg msg) { if ((whom != null) && (song == null) && (msg.amISource(whom)) && (CMLib.flags().canBeSeenBy(whom, invoker()))) { if (trail == null) trail = new StringBuffer(""); ensureCmds(); if (cmds.containsKey("" + msg.sourceMinor())) trail.append(msg.sourceMinor() + ";"); } super.executeMsg(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.source().tell(L("You can't really go anywhere -- you are rooted!")); return false; } } return super.okMessage(myHost, msg); }
public boolean okMessage(Environmental host, CMMsg msg) { if (!super.okMessage(host, msg)) return false; if ((msg.target() == affected) && (msg.targetMinor() == CMMsg.TYP_ENTER) && (affected instanceof Room) && (isLaw(msg.source()))) { msg.source().tell("You don't think there's anything going on in there."); return false; } 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.amISource(mob) && ((msg.sourceMinor() == CMMsg.TYP_SIT) || (msg.sourceMinor() == CMMsg.TYP_SLEEP))) { mob.tell(L("You're too caffeinated for that!")); return false; } return true; }
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; }
@Override public void executeMsg(final Environmental myHost, final CMMsg msg) { super.executeMsg(myHost, msg); if (!(affected instanceof MOB)) return; final MOB mob = (MOB) affected; if ((msg.amISource(mob)) && (!CMath.bset(msg.sourceMajor(), CMMsg.MASK_CHANNEL)) && ((CMath.bset(msg.sourceMajor(), CMMsg.MASK_MOVE)) || (CMath.bset(msg.sourceMajor(), CMMsg.MASK_HANDS)) || (CMath.bset(msg.sourceMajor(), CMMsg.MASK_MOUTH)))) unInvoke(); return; }
@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; }
@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(); } } }