#include <lib.h>
string *query_names(object whom) {
string *name = ({});
string *names = ({});
if(!whom) return name;
if(inherits(LIB_DOOR,whom) || base_name(whom) == LIB_DOOR)
{
name = ({ "door" });
}
else {
if(whom->GetName()) name += ({ lower_case(whom->GetName()) });
if(whom->GetKeyName()) name += ({ lower_case(whom->GetKeyName()) });
if(sizeof(whom->GetId())) {
if(arrayp(whom->GetId()))name += whom->GetId();
else name += ({ whom->GetId() });
}
}
if(sizeof(name)){
foreach(mixed subst in name){
if(arrayp(subst)) names += subst;
else names += ({ lower_case(subst) });
}
}
return names;
}
int answers_to(string name, object what){
string *adjs = what->GetAdjectives();
string *preargs = ({});
string s1,s2,s3,s4;
int hits;
if(member_array(lower_case(name),query_names(what)) != -1) return 1;
if(!sizeof(adjs)) return 0;
hits = sscanf(name,"%s %s %s %s",s1, s2, s3, s4);
if(hits < 4) hits = sscanf(name,"%s %s %s",s1, s2, s3);
if(hits < 3) hits = sscanf(name,"%s %s",s1, s2);
if(!hits) return 0;
hits--;
if(sizeof(s1)) preargs += ({s1});
if(sizeof(s2)) preargs += ({s2});
if(sizeof(s3)) preargs += ({s3});
if(sizeof(s4)) preargs += ({s4});
if(member_array(preargs[hits],query_names(what)) == -1) return 0;
preargs -= ({ preargs[hits] });
foreach(string prearg in preargs){
if(member_array(prearg, adjs) == -1) return 0;
}
return 1;
}