public Vector getDeadBodies(Environmental E) { if (E instanceof DeadBody) return CMParms.makeVector(E); if (E instanceof Container) { Vector Bs = new Vector(); Vector V = ((Container) E).getContents(); for (int v = 0; v < V.size(); v++) Bs.addAll(getDeadBodies((Environmental) V.elementAt(v))); return Bs; } return new Vector(); }
public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException { if (mob.location().numInhabitants() == 1) { mob.tell("You will need to find someone to teach you first."); return false; } if (commands.size() == 1) { mob.tell("Learn what? Enter QUALIFY or TRAIN to see what you can learn."); return false; } commands.removeElementAt(0); String teacherName = ""; if (commands.size() > 1) { teacherName = " " + (String) commands.lastElement(); if (teacherName.length() > 1) { commands.removeElementAt(commands.size() - 1); if ((commands.size() > 1) && (((String) commands.lastElement()).equalsIgnoreCase("FROM"))) commands.removeElementAt(commands.size() - 1); } else teacherName = ""; } String what = CMParms.combine(commands, 0); Vector V = Train.getAllPossibleThingsToTrainFor(); if (V.contains(what.toUpperCase().trim())) { Vector CC = CMParms.makeVector("SAY", "I would like to be trained in " + what); mob.doCommand(CC, metaFlags); if (teacherName.length() > 0) commands.addElement(teacherName.trim()); Command C = CMClass.getCommand("TRAIN"); if (C != null) C.execute(mob, commands, metaFlags); return true; } if (CMClass.findAbility(what + teacherName, mob) != null) { Vector CC = CMParms.makeVector("SAY", "I would like you to teach me " + what); mob.doCommand(CC, metaFlags); return true; } ExpertiseLibrary.ExpertiseDefinition theExpertise = null; Vector V2 = CMLib.expertises().myListableExpertises(mob); for (Enumeration e = V2.elements(); e.hasMoreElements(); ) { ExpertiseLibrary.ExpertiseDefinition def = (ExpertiseLibrary.ExpertiseDefinition) e.nextElement(); if ((def.name.equalsIgnoreCase(what + teacherName) || def.name.equalsIgnoreCase(what)) || (def.name.toLowerCase().startsWith((what + teacherName).toLowerCase()) && (CMath.isRomanNumeral(def.name.substring((what + teacherName).length()).trim()) || CMath.isNumber(def.name.substring((what + teacherName).length()).trim()))) || (def.name.toLowerCase().startsWith((what).toLowerCase()) && (CMath.isRomanNumeral(def.name.substring((what).length()).trim()) || CMath.isNumber(def.name.substring((what).length()).trim())))) { theExpertise = def; break; } } if (theExpertise == null) for (Enumeration e = CMLib.expertises().definitions(); e.hasMoreElements(); ) { ExpertiseLibrary.ExpertiseDefinition def = (ExpertiseLibrary.ExpertiseDefinition) e.nextElement(); if ((def.name.equalsIgnoreCase(what + teacherName) || def.name.equalsIgnoreCase(what))) { theExpertise = def; break; } } if (theExpertise != null) { Vector CC = CMParms.makeVector("SAY", "I would like you to teach me " + theExpertise.name); mob.doCommand(CC, metaFlags); return true; } for (int v = 0; v < V.size(); v++) if (((String) V.elementAt(v)).startsWith(what.toUpperCase().trim())) { Vector CC = CMParms.makeVector("SAY", "I would like to be trained in " + what); mob.doCommand(CC, metaFlags); if (teacherName.length() > 0) commands.addElement(teacherName.trim()); Command C = CMClass.getCommand("TRAIN"); if (C != null) C.execute(mob, commands, metaFlags); return true; } Vector CC = CMParms.makeVector("SAY", "I would like you to teach me " + what + teacherName); mob.doCommand(CC, metaFlags); return false; }
public boolean invoke( MOB mob, Vector commands, Environmental givenTarget, boolean auto, int asLevel) { if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; Room target = mob.location(); if ((auto) && (givenTarget != null) && (givenTarget instanceof Room)) target = (Room) givenTarget; Ability A = target.fetchEffect(ID()); if (A != null) { mob.tell("This place is already a safehouse."); return false; } if ((!auto) && (CMLib.law().getLegalBehavior(target) == null)) { mob.tell("There is no law here!"); return false; } if (!isGoodSafehouse(target)) { TrackingLibrary.TrackingFlags flags; flags = new TrackingLibrary.TrackingFlags() .add(TrackingLibrary.TrackingFlag.OPENONLY) .add(TrackingLibrary.TrackingFlag.AREAONLY) .add(TrackingLibrary.TrackingFlag.NOEMPTYGRIDS) .add(TrackingLibrary.TrackingFlag.NOAIR) .add(TrackingLibrary.TrackingFlag.NOWATER); Vector V = CMLib.tracking().getRadiantRooms(target, flags, 50 + (2 * getXLEVELLevel(mob))); Room R = null; int v = 0; for (; v < V.size(); v++) { R = (Room) V.elementAt(v); if ((isGoodSafehouse(R)) && (!isLawHere(R))) break; } mob.tell("A place like this can't be a safehouse."); if ((isGoodSafehouse(R)) && (!isLawHere(R))) { V = CMLib.tracking() .findBastardTheBestWay( target, CMParms.makeVector(R), flags, 50 + (2 * getXLEVELLevel(mob))); StringBuffer trail = new StringBuffer(""); int dir = CMLib.tracking().trackNextDirectionFromHere(V, target, true); while (target != R) { if ((dir < 0) || (dir >= Directions.NUM_DIRECTIONS()) || (target == null)) break; trail.append(Directions.getDirectionName(dir)); if (target.getRoomInDir(dir) != R) trail.append(", "); target = target.getRoomInDir(dir); dir = CMLib.tracking().trackNextDirectionFromHere(V, target, true); } if (target == R) mob.tell("You happen to know of one nearby though. Go: " + trail.toString()); } return false; } boolean success = proficiencyCheck(mob, 0, auto); CMMsg msg = CMClass.getMsg( mob, null, this, auto ? CMMsg.MASK_ALWAYS : CMMsg.MSG_DELICATE_HANDS_ACT, CMMsg.MSG_OK_VISUAL, CMMsg.MSG_OK_VISUAL, auto ? "" : "<S-NAME> hide(s) out from the law here."); if (!success) return beneficialVisualFizzle( mob, null, auto ? "" : "<S-NAME> attempt(s) hide out from the law here, but things are just too hot."); else if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); beneficialAffect(mob, target, asLevel, (CMProps.getIntVar(CMProps.SYSTEMI_TICKSPERMUDMONTH))); } return success; }
public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException { if (mob.session() == null) return true; PlayerStats pstats = mob.playerStats(); if (pstats == null) return true; if ((commands != null) && (commands.size() > 1) && (commands.elementAt(1) instanceof String) && (CMProps.getVar(CMProps.SYSTEM_MAILBOX).length() > 0)) { String name = CMParms.combine(commands, 1); if (name.equalsIgnoreCase("BOX")) { String journalName = CMProps.getVar(CMProps.SYSTEM_MAILBOX); Vector<JournalsLibrary.JournalEntry> msgs = CMLib.database().DBReadJournalMsgs(journalName); while ((mob.session() != null) && (!mob.session().killFlag())) { Vector mymsgs = new Vector(); StringBuffer messages = new StringBuffer( "^X" + CMStrings.padCenter(mob.Name() + "'s MailBox", 48) + "^?^.\n\r"); messages.append( "^X### " + CMStrings.padRight("From", 15) + " " + CMStrings.padRight("Date", 20) + " Subject^?^.\n\r"); for (int num = 0; num < msgs.size(); num++) { JournalsLibrary.JournalEntry thismsg = msgs.elementAt(num); String to = (String) thismsg.to; if (to.equalsIgnoreCase("ALL") || to.equalsIgnoreCase(mob.Name()) || (to.toUpperCase().trim().startsWith("MASK=") && CMLib.masking().maskCheck(to.trim().substring(5), mob, true))) { mymsgs.addElement(thismsg); messages.append( CMStrings.padRight("" + mymsgs.size(), 4) + CMStrings.padRight((thismsg.from), 16) + CMStrings.padRight(CMLib.time().date2String(thismsg.date), 21) + (thismsg.subj) + "\n\r"); } } if ((mymsgs.size() == 0) || (CMath.bset(metaFlags, Command.METAFLAG_POSSESSED)) || (CMath.bset(metaFlags, Command.METAFLAG_AS))) { if (CMath.bset(mob.getBitmap(), MOB.ATT_AUTOFORWARD)) mob.tell( "You have no email waiting, but then, it's probably been forwarded to you already."); else mob.tell("You have no email waiting."); return false; } Session S = mob.session(); try { if (S != null) S.snoopSuspension(1); mob.tell(messages.toString()); } finally { if (S != null) S.snoopSuspension(-1); } String s = mob.session().prompt("Enter a message #", ""); if ((!CMath.isInteger(s)) || (mob.session().killFlag())) return false; int num = CMath.s_int(s); if ((num <= 0) || (num > mymsgs.size())) mob.tell("That is not a valid number."); else while ((mob.session() != null) && (!mob.session().killFlag())) { JournalsLibrary.JournalEntry thismsg = (JournalsLibrary.JournalEntry) mymsgs.elementAt(num - 1); String key = thismsg.key; String from = thismsg.from; String date = CMLib.time().date2String(thismsg.date); String subj = thismsg.subj; String message = thismsg.msg; messages = new StringBuffer(""); messages.append("^XMessage :^?^." + num + "\n\r"); messages.append("^XFrom :^?^." + from + "\n\r"); messages.append("^XDate :^?^." + date + "\n\r"); messages.append("^XSubject :^?^." + subj + "\n\r"); messages.append("^X------------------------------------------------^?^.\n\r"); messages.append(message + "\n\r\n\r"); try { if (S != null) S.snoopSuspension(1); mob.tell(messages.toString()); } finally { if (S != null) S.snoopSuspension(-1); } s = mob.session() .choose("Would you like to D)elete, H)old, or R)eply (D/H/R)? ", "DHR", "H"); if (s.equalsIgnoreCase("H")) break; if (s.equalsIgnoreCase("R")) { if ((from.length() > 0) && (!from.equals(mob.Name())) && (!from.equalsIgnoreCase("BOX")) && (CMLib.players().getLoadPlayer(from) != null)) execute(mob, CMParms.makeVector(getAccessWords()[0], from), metaFlags); else mob.tell("You can not reply to this email."); } else if (s.equalsIgnoreCase("D")) { CMLib.database().DBDeleteJournal(journalName, key); msgs.remove(thismsg); mob.tell("Deleted."); break; } } } } else { MOB M = CMLib.players().getLoadPlayer(name); if (M == null) { mob.tell( "There is no player called '" + name + "' to send email to. If you were trying to read your mail, try EMAIL BOX. If you were trying to change your email address, just enter EMAIL without any parameters."); return false; } if (!CMath.bset(M.getBitmap(), MOB.ATT_AUTOFORWARD)) { if (!mob.session().confirm("Send email to '" + M.Name() + "' (Y/n)?", "Y")) return false; } else { if (!mob.session() .confirm( "Send email to '" + M.Name() + "', even though their AUTOFORWARD is turned off (y/N)?", "N")) return false; } if (CMProps.getIntVar(CMProps.SYSTEMI_MAXMAILBOX) > 0) { int count = CMLib.database() .DBCountJournal(CMProps.getVar(CMProps.SYSTEM_MAILBOX), null, M.Name()); if (count >= CMProps.getIntVar(CMProps.SYSTEMI_MAXMAILBOX)) { mob.tell(M.Name() + "'s mailbox is full."); return false; } } String subject = mob.session().prompt("Email Subject: ", "").trim(); if (subject.length() == 0) { mob.tell("Aborted"); return false; } String message = mob.session().prompt("Enter your message\n\r: ", "").trim(); if (message.trim().length() == 0) { mob.tell("Aborted"); return false; } message += "\n\r\n\rThis message was sent through the " + CMProps.getVar(CMProps.SYSTEM_MUDNAME) + " mail server at " + CMProps.getVar(CMProps.SYSTEM_MUDDOMAIN) + ", port" + CMProps.getVar(CMProps.SYSTEM_MUDPORTS) + ". Please contact the administrators regarding any abuse of this system.\n\r"; CMLib.database() .DBWriteJournal( CMProps.getVar(CMProps.SYSTEM_MAILBOX), mob.Name(), M.Name(), subject, message); mob.tell("Your email has been sent."); return true; } } if ((pstats.getEmail() == null) || (pstats.getEmail().length() == 0)) mob.session().println("\n\rYou have no email address on file for this character."); else { if (commands == null) return true; String change = mob.session() .prompt( "You currently have '" + pstats.getEmail() + "' set as the email address for this character.\n\rChange it (y/N)?", "N"); if (change.toUpperCase().startsWith("N")) return false; } if ((CMProps.getVar(CMProps.SYSTEM_EMAILREQ).toUpperCase().startsWith("PASS")) && (commands != null) && (CMProps.getVar(CMProps.SYSTEM_MAILBOX).length() > 0)) mob.session() .println( "\n\r** Changing your email address will cause you to be logged off, and a new password to be generated and emailed to the new address. **\n\r"); String newEmail = mob.session().prompt("New E-mail Address:"); if (newEmail == null) return false; newEmail = newEmail.trim(); if (!CMProps.getVar(CMProps.SYSTEM_EMAILREQ).toUpperCase().startsWith("OPTION")) { if (newEmail.length() < 6) return false; if (newEmail.indexOf("@") < 0) return false; String confirmEmail = mob.session() .prompt("Confirm that '" + newEmail + "' is correct by re-entering.\n\rRe-enter:"); if (confirmEmail == null) return false; confirmEmail = confirmEmail.trim(); if (confirmEmail.length() == 0) return false; if (!(newEmail.equalsIgnoreCase(confirmEmail))) return false; } pstats.setEmail(newEmail); CMLib.database().DBUpdateEmail(mob); if ((commands != null) && (CMProps.getVar(CMProps.SYSTEM_EMAILREQ).toUpperCase().startsWith("PASS")) && (CMProps.getVar(CMProps.SYSTEM_MAILBOX).length() > 0)) { String password = ""; for (int i = 0; i < 6; i++) password += (char) ('a' + CMLib.dice().roll(1, 26, -1)); pstats.setPassword(password); CMLib.database().DBUpdatePassword(mob.Name(), password); CMLib.database() .DBWriteJournal( CMProps.getVar(CMProps.SYSTEM_MAILBOX), mob.Name(), mob.Name(), "Password for " + mob.Name(), "Your new password for " + mob.Name() + " is: " + pstats.password() + "\n\rYou can login by pointing your mud client at " + CMProps.getVar(CMProps.SYSTEM_MUDDOMAIN) + " port(s):" + CMProps.getVar(CMProps.SYSTEM_MUDPORTS) + ".\n\rYou may use the PASSWORD command to change it once you are online."); mob.tell("You will receive an email with your new password shortly. Goodbye."); if (mob.session() != null) { try { Thread.sleep(1000); } catch (Exception e) { } mob.session().kill(false, false, false); } } return true; }
public boolean okMessage(Environmental myHost, CMMsg msg) { if (!super.okMessage(myHost, msg)) return false; if (CMath.bset(flags(), Area.FLAG_INSTANCE_CHILD)) return true; setAreaState(Area.STATE_PASSIVE); if ((msg.sourceMinor() == CMMsg.TYP_ENTER) && (msg.target() instanceof Room) && (CMath.bset(flags(), Area.FLAG_INSTANCE_PARENT)) && (isRoom((Room) msg.target())) && (!CMSecurity.isAllowed(msg.source(), (Room) msg.target(), "CMDAREAS")) && (((msg.source().getStartRoom() == null) || (msg.source().getStartRoom().getArea() != this)))) { synchronized (children) { int myDex = -1; for (int i = 0; i < children.size(); i++) { Vector V = (Vector) children.elementAt(i, 1); if (V.contains(msg.source())) { myDex = i; break; } } HashSet grp = msg.source().getGroupMembers(new HashSet()); for (int i = 0; i < children.size(); i++) { if (i != myDex) { Vector V = (Vector) children.elementAt(i, 1); for (int v = V.size() - 1; v >= 0; v--) { MOB M = (MOB) V.elementAt(v); if (grp.contains(M)) { if (myDex < 0) { myDex = i; break; } else if ((CMLib.flags().isInTheGame(M, true)) && (M.location().getArea() != (Area) children.elementAt(i, 2))) { V.remove(M); ((Vector) children.elementAt(myDex, 1)).addElement(M); } } } } } StdThinInstance redirectA = null; if (myDex < 0) { StdThinInstance newA = (StdThinInstance) this.copyOf(); newA.properRooms = new Vector(1); newA.properRoomIDSet = null; newA.metroRoomIDSet = null; newA.blurbFlags = new Vector(1); newA.setName((++instanceCounter) + "_" + Name()); newA.flags |= Area.FLAG_INSTANCE_CHILD; for (Enumeration e = getProperRoomnumbers().getRoomIDs(); e.hasMoreElements(); ) newA.addProperRoomnumber(newA.convertToMyArea((String) e.nextElement())); redirectA = newA; CMLib.map().addArea(newA); newA.setAreaState(Area.STATE_ACTIVE); // starts ticking children.addElement(CMParms.makeVector(msg.source()), redirectA); } else redirectA = (StdThinInstance) children.elementAt(myDex, 2); Room R = redirectA.getRoom( redirectA.convertToMyArea(CMLib.map().getExtendedRoomID((Room) msg.target()))); if (R != null) msg.setTarget(R); } } return true; }