void do_cmd_eat_food_aux(INVENTORY_IDX item)
{
int ident, lev;
+ BIT_FLAGS inventory_flags;
object_type *o_ptr;
if (music_singing_any()) stop_singing(p_ptr);
}
}
- p_ptr->update |= (PU_COMBINE | PU_REORDER);
+ /*
+ * Store what may have to be updated for the inventory (including
+ * autodestroy if set by something else). Then turn off those flags
+ * so that updates triggered by calling gain_exp() below do not
+ * rearrange the inventory before the food item is destroyed in the
+ * pack.
+ */
+ inventory_flags = (PU_COMBINE | PU_REORDER |
+ (p_ptr->update & PU_AUTODESTROY));
+ p_ptr->update &= ~(PU_COMBINE | PU_REORDER | PU_AUTODESTROY);
if (!(object_is_aware(o_ptr)))
{
}
p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_PLAYER);
-
+ p_ptr->update |= inventory_flags;
/* Food can feed the player */
if (prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE))