Alright I'm lost.... Quitting in House.

From: Bryan Britt (beltane@BELTANE.COM)
Date: 09/22/98


While I'm very experienced at programming, I am new to C.  And I may be
getting lost in the code somewhere.

If someone goes into thier house, and types 'quit' they drop their
equipment.  I've followed the code in the do_quit, and it is exactly
right.  extract_char dropped the equipment then calls save_char...
I've checked the FTp site and compared my version (modified bpl14) with
the bpl14 and the bpl13a stocks...  there are no differences.  The
stock code droppes equipment when quitting in a house also.

What am I missing??  Am I doing something wrong?

I trimmed a little to save lines.  My version doesn't differ from the
website if you need the few lines I snipped.
>From act.other.c:
ACMD(do_quit)
{
  sh_int save_room;
  struct descriptor_data *d, *next_d;

  if (IS_NPC(ch) || !ch->desc)
    return;

  if    /* I can't quit legally then don't-- snipped /*  {
  } else {
    if (!GET_INVIS_LEV(ch))
      act("$n has left this existance.", TRUE, ch, 0, 0, TO_ROOM);
    sprintf(buf, "%s has left this existance.", GET_NAME(ch));
    mudlog(buf, NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE);
    send_to_char("Goodbye, friend.. Come back soon!\r\n", ch);

    /* kill off all sockets connected to the same player as the one who is
     * trying to quit.  Helps to maintain sanity as well as prevent duping.
     *  FOR/NEXT snipped. */

   save_room = ch->in_room;
   if (free_rent)
      Crash_rentsave(ch, 0);
    extract_char(ch);           /* Char is saved in extract char */

    /* If someone is quitting in their house, let them load back here */
    if (ROOM_FLAGGED(save_room, ROOM_HOUSE))
      save_char(ch, save_room);
  }
}


And from handler.c:
/* Extract a ch completely from the world, and leave his stuff behind */
void extract_char(struct char_data * ch)
{
  struct char_data *k, *temp;
  struct descriptor_data *t_desc;
  struct obj_data *obj;
  int i, freed = 0;

  if (!IS_NPC(ch) && !ch->desc) {
    for (t_desc = descriptor_list; t_desc; t_desc = t_desc->next)
      if (t_desc->original == ch)
        do_return(t_desc->character, NULL, 0, 0);
  }
  if (ch->in_room == NOWHERE) {
    log("SYSERR: NOWHERE extracting char %s. (%s, extract_char)",
        GET_NAME(ch), __FILE__);
    exit(1);
  }
  if (ch->followers || ch->master)
    die_follower(ch);

  /* Forget snooping, if applicable */
  if (ch->desc) {/* Snipped-- Stops Snooping/* }

  /* transfer objects to room, if any */
  while (ch->carrying) {
    obj = ch->carrying;
    obj_from_char(obj);
    obj_to_room(obj, ch->in_room);
  }

  /* transfer equipment to room, if any */
  for (i = 0; i < NUM_WEARS; i++)
    if (GET_EQ(ch, i))
      obj_to_room(unequip_char(ch, i), ch->in_room);

  if (FIGHTING(ch))
    stop_fighting(ch);  /* And stop everyone else too -snipped */

  char_from_room(ch);

  /* pull the char from the list */
  REMOVE_FROM_LIST(ch, character_list, next);

  if (ch->desc && ch->desc->original)
    do_return(ch, NULL, 0, 0);

  if (!IS_NPC(ch)) {
    save_char(ch, NOWHERE);
    Crash_delete_crashfile(ch);
  } else {
    if (GET_MOB_RNUM(ch) > -1)          /* if mobile */
      mob_index[GET_MOB_RNUM(ch)].number--;
    clearMemory(ch);            /* Only NPC's can have memory */
    if (SCRIPT(ch))
      extract_script(SCRIPT(ch));
    if (SCRIPT_MEM(ch))
      extract_script_mem(SCRIPT_MEM(ch));
    free_char(ch);
    freed = 1;
  }

  if (!freed && ch->desc != NULL) {
    STATE(ch->desc) = CON_MENU;
    SEND_TO_Q(MENU, ch->desc);
  } else {  /* if a player gets purged from within the game */
    if (!freed)
      free_char(ch);
  }
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ICQ: 386326
Bryan L. Britt                                        501-327-8558
Beltane Web Services, Conway, AR            http://www.beltane.com
~~~~~~~~~~Support Private Communications on the Internet~~~~~~~~~~
finger beltane@beltane.com  -- for PGP Public Key and Privacy Info


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/15/00 PST