// /std/room/items.c // from the Nightmare mudlib // allows player to create dummy items for the room // created by Descartes of Borg 16 june 1993 #include <config.h> #include <daemons.h> #define DEFAULT_MSG "You do not notice that here.\n" private mapping __Items; void set_items(mapping mp); void add_item(string str, mixed val); void remove_item(string str); void create() { __Items = ([]); } string *query_id() { return keys(__Items); } int id(string str) { return (str && __Items[str]); } void set_items(mapping mp) { mapping tmp; string *special; mixed *cles; int i, j; i = sizeof(cles = keys(mp)); tmp = copy(mp); while(i--) { if(functionp(mp[cles[i]])) if(!((int)master()->valid_function(mp[cles[i]]))) continue; if(pointerp(cles[i])) { j = sizeof(cles[i]); while(j--) tmp[cles[i][j]] = mp[cles[i]]; map_delete(tmp, cles[i]); } } __Items = tmp; } void add_item(string str, mixed val) { if(functionp(val) && (int)master()->valid_function(val)) __Items[str] = copy(val); else if(stringp(val)) __Items[str] = val; else error("Bad argument 2 to add_item().\n"); } void remove_item(string str) { map_delete(__Items, str); } mixed query_item_description(string str) { if(functionp(__Items[str])) return copy(__Items[str]); else return __Items[str]; } string query_no_item() { return DEFAULT_MSG; } string describe(string str) { string tmp; if(!__Items[str]) return query_no_item(); else if(functionp(__Items[str])) return ( (stringp(tmp=(string)((*__Items[str])(str)))) ? tmp: "" ); else return __Items[str]; }