#include <lib.h> string *query_names(object whom) { string *name = ({}); string *names = ({}); if(!whom || !objectp(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(!subst) continue; if(arrayp(subst)) names += subst; else names += ({ lower_case(subst) }); } } return names; } int answers_to(string name, object what){ string *adjs, *names, *arg_arr, *tmp_arr; int i, j, arrsize; if(!name || !what) return 0; if(!stringp(name) || !objectp(what)) return 0; adjs = filter((what->GetAdjectives() || ({})), (: lower_case($1) :)); names = filter(query_names(what), (: lower_case($1) :)); name = lower_case(name); if(member_array(name, names) != -1) return 1; if(!sizeof(adjs)) return 0; arg_arr = explode(name," "); arrsize = sizeof(arg_arr); if(arrsize == 1) return 0; tmp_arr = arg_arr; for(i=0; i < arrsize-1; i++){ string *elision = ({}); for(j=i; j < arrsize-1; j++){ string current_adj = implode(arg_arr[i..j]," "); if(member_array(current_adj,adjs) != -1){ elision = arg_arr[i..j]; break; } } if(!sizeof(elision)){ return 0; } tmp_arr -= elision; if(!sizeof(tmp_arr)) return 0; if(member_array(implode(tmp_arr," "), names) != -1) return 1; } return 0; }