#include <lib.h>
inherit LIB_DAEMON;
varargs int cmd(string str)
{
string thing, file, *inheriteds;
object ob;
if(!str || sscanf(str,"%s -f %s",thing,file) != 2){
write("Syntax: inherits THING -f FILE");
return 1;
}
ob = get_object(thing);
if(!ob){
write("Sorry I can't find that thing.");
return 1;
}
if(last(file,2) == ".c") file = truncate(file,2);
if(!strsrch(file,"LIB_") || !strsrch(file,"lib_")){
string tmpfile =
""+
"#include <lib.h>\n"+
"#include <privs.h>\n"+
"#include <cfg.h>\n"+
"#include <save.h>\n"+
"#include <rooms.h>\n"+
"#include <config.h>\n"+
"#include <daemons.h>\n"+
"#include <objects.h>\n"+
"#include <commands.h>\n"+
"#include <armor_types.h>\n"+
"#include <damage_types.h>\n"+
"#include <position.h>\n"+
"#include <runtime_config.h>\n"+
"#include <terrain_types.h>\n"+
"#include <body_types.h>\n"+
"#include <size_types.h>\n"+
"#include <respiration_types.h>\n"+
"#include <message_class.h>\n"+
"#ifndef "+upper_case(file)+"\n"+
"#define "+upper_case(file)+" 0\n"+
"#endif\n"+
"inherit LIB_ITEM;\n"+
"string GetInheritable() { return " + upper_case(file) + "; }\n"+
"";
string filename = "/open/"+this_player()->GetKeyName()+"_inherits.c";
write_file( filename, tmpfile,1 );
reload(filename);
file = (mixed)call_other(filename, "GetInheritable");
if(!file) file = load_object(filename)->GetInheritable();
}
write("Checking "+identify(ob)+" for inheritance of "+file+" , just a moment...");
if(file){
if(inherits(file, ob)){
write(ob->GetShort()+" inherits "+file+".");
return 1;
}
inheriteds = deep_inherit_list(ob);
foreach(string item in inheriteds){
if(!grepp(item, file)) inheriteds -= ({ item });
}
}
if(!sizeof(inheriteds)){
write("No matches found. "+ thing +
" does not appear to inherit that file.");
return 1;
}
write("Exact match not found, but here are some possible matches: ");
write(implode(inheriteds,"\n"));
return 1;
}
void help()
{
write("Syntax: inherits THING -f FILE\n\nTries to match FILE with the list of inherited files for THING.\n\nSee also: showtree, findobj");
}