OBJ_DATA *obj, *obj_next;
for (obj = ch->carrying;obj ;obj = obj_next) {
obj_next = obj->next_content;
obj_from_char(obj);
if (IS_SET(obj->extra_flags,ITEM_ROT_DEATH)) {
obj->timer = number_range(5, 10);
REMOVE_BIT(obj->extra_flags,ITEM_ROT_DEATH);
}
REMOVE_BIT(obj->extra_flags,ITEM_VIS_DEATH);
if (IS_SET( obj->extra_flags, ITEM_INVENTORY )) {
extract_obj(obj);
continue;
}
obj_to_obj(obj, corpse);
}
for ( obj = ch->carrying; obj != NULL; obj = obj_next )
{
bool floating = FALSE;
obj_next = obj->next_content;
if (obj->wear_loc == WEAR_FLOAT)
floating = TRUE;
obj_from_char( obj );
if (obj->item_type == ITEM_POTION)
obj->timer = number_range(500,1000);
if (obj->item_type == ITEM_SCROLL)
obj->timer = number_range(1000,2500);
if (IS_SET(obj->extra_flags,ITEM_ROT_DEATH) && !floating)
{
obj->timer = number_range(5,10);
REMOVE_BIT(obj->extra_flags,ITEM_ROT_DEATH);
}
REMOVE_BIT(obj->extra_flags,ITEM_VIS_DEATH);
if ( IS_SET( obj->extra_flags, ITEM_INVENTORY ) )
extract_obj( obj );
else if (floating)
{
if (IS_OBJ_STAT(obj,ITEM_ROT_DEATH)) /* get rid of it! */
{
if (obj->contains != NULL)
{
OBJ_DATA *in, *in_next;
act("$p evaporates,scattering its contents.",
ch,obj,NULL,TO_ROOM);
for (in = obj->contains; in != NULL; in = in_next)
{
in_next = in->next_content;
obj_from_obj(in);
obj_to_room(in,ch->in_room);
}
}
else
act("$p evaporates.",
ch,obj,NULL,TO_ROOM);
extract_obj(obj);
}
else
{
act("$p falls to the floor.",ch,obj,NULL,TO_ROOM);
obj_to_room(obj,ch->in_room);
}
}
else
obj_to_obj( obj, corpse );
}
ObjIter o, onext;
for (o = ch->carrying.begin(); o != ch->carrying.end(); o = onext) {
obj = *o;
onext = ++o;
obj->obj_from_char();
if (IS_SET (obj->extra_flags, ITEM_INVENTORY))
obj->extract_obj ();
else
obj->obj_to_obj(corpse);
}
Where you have this in fight.c in the make_corpse function:
It should be:
It seems that without that continue, it didn't seem to be properly extracting and that had caused me a few problems.