@program noises.muf
1 9999 d
noises.muf, by Verin, June 1993, modified March 1994
This program displays 'noises' in a room.  They are triggered by activity,
so rooms that are empty and unused do not use up any processor or disk
activity.  It tries to an absolute minimum of checking in the beginning,
so high activity rooms will bug out.  All in all, I expect it to be less
resourse consuming than a filter or puppet.
on room:
_listen:$noises  This calls this program upon something happening in a
noise/nonetill:  maintained by program, no need to set.  is used to prevent
                 the noises from triggering themselves.
noise/delay:     number of seconds between events.  default is 180.
noise/chance:    chance of an event going off after between is up. if
                 20, there is a 1 in 20 chance of an event.  if 100, a
                 one in a hundred chance.  it must be 1 or greater.
noise/sleep:     number of seconds to sleep after trigger and before display.
                 this makes the events seem to just 'happen'
noise/list:      name of default list of events, as well as a way to specify
                 other lists of noises.  use lsedit to add and edit the lists.
                 'lsedit here = noise/list' for the default noise list, and
                 '@set here = noise/list:xxxxx' to set the list of noises to xxxxx
                 'lsedit here = xxxxx' to edit it the new list of noises.
                 xxxxx is just an example, use whatever you wish.
(we are using the list manager to handle the list of events)
$include $lib/lmgr
(variables used)
lvar theroom   (room noise happens in)
lvar thelist   (name of list to get noise from)
lvar thechance (chance for noise to happen)
lvar theevent  (the event to happen)
lvar thedelay
: main
  (get theroom)
  trigger @ theroom !
  (if its not a room exit)
  theroom @ room? not if
    theroom @ owner
    "Please uninstall #81319 from #" theroom @ intostr strcat
  (make sure we can do an event here yet)
  theroom @ "noise/nonetill" getpropstr atoi systime >= if exit then
  (see if an noise is going to happen)
  theroom @ "noise/chance" getpropstr atoi thechance !
  thechance @ 1 < if 1 thechance ! then
  random thechance @ % 0 = not if exit then
  (we have an event now)
  (get the delay and sleep)
  theroom @ "noise/delay" getpropstr atoi thedelay !
  thedelay @ 0 <= if 180 thedelay ! then
  theroom @ "noise/sleep" getpropstr atoi thedelay @ + thedelay !
  (find out if there is an alternate list name to display)
  theroom @ "noise/list" getpropstr thelist !
  thelist @ not if "noise/list" thelist ! then
  (find out if we have events to display)
  thelist @ theroom @ .lmgr-getcount theevent !
  theevent @ 0 <= if exit then
  (get a random event)
  random theevent @ % 1 + thelist @ theroom @ .lmgr-getelem theevent !
  (set the timestamp)
  theroom @ "noise/nonetill" systime thedelay @ + intostr 0 addprop
  theroom @ "noise/sleep" getpropstr atoi sleep
  (send the event)
  theroom @ #-1 theevent @ .notify_nospam