Generic Ambient Noise Room (#176)(an instance of generic room made by Dred)     This generic room has messages that you can set that will be displayed randomly after a certain delay. They will play as long as a player is in that room. See `help #176'. Go to location of this object, Cluttered Closet. This place has a certain ambiance... HELP MANUAL:      Settable properties:            .amb_delay - this is the delay between random announcements, in seconds.       The default is 5 minutes, or 300 seconds.      .amb_noise - this is the list of random messages you wish to display.      .active - set to 1 (default) when runs. Set to 0 to turn off ambient noise       behavior entirely.            All you need to do is @notedit the .amb_noise property and enter in all possible messages you want announced. The order doesn't matter.            Then, whenever a player enters, the announcements will start and appear every .amb_delay seconds. If the .amb_noise property is empty, nothing will happen and the room will act like a normal blank room would.      Note - the first noise message appears 30 seconds after the first player enters.      ----      Commands:            @restart            The owner of the room can call this verb to restart the ambient noise tasks. Mostly in the case when .active was set to 0 for a while, then set back to 1 while there are people still in the room. VERB SOURCE CODE: occupied:
occupied = 0;
for thing in (this.contents)
if (is_player(thing) && $object_utils:connected(thing))
occupied = occupied + 1;
endif
endfor
return occupied;
.
ambience:
if (caller != this)
return E_PERM;
endif
while (((amb = this:get_amb()) && this.occupied) && this.active)
this:announce_all(amb);
suspend(this.amb_delay);
endwhile
.
check_amb:
if (caller != this)
return E_PERM;
endif
if (this.amb_noise && this.active)
if ((occupied = this:occupied()) > 1)
this.occupied = 1;
elseif ((occupied == 1) && (!this.occupied))
this:start_amb();
elseif (!occupied)
this.occupied = 0;
endif
endif
.
end_amb:
if (caller != this)
return E_PERM;
endif
if (occupied = this:occupied())
this.occupied = 1;
else
this:stop_amb();
endif
.
enterfunc confunc: pass(@args); this:check_amb(); . exitfunc disfunc: pass(@args); this:end_amb(); . @restart:
"Usage: @restart";
"";
"The owner of the room can call this verb to restart the ambient noise tasks. Mostly
in the case when .active was set to 0 for a while, then set back to 1 while there
are people still in the room.";
if (!$perm_utils:controls(player, this))
player:tell(E_PERM);
return;
endif
if ($code_utils:task_valid(this.amb_task))
player:tell(this.name, " is already running ambient noise.");
return;
elseif (!this.active)
player:tell("Please set .active to 1 before @restarting ", this.name, ". (You
can use: @set here.active to 1)");
return;
endif
this:start_amb();
player:tell(this.name, " has been restarted with ambient noise.");
.
start_amb:
"Starts the ambient noise task. Children can program verbs on the rooms that start
and stop the noise as they wish. Be careful of multiple noise tasks though.";
if (caller != this)
return E_PERM;
endif
fork ambience (this.initial_amb_delay)
if (this:occupied())
this.occupied = 1;
this:ambience();
else
this.amb_task = 0;
endif
endfork
this:set_amb_task(ambience);
.
stop_amb:
"Ends the Ambient noise. Children can write verbs on their descendants which turn
it off at will.";
if (caller != this)
return E_PERM;
endif
if ($code_utils:task_valid(this.amb_task))
kill_task(this.amb_task);
endif
this.amb_task = 0;
this.occupied = 0;
.
get_amb:
"Just returns a random noise. Children can override in case they want to send different
noise under different conditions.";
if (caller != this)
return E_PERM;
endif
return this.amb_noise[random(length(this.amb_noise))];
.
set_amb_task:
"Let's whoever controls this, or this, to set the .amb_task directly so that children
can deal with the tasks and the property.";
if ((caller != this) && (!$perm_utils:controls(caller_perms(), this)))
return E_PERM;
elseif ((typeof(t = args[1]) == NUM) && $code_utils:task_valid(t))
this.amb_task = t;
else
return E_INVARG;
endif
.
PROPERTY DATA:       amb_delay       amb_task       amb_noise       occupied       active       help_msg       initial_amb_delay CHILDREN: Generic Post-Apocalypse Room boxmaker Backstage Generic Stone Building Room The Ministry Of Information Information Retrieval A place |