All pastes #468829 Raw Edit

Mine

public text v1 · immutable
·published 2007-05-03 12:11 UTC
rendered paste body
/*   Open vlist command by Pwrdemon (jseldon@usa.net) of Stormbringer Mud
 *   Syntax is simple:  openvlist
 *   Displays blocks of vnums not currently assigned to areas.
 */
void do_openvlist( CHAR_DATA *ch, char *argument )
{
    char buf[MAX_STRING_LENGTH];
    BUFFER *buffer;
    int loop = 1, x, lowvnum = 0;
    bool found = FALSE;
    bool havehighvnum = FALSE;
    AREA_DATA *pArea;
    extern int top_vnum_room;  /* From db.c */

    buffer = new_buf();


    add_buf(buffer, "===== Unassigned Vnum List =====\n\r\n\r");
    for (x = 1; x <= top_vnum_room ; x++)
    {
        int count = 0;
        havehighvnum = FALSE;

        for ( pArea = area_first; pArea != NULL; pArea = pArea->next )
        {
           if (x <= pArea->max_vnum && x >= pArea->min_vnum)
           {
               count++;                 /* count adds 1 if vnum in area    */
               havehighvnum = TRUE;     /* Might be the high vnum, trap it */
           }
        }

        if (x == top_vnum_room && count == 0)  /* Lame hack to catch last vnum  */
 havehighvnum = TRUE;

        if (count == 0 && lowvnum == 0)   /* no areas found in and no low  */
            lowvnum = x;                  /* vnum yet, assign this one     */

        if (lowvnum > 0 && havehighvnum)  /* Have low and high vnum now    */
        {
            sprintf(buf, "[%d] %d thru %d (count: %d)\n\r"
                    ,loop, lowvnum, x - 1, x - lowvnum);
            add_buf(buffer,buf);
            lowvnum = 0;                  /* Reset low vnum                */
            loop++;
            found = TRUE;
        }
    }

    if (!found)
        send_to_char("No free range of vnums was found.\n\r",ch);
    else
        page_to_char(buf_string(buffer),ch);

    free_buf(buffer);

  return;

}