@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); }
public boolean okMessage(Environmental myHost, CMMsg msg) { if (!(myHost instanceof MOB)) return super.okMessage(myHost, msg); MOB myChar = (MOB) myHost; if (!super.okMessage(myChar, msg)) return false; if ((msg.amITarget(myChar)) && (msg.targetMinor() == CMMsg.TYP_DAMAGE) && (msg.sourceMinor() == CMMsg.TYP_ACID)) { int recovery = myChar.charStats().getClassLevel(this); msg.setValue(msg.value() - recovery); } else if ((msg.amITarget(myChar)) && (msg.targetMinor() == CMMsg.TYP_DAMAGE) && (msg.sourceMinor() == CMMsg.TYP_ELECTRIC)) { int recovery = msg.value(); msg.setValue(msg.value() + recovery); } return true; }
@Override public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (!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 ((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(Environmental host, CMMsg msg) { if (msg.amITarget(this)) { switch (msg.targetMinor()) { case CMMsg.TYP_ACTIVATE: if (!isInstalled()) { if (!CMath.bset(msg.targetMajor(), CMMsg.MASK_CNTRLMSG)) msg.source().tell(L("@x1 is not installed or connected.", name())); return false; } else if (!isAllWiringHot(this)) { if (!CMath.bset(msg.targetMajor(), CMMsg.MASK_CNTRLMSG)) msg.source() .tell(L("The panel containing @x1 is not activated or connected.", name())); return false; } break; case CMMsg.TYP_DEACTIVATE: break; case CMMsg.TYP_LOOK: break; case CMMsg.TYP_POWERCURRENT: if ((!(this instanceof FuelConsumer)) && (!(this instanceof PowerGenerator)) && activated() && (powerNeeds() > 0) && (msg.value() > 0)) { double amtToTake = Math.min((double) powerNeeds(), (double) msg.value()); msg.setValue(msg.value() - (int) Math.round(amtToTake)); amtToTake *= getFinalManufacturer().getEfficiencyPct(); if (subjectToWearAndTear() && (usesRemaining() <= 200)) amtToTake *= CMath.div(usesRemaining(), 100.0); setPowerRemaining(Math.min(powerCapacity(), Math.round(amtToTake) + powerRemaining())); } break; } } return super.okMessage(host, msg); }
@Override public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException { final Room R = mob.location(); boolean quiet = false; if ((commands != null) && (commands.size() > 1) && (((String) commands.lastElement()).equalsIgnoreCase("UNOBTRUSIVELY"))) { commands.remove(commands.size() - 1); quiet = true; } final String textMsg = "<S-NAME> look(s) "; if (R == null) return false; if ((commands != null) && (commands.size() > 1)) { Environmental thisThang = null; if ((commands.size() > 2) && (((String) commands.get(1)).equalsIgnoreCase("at"))) commands.remove(1); else if ((commands.size() > 2) && (((String) commands.get(1)).equalsIgnoreCase("to"))) commands.remove(1); final String ID = CMParms.combine(commands, 1); if ((ID.toUpperCase().startsWith("EXIT") && (commands.size() == 2)) && (CMProps.getIntVar(CMProps.Int.EXVIEW) != 1)) { final CMMsg exitMsg = CMClass.getMsg(mob, R, null, CMMsg.MSG_LOOK_EXITS, null); if ((CMProps.getIntVar(CMProps.Int.EXVIEW) >= 2) != mob.isAttribute(MOB.Attrib.BRIEF)) exitMsg.setValue(CMMsg.MASK_OPTIMIZE); if (R.okMessage(mob, exitMsg)) R.send(mob, exitMsg); return false; } if (ID.equalsIgnoreCase("SELF") || ID.equalsIgnoreCase("ME")) thisThang = mob; if (thisThang == null) thisThang = R.fetchFromMOBRoomFavorsItems(mob, null, ID, noCoinFilter); if (thisThang == null) thisThang = R.fetchFromMOBRoomFavorsItems(mob, null, ID, Wearable.FILTER_ANY); if ((thisThang == null) && (commands.size() > 2) && (((String) commands.get(1)).equalsIgnoreCase("in"))) { commands.remove(1); final String ID2 = CMParms.combine(commands, 1); thisThang = R.fetchFromMOBRoomFavorsItems(mob, null, ID2, Wearable.FILTER_ANY); if ((thisThang != null) && ((!(thisThang instanceof Container)) || (((Container) thisThang).capacity() == 0))) { mob.tell(L("That's not a container.")); return false; } } int dirCode = -1; Environmental lookingTool = null; if (thisThang == null) { dirCode = Directions.getGoodDirectionCode(ID); if (dirCode >= 0) { final Room room = R.getRoomInDir(dirCode); final Exit exit = R.getExitInDir(dirCode); if ((room != null) && (exit != null)) { thisThang = exit; lookingTool = room; } else { mob.tell(L("You don't see anything that way.")); return false; } } } if (thisThang != null) { String name = "at <T-NAMESELF>"; if ((thisThang instanceof Room) || (thisThang instanceof Exit)) { if (thisThang == R) name = "around"; else if (dirCode >= 0) name = ((R instanceof BoardableShip) || (R.getArea() instanceof BoardableShip)) ? Directions.getShipDirectionName(dirCode) : Directions.getDirectionName(dirCode); } final CMMsg msg = CMClass.getMsg(mob, thisThang, lookingTool, CMMsg.MSG_LOOK, textMsg + name + "."); if ((thisThang instanceof Room) && (mob.isAttribute(MOB.Attrib.AUTOEXITS)) && (CMProps.getIntVar(CMProps.Int.EXVIEW) != 1)) { final CMMsg exitMsg = CMClass.getMsg(mob, thisThang, lookingTool, CMMsg.MSG_LOOK_EXITS, null); if ((CMProps.getIntVar(CMProps.Int.EXVIEW) >= 2) != mob.isAttribute(MOB.Attrib.BRIEF)) exitMsg.setValue(CMMsg.MASK_OPTIMIZE); msg.addTrailerMsg(exitMsg); } if (R.okMessage(mob, msg)) R.send(mob, msg); } else mob.tell(L("You don't see that here!")); } else { if ((commands != null) && (commands.size() > 0)) if (((String) commands.get(0)).toUpperCase().startsWith("E")) { mob.tell(L("Examine what?")); return false; } final CMMsg msg = CMClass.getMsg( mob, R, null, CMMsg.MSG_LOOK, (quiet ? null : textMsg + "around."), CMMsg.MSG_LOOK, (quiet ? null : textMsg + "at you."), CMMsg.MSG_LOOK, (quiet ? null : textMsg + "around.")); if ((mob.isAttribute(MOB.Attrib.AUTOEXITS)) && (CMProps.getIntVar(CMProps.Int.EXVIEW) != 1) && (CMLib.flags().canBeSeenBy(R, mob))) { final CMMsg exitMsg = CMClass.getMsg(mob, R, null, CMMsg.MSG_LOOK_EXITS, null); if ((CMProps.getIntVar(CMProps.Int.EXVIEW) >= 2) != mob.isAttribute(MOB.Attrib.BRIEF)) exitMsg.setValue(CMMsg.MASK_OPTIMIZE); msg.addTrailerMsg(exitMsg); } if (R.okMessage(mob, msg)) R.send(mob, msg); } return false; }