/* /lib/object.c * from the Foundation II LPC Library * object inherited by all tangible objects (ones with environments) * created by Descartes of Borg 940211 * bug in properties fixed by Douglas Reay (Pallando @ many muds) 940601 * eventMove() altered by Pallando, 940705 * updated to NM IV lfun changes */ #include <lib.h> #include <daemons.h> #include <config.h> #include "object.h" inherit LIB_CLEAN; private string CapName; private mixed Short, Long, Read; private static string *Id, *Adjectives; private static string KeyName, Creator; private static mapping Properties; /*********** /lib/object.c driver applies **********/ static void create() { object ob; clean::create(); Properties = ([]); Adjectives = ({}); Id = ({}); Creator = ( (ob = previous_object()) ? file_name(ob) : "Unknown" ); } static void init() { /* nothing goes here... just for design purposes */ } void reset() { /* Nothing goes here... just for design purposes */ } int id(string str) { if(!str) return 0; if(!stringp(str)) error("Bad argument 1 to id().\n"); return (member_array(lower_case(str), GetId()) != -1); } string *parse_command_id_list() { return GetId(); } string *parse_command_plural_id_list() { return map(GetId(), (: pluralize :)); } string *parse_command_adjectiv_id_list() { return GetAdjectives(); } /*********** /lib/object.c commands **********/ int cmdRead(string str) { mixed val; if( !str || !(val = GetRead(str)) ) return notify_fail("Read what?\n"); if( !id(str) ) return notify_fail("You do not notice that here!\n"); if( functionp(val) ) return (int)evaluate(val, str); message("info", val, this_player()); message("other_action", sprintf("%s reads %s", (string)this_player()->GetName(), GetShort()), environment(this_player()), ({ this_player() })); return 1; } /* ********** /lib/object.c events ********* */ /* *************** /lib/object.c lfuns *************** */ static int Destruct() { object env; int x; if( env = environment() ) { env->eventReleaseObject(this_object()); if( !(x = clean::Destruct()) ) env->eventReceiveObject(this_object()); return x; } else return clean::Destruct(); } /*********** /lib/object.c data manipulation functions ***********/ void SetId(mixed val) { if( stringp(val) ) val = ({ val }); else if( !pointerp(val) ) error("Bad argument 1 to SetId().\n"); Id = val; } string *GetId() { return (Id + ({ GetKeyName() })); } void SetAdjectives(mixed adjs) { if( stringp(adjs) ) adjs = ({ adjs }); else if( !pointerp(adjs) ) error("Bad argument 1 to SetAdjectives().\n"); Adjectives = adjs; } string *GetAdjectives() { return Adjectives; } string SetKeyName(string nom) { if( !stringp(nom) ) error("Bad argument 1 to SetKeyName().\n"); KeyName = lower_case(nom); if( !CapName ) CapName = capitalize(nom); return KeyName; } string GetKeyName() { return KeyName; } string SetCapName(string str) { if( !stringp(str) ) error("Bad argument 1 to SetCapName().\n"); else return (CapName = str); } string GetCapName() { return CapName; } string GetName() { return GetCapName(); } mixed SetShort(mixed val) { if( !stringp(val) && !functionp(val) ) error("Bad argument 1 to SetShort().\n"); return (Short = val); } string GetShort() { if( !Short ) return 0; if( functionp(Short) ) return (string)evaluate(Short); else return Short; } mixed SetLong(mixed val) { if( !stringp(val) && !functionp(val) ) error("Bad argument 1 to SetLong().\n"); return (Long = val); } varargs string GetLong(string str) { if( !Long ) return ""; if( functionp(Long) ) return (string)evaluate(Long, str); else return Long; } varargs mixed SetRead(mixed val, mixed unused) { if( (stringp(unused) || functionp(unused)) && stringp(val) ) { if(mapp(Read)) Read[val] = unused; else Read = ([ val : unused ]); return Read[val]; } else return (Read = val); } varargs mixed GetRead(string str) { if( mapp(Read) ) return Read[str]; else return Read; } mapping SetProperties(mapping props) { return (Properties += props); } mapping GetProperties() { return Properties; } mixed SetProperty(string prop, mixed val) { return (Properties[prop] = val); } mixed GetProperty(string prop) { return Properties[prop]; } mixed AddProperty(string prop, mixed val) { if( Properties[prop] ) Properties[prop] += val; else Properties[prop] = val; return Properties[prop]; } int RemoveProperty(string prop) { if( undefinedp(Properties[prop]) ) return 1; else map_delete(Properties, prop); return !Properties[prop]; }