--- deliantra/server/include/object.h 2008/05/04 08:25:33 1.173 +++ deliantra/server/include/object.h 2008/08/28 19:31:46 1.180 @@ -177,7 +177,7 @@ float ACC (RW, speed); /* The overall speed of this object */ float ACC (RW, speed_left); /* How much speed is left to spend this round */ - uint32 ACC (RW, nrof); /* How many of the objects */ + sint32 ACC (RW, nrof); /* How many of the objects */ /* This next big block is basically used for monsters and equipment */ uint16 ACC (RW, client_type); /* Public type information. see doc/Developers/objects */ @@ -262,9 +262,11 @@ uint16 ACC (RW, animation_id);/* An index into the animation array */ uint8 ACC (RW, anim_speed); /* ticks between animation-frames */ uint8 ACC (RW, last_anim); /* last sequence used to draw face */ - sint16 ACC (RW, elevation); /* elevation of this terrain - not currently used */ uint8 ACC (RW, smoothlevel); /* how to smooth this square around */ uint8 ACC (RW, will_apply); /* See crossfire.doc */ + uint16 ACC (RW, cached_sp); /* cached spell points used for a spell, used by esrv_update_spells */ + uint16 ACC (RW, cached_grace);/* cached grace points used for a spell, used by esrv_update_spells */ + uint16 ACC (RW, cached_eat); /* cached food, used by esrv_update_spells */ }; struct object : zero_initialised, object_copy @@ -467,6 +469,8 @@ */ MTH bool has_random_items () const { return randomitems && !flag [FLAG_IS_A_TEMPLATE]; } + MTH bool has_dialogue () const { return *&msg == '@'; } + // returns the outermost owner, never returns 0 MTH object *outer_owner () { @@ -539,6 +543,7 @@ void enter_exit (object *exit);//Perl MTH void enter_map (maptile *newmap, int x, int y); + void player_goto (const char *path, int x, int y); // only for players // returns the mapspace this object is in mapspace &ms () const; @@ -679,7 +684,7 @@ MTH void link (); MTH void unlink (); - MTH static object *get (const char *name); // find()->instance() + MTH static object *get (const char *name); // (find() || singularity)->instance() MTH object *instance (); object_vector_index ACC (RW, archid); // index in archvector @@ -694,6 +699,13 @@ static void postpone_arch_ref (arch_ptr &ref, const_utf8_string other_arch); /* postpone other_arch reference */ }; +// compatbiility, remove once replaced by ->instance +inline object * +arch_to_object (archetype *at) +{ + return at->instance (); +} + inline void object_freezer::put (keyword k, archetype *v) { @@ -708,15 +720,20 @@ extern activevec actives; extern archvec archetypes; -#define for_all_objects(var) \ +// "safely" iterate over inv in a way such that the current item is removable +// quite horrible, thats why its hidden in some macro +#define for_inv_removable(op,var) \ + for (object *var, *next_ = (op)->inv; (var = next_), var && (next_ = var->below), var; ) + +#define for_all_objects(var) \ for (unsigned _i = 0; _i < objects.size (); ++_i) \ statementvar (object *, var, objects [_i]) -#define for_all_actives(var) \ +#define for_all_actives(var) \ for (unsigned _i = 0; _i < actives.size (); ++_i) \ statementvar (object *, var, actives [_i]) -#define for_all_archetypes(var) \ +#define for_all_archetypes(var) \ for (unsigned _i = 0; _i < archetypes.size (); ++_i) \ statementvar (archetype *, var, archetypes [_i])