예제 #1
0
  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;
    }
  }
예제 #2
0
 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;
 }
예제 #3
0
 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;
 }
예제 #4
0
  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;
  }