@Override public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { if (commands.size() < 3) { mob.tell( L("Specify a target, a property, number of ticks, and (optionally) some misc text!")); return false; } final Vector V = new XVector(commands.firstElement()); final Physical target = getAnyTarget(mob, V, givenTarget, Wearable.FILTER_ANY); if (target == null) return false; commands.removeElementAt(0); final String abilityStr = (String) commands.firstElement(); CMObject A = CMClass.getAbility(abilityStr); if (A == null) A = CMClass.getBehavior(abilityStr); if (A == null) A = CMClass.findAbility(abilityStr); if (A == null) A = CMClass.findBehavior(abilityStr); if (A == null) { mob.tell(L("No such ability or behavior as @x1!", abilityStr)); return false; } final String numTicks = ((String) commands.elementAt(1)).trim(); if ((!CMath.isInteger(numTicks)) || (CMath.s_int(numTicks) <= 0)) { mob.tell(L("'@x1' is not a number of ticks!", numTicks)); return false; } final String parms = CMParms.combine(commands, 2); if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; TemporaryAffects T = (TemporaryAffects) target.fetchEffect(ID()); if (T == null) { T = (TemporaryAffects) this.newInstance(); T.affects = new SVector<Object[]>(); T.startTickDown(mob, target, 10); T = (TemporaryAffects) target.fetchEffect(ID()); } if (T != null) { T.setMiscText("+" + A.ID() + " " + numTicks.trim() + " " + parms.trim()); T.makeLongLasting(); } return true; }