While testing, I found out that somehow I broke player corpses.
They all now come closed and locked apparently.
Where might I find the problem? Where I changed something?
I have a spec_proc mob for corpse retrieval.
I have a do_retrieve to pass corpses to the player
And here is the make_corpse in fight.c
Code:
static void make_corpse(struct char_data *ch)
{
  char buf2[MAX_NAME_LENGTH + 64];
  struct obj_data *corpse, *o;
  struct obj_data *money;
  int i, x, y;
    corpse = create_obj();
  corpse->item_number = NOTHING;
  IN_ROOM(corpse) = NOWHERE;
  snprintf(buf2, sizeof(buf2), "corpse %s", GET_NAME(ch));
  corpse->name = strdup(buf2);
  snprintf(buf2, sizeof(buf2), "The corpse of %s is lying here.", GET_NAME(ch));
  corpse->description = strdup(buf2);
  snprintf(buf2, sizeof(buf2), "the corpse of %s", GET_NAME(ch));
  corpse->short_description = strdup(buf2);
  GET_OBJ_TYPE(corpse) = ITEM_CONTAINER;
  for(x = y = 0; x < EF_ARRAY_MAX || y < TW_ARRAY_MAX; x++, y++) {
    if (x < EF_ARRAY_MAX)
      GET_OBJ_EXTRA_AR(corpse, x) = 0;
    if (y < TW_ARRAY_MAX)
      corpse->obj_flags.wear_flags[y] = 0;
  }
  SET_BIT_AR(GET_OBJ_WEAR(corpse), ITEM_WEAR_TAKE);
  SET_BIT_AR(GET_OBJ_EXTRA(corpse), ITEM_NODONATE);
  GET_OBJ_VAL(corpse, 0) = 0; /* Can't store stuff */
  GET_OBJ_VAL(corpse, 3) = 1; /* Corpse Identifier */
  SET_BIT(GET_OBJ_VAL(corpse, 3), CONT_CORPSE); /* Set CONT_CORPSE flag */
  GET_OBJ_VAL(corpse, 1) = IS_NPC(ch) ? 0 : GET_IDNUM(ch); /* Set owner ID */
  GET_OBJ_WEIGHT(corpse) = 1 + IS_CARRYING_W(ch); /* Set weight: 1 + carried items */
  GET_OBJ_RENT(corpse) = 100000;
  if (IS_NPC(ch))
    GET_OBJ_TIMER(corpse) = CONFIG_MAX_NPC_CORPSE_TIME;
  else
    GET_OBJ_TIMER(corpse) = CONFIG_MAX_PC_CORPSE_TIME;
  /* Transfer inventory */
  corpse->contains = ch->carrying;
  for (o = corpse->contains; o != NULL; o = o->next_content)
    o->in_obj = corpse;
  object_list_new_owner(corpse, NULL);
  /* Transfer equipment */
  for (i = 0; i < NUM_WEARS; i++)
    if (GET_EQ(ch, i)) {
      remove_otrigger(GET_EQ(ch, i), ch);
      obj_to_obj(unequip_char(ch, i), corpse);
    }
  /* Transfer gold */
  if (GET_GOLD(ch) > 0) {
    if (IS_NPC(ch) || ch->desc) {
      money = create_money(GET_GOLD(ch));
      obj_to_obj(money, corpse);
    }
    GET_GOLD(ch) = 0;
  }
  ch->carrying = NULL;
  IS_CARRYING_N(ch) = 0;
  IS_CARRYING_W(ch) = 0;
  if (IS_NPC(ch))
    obj_to_room(corpse, IN_ROOM(ch));
   /* Apply radiation affect if in wasteland zone
      if (ZONE_FLAGGED(GET_ROOM_ZONE(IN_ROOM(corpse)), ZONE_WASTELAND)) {
      SET_BIT_AR(GET_OBJ_AFFECT(corpse), AFF_RADIATION);
      log("If this isn't here then aff_radiation wont be");
      } */
  else
    obj_to_room(corpse, real_room(3068));
  if (CONFIG_DEBUG_MODE) {
    log("MAKE_CORPSE: Created corpse '%s' (type %d, value[3] %d, value[1] %d, weight %d) for %s in room %d",
        corpse->name, GET_OBJ_TYPE(corpse), GET_OBJ_VAL(corpse, 3), GET_OBJ_VAL(corpse, 1), GET_OBJ_WEIGHT(corpse), GET_NAME(ch), GET_ROOM_VNUM(real_room(3068)));
  }
}
 
I have some funky corpse issues if I apply the radiation to the corpse so I am putting that on hold until I figure out why my corpses come out.
Name: 'the corpse of Groo', Keywords: corpse Groo
VNum: [65535], RNum: [65535], Idnum: [30000005], Type: CONTAINER, SpecProc: None
L-Desc: 'The corpse of Groo is lying here.'
A-Desc: '<None>'
Can be worn on: TAKE
Set char bits : NOBITS
Extra flags  : NO_DONATE
Weight: 1, Value: 0, Cost/day: 100000, Timer: 0, Min level: 0
In room: 65535 (Nowhere), In object: None, Carried by: Bramage, Worn by: Nobody
Weight capacity: 0, Lock Type: CLOSED LOCKED UNDEFINED UNDEFINED , Key Num: 0, Corpse: YES
Affections: None
Triggers:
  None.