public void unInvoke() { if ((affected instanceof MOB) && (myChants != null)) { Vector V = myChants; myChants = null; for (int i = 0; i < V.size(); i++) { Ability A = (Ability) V.elementAt(i); if ((A.affecting() != null) && (A.ID().equals(ID())) && (A.affecting() instanceof Item)) { Item I = (Item) A.affecting(); I.delEffect(A); } } } super.unInvoke(); }
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; }