public void removeMyAffectsFrom(Physical P) { if (P == null) return; int x = 0; final Vector<Ability> eff = new Vector<Ability>(); Ability thisAffect = null; for (x = 0; x < P.numEffects(); x++) // personal { thisAffect = P.fetchEffect(x); if (thisAffect != null) eff.addElement(thisAffect); } if (eff.size() > 0) { final Map<String, String> h = makeMySpellsH(getMySpellsV()); if (unrevocableSpells != null) { for (int v = unrevocableSpells.size() - 1; v >= 0; v--) { thisAffect = unrevocableSpells.get(v); if (h.containsKey(thisAffect.ID())) P.delEffect(thisAffect); } } else for (x = 0; x < eff.size(); x++) { thisAffect = eff.elementAt(x); final String ID = h.get(thisAffect.ID()); if ((ID != null) && (thisAffect.invoker() == getInvokerMOB(P, P))) { thisAffect.unInvoke(); if ((!uninvocable) && (!thisAffect.canBeUninvoked())) P.delEffect(thisAffect); } } unrevocableSpells = null; } }
public static Ability isPlant(Item I) { if ((I != null) && (I.rawSecretIdentity().length() > 0)) { for (int a = 0; a < I.numEffects(); a++) { Ability A = I.fetchEffect(a); if ((A != null) && (A.invoker() != null) && (A instanceof Chant_SummonPlants)) return A; } } return null; }
public static boolean isPlant(Item I) { if ((I != null) && (I.rawSecretIdentity().length() > 0)) { for (final Enumeration<Ability> a = I.effects(); a.hasMoreElements(); ) { final Ability A = a.nextElement(); if ((A != null) && (A.invoker() != null) && (A instanceof Chant_SummonPlants)) return true; } } return false; }
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; }