/* Cygnus@Nightmare */
/* FIXED by nialson */
#define SKYDUMMY "(: OBJ(/adm/daemon/astronomy_d), \"la_sky\" :)"
#define NITPICKY 0
#include <std.h>
inherit DAEMON;
string path;
string short;
string night_long;
string day_long;
string long;
string *destinations;
mapping item;
status
check_room(object ob) {
int i;
status error;
string message;
string *items;
string desc;
string func;
error = 0;
if (member_array("std/room.c", deep_inherit_list(ob)) == -1)
if (path != "/std/room") {
write("Warning: " + path + " is not a subclass of /std/room.\n");
error = 1; }
if (!stringp(geteuid(ob)))
write("Warning: geteuid() did not return a string.\n");
short = (string)ob->query_short();
if (!stringp(short)) {
write("Warning: query_short() did not return a string.\n");
error = 1; }
night_long = (string)ob->query("night long");
day_long = (string)ob->query("day long");
long = (string)ob->query_long();
if((string)ob->query_extra_long() != "") long += ob->query_extra_long();
if (stringp(night_long) == stringp(day_long)) {
if (!stringp(night_long) && !stringp(long)) {
write("Warning: query_long() did not return a string.\n");
error = 1;
}
} else
if (stringp(night_long)) {
if (!stringp(long)) {
write("Warning: query(\"day light\") did not return a" +
" string.\n");
error = 1;
} else
day_long = long;
} else {
if (!stringp(long)) {
write("Warning: query(\"night light\") did not return a" +
" string.\n");
error = 1;
} else
night_long = long;
}
item = ([ ]);
items = (string *)ob->query_id();
if (pointerp(items))
for( i=0 ; i<sizeof(items) ; i++) {
if (!stringp(items[i])) {
write("Warning: query_id() array member " + i +
" is not a string.");
} else {
if (!mapp(item[items[i]]))
item[items[i]] = ([ ]);
desc = (string)ob->query_item_description(items[i]);
if (functionp(desc)) {
if(NITPICKY||(SKYDUMMY!=identify(desc)))
item[items[i]]["description"] = identify(desc);}
else if (!stringp(desc)) {
write("Warning: query_item_description() for \"" +
items[i] + "\" did not return a string.");
} else
item[items[i]]["description"] = desc;
}
}
destinations = (string *)ob->query_destinations();
if (pointerp(destinations))
for (i = 0; i < sizeof(destinations); i++) {
if (!stringp(destinations[i])) {
write("Warning: query_destinations() array member " + i +
" is not a string.");
error = 1;
} else {
message = catch(load_object(destinations[i]));
if (stringp(message)) {
write("Warning: could not load " + destinations[i] +
": " + message);
error = 1;
}
}
}
return !error;
}
void
print_room(object ob)
{
int i;
string *items;
write("User IDs: " + getuid(ob) + "/" + geteuid(ob));
write("Short: " + short);
if (stringp(night_long)) {
write("Night Long: " + night_long);
write("Day Long: " + day_long + "\n");
} else
write("Long: " + long + "\n");
items = keys(item);
write(sizeof(items) + " Item(s):");
for (i = 0; i < sizeof(items); i++)
if (stringp(item[items[i]]["description"]))
write(items[i] + ": " + item[items[i]]["description"] + "\n");
}
int
cmd_roomcheck(string room)
{
object ob;
if (stringp(room)) {
catch(ob = load_object(room));
if (!objectp(ob)) {
notify_fail(query_verb() + ": cannot find or load \"" +
room + "\".");
return 0;
}
} else
ob = environment(this_player());
path = base_name(ob);
write("Room Check for: " + path);
if (check_room(ob))
print_room(ob);
return 1;
}
int help()
{
write( @EndText
Syntax: roomcheck [<filename>]
Effect: Balance command to check rooms.
Checks the basic room properties have been set in room <filename>
If <filename> is not specified, your current environment is used.
See doc: /doc/QC/check.doc
See also: acheck, wcheck
EndText
);
return 1;
}