// /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> #include <astronomy.h> #define DEFAULT_MSG "You do not notice that here.\n" #define ASTRA (: find_object(ASTRONOMY_D), "la_sky" :) #define DEFAULT_ITEMS ([ "sky":ASTRA, "sun":ASTRA, "moon":ASTRA, "moons":ASTRA,\ MOONS[0]:ASTRA, MOONS[1]:ASTRA, MOONS[2]:ASTRA, MOON_DESC[0]:ASTRA,\ MOON_DESC[1]:ASTRA, MOON_DESC[2]:ASTRA ]) private mapping __Items; void set_items(mapping mp); void add_item(string str, mixed val); void remove_item(string str); #ifdef __OLD_ROOM_BEHAVIOUR #include <old_items.h> #endif void create() { __Items = DEFAULT_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(pointerp(cles[i])) { j = sizeof(cles[i]); while(j--) tmp[cles[i][j]] = mp[cles[i]]; map_delete(tmp, cles[i]); } } __Items = DEFAULT_ITEMS + tmp; } void add_item(string str, mixed val) { if(functionp(val)) __Items[str] = 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])) { tmp = (string)(*__Items[str])(str); if(!tmp) return "You see nothing."; else return tmp; } else return __Items[str]; }