--- deliantra/server/include/object.h 2008/05/04 18:46:01 1.175 +++ deliantra/server/include/object.h 2008/07/14 23:57:46 1.179 @@ -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 () { @@ -695,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) { @@ -709,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])