public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { Physical target = getAnyTarget(mob, commands, givenTarget, Wearable.FILTER_ANY); if (target == null) return false; if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; boolean success = proficiencyCheck(mob, 0, auto); if (success) { // 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), auto ? "" : "^S<S-NAME> " + prayWord(mob) + " to extinguish <T-NAMESELF>.^?"); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); CMLib.utensils().extinguish(mob, target, false); target.recoverPhyStats(); mob.location().recoverRoomStats(); } } else return beneficialWordsFizzle( mob, target, "<S-NAME> " + prayWord(mob) + " to extinguish <T-NAMESELF>, but nothing happens."); // return whether it worked return success; }
public TrappedLockedDoor() { super(); Trap t = (Trap) CMClass.getAbility("Trap_Trap"); if (t != null) CMLib.utensils().setTrapped(this, t, true); }
public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { boolean saveTheTrap = false; if ((commands.size() > 0) && (commands.lastElement() instanceof Boolean)) { saveTheTrap = ((Boolean) commands.lastElement()).booleanValue(); commands.removeElementAt(commands.size() - 1); } String whatTounlock = CMParms.combine(commands, 0); Physical unlockThis = null; int dirCode = Directions.getGoodDirectionCode(whatTounlock); Room R = mob.location(); Room nextRoom = null; if (dirCode >= 0) { nextRoom = R.getRoomInDir(dirCode); unlockThis = R.getExitInDir(dirCode); } if ((unlockThis == null) && (whatTounlock.equalsIgnoreCase("room") || whatTounlock.equalsIgnoreCase("here"))) unlockThis = R; if (unlockThis == null) unlockThis = getAnyTarget(mob, commands, givenTarget, Wearable.FILTER_UNWORNONLY); if (unlockThis == null) return false; int oldProficiency = proficiency(); if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; boolean success = proficiencyCheck( mob, +(((mob.phyStats().level() + (getXLEVELLevel(mob) * 2)) - unlockThis.phyStats().level()) * 3), auto); Vector<Physical> permSetV = new Vector<Physical>(); Trap theTrap = CMLib.utensils().fetchMyTrap(unlockThis); if (theTrap != null) permSetV.addElement(unlockThis); Trap opTrap = null; boolean permanent = false; if ((unlockThis instanceof Room) && (CMLib.law().doesOwnThisProperty(mob, ((Room) unlockThis)))) permanent = true; else if (unlockThis instanceof Exit) { Room R2 = null; if (dirCode < 0) for (int d = Directions.NUM_DIRECTIONS() - 1; d >= 0; d--) if (R.getExitInDir(d) == unlockThis) { dirCode = d; R2 = R.getRoomInDir(d); break; } if ((CMLib.law().doesOwnThisProperty(mob, R)) || ((R2 != null) && (CMLib.law().doesOwnThisProperty(mob, R2)))) permanent = true; if (dirCode >= 0) { Exit exit = R.getReverseExit(dirCode); if (exit != null) opTrap = CMLib.utensils().fetchMyTrap(exit); if (opTrap != null) permSetV.addElement(exit); Trap roomTrap = null; if (nextRoom != null) roomTrap = CMLib.utensils().fetchMyTrap(nextRoom); if (roomTrap != null) permSetV.addElement(nextRoom); if ((theTrap != null) && (theTrap.disabled()) && (roomTrap != null)) { opTrap = null; unlockThis = nextRoom; theTrap = roomTrap; } } } if (unlockThis == null) { mob.tell("You can't seem to remember how this works."); return false; } CMMsg msg = CMClass.getMsg( mob, unlockThis, this, auto ? CMMsg.MSG_OK_ACTION : CMMsg.MSG_DELICATE_HANDS_ACT, CMMsg.MSG_DELICATE_HANDS_ACT, CMMsg.MSG_OK_ACTION, auto ? unlockThis.name() + " begins to glow." : "<S-NAME> attempt(s) to safely deactivate a trap on " + unlockThis.name() + "."); if ((success) && (!lastDone.contains("" + unlockThis))) { while (lastDone.size() > 40) lastDone.removeElementAt(0); lastDone.addElement("" + unlockThis); msg.setValue(1); } else msg.setValue(0); if (R.okMessage(mob, msg)) { R.send(mob, msg); if ((unlockThis == lastChecked) && ((theTrap == null) || (theTrap.disabled()))) setProficiency(oldProficiency); if (success) { if (theTrap != null) { theTrap.disable(); if (saveTheTrap) commands.addElement(theTrap); } if (opTrap != null) { opTrap.disable(); if (saveTheTrap) commands.addElement(opTrap); } if (permanent) { for (int i = 0; i < permSetV.size(); i++) { if (theTrap != null) { theTrap.unInvoke(); ((Physical) permSetV.elementAt(i)).delEffect(theTrap); } if (opTrap != null) { opTrap.unInvoke(); ((Physical) permSetV.elementAt(i)).delEffect(opTrap); } } CMLib.database().DBUpdateRoom(R); CMLib.database().DBUpdateExits(R); } } if ((!auto) && (!saveTheTrap)) mob.tell("You have completed your attempt."); lastChecked = unlockThis; } return success; }