public boolean tick(Tickable ticking, int tickID) { if (!super.tick(ticking, tickID)) return false; if ((tickID == Tickable.TICKID_MOB) && (affected == spy)) { if (spy.amDead() || (spy.amFollowing() != invoker) || (!CMLib.flags().isInTheGame(spy, false))) unInvoke(); } return true; }
public boolean nofollow(MOB mob, boolean errorsOk, boolean quiet) { if (mob == null) return false; Room R = mob.location(); if (R == null) return false; if (mob.amFollowing() != null) { CMMsg msg = CMClass.getMsg( mob, mob.amFollowing(), null, CMMsg.MSG_NOFOLLOW, quiet ? null : "<S-NAME> stop(s) following <T-NAMESELF>."); // no room OKaffects, since the damn leader may not be here. if (mob.okMessage(mob, msg)) R.send(mob, msg); else return false; } else if (errorsOk) mob.tell("You aren't following anyone!"); return true; }
public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { if (commands.size() < 1) { mob.tell("Chant to whom?"); return false; } String mobName = CMParms.combine(commands, 0).trim().toUpperCase(); MOB target = getTarget(mob, commands, givenTarget); Room newRoom = mob.location(); if (target != null) { newRoom = target.location(); if ((!CMLib.flags().isAnimalIntelligence(target)) || (target.amFollowing() != mob)) { mob.tell("You have no animal follower named '" + mobName + "' here."); return false; } } else { mob.tell("You have no animal follower named '" + mobName + "' here."); return false; } if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; boolean success = proficiencyCheck(mob, 0, auto); if (success) { CMMsg msg = CMClass.getMsg( mob, target, this, verbalCastCode(mob, target, auto), auto ? "" : "^S<S-NAME> chant(s) to <T-NAMESELF>, invoking the a mystical connection.^?"); CMMsg msg2 = CMClass.getMsg(mob, target, this, verbalCastCode(mob, target, auto), null); if ((mob.location().okMessage(mob, msg)) && ((newRoom == mob.location()) || (newRoom.okMessage(mob, msg2)))) { mob.location().send(mob, msg); if (newRoom != mob.location()) newRoom.send(target, msg2); spy = target; beneficialAffect(mob, spy, asLevel, 0); Ability A = spy.fetchEffect(ID()); if (A != null) { mob.addNonUninvokableEffect((Ability) A.copyOf()); A.setAffectedOne(spy); } } } else beneficialVisualFizzle( mob, target, "<S-NAME> chant(s) to <T-NAMESELF>, but the magic fades."); // return whether it worked return success; }
public void executeMsg(final Environmental myHost, final CMMsg msg) { try { super.executeMsg(myHost, msg); if (spy == null) return; if (invoker == null) return; if ((msg.amISource(spy)) && ((msg.sourceMinor() == CMMsg.TYP_LOOK) || (msg.sourceMinor() == CMMsg.TYP_EXAMINE)) && (msg.target() != null) && ((invoker.location() != spy.location()) || (!(msg.target() instanceof Room)))) { disable = true; CMMsg newAffect = CMClass.getMsg(invoker, msg.target(), msg.sourceMinor(), null); msg.target().executeMsg(invoker, newAffect); } else if ((!msg.amISource(invoker)) && (invoker.location() != spy.location()) && (msg.source().location() == spy.location()) && (msg.othersCode() != CMMsg.NO_EFFECT) && (msg.othersMessage() != null) && (!disable)) { disable = true; invoker.executeMsg(invoker, msg); } else if (msg.amISource(invoker) && (!disable) && (msg.sourceMinor() == CMMsg.TYP_SPEAK) && (msg.sourceMessage() != null) && ((msg.sourceMajor() & CMMsg.MASK_MAGIC) == 0)) { int start = msg.sourceMessage().indexOf("\'"); int end = msg.sourceMessage().lastIndexOf("\'"); if ((start > 0) && (end > start)) { String msg2 = msg.sourceMessage().substring(start + 1, end).trim(); if (msg2.length() > 0) spy.enqueCommand(CMParms.parse(msg2.trim()), Command.METAFLAG_FORCED, 0); } } } finally { disable = false; if ((spy != null) && ((spy.amFollowing() != invoker) || (spy.amDead()) || (!CMLib.flags().isInTheGame(spy, false)) || (!CMLib.flags().isInTheGame(invoker, true)))) unInvoke(); } }