parent $user_parsers object $verb_parser var $root child_index 0 var $root fertile 0 var $root manager $verb_parser var $root owners [$core] var $root writable [$verb_parser] var $root readable ['parameters, 'methods, 'code] var $root trusted [] var $root owned [$verb_parser] var $root inited 1 var $root dbref 'verb_parser method match_verb arg str, user; var templates, template, fields, word, obj, verb_info, i, j, output; // Resort to verb cache. templates = $verb_cache.templates(); output = []; catch ~objnf, ~verbnf { for template in (templates) { fields = match_template(strsub(template, "%this", "*"), str); if (!fields) continue; j = 1; for word in (explode(template)) { if (word == "%this") { obj = user.match_env_nice(fields[j]); verb_info = obj.verb_info(template); if (((verb_info[2]) != 'remote) && (!(user.local_to_environment(obj)))) user.tell("! You cannot do that from here."); else obj.(verb_info[1])(@fields); return; } else if (word == "*=*") { j = j + 2; } else { j = j + 1; } } } } with handler { switch (error()) { case ~verbnf: user.tell("! You can't do that to that object."); default: user.tell("! " + ((traceback()[1])[2])); } return; } . method parse arg user, str, next_parser, [other_parsers]; var templates, template, fields, word, obj, verb_info, i, j, output; // Match verbs on objects. // (this is a rather icky system involving the verb cache, etc.. // I'm planning to redo this completely eventually. // Resort to verb cache. templates = ($verb_cache.templates()) + (user.local_verb_templates()); output = []; catch ~objnf, ~verbnf { for template in (templates) { fields = match_template(strsub(template, "%this", "*"), str); if (!fields) continue; j = 1; for word in (explode(template)) { if (word == "%this") { obj = user.match_env_nice(fields[j]); verb_info = (| obj.verb_info(template) |); if (!verb_info) return "That object is not a part of the VR."; if (((verb_info[2]) != 'remote) && (!(user.local_to_environment(obj)))) return "You cannot do that from here."; else return [obj, verb_info[1], @fields]; } else if (word == "*=*") { j = j + 2; } else { j = j + 1; } } } } with handler { return "You can't do that to that object."; } return next_parser.parse(user, str, @other_parsers); .