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 int castingQuality(MOB mob, Physical target) { if (mob != null) { if (!rightPlace(mob, false)) return Ability.QUALITY_INDIFFERENT; Item myPlant = Druid_MyPlants.myPlant(mob.location(), mob, 0); if (myPlant == null) return super.castingQuality(mob, target, Ability.QUALITY_BENEFICIAL_SELF); } return super.castingQuality(mob, target); }
@Override public int castingQuality(MOB mob, Physical target) { if (mob != null) { final Item myPlant = Druid_MyPlants.myPlant(mob.location(), mob, 0); if (myPlant == null) return Ability.QUALITY_INDIFFERENT; if (target instanceof MOB) { if (((MOB) target).getWearPositions(Wearable.WORN_NECK) == 0) return Ability.QUALITY_INDIFFERENT; } } return super.castingQuality(mob, target); }
@Override public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { final MOB target = getTarget(mob, commands, givenTarget); if (target == null) return false; Item myPlant = Druid_MyPlants.myPlant(mob.location(), mob, 0); if (myPlant == null) { if (auto) myPlant = new Chant_SummonPlants().buildPlant(mob, mob.location()); else { mob.tell(L("There doesn't appear to be any of your plants here to choke with.")); return false; } } if (target.getWearPositions(Wearable.WORN_NECK) == 0) { if (!auto) mob.tell(L("Ummm, @x1 doesn't HAVE a neck...", target.name(mob))); return false; } if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; final boolean success = proficiencyCheck(mob, 0, auto); if (success) { final CMMsg msg = CMClass.getMsg( mob, target, this, verbalCastCode(mob, target, auto), auto ? "" : L("^S<S-NAME> chant(s) at <T-NAME> while pointing at @x1!^?", myPlant.name())); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); target.moveItemTo(myPlant); myPlant.setRawWornCode(Wearable.WORN_NECK); mob.location() .show( target, null, CMMsg.MSG_OK_VISUAL, L("@x1 jumps up and wraps itself around <S-YOUPOSS> neck!", myPlant.name())); beneficialAffect(mob, myPlant, asLevel, 5); } } else return maliciousFizzle( mob, target, L("<S-NAME> chant(s) at <T-NAME>, but the magic fizzles.")); // return whether it worked return success; }
public boolean invoke( MOB mob, Vector commands, Environmental givenTarget, boolean auto, int asLevel) { if ((mob.fetchEffect(ID()) != null) || (mob.fetchEffect("Chant_Grapevine") != null)) { mob.tell("You are already listening through a grapevine."); return false; } MOB tapped = null; for (int i = 0; i < mob.location().numItems(); i++) { Item I = mob.location().fetchItem(i); if ((I != null) && (isPlant(I) != null)) { Ability A = isPlant(I); if ((A != null) && (A.invoker() != mob)) tapped = A.invoker(); } } Vector myRooms = (tapped == null) ? null : Druid_MyPlants.myPlantRooms(tapped); if ((myRooms == null) || (myRooms.size() == 0)) { mob.tell("There doesn't appear to be any plants around here to listen through."); return false; } Item myPlant = Druid_MyPlants.myPlant(mob.location(), tapped, 0); if ((!auto) && (myPlant == null)) { mob.tell("You must be in the same room as someone elses plants to initiate this chant."); return false; } if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; boolean success = proficiencyCheck(mob, 0, auto); if (success) { CMMsg msg = CMClass.getMsg( mob, myPlant, this, verbalCastCode(mob, myPlant, auto), auto ? "" : "^S<S-NAME> chant(s) to <T-NAMESELF> and listen(s) carefully to <T-HIM-HER>!^?"); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); myChants = new Vector(); beneficialAffect(mob, mob, asLevel, 0); Chant_TapGrapevine C = (Chant_TapGrapevine) mob.fetchEffect(ID()); if (C == null) return false; for (int i = 0; i < myRooms.size(); i++) { Room R = (Room) myRooms.elementAt(i); int ii = 0; myPlant = Druid_MyPlants.myPlant(R, tapped, ii); while (myPlant != null) { Ability A = myPlant.fetchEffect(ID()); if (A != null) myPlant.delEffect(A); myPlant.addNonUninvokableEffect((Ability) C.copyOf()); A = myPlant.fetchEffect(ID()); if (A != null) myChants.addElement(A); ii++; myPlant = Druid_MyPlants.myPlant(R, tapped, ii); } } C.myChants = (Vector) myChants.clone(); myChants = new Vector(); } } else beneficialVisualFizzle( mob, myPlant, "<S-NAME> chant(s) to <T-NAMESELF>, but nothing happens."); // return whether it worked return success; }