#include <daemons.h> #include <lib.h> #ifndef __FLUFFOS__ string base_name(mixed val) { string name, base; int borg; if(!val) return ""; if(objectp(val)) name = file_name(val); else if(val == "") return ""; else if(stringp(val) && sizeof(val)) name = val; else name = file_name(val); if(sscanf(name, "%s#%d", base, borg) ==2) return base; else return name; } #endif string convert_name(string str) { string a, b, ret; if(!str || str == "") return ""; if(!grepp(str,"@")){ str = replace_string(str, " ", ""); str = replace_string(str, "'", ""); return lower_case(replace_string(str, "-", "")); } if(sscanf(str, "%s@%s", a, b) == 2 && ret = INTERMUD_D->GetMudName(b)) return a+"@"+ret; else return str; } 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; } varargs string query_unique_name(mixed ob, int cloned){ string fn; if(objectp(ob)){ if(!clonep(ob)) cloned = 0; if(cloned) fn = file_name(ob); else fn = base_name(ob); } else if(stringp(ob)) fn = ob; else return 0; fn = replace_string(fn, "/", "0^0"); fn = replace_string(fn, "#", "9^9"); return fn; }