@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; }