/* -*- LPC -*- */
/*
* $Locker: $
* $Id: modified_efuns.c,v 1.1 1998/01/06 04:55:54 ceres Exp $
* $Log: modified_efuns.c,v $
* Revision 1.1 1998/01/06 04:55:54 ceres
* Initial revision
*
*/
#define MAX_SIZE 50000
/*
varargs void say(string str, mixed avoid) {
if (!pointerp(avoid))
avoid = ({ this_player(), previous_object() }) + ({ avoid });
else
avoid += ({ this_player(), previous_object() });
if (!environment(previous_object()))
if (this_player() && environment(this_player()))
event(environment(this_player()), "say", str, avoid);
else
event(previous_object(), "say", str, avoid);
else
event(environment(previous_object()), "say", str, avoid);
}
*/
varargs void say(string str, mixed avoid)
{
if (!pointerp(avoid))
avoid = ({ this_player(), previous_object() }) + ({ avoid });
else
avoid += ({ this_player(), previous_object() });
if (!environment(previous_object()))
if(this_player() && environment(this_player()))
event(environment(this_player()), "say", str, avoid);
else
event(previous_object(), "say", str, avoid);
else
{
if (environment(environment(previous_object())))
event(environment(environment(previous_object())), "say", str, avoid);
else
event(environment(previous_object()), "say", str, avoid);
}
}
varargs void tell_room(object ob, string str, mixed avoid) {
if (!ob || !objectp(ob))
return ;
event(ob, "say", str, avoid);
} /* tell_room() */
void tell_object(object ob, string str) {
if (objectp(ob))
ob->event_write(previous_object(), str);
} /* tell_object() */
object find_living(string str) {
string nick;
object ob;
if (this_player() && (nick = (string)this_player()->expand_nickname(str)))
str = nick;
if ((ob = efun::find_living(str)))
if ((int)ob->query_invis() == 2) {
if (member_array(this_player()->query_name(),
(object *)ob->query_allowed()) == -1)
return 0;
}
return ob;
} /* find_living() */
object find_player(string str) {
object ob;
if ((ob = efun::find_player(str)))
if ((int)ob->query_invis() == 2)
if (member_array(this_player()->query_name(),
(object *)ob->query_allowed()) == -1)
return 0;
return ob;
} /* find_player() */
void log_file(string name, string mess) {
if (file_size("/log/"+name) > MAX_SIZE) {
seteuid("Root");
rm("/log/"+name+".old");
rename("/log/"+name, "/log/"+name+".old");
}
seteuid("Root");
write_file("/log/"+name, mess);
seteuid(0);
} /* log_file() */
#ifdef MUD_NAME
string mud_name() {
return capitalize(MUD_NAME);
} /* mud_name() */
#endif
void cat(string file, int start_line, int number) {
string bing;
seteuid(geteuid(previous_object()));
bing = read_file(file, start_line, number);
seteuid(0);
if (bing)
printf("%s", bing[0..5000]);
} /* cat() */
#define HANDLER "/global/virtual/handler"
/*
* clone_object modified to try and make .c files in /d/ virtual
*/
object clone_object(string name) {
seteuid(geteuid(previous_object()));
if(name[0..2] == "/d/" || name[0..1] == "d/")
return (object)HANDLER->clone_virtual_object(name);
return efun::clone_object(name);
} /* clone_object */
/*
* destruct modified to cope with virtual objects
*/
void destruct(mixed name) {
object obj;
if(stringp(name)) {
obj = find_object(name);
if(obj->query_property("file_name"))
HANDLER->destruct_virtual_object(obj);
destruct(obj);
} else if(objectp(name)) {
if(name->query_property("file_name"))
HANDLER->destruct_virtual_object(name);
destruct(name);
}
} /* destruct */
/*
* file_name modified to cope with virtual objects
*/
string file_name(object obj) {
string name, number, file;
name = efun::file_name(obj);
if(sscanf(name, "%s#%s", name, number) == 2) {
if(file = (string)obj->query_property("file_name")) {
return file + "#" + number;
} else {
return name + "#" + number;
}
}
return name;
} /* file_name */
/*
* find_object modified to cope with virtual objects
*/
object find_object(string str) {
object obj;
if(obj = efun::find_object(str))
return obj;
return (object)HANDLER->find_virtual_object(str);
} /* find_object */