--- deliantra/server/include/object.h 2007/06/04 12:19:08 1.129 +++ deliantra/server/include/object.h 2007/06/24 00:33:54 1.134 @@ -248,8 +248,8 @@ UUID ACC (RW, uuid); // Unique Identifier, survives saves etc. int ACC (RO, count); - int ACC (RO, index); // index into objects - int ACC (RO, active); // index into actives + object_vector_index ACC (RO, index); // index into objects + object_vector_index ACC (RO, active); // index into actives player_ptr ACC (RW, contr); /* Pointer to the player which control this object */ @@ -402,6 +402,11 @@ return head ? head : this; } + MTH bool is_head () + { + return head_ () == this; + } + MTH std::string long_desc (object *who = 0); MTH std::string describe_monster (object *who = 0); MTH std::string describe_item (object *who = 0); @@ -484,9 +489,7 @@ MTH struct region *region () const; protected: - friend struct archetype; - - void link (); + void link (); void unlink (); object (); @@ -539,9 +542,9 @@ */ INTERFACE_CLASS (archetype) -struct archetype : zero_initialised, attachable +struct archetype : object { - archetype (); + archetype (const char *name); ~archetype (); void gather_callbacks (AV *&callbacks, event_type event) const; @@ -549,24 +552,24 @@ static archetype *get (const char *name); // find or create static archetype *find (const char *name); - void hash_add (); // add to hashtable - void hash_del (); // remove from hashtable + void link (); + void unlink (); -bool linked;//TODO: go away -sint8 tail_x, tail_y;//TODO: go away - int ACC (RW, archid); // index in archvector + object_vector_index ACC (RW, archid); // index in archvector shstr ACC (RW, archname); /* More definite name, like "generate_kobold" */ bool ACC (RW, stub); // if true, this is an invalid archetype - struct archetype *ACC (RW, next); /* Next archetype in a linked list */ - struct archetype *ACC (RW, head); /* The main part of a linked object */ - struct archetype *ACC (RW, more); /* Next part of a linked object */ - object ACC (RO, clone); /* An object from which to do ->copy_to () */ uint32 ACC (RW, editable); /* editable flags (mainly for editor) */ sint8 ACC (RW, min_x), ACC (RW, min_y); /* extents, compared to the head (min_x, min_y should be zero, but aren't...) */ sint8 ACC (RW, max_x), ACC (RW, max_y); }; +inline void +object_freezer::put (keyword k, archetype *v) +{ + put (k, v ? &v->archname : (const char *)0); +} + typedef object_vector objectvec; typedef object_vector activevec; typedef object_vector archvec; @@ -629,10 +632,7 @@ #define INS_BELOW_ORIGINATOR 0x0010 #define INS_MAP_LOAD 0x0020 -#define ARCH_SINGULARITY "singularity" -#define ARCH_DETECT_MAGIC "detect_magic" #define ARCH_DEPLETION "depletion" -#define ARCH_SYMPTOM "symptom" #endif