varargs void say(mixed str, object ob) {
if(!this_player()) error("say() makes no sense with no this_player()\n");
if(!environment(this_player())) return;
message("say", str+"", environment(this_player()),
(objectp(ob) ? ({ this_player(), ob }) : ({ this_player() })));
}
void tell_object(object ob, mixed str) { message("tell", str+"", ob); }
varargs void tell_room(object ob, mixed str, mixed exclude) {
if(!ob) return;
message("environment", (str ? str+"" : ""), ob,
(exclude ? (pointerp(exclude) ? exclude : ({exclude})) : ({})));
}
varargs void shout(mixed str, mixed exclude) {
if(objectp(exclude)) exclude = ({ exclude });
else if(!pointerp(exclude)) exclude = ({});
if(this_player()) exclude += ({ this_player() });
message("shout", str+"", users(), exclude);
}