Dump of #3879 (Matching Room)

@create #27777 named Matching Room:Matching Room
"#3879.("entrances") => E_PERM (Permission denied)
"#3879.("exits") => E_PERM (Permission denied)
"#3879.("key") => E_PERM (Permission denied)
;;#3879.("aliases") = {"Matching Room"}
;;#3879.("description") = "This room optionally keeps itself relatively free of garbage.  If this.self_cleaning is set, nonplayer objects which are not present in .residents are only allowed to remain for this.delay seconds (default one hour).  This is not perfect; it uses :enterfunc as its trigger instead of forking.  Messages:  @remove_object gets printed to everyone in the room when an object is ejected.  [Note kluge: instead of %n to describe the object being removed, use %[tcurrent_names]; this is so multiple items will be mentioned correctly in one message.].  @self-clean commandline verb toggles self cleaning, :set_self_cleaning permits programmatic shift."
;;#3879.("object_size") = {3829, 1141286552}

@verb #3879:"match" this none this rxd #15
@program #3879:match
return $match_utils:match(args[1], this:visible());
.

@verb #3879:"huh2" this none this rx
@program #3879:huh2
set_task_perms(caller_perms());
verb = args[1];
arg = args[2];
places = {};
if (!valid(iobj))
  iobj = this:match(iobjstr);
endif
if (dobj == $failed_match)
  dobj = this:match(dobjstr);
  if (valid(dobj) && $match_utils:match_verb(verb, dobj, arg))
    return;
  endif
endif
if (valid(iobj) && $match_utils:match_verb(verb, iobj, arg))
  return;
endif
if ((((length(dobjstr) > 1) && (dobjstr[length(dobjstr)] == "s")) && ({} != (r = $match_utils:match_list(dobjstr[1..length(dobjstr) - 1], this:visible())))) || ((dobjstr in {"all", "everything"}) && (r = this:visible())))
  done = 0;
  for k in (r)
    dobj = k;
    done = $match_utils:match_verb(verb, k, arg) || done;
  endfor
  if (done)
    return;
  endif
endif
pass(@args);
.

@verb #3879:"visible" this none this
@program #3879:visible
who = (args == {}) ? player | args[1];
return setremove({@who.contents, @this.contents, @this.exits}, who);
.

@verb #3879:"sub_announce_all_but" this none this rxd #15
@program #3879:sub_announce_all_but
"..._but version of :sub_announce_all";
if (typeof(args[1]) == OBJ)
  this:announce_all_but(args[2], $string_utils:pronoun_sub(tostr(@args[3..length(args)]), args[1]));
else
  this:announce_all_but(args[1], $string_utils:pronoun_sub(tostr(@listdelete(args, 1)), player));
endif
.

@verb #3879:"sub_announce*_all" this none this rxd #15
@program #3879:sub_announce_all
"Automatically pronoun-substituting form of the $room:announce*_all() verbs (see also :sub_announce_all_but())";
"pronoun substitution object is player by default, if the first argument is an object use that instead. The rest of the objects are made into a message and pronoun_subbed";
verb = verb[5..length(verb)];
if (!args)
  this:(verb)();
elseif (typeof(args[1]) == OBJ)
  this:(verb)($string_utils:pronoun_sub(tostr(@listdelete(args, 1)), args[1]));
else
  this:(verb)($string_utils:pronoun_sub(tostr(@args), player));
endif
.

@verb #3879:"here_huh" this none this rx
@program #3879:here_huh
set_task_perms(caller_perms());
verb = args[1];
arg = args[2];
places = {};
if (!valid(iobj))
  iobj = this:match(iobjstr);
endif
if (dobj == $failed_match)
  dobj = this:match(dobjstr);
  if (valid(dobj) && $match_utils:match_verb(verb, dobj, arg))
    return 1;
  endif
endif
if (valid(iobj) && $match_utils:match_verb(verb, iobj, arg))
  return 1;
endif
if ((((length(dobjstr) > 1) && (dobjstr[length(dobjstr)] == "s")) && ({} != (r = $match_utils:match_list(dobjstr[1..length(dobjstr) - 1], this:visible())))) || ((dobjstr in {"all", "everything"}) && (r = this:visible())))
  done = 0;
  for k in (r)
    dobj = k;
    done = $match_utils:match_verb(verb, k, arg) || done;
  endfor
  if (done)
    return 1;
  endif
endif
return pass(@args);
.

"***finished***