[CODE] A zpurge command

From: Chuck Reed (master@I-55.COM)
Date: 07/19/98


I've been asked to make a zpurge command that will do the same thing as
typing purge in every room of the zone.  It's 99% done, except for one
small crash I keep having and I can't figure out why.  Here's the command
first of all:

ACMD(do_zpurge)
{
   extern int top_of_zone_table;
   extern struct zone_data *zone_table;
   struct obj_data *obj, *next_obj;
   struct char_data *mob, *next_mob;
   int i, stored = -1, zone, found = FALSE;
   int room;

   one_argument(argument, arg);

   if(!*arg) {
      send_to_char("Please supply a zone number!\r\n", ch);
      return;
     }

   zone = atoi(arg);
   for (i = 0; i <= top_of_zone_table && !found; i++)
     if (zone_table[i].number == zone) {
        stored = i;
        found = TRUE;
     }
   if(!found) {
      send_to_char("That zone does not exist.  Try again.\r\n", ch);
      return;
     }
   for(room = zone * 100;room <= zone_table[stored].top;room++) {
    if(real_room(room)) {
      for (mob = world[real_room(room)].people; mob; mob = next_mob) {
         next_mob = mob->next_in_room;
         if (IS_NPC(mob))
            extract_char(mob);
        }

      for (obj = world[real_room(room)].contents; obj; obj = next_obj) {
         next_obj = obj->next_content;
         extract_obj(obj);
        }
      }
    }

   sprintf(buf, "All mobiles and objects in zone %d purged.\r\n", zone);
   send_to_char(buf, ch);
   sprintf(buf, "%s has zpurged zone %d.\r\n", GET_NAME(ch), zone);
   mudlog(buf, NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE);
}

Now, it crashes on the next_mob = mob->next_in_room line.  Any idears why?

Chuck Reed


     +------------------------------------------------------------+
     | 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