@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) { 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(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 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 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; }
@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 boolean okMessage(Environmental host, CMMsg msg) { if ((affected instanceof MOB) && (msg.amISource((MOB) affected)) && (msg.sourceMinor() == CMMsg.TYP_REBUKE) && (msg.target() != null) && ((msg.target() == invoker()) || (msg.target().Name().equals(godName)))) { msg.source().tell(L("Your faith is too undeniable.")); return false; } return super.okMessage(host, msg); }
@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(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) { 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); } } } }
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; }
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 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; }
public void executeMsg(Environmental myHost, CMMsg msg) { if ((msg.targetMinor() == CMMsg.TYP_EXPIRE) && (msg.target() instanceof Room)) { Room R = (Room) msg.target(); if (R.getGridParent() == this) { if ((roomID().length() > 0) && (getArea() != null)) getArea().delProperRoomnumber(getGridChildCode(R)); DVector thisGridRooms = rooms; thisGridRooms.removeElement(R); Room R2 = null; for (int r = thisGridRooms.size() - 1; r >= 0; r--) { R2 = (Room) thisGridRooms.elementAt(r, 1); for (int d = Directions.NUM_DIRECTIONS() - 1; d >= 0; d--) if (R2.rawDoors()[d] == R) { R2.rawDoors()[d] = null; R2.setRawExit(d, null); } } } } super.executeMsg(myHost, msg); }
@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 ((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 void doAnimalFreeingCheck(CharClass C, Environmental host, CMMsg msg) { if ((msg.source() != host) && (msg.sourceMinor() == CMMsg.TYP_NOFOLLOW) && (msg.source().isMonster()) && (host instanceof MOB) && (!((MOB) host).isMonster()) && (msg.target() == host) && (msg.source().getStartRoom() != null) && (CMLib.law().isACity(msg.source().getStartRoom().getArea())) && (((MOB) host).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")) && (CMLib.flags().flaggedAffects(msg.source(), Ability.FLAG_SUMMONING).size() == 0) && (msg.source().location() != null) && (!msg.source().amDestroyed()) && (CMLib.flags().isInTheGame((MOB) host, true)) && (!CMLib.law().isACity(msg.source().location().getArea()))) { Object[] stuff = (Object[]) animalChecking.get(host); final Room room = msg.source().location(); if ((stuff == null) || (System.currentTimeMillis() - ((Long) stuff[0]).longValue() > (room.getArea().getTimeObj().getDaysInMonth() * room.getArea().getTimeObj().getHoursInDay() * CMProps.getMillisPerMudHour()))) { stuff = new Object[3]; stuff[0] = Long.valueOf(System.currentTimeMillis()); animalChecking.remove(host); animalChecking.put(host, stuff); stuff[1] = Integer.valueOf(0); stuff[2] = new Vector(); } if ((((Integer) stuff[1]).intValue() < 19) && (!((List) stuff[2]).contains("" + msg.source()))) { stuff[1] = Integer.valueOf(((Integer) stuff[1]).intValue() + 1); ((MOB) host) .tell( CMLib.lang() .L( "You have freed @x1 from @x2.", msg.source().name((MOB) host), (msg.source().getStartRoom().getArea().name()))); CMLib.leveler() .postExperience((MOB) host, null, null, ((Integer) stuff[1]).intValue(), false); } } }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (!super.okMessage(myHost, msg)) return false; if ((msg.targetMinor() == CMMsg.TYP_ORDER) && (msg.source().location() != null) && (msg.target() instanceof MOB) && ((msg.source().location() == affected) || ((affected instanceof Area) && (((Area) affected).inMyMetroArea(msg.source().location().getArea()))) || (msg.target() == affected)) && (!CMSecurity.isAllowed( msg.source(), msg.source().location(), CMSecurity.SecFlag.CMDMOBS))) { if (affected instanceof MOB) msg.source().tell(L("You don't feel very commanding around here.")); else msg.source() .tell( msg.source(), msg.target(), null, L("<T-NAME> isn't paying any attention to you.")); return false; } 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 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) { if ((msg.targetMinor() == CMMsg.TYP_ENTER) && (msg.target() == affected) && (msg.source() != invoker()) && (!msg.source().Name().equals(text())) && (!sprung) && (invoker() != null) && (invoker().mayIFight(msg.source())) && ((canBeUninvoked()) || (!CMLib.law().doesHavePriviledgesHere(msg.source(), (Room) affected))) && (CMLib.dice().rollPercentage() > msg.source().charStats().getSave(CharStats.STAT_SAVE_TRAPS))) CMLib.combat().postDeath(invoker(), msg.source(), msg); super.executeMsg(myHost, msg); }
@Override public boolean okMessage(Environmental host, CMMsg msg) { if (!super.okMessage(host, msg)) return false; if ((msg.targetMinor() == CMMsg.TYP_REMOVE) && (msg.target() == affected) && (affected instanceof Item) && (((Item) affected).amWearingAt(Wearable.WORN_NECK))) { if (CMLib.dice().rollPercentage() > (msg.source().charStats().getStat(CharStats.STAT_STRENGTH) * 3)) { msg.source() .location() .show( msg.source(), affected, CMMsg.MSG_OK_VISUAL, L("<S-NAME> struggle(s) to remove <T-NAME> and fail(s).")); return false; } } return true; }
@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 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(Environmental host, CMMsg msg) { super.executeMsg(host, msg); if ((affected instanceof MOB) && (msg.amISource((MOB) affected))) { if (!DATA.containsKey(msg.source())) DATA.put(msg.source(), new int[DATA_TOTAL]); final int[] data = DATA.get(msg.source()); if (data == null) return; if (msg.tool() instanceof Social) { if (nonIPnonMonsterWithMe(msg.source())) data[DATA_GOODSOCIAL]++; if ((msg.target() instanceof MOB) && (!((MOB) msg.target()).isMonster())) data[DATA_DIRSOCIAL]++; data[DATA_ANYSOCIAL]++; } else switch (msg.sourceMinor()) { case CMMsg.TYP_SPEAK: if ((msg.othersMessage() != null) && (msg.sourceMessage() != null) && (msg.othersMinor() == msg.sourceMinor()) && (msg.source().location() != null) && (msg.source().session() != null)) { if (msg.sourceMessage().indexOf("order(s)") > 0) { if ((msg.target() instanceof MOB) && (((MOB) msg.target()).session() != null) && (((MOB) msg.target()) .session() .getAddress() .equals(msg.source().session().getAddress()))) data[DATA_ORDER]++; } else { if (nonIPnonMonsterWithMe(msg.source())) data[DATA_GOODSPEECH]++; if ((msg.target() instanceof MOB) && (!((MOB) msg.target()).isMonster())) data[DATA_DIRSPEECH]++; data[DATA_ANYSPEECH]++; } } break; } } }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (!super.okMessage(myHost, msg)) return false; if ((msg.target() == affected) && msg.isTarget(CMMsg.MASK_MALICIOUS) && CMLib.flags().isAPlant(msg.source()) && (affected instanceof MOB) && (pointsRemaining >= 0)) { final MOB mob = (MOB) affected; final MOB plantMOB = msg.source(); final Room R = plantMOB.location(); if ((R != null) && (R == mob.location())) { if ((msg.isSource(CMMsg.TYP_ADVANCE)) && (--pointsRemaining >= 0)) { R.show( plantMOB, affected, CMMsg.MSG_OK_ACTION, L("<S-NAME> struggle(s) against <T-YOUPOSS> anti-plant shell.")); return false; } else if (plantMOB.getVictim() == null) { plantMOB.setVictim(mob); if (mob.getVictim() == plantMOB) { if (mob.rangeToTarget() > 0) plantMOB.setRangeToTarget(mob.rangeToTarget()); else { plantMOB.setRangeToTarget(R.maxRange()); mob.setRangeToTarget(R.maxRange()); } } else plantMOB.setRangeToTarget(R.maxRange()); if ((--pointsRemaining) < 0) { unInvoke(); return true; } R.show( plantMOB, affected, CMMsg.MSG_OK_ACTION, L("<S-NAME> <S-IS-ARE> repelled by <T-YOUPOSS> anti-plant shell.")); return false; } else if ((plantMOB.getVictim() == affected) && (plantMOB.rangeToTarget() <= 0)) { plantMOB.setRangeToTarget(R.maxRange()); if (mob.getVictim() == plantMOB) mob.setRangeToTarget(R.maxRange()); if ((--pointsRemaining) < 0) { unInvoke(); return true; } R.show( plantMOB, affected, CMMsg.MSG_OK_ACTION, L("<S-NAME> <S-IS-ARE> repelled by <T-YOUPOSS> anti-plant shell.")); return false; } else if ((mob.getVictim() == plantMOB) && (mob.rangeToTarget() <= 0)) { mob.setRangeToTarget(R.maxRange()); if ((--pointsRemaining) < 0) { unInvoke(); return true; } R.show( plantMOB, affected, CMMsg.MSG_OK_ACTION, L("<S-NAME> <S-IS-ARE> repelled by <T-YOUPOSS> anti-plant shell.")); return false; } } } else if (msg.isSource(CMMsg.TYP_ADVANCE) && (msg.source() == affected) && (msg.source().getVictim() == msg.target()) && (CMLib.flags().isAPlant((MOB) msg.target())) && (pointsRemaining >= 0) && (msg.source().rangeToTarget() == 1)) { final MOB plantM = msg.source().getVictim(); if (plantM != null) { final Room R = plantM.location(); if (R != null) { final CMMsg msg2 = CMClass.getMsg( plantM, msg.source(), CMMsg.MSG_RETREAT, L("<S-NAME> <S-IS-ARE> pushed back by <T-YOUPOSS> anti-plant shell.")); if (R.okMessage(plantM, msg2)) R.send(plantM, msg2); } } } if (pointsRemaining < 0) { unInvoke(); return true; } return true; }
@Override public void executeMsg(final Environmental myHost, final CMMsg msg) { super.executeMsg(myHost, msg); if ((myHost == null) || (!(myHost instanceof MOB))) return; final MOB mob = (MOB) myHost; if (msg.amISource(mob)) { if (((msg.sourceMinor() == CMMsg.TYP_LOOK) || (msg.sourceMinor() == CMMsg.TYP_EXAMINE)) && (msg.target() instanceof Wand) && (mob.charStats().getClassLevel(this) >= 30)) { final String message = "<O-NAME> has " + ((Wand) msg.target()).usesRemaining() + " charges remaining."; msg.addTrailerMsg( CMClass.getMsg( mob, null, msg.target(), CMMsg.MSG_OK_VISUAL, CMMsg.NO_EFFECT, CMMsg.NO_EFFECT, message)); } else if (msg.tool() != null) { if (msg.tool().ID().equals("Skill_Spellcraft")) { if ((msg.tool().text().length() > 0) && (msg.target() instanceof MOB)) { Ability A = ((MOB) msg.target()).fetchAbility(msg.tool().text()); if (A == null) return; final Ability myA = mob.fetchAbility(A.ID()); if (myA != null) { if ((!A.isSavable()) && ((A.classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_SPELL) && (CMLib.ableMapper().lowestQualifyingLevel(A.ID()) < 30)) addAbilityToSpellcraftList(mob, A); } else if (CMLib.ableMapper().lowestQualifyingLevel(A.ID()) < 30) { final Vector<Ability> otherChoices = new Vector<Ability>(); for (int a = 0; a < mob.numAbilities(); a++) { final Ability A2 = mob.fetchAbility(a); if ((A2 != null) && (!A2.isSavable()) && ((A2.classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_SPELL)) otherChoices.addElement(A2); } A = (Ability) A.copyOf(); A.setProficiency(0); A.setSavable(false); if (otherChoices.size() > (mob.charStats().getClassLevel(this) / 3)) { final Ability A2 = otherChoices.elementAt(CMLib.dice().roll(1, otherChoices.size(), -1)); clearAbilityFromSpellcraftList(mob, A2); } addAbilityToSpellcraftList(mob, A); } } } else if (msg.tool().ID().equals("Spell_Scribe") || msg.tool().ID().equals("Spell_EnchantWand") || msg.tool().ID().equals("Spell_MagicItem") || msg.tool().ID().equals("Spell_StoreSpell") || msg.tool().ID().equals("Spell_WardArea")) { final Ability A = mob.fetchAbility(msg.tool().text()); if ((A != null) && (!A.isSavable())) clearAbilityFromSpellcraftList(mob, A); } else if (msg.tool() instanceof Ability) { final Ability A = mob.fetchAbility(msg.tool().ID()); if ((A != null) && (!A.isSavable()) && ((A.classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_SPELL)) clearAbilityFromSpellcraftList(mob, A); } } } }
public boolean invoke( MOB mob, Vector commands, Environmental givenTarget, boolean auto, int asLevel) { int autoGenerate = 0; if ((auto) && (givenTarget == this) && (commands.size() > 0) && (commands.firstElement() instanceof Integer)) { autoGenerate = ((Integer) commands.firstElement()).intValue(); commands.removeElementAt(0); givenTarget = null; } DVector enhancedTypes = enhancedTypes(mob, commands); randomRecipeFix(mob, addRecipes(mob, loadRecipes()), commands, autoGenerate); if (commands.size() == 0) { commonTell( mob, "Knit what? Enter \"knit list\" for a list, \"knit refit <item>\" to resize, \"knit scan\", or \"knit mend <item>\"."); return false; } if ((!auto) && (commands.size() > 0) && (((String) commands.firstElement()).equalsIgnoreCase("bundle"))) { bundling = true; if (super.invoke(mob, commands, givenTarget, auto, asLevel)) return super.bundle(mob, commands); return false; } Vector recipes = addRecipes(mob, loadRecipes()); String str = (String) commands.elementAt(0); String startStr = null; bundling = false; int duration = 4; if (str.equalsIgnoreCase("list")) { String mask = CMParms.combine(commands, 1); StringBuffer buf = new StringBuffer(""); int toggler = 1; int toggleTop = 2; for (int r = 0; r < toggleTop; r++) buf.append(CMStrings.padRight("Item", 28) + " Lvl " + CMStrings.padRight("Cloth", 5) + " "); buf.append("\n\r"); for (int r = 0; r < recipes.size(); r++) { Vector V = (Vector) recipes.elementAt(r); if (V.size() > 0) { String item = replacePercent((String) V.elementAt(RCP_FINALNAME), ""); int level = CMath.s_int((String) V.elementAt(RCP_LEVEL)); int wood = CMath.s_int((String) V.elementAt(RCP_WOOD)); wood = adjustWoodRequired(wood, mob); if ((level <= xlevel(mob)) && ((mask == null) || (mask.length() == 0) || mask.equalsIgnoreCase("all") || CMLib.english().containsString(item, mask))) { buf.append( CMStrings.padRight(item, 28) + " " + CMStrings.padRight("" + level, 3) + " " + CMStrings.padRight("" + wood, 5) + ((toggler != toggleTop) ? " " : "\n\r")); if (++toggler > toggleTop) toggler = 1; } } } if (toggler != 1) buf.append("\n\r"); commonTell(mob, buf.toString()); enhanceList(mob); return true; } if (str.equalsIgnoreCase("scan")) return publicScan(mob, commands); else if (str.equalsIgnoreCase("mend")) { building = null; mending = false; messedUp = false; Vector newCommands = CMParms.parse(CMParms.combine(commands, 1)); building = getTarget(mob, mob.location(), givenTarget, newCommands, Wearable.FILTER_UNWORNONLY); if (!canMend(mob, building, false)) return false; mending = true; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; startStr = "<S-NAME> start(s) mending " + building.name() + "."; displayText = "You are mending " + building.name(); verb = "mending " + building.name(); } else if (str.equalsIgnoreCase("refit")) { building = null; mending = false; refitting = false; messedUp = false; Vector newCommands = CMParms.parse(CMParms.combine(commands, 1)); building = getTarget(mob, mob.location(), givenTarget, newCommands, Wearable.FILTER_UNWORNONLY); if (building == null) return false; if ((building.material() & RawMaterial.MATERIAL_MASK) != RawMaterial.MATERIAL_CLOTH) { commonTell(mob, "That's not made of cloth. It can't be refitted."); return false; } if (!(building instanceof Armor)) { commonTell(mob, "You don't know how to refit that sort of thing."); return false; } if (building.envStats().height() == 0) { commonTell(mob, building.name() + " is already the right size."); return false; } refitting = true; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; startStr = "<S-NAME> start(s) refitting " + building.name() + "."; displayText = "You are refitting " + building.name(); verb = "refitting " + building.name(); } else { building = null; mending = false; messedUp = false; refitting = false; aborted = false; int amount = -1; if ((commands.size() > 1) && (CMath.isNumber((String) commands.lastElement()))) { amount = CMath.s_int((String) commands.lastElement()); commands.removeElementAt(commands.size() - 1); } String recipeName = CMParms.combine(commands, 0); Vector foundRecipe = null; Vector matches = matchingRecipeNames(recipes, recipeName, true); for (int r = 0; r < matches.size(); r++) { Vector V = (Vector) matches.elementAt(r); if (V.size() > 0) { int level = CMath.s_int((String) V.elementAt(RCP_LEVEL)); if ((autoGenerate > 0) || (level <= xlevel(mob))) { foundRecipe = V; break; } } } if (foundRecipe == null) { commonTell( mob, "You don't know how to knit a '" + recipeName + "'. Try \"" + triggerStrings()[0].toLowerCase() + " list\" for a list."); return false; } int woodRequired = CMath.s_int((String) foundRecipe.elementAt(RCP_WOOD)); woodRequired = adjustWoodRequired(woodRequired, mob); if (amount > woodRequired) woodRequired = amount; String misctype = (String) foundRecipe.elementAt(RCP_MISCTYPE); bundling = misctype.equalsIgnoreCase("BUNDLE"); int[] pm = {RawMaterial.MATERIAL_CLOTH}; int[][] data = fetchFoundResourceData( mob, woodRequired, "cloth", pm, 0, null, null, bundling, autoGenerate, enhancedTypes); if (data == null) return false; woodRequired = data[0][FOUND_AMT]; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; int lostValue = autoGenerate > 0 ? 0 : CMLib.materials() .destroyResources(mob.location(), woodRequired, data[0][FOUND_CODE], 0, null); building = CMClass.getItem((String) foundRecipe.elementAt(RCP_CLASSTYPE)); if (building == null) { commonTell( mob, "There's no such thing as a " + foundRecipe.elementAt(RCP_CLASSTYPE) + "!!!"); return false; } duration = getDuration( CMath.s_int((String) foundRecipe.elementAt(RCP_TICKS)), mob, CMath.s_int((String) foundRecipe.elementAt(RCP_LEVEL)), 4); String itemName = replacePercent( (String) foundRecipe.elementAt(RCP_FINALNAME), RawMaterial.CODES.NAME(data[0][FOUND_CODE])) .toLowerCase(); if (bundling) itemName = "a " + woodRequired + "# " + itemName; else if (itemName.endsWith("s")) itemName = "some " + itemName; else itemName = CMLib.english().startWithAorAn(itemName); building.setName(itemName); startStr = "<S-NAME> start(s) knitting " + building.name() + "."; displayText = "You are knitting " + building.name(); verb = "knitting " + building.name(); playSound = "scissor.wav"; building.setDisplayText(itemName + " lies here"); building.setDescription(itemName + ". "); if (bundling) building.baseEnvStats().setWeight(woodRequired); else building.baseEnvStats().setWeight(woodRequired / 2); int hardness = RawMaterial.CODES.HARDNESS(data[0][FOUND_CODE]) - 1; building.setBaseValue(CMath.s_int((String) foundRecipe.elementAt(RCP_VALUE))); building.setMaterial(data[0][FOUND_CODE]); building.baseEnvStats().setLevel(CMath.s_int((String) foundRecipe.elementAt(RCP_LEVEL))); building.setSecretIdentity("This is the work of " + mob.Name() + "."); int capacity = CMath.s_int((String) foundRecipe.elementAt(RCP_CAPACITY)); int canContain = CMath.s_int((String) foundRecipe.elementAt(RCP_CONTAINMASK)); int armordmg = CMath.s_int((String) foundRecipe.elementAt(RCP_ARMORDMG)); String spell = (foundRecipe.size() > RCP_SPELL) ? ((String) foundRecipe.elementAt(RCP_SPELL)).trim() : ""; if (bundling) building.setBaseValue(lostValue); addSpells(building, spell); if (building instanceof Weapon) { ((Weapon) building).setWeaponClassification(Weapon.CLASS_NATURAL); setWeaponTypeClass((Weapon) building, misctype); building.baseEnvStats().setDamage(armordmg); ((Weapon) building).setRawProperLocationBitmap(Wearable.WORN_WIELD | Wearable.WORN_HELD); ((Weapon) building).setRawLogicalAnd((capacity > 1)); } if (building instanceof Armor) { if (capacity > 0) { ((Armor) building).setCapacity(capacity + woodRequired); ((Armor) building).setContainTypes(canContain); } ((Armor) building).baseEnvStats().setArmor(0); if (armordmg != 0) ((Armor) building).baseEnvStats().setArmor(armordmg + (abilityCode() - 1) + hardness); setWearLocation(building, misctype, 0); } if (building instanceof Rideable) { setRideBasis((Rideable) building, misctype); } building.recoverEnvStats(); building.text(); building.recoverEnvStats(); } messedUp = !proficiencyCheck(mob, 0, auto); if (bundling) { messedUp = false; duration = 1; verb = "bundling " + RawMaterial.CODES.NAME(building.material()).toLowerCase(); startStr = "<S-NAME> start(s) " + verb + "."; displayText = "You are " + verb; } if (autoGenerate > 0) { commands.addElement(building); return true; } CMMsg msg = CMClass.getMsg(mob, building, this, CMMsg.MSG_NOISYMOVEMENT, startStr); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); building = (Item) msg.target(); beneficialAffect(mob, mob, asLevel, duration); enhanceItem(mob, building, enhancedTypes); } else if (bundling) { messedUp = false; aborted = false; unInvoke(); } return true; }