public Item buildMyThing(MOB mob, Room room) { Area A = room.getArea(); boolean bonusWorthy = (Druid_MyPlants.myPlant(room, mob, 0) == null); Vector V = Druid_MyPlants.myAreaPlantRooms(mob, room.getArea()); int pct = 0; if (A.getAreaIStats()[Area.Stats.VISITABLE_ROOMS.ordinal()] > 10) pct = (int) Math.round( 100.0 * CMath.div( V.size(), A.getAreaIStats()[Area.Stats.VISITABLE_ROOMS.ordinal()])); Item I = buildMyPlant(mob, room); if ((I != null) && ((mob.charStats().getCurrentClass().baseClass().equalsIgnoreCase("Druid")) || (CMSecurity.isASysOp(mob)))) { if (!CMLib.law().isACity(A)) { if (pct > 0) { int newPct = (int) Math.round( 100.0 * CMath.div( V.size(), A.getAreaIStats()[Area.Stats.VISITABLE_ROOMS.ordinal()])); if ((newPct >= 50) && (A.fetchEffect("Chant_DruidicConnection") == null)) { Ability A2 = CMClass.getAbility("Chant_DruidicConnection"); if (A2 != null) A2.invoke(mob, A, true, 0); } } } else if ((bonusWorthy) && (!mob.isMonster())) { long[] num = (long[]) plantBonuses.get(mob.Name() + "/" + room.getArea().Name()); if ((num == null) || (System.currentTimeMillis() - num[1] > (room.getArea().getTimeObj().getDaysInMonth() * room.getArea().getTimeObj().getHoursInDay() * CMProps.getMillisPerMudHour()))) { num = new long[2]; plantBonuses.remove(mob.Name() + "/" + room.getArea().Name()); plantBonuses.put(mob.Name() + "/" + room.getArea().Name(), num); num[1] = System.currentTimeMillis(); } if (V.size() >= num[0]) { num[0]++; if (num[0] < 19) { mob.tell("You have made this city greener."); CMLib.leveler().postExperience(mob, null, null, (int) num[0], false); } } } } return I; }
public static Item buildPlant(MOB mob, Room room) { Item newItem = CMClass.getItem("GenItem"); newItem.setMaterial(RawMaterial.RESOURCE_GREENS); switch (CMLib.dice().roll(1, 5, 0)) { case 1: newItem.setName("some happy flowers"); newItem.setDisplayText("some happy flowers are growing here."); newItem.setDescription("Happy flowers with little red and yellow blooms."); break; case 2: newItem.setName("some happy weeds"); newItem.setDisplayText("some happy weeds are growing here."); newItem.setDescription("Long stalked little plants with tiny bulbs on top."); break; case 3: newItem.setName("a pretty fern"); newItem.setDisplayText("a pretty fern is growing here."); newItem.setDescription("Like a tiny bush, this dark green plant is lovely."); break; case 4: newItem.setName("a patch of sunflowers"); newItem.setDisplayText("a patch of sunflowers is growing here."); newItem.setDescription("Happy flowers with little yellow blooms."); break; case 5: newItem.setName("a patch of bluebonnets"); newItem.setDisplayText("a patch of bluebonnets is growing here."); newItem.setDescription("Happy flowers with little blue and purple blooms."); break; } Chant_SummonPlants newChant = new Chant_SummonPlants(); newItem.basePhyStats().setLevel(10 + (10 * newChant.getX1Level(mob))); newItem.basePhyStats().setWeight(1); newItem.setSecretIdentity(mob.Name()); newItem.setMiscText(newItem.text()); room.addItem(newItem); newItem.setExpirationDate(0); room.showHappens(CMMsg.MSG_OK_ACTION, "Suddenly, " + newItem.name() + " sprout(s) up here."); newChant.PlantsLocation = room; newChant.littlePlants = newItem; if (CMLib.law().doesOwnThisProperty(mob, room)) { newChant.setInvoker(mob); newChant.setMiscText(mob.Name()); newItem.addNonUninvokableEffect(newChant); } else newChant.beneficialAffect(mob, newItem, 0, (newChant.adjustedLevel(mob, 0) * 240) + 450); room.recoverPhyStats(); return newItem; }
public void unInvoke() { // undo the affects of this spell if ((affected == null) || (!(affected instanceof MOB))) return; MOB mob = (MOB) affected; super.unInvoke(); if ((canBeUninvoked()) && (mob.location() != null)) { if ((failed) || (!CMLib.flags().isSitting(mob)) || (room == null) || (title == null) || (mob.location() != room)) mob.tell("You are no longer squatting."); else if (title.landOwner().length() > 0) { mob.tell( "Your squat has succeeded. This property no longer belongs to " + title.landOwner() + "."); title.setLandOwner(""); title.updateTitle(); title.updateLot(null); } else if (title.landOwner().length() > 0) { mob.tell("Your squat has succeeded. This property now belongs to you."); title.setLandOwner(mob.Name()); title.updateTitle(); title.updateLot(new XVector(mob.name())); } } failed = false; }
public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException { boolean skipChecks = mob.Name().equals(mob.getClanID()); Room R = mob.location(); if (skipChecks) { commands.setElementAt(getAccessWords()[0], 0); R = CMLib.map().getRoom(CMParms.combine(commands, 1)); } else { commands.clear(); commands.addElement(getAccessWords()[0]); commands.addElement(CMLib.map().getExtendedRoomID(R)); } if ((mob.getClanID() == null) || (R == null) || (mob.getClanID().equalsIgnoreCase(""))) { mob.tell("You aren't even a member of a clan."); return false; } Clan C = mob.getMyClan(); if (C == null) { mob.tell("There is no longer a clan called " + mob.getClanID() + "."); return false; } if (C.getStatus() > Clan.CLANSTATUS_ACTIVE) { mob.tell( "You cannot set a morgue. Your " + C.getGovernmentName() + " does not have enough members to be considered active."); return false; } if (skipChecks || CMLib.clans().goForward(mob, C, commands, Clan.Function.SET_HOME, false)) { if (!CMLib.law().doesOwnThisProperty(C.clanID(), R)) { mob.tell("Your " + C.getGovernmentName() + " does not own this room."); return false; } if (skipChecks || CMLib.clans().goForward(mob, C, commands, Clan.Function.SET_HOME, true)) { C.setMorgue(CMLib.map().getExtendedRoomID(R)); C.update(); mob.tell( "Your " + C.getGovernmentName() + " morgue is now set to " + R.roomTitle(mob) + "."); CMLib.clans() .clanAnnounce( mob, "The morgue of " + C.getGovernmentName() + " " + C.clanID() + " is now set to " + R.roomTitle(mob) + "."); return true; } } else { mob.tell( "You aren't in the right position to set your " + C.getGovernmentName() + "'s morgue."); return false; } return false; }
public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { MOB target = getTargetAnywhere(mob, commands, givenTarget, false, true, false); if (target == null) return false; Ability A = target.fetchEffect(ID()); if (A != null) { A.unInvoke(); mob.tell(target.Name() + " is released from his freezedness."); return true; } 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, CMMsg.MASK_MOVE | CMMsg.TYP_JUSTICE | (auto ? CMMsg.MASK_ALWAYS : 0), auto ? "A frozen chill falls upon <T-NAME>!" : "^F<S-NAME> freeze(s) <T-NAMESELF>.^?"); CMLib.color().fixSourceFightColor(msg); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); mob.location().show(target, null, CMMsg.MSG_OK_VISUAL, "<S-NAME> <S-IS-ARE> frozen!"); beneficialAffect(mob, target, asLevel, Ability.TICKS_ALMOST_FOREVER); Log.sysOut("Freeze", mob.name() + " freezed " + target.name() + "."); } } else return beneficialVisualFizzle( mob, target, "<S-NAME> attempt(s) to freeze <T-NAMESELF>, but fail(s)."); return success; }
public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException { commands.removeElementAt(0); MOB leader = CMLib.combat().getFollowedLeader(mob); List<MOB>[] done = CMLib.combat().getFormation(mob); if (commands.size() == 0) { StringBuffer str = new StringBuffer(""); for (int i = 0; i < done.length; i++) if (done[i] != null) { if (i == 0) str.append("^xfront - ^.^?"); else str.append("^xrow +" + i + " - ^.^?"); for (int i2 = 0; i2 < done[i].size(); i2++) str.append(((i2 > 0) ? ", " : "") + ((MOB) done[i].get(i2)).name()); str.append("\n\r"); } mob.session().colorOnlyPrintln(str.toString()); } else if (commands.size() == 1) mob.tell("Put whom in what row?"); else if (mob.numFollowers() == 0) mob.tell("Noone is following you!"); else { String row = (String) commands.lastElement(); if ("FRONT".startsWith(row.toUpperCase())) row = "0"; commands.removeElementAt(commands.size() - 1); String name = CMParms.combine(commands, 0); MOB who = null; if (CMLib.english().containsString(mob.name(), name) || CMLib.english().containsString(mob.Name(), name)) { mob.tell("You can not move your own position. You are always the leader of your party."); return false; } for (int f = 0; f < mob.numFollowers(); f++) { MOB M = mob.fetchFollower(f); if (M == null) continue; if (CMLib.english().containsString(M.name(), name) || CMLib.english().containsString(M.Name(), name)) { who = M; break; } } if (who == null) { mob.tell("There is noone following you called " + name + "."); return false; } if ((!CMath.isNumber(row)) || (CMath.s_int(row) < 0)) mob.tell( "'" + row + "' is not a valid row in which to put " + who.name() + ". Try number greater than 0."); else { int leaderRow = -1; for (int f = 0; f < done.length; f++) if ((done[f] != null) && (done[f].contains(leader))) { leaderRow = f; break; } if (leaderRow < 0) mob.tell("You do not exist."); else if (CMath.s_int(row) < leaderRow) mob.tell( "You can not place " + who.name() + " behind your own position, which is " + leaderRow + "."); else { mob.addFollower(who, CMath.s_int(row) - leaderRow); mob.tell("You have positioned " + who.name() + " to row " + CMath.s_int(row)); } } } return false; }
public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException { if ((commands.size() == 1) && (((String) commands.firstElement()).startsWith("QUESTW"))) commands.addElement("WON"); if ((commands.size() > 1) && (((String) commands.elementAt(1)).equalsIgnoreCase("WON"))) { Vector qVec = new Vector(); for (int q = 0; q < CMLib.quests().numQuests(); q++) { Quest Q = CMLib.quests().fetchQuest(q); if (Q.wasWinner(mob.Name())) { String name = Q.displayName().trim().length() > 0 ? Q.displayName() : Q.name(); if (!qVec.contains(name)) qVec.addElement(name); } } Collections.sort(qVec); StringBuffer msg = new StringBuffer("^HQuests you are listed as having won:^?^N\n\r"); for (int i = 0; i < qVec.size(); i++) msg.append(((String) qVec.elementAt(i)) + "^N\n\r"); if (!mob.isMonster()) mob.tell(msg.toString()); } else if ((commands.size() > 2) && (((String) commands.elementAt(1)).equalsIgnoreCase("DROP"))) { ScriptingEngine foundS = null; for (Enumeration<ScriptingEngine> e = mob.scripts(); e.hasMoreElements(); ) { ScriptingEngine SE = e.nextElement(); if (SE == null) continue; if ((SE.defaultQuestName().length() > 0) && (CMLib.quests().findQuest(SE.defaultQuestName()) == null)) foundS = SE; } if (foundS != null) mob.delScript(foundS); foundS = null; String rest = CMParms.combine(commands, 2); Quest Q = CMLib.quests().findQuest(rest); if (Q == null) { mob.tell("There is no such quest as '" + rest + "'."); return false; } for (Enumeration<ScriptingEngine> e = mob.scripts(); e.hasMoreElements(); ) { ScriptingEngine SE = e.nextElement(); if (SE == null) continue; if ((SE.defaultQuestName().length() > 0) && (SE.defaultQuestName().equalsIgnoreCase(Q.name()))) foundS = SE; } if (foundS == null) { mob.tell("You have not accepted a quest called '" + rest + "'. Enter QUESTS for a list."); return false; } if ((!mob.isMonster() && (mob.session() .confirm("Drop the quest '" + Q.name() + "', are you sure (y/N)?", "N")))) { CMLib.coffeeTables().bump(Q, CoffeeTableRow.STAT_QUESTDROPPED); mob.delScript(foundS); mob.tell("Quest dropped."); return false; } } else if (commands.size() == 1) { List<Quest> qQVec = CMLib.quests().getPlayerPersistantQuests(mob); Vector<String> qVec = new Vector<String>(); for (Quest Q : qQVec) { String name = Q.displayName().trim().length() > 0 ? Q.displayName() : Q.name(); if (!qVec.contains(name)) qVec.addElement(name); } Collections.sort(qVec); StringBuffer msg = new StringBuffer("^HQuests you are listed as having accepted:^?^N\n\r"); for (int i = 0; i < qVec.size(); i++) msg.append(((String) qVec.elementAt(i)) + "^N\n\r"); if (!mob.isMonster()) mob.tell(msg.toString() + "\n\r^HEnter QUEST [QUEST NAME] for more information.^N^."); } else { String rest = CMParms.combine(commands, 1); Quest Q = CMLib.quests().findQuest(rest); if (Q == null) { mob.tell("There is no such quest as '" + rest + "'."); return false; } ScriptingEngine foundS = null; for (Enumeration<ScriptingEngine> e = mob.scripts(); e.hasMoreElements(); ) { ScriptingEngine SE = e.nextElement(); if (SE == null) continue; if ((SE.defaultQuestName().length() > 0) && (SE.defaultQuestName().equalsIgnoreCase(Q.name()))) foundS = SE; } if (foundS == null) { mob.tell("You have not accepted a quest called '" + rest + "'. Enter QUESTS for a list."); return false; } String name = Q.displayName().trim().length() > 0 ? Q.displayName() : Q.name(); if (!Q.name().equals(name)) name += " (" + Q.name() + ")"; mob.tell("^HQuest Information: ^w" + name + "^N"); String instructions = null; if ((instructions == null) || (instructions.length() == 0)) instructions = foundS.getVar("*", "INSTRUCTIONS"); if ((instructions == null) || (instructions.length() == 0)) instructions = Q.isStat("INSTRUCTIONS") ? Q.getStat("INSTRUCTIONS") : null; if ((instructions == null) || (instructions.length() == 0)) instructions = "No further information available."; String timeRemaining = foundS.getVar("*", "TIME_REMAINING"); if ((timeRemaining != null) && (timeRemaining.length() > 0)) { String timeRemainingType = foundS.getVar("*", "TIME_REMAINING_TYPE"); if (((timeRemainingType.equalsIgnoreCase("TICKS") || (timeRemainingType.length() == 0)) && (CMath.isInteger(timeRemaining)))) { long ticks = CMath.s_int(timeRemaining); ticks *= CMProps.getTickMillis(); if (ticks > 60000) timeRemaining = (ticks / 60000) + " minutes"; else timeRemaining = (ticks / 1000) + " seconds"; } else if (timeRemainingType.length() > 0) timeRemaining += " " + timeRemainingType; } String progress = foundS.getVar("*", "PROGRESS"); mob.tell("^w" + instructions + "^N"); if ((timeRemaining != null) && (timeRemaining.length() > 0)) mob.tell("\n\r^yTime Remaining: ^w" + timeRemaining + "^N"); if ((progress != null) && (progress.length() > 0)) mob.tell("\n\r^yProgress: ^w" + progress + "^N"); } return false; }