LOP/
LOP/area/
LOP/boards/
LOP/channels/
LOP/clans/
LOP/color/
LOP/councils/
LOP/deity/
LOP/src/specials/
/*****************************************************************************
 * DikuMUD (C) 1990, 1991 by:                                                *
 *   Sebastian Hammer, Michael Seifert, Hans Henrik Staefeldt, Tom Madsen,   *
 *   and Katja Nyboe.                                                        *
 *---------------------------------------------------------------------------*
 * MERC 2.1 (C) 1992, 1993 by:                                               *
 *   Michael Chastain, Michael Quan, and Mitchell Tse.                       *
 *---------------------------------------------------------------------------*
 * SMAUG 1.4 (C) 1994, 1995, 1996, 1998 by: Derek Snider.                    *
 *   Team: Thoric, Altrag, Blodkai, Narn, Haus, Scryn, Rennard, Swordbearer, *
 *         gorog, Grishnakh, Nivek, Tricops, and Fireblade.                  *
 *---------------------------------------------------------------------------*
 * SMAUG 1.7 FUSS by: Samson and others of the SMAUG community.              *
 *                    Their contributions are greatly appreciated.           *
 *---------------------------------------------------------------------------*
 * LoP (C) 2006, 2007, 2008, 2009 by: the LoP team.                          *
 *---------------------------------------------------------------------------*
 *                                Grub structure                             *
 *****************************************************************************/

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "h/mud.h"

extern ROOM_INDEX_DATA *room_index_hash[MKH];
extern OBJ_INDEX_DATA *obj_index_hash[MKH];
extern MOB_INDEX_DATA *mob_index_hash[MKH];

int get_pc_class( char *Class );
int get_pc_race( char *type );

/* Check the rooms and inform if something was found */
bool grub_room( CHAR_DATA *ch, int icheck, int minamount, int maxamount, EXT_BV iflags )
{
   ROOM_INDEX_DATA *room;
   int icnt;
   bool found = false;

   for( icnt = 0; icnt < MKH; icnt++ )
   {
      for( room = room_index_hash[icnt]; room; room = room->next )
      {
         /* 1 is a tunnel check */
         if( icheck == 1 )
         {
            if( maxamount != -1 )
            {
               if( room->tunnel < minamount || room->tunnel > maxamount )
                  continue;
            }
            else if( room->tunnel != minamount )
               continue;
            found = true;
            ch_printf( ch, "Room %5d has tunnel set to %d.\r\n", room->vnum, room->tunnel );
         }
         /* 2 is a sector check */
         else if( icheck == 2 )
         {
            if( room->sector_type != minamount )
               continue;
            found = true;
            ch_printf( ch, "Room %5d has sector set to %s.\r\n", room->vnum, sect_flags[room->sector_type] );
         }
         /* 3 is a televnum check */
         else if( icheck == 3 )
         {
            if( minamount != -1 && room->tele_vnum != minamount )
            {
               if( room->tele_vnum != minamount )
                  continue;
            }
            found = true;
            ch_printf( ch, "Room %5d has televnum set to %d.\r\n", room->vnum, room->tele_vnum );
         }
         /* 4 is checking flags */
         else if( icheck == 4 )
         {
            if( xHAS_ALL_BITS( room->room_flags, iflags ) )
            {
               found = true;
               ch_printf( ch, "Room %5d has the [%s] flag(s) set.\r\n", room->vnum, ext_flag_string( &iflags, r_flags )  );
            }
         }
         /* 5 is checking light */
         else if( icheck == 5 )
         {
            if( maxamount != -1 )
            {
               if( room->light < minamount || room->light > maxamount )
                  continue;
            }
            else if( room->light != minamount )
               continue;
            found = true;
            ch_printf( ch, "Room %5d has light set to %d.\r\n", room->vnum, room->light );
         }
      }
   }
   return found;
}

/* Check the objects and inform if something was found */
bool grub_obj( CHAR_DATA *ch, int icheck, int minamount, int maxamount, EXT_BV iflags )
{
   OBJ_INDEX_DATA *obj;
   int icnt;
   bool found = false;

   for( icnt = 0; icnt < MKH; icnt++ )
   {
      for( obj = obj_index_hash[icnt]; obj; obj = obj->next )
      {
         /* 1 is checking flags */
         if( icheck == 1 )
         {
            if( xHAS_ALL_BITS( obj->extra_flags, iflags ) )
            {
               found = true;
               ch_printf( ch, "Object %5d has the [%s] flag(s) set.\r\n", obj->vnum, ext_flag_string( &iflags, o_flags )  );
            }
         }
         /* 2 is a weight check */
         else if( icheck == 2 )
         {
            if( maxamount != -1 )
            {
               if( obj->weight < minamount || obj->weight > maxamount )
                  continue;
            }
            else if( obj->weight != minamount )
               continue;
            found = true;
            ch_printf( ch, "Object %5d has weight set to %d.\r\n", obj->vnum, obj->weight );
         }
         /* 3 is checking the type */
         else if( icheck == 3 )
         {
            if( obj->item_type != minamount )
               continue;
            found = true;
            ch_printf( ch, "Object %5d has type set to %s.\r\n", obj->vnum, o_types[obj->item_type] );
         }
         /* 4 is checking the level */
         else if( icheck == 4 )
         {
            if( maxamount != -1 )
            {
               if( obj->level < minamount || obj->level > maxamount )
                  continue;
            }
            else if( obj->level != minamount )
               continue;
            found = true;
            ch_printf( ch, "Object %5d has level set to %d.\r\n", obj->vnum, obj->level );
         }
         /* 5 is checking the cost */
         else if( icheck == 5 )
         {
            if( maxamount != -1 )
            {
               if( obj->cost < minamount || obj->cost > maxamount )
                  continue;
            }
            else if( obj->cost != minamount )
               continue;
            found = true;
            ch_printf( ch, "Object %5d has cost set to %d.\r\n", obj->vnum, obj->cost );
         }
         /* 6 - 11 is checking value[icheck-6] */
         else if( icheck == 6 || icheck == 7 || icheck == 8 || icheck == 9 || icheck == 10 || icheck == 11 )
         {
            short value = ( icheck - 6 );
            if( maxamount != -1 )
            {
               if( obj->value[value] < minamount || obj->value[value] > maxamount )
                  continue;
            }
            else if( obj->value[value] != minamount )
               continue;
            found = true;
            ch_printf( ch, "Object %5d has value[%d] set to %d.\r\n", obj->vnum, value, obj->value[value] );
         }
         /* 12 is checking count */
         else if( icheck == 12 )
         {
            if( maxamount != -1 )
            {
               if( obj->count < minamount || obj->count > maxamount )
                  continue;
            }
            else if( obj->count != minamount )
               continue;
            found = true;
            ch_printf( ch, "Object %5d has a count of %d.\r\n", obj->vnum, obj->count );
         }
         /* 13 is checking classes */
         else if( icheck == 13 )
         {
            if( xHAS_ALL_BITS( obj->class_restrict, iflags ) )
            {
               found = true;
               ch_printf( ch, "Object %5d has the [%s] class(es) restricted.\r\n", obj->vnum, ext_class_string( &iflags )  );
            }
         }
         /* 14 is checking races */
         else if( icheck == 14 )
         {
            if( xHAS_ALL_BITS( obj->race_restrict, iflags ) )
            {
               found = true;
               ch_printf( ch, "Object %5d has the [%s] race(s) restricted.\r\n", obj->vnum, ext_race_string( &iflags )  );
            }
         }
         /* 15 is checking layers */
         else if( icheck == 15 )
         {
            if( maxamount != -1 )
            {
               if( obj->layers < minamount || obj->layers > maxamount )
                  continue;
            }
            else if( obj->layers != minamount )
               continue;
            found = true;
            ch_printf( ch, "Object %5d has layers set to %d.\r\n", obj->vnum, obj->layers );
         }
         /* 16 is checking wearflags */
         else if( icheck == 16 )
         {
            if( xHAS_ALL_BITS( obj->wear_flags, iflags ) )
            {
               found = true;
               ch_printf( ch, "Object %5d has the [%s] wear flag(s) set.\r\n", obj->vnum, ext_flag_string( &iflags, w_flags )  );
            }
         }
         /* 17 - 23 is checking stats[icheck-17] */
         else if( icheck == 17 || icheck == 18 || icheck == 19 || icheck == 20 || icheck == 21 || icheck == 22 || icheck == 23 )
         {
            short value = ( icheck - 17 );
            if( maxamount != -1 )
            {
               if( obj->stat_reqs[value] < minamount || obj->stat_reqs[value] > maxamount )
                  continue;
            }
            else if( obj->stat_reqs[value] != minamount )
               continue;
            found = true;
            ch_printf( ch, "Object %5d has %s set to %d.\r\n", obj->vnum, stattypes[value], obj->stat_reqs[value] );
         }
      }
   }
   return found;
}

/* Check the mobiles and inform if something was found */
bool grub_mob( CHAR_DATA *ch, int icheck, int minamount, int maxamount, EXT_BV iflags )
{
   MOB_INDEX_DATA *mob;
   int icnt;
   bool found = false;

   for( icnt = 0; icnt < MKH; icnt++ )
   {
      for( mob = mob_index_hash[icnt]; mob; mob = mob->next )
      {
         /* 1 is checking the level */
         if( icheck == 1 )
         {
            if( maxamount != -1 )
            {
               if( mob->level < minamount || mob->level > maxamount )
                  continue;
            }
            else if( mob->level != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has level set to %d.\r\n", mob->vnum, mob->level );
         }
         /* 2 is checking the killed */
         else if( icheck == 2 )
         {
            if( maxamount != -1 )
            {
               if( mob->killed < minamount || mob->killed > maxamount )
                  continue;
            }
            else if( mob->killed != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has been killed %d times.\r\n", mob->vnum, mob->killed );
         }
         /* 3 is checking the count */
         else if( icheck == 3 )
         {
            if( maxamount != -1 )
            {
               if( mob->count < minamount || mob->count > maxamount )
                  continue;
            }
            else if( mob->count != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has a count of %d.\r\n", mob->vnum, mob->count );
         }
         /* 4 is checking the damroll */
         else if( icheck == 4 )
         {
            if( maxamount != -1 )
            {
               if( mob->damroll < minamount || mob->damroll > maxamount )
                  continue;
            }
            else if( mob->damroll != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has damroll set to %d.\r\n", mob->vnum, mob->damroll );
         }
         /* 5 is checking the hitroll */
         else if( icheck == 5 )
         {
            if( maxamount != -1 )
            {
               if( mob->hitroll < minamount || mob->hitroll > maxamount )
                  continue;
            }
            else if( mob->hitroll != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has hitroll set to %d.\r\n", mob->vnum, mob->hitroll );
         }
         /* 6 is checking the height */
         else if( icheck == 6 )
         {
            if( maxamount != -1 )
            {
               if( mob->height < minamount || mob->height > maxamount )
                  continue;
            }
            else if( mob->height != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has height set to %d.\r\n", mob->vnum, mob->height );
         }
         /* 7 is checking the weight */
         else if( icheck == 7 )
         {
            if( maxamount != -1 )
            {
               if( mob->weight < minamount || mob->weight > maxamount )
                  continue;
            }
            else if( mob->weight != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has weight set to %d.\r\n", mob->vnum, mob->weight );
         }
         /* 8 is checking the minhit */
         else if( icheck == 8 )
         {
            if( maxamount != -1 )
            {
               if( mob->minhit < minamount || mob->minhit > maxamount )
                  continue;
            }
            else if( mob->minhit != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has minhit set to %d.\r\n", mob->vnum, mob->minhit );
         }
         /* 9 is checking the maxhit */
         else if( icheck == 9 )
         {
            if( maxamount != -1 )
            {
               if( mob->maxhit < minamount || mob->maxhit > maxamount )
                  continue;
            }
            else if( mob->maxhit != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has maxhit set to %d.\r\n", mob->vnum, mob->maxhit );
         }
         /* 10 is checking the saving_spell_staff */
         else if( icheck == 10 )
         {
            if( maxamount != -1 )
            {
               if( mob->saving_spell_staff < minamount || mob->saving_spell_staff > maxamount )
                  continue;
            }
            else if( mob->saving_spell_staff != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has saving_spell_staff set to %d.\r\n", mob->vnum, mob->saving_spell_staff );
         }
         /* 11 is checking the saving_breath */
         else if( icheck == 11 )
         {
            if( maxamount != -1 )
            {
               if( mob->saving_breath < minamount || mob->saving_breath > maxamount )
                  continue;
            }
            else if( mob->saving_breath != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has saving_breath set to %d.\r\n", mob->vnum, mob->saving_breath );
         }
         /* 12 is checking the saving_para_petri */
         else if( icheck == 12 )
         {
            if( maxamount != -1 )
            {
               if( mob->saving_para_petri < minamount || mob->saving_para_petri > maxamount )
                  continue;
            }
            else if( mob->saving_para_petri != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has saving_para_petri set to %d.\r\n", mob->vnum, mob->saving_para_petri );
         }
         /* 13 is checking the saving_wand */
         else if( icheck == 13 )
         {
            if( maxamount != -1 )
            {
               if( mob->saving_wand < minamount || mob->saving_wand > maxamount )
                  continue;
            }
            else if( mob->saving_wand != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has saving_wand set to %d.\r\n", mob->vnum, mob->saving_wand );
         }
         /* 14 is checking the saving_poison_death */
         else if( icheck == 14 )
         {
            if( maxamount != -1 )
            {
               if( mob->saving_poison_death < minamount || mob->saving_poison_death > maxamount )
                  continue;
            }
            else if( mob->saving_poison_death != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has saving_poison_death set to %d.\r\n", mob->vnum, mob->saving_poison_death );
         }
         /* 15 is checking the numattacks */
         else if( icheck == 15 )
         {
            if( maxamount != -1 )
            {
               if( mob->numattacks < minamount || mob->numattacks > maxamount )
                  continue;
            }
            else if( mob->numattacks != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has numattacks set to %d.\r\n", mob->vnum, mob->numattacks );
         }
         /* 16 is checking the ac */
         else if( icheck == 16 )
         {
            if( maxamount != -1 )
            {
               if( mob->ac < minamount || mob->ac > maxamount )
                  continue;
            }
            else if( mob->ac != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has ac set to %d.\r\n", mob->vnum, mob->ac );
         }
         /* 17 is checking the alignment */
         else if( icheck == 17 )
         {
            if( maxamount != -1 )
            {
               if( mob->alignment < minamount || mob->alignment > maxamount )
                  continue;
            }
            else if( mob->alignment != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has alignment set to %d.\r\n", mob->vnum, mob->alignment );
         }
         /* 18 is checking the gold */
         else if( icheck == 18 )
         {
            if( maxamount != -1 )
            {
               if( mob->gold < minamount || mob->gold > maxamount )
                  continue;
            }
            else if( mob->gold != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has gold set to %d.\r\n", mob->vnum, mob->gold );
         }
         /* 19 is checking the bgold */
         else if( icheck == 19 )
         {
            if( maxamount != -1 )
            {
               if( mob->bgold < minamount || mob->bgold > maxamount )
                  continue;
            }
            else if( mob->bgold != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has bgold set to %d.\r\n", mob->vnum, mob->bgold );
         }
         /* 20 is checking act flags */
         else if( icheck == 20 )
         {
            if( xHAS_ALL_BITS( mob->act, iflags ) )
            {
               found = true;
               ch_printf( ch, "Mobile %5d has the [%s] flag(s) set.\r\n", mob->vnum, ext_flag_string( &iflags, act_flags )  );
            }
         }
         /* 21 is checking the sex */
         else if( icheck == 21 )
         {
            if( mob->sex != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has sex set to %s.\r\n", mob->vnum, sex_names[mob->sex] );
         }
         /* 22 - 28 is checking perm_stats[icheck-22] */
         else if( icheck == 22 || icheck == 23 || icheck == 24 || icheck == 25 || icheck == 26 || icheck == 27 || icheck == 28 )
         {
            short value = ( icheck - 22 );
            if( maxamount != -1 )
            {
               if( mob->perm_stats[value] < minamount || mob->perm_stats[value] > maxamount )
                  continue;
            }
            else if( mob->perm_stats[value] != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has %s set to %d.\r\n", mob->vnum, stattypes[value], mob->perm_stats[value] );
         }
         /* 29 is checking affected_by */
         else if( icheck == 29 )
         {
            if( xHAS_ALL_BITS( mob->affected_by, iflags ) )
            {
               found = true;
               ch_printf( ch, "Mobile %5d has the [%s] affected_by(s) set.\r\n", mob->vnum, ext_flag_string( &iflags, a_flags )  );
            }
         }
         /* 30 is checking resistant */
         else if( icheck == 30 )
         {
            if( xHAS_ALL_BITS( mob->resistant, iflags ) )
            {
               found = true;
               ch_printf( ch, "Mobile %5d has the [%s] resistant(s) set.\r\n", mob->vnum, ext_flag_string( &iflags, ris_flags )  );
            }
         }
         /* 31 is checking immune */
         else if( icheck == 31 )
         {
            if( xHAS_ALL_BITS( mob->immune, iflags ) )
            {
               found = true;
               ch_printf( ch, "Mobile %5d has the [%s] immune(s) set.\r\n", mob->vnum, ext_flag_string( &iflags, ris_flags )  );
            }
         }
         /* 32 is checking susceptible */
         else if( icheck == 32 )
         {
            if( xHAS_ALL_BITS( mob->susceptible, iflags ) )
            {
               found = true;
               ch_printf( ch, "Mobile %5d has the [%s] susceptible(s) set.\r\n", mob->vnum, ext_flag_string( &iflags, ris_flags )  );
            }
         }
         /* 33 is checking xflags */
         else if( icheck == 33 )
         {
            if( xHAS_ALL_BITS( mob->xflags, iflags ) )
            {
               found = true;
               ch_printf( ch, "Mobile %5d has the [%s] xflag(s) set.\r\n", mob->vnum, ext_flag_string( &iflags, part_flags )  );
            }
         }
         /* 34 is checking attacks */
         else if( icheck == 34 )
         {
            if( xHAS_ALL_BITS( mob->attacks, iflags ) )
            {
               found = true;
               ch_printf( ch, "Mobile %5d has the [%s] attack(s) set.\r\n", mob->vnum, ext_flag_string( &iflags, attack_flags )  );
            }
         }
         /* 35 is checking defenses */
         else if( icheck == 35 )
         {
            if( xHAS_ALL_BITS( mob->defenses, iflags ) )
            {
               found = true;
               ch_printf( ch, "Mobile %5d has the [%s] defense(s) set.\r\n", mob->vnum, ext_flag_string( &iflags, defense_flags )  );
            }
         }
         /* 36 is checking absorb */
         else if( icheck == 36 )
         {
            if( xHAS_ALL_BITS( mob->absorb, iflags ) )
            {
               found = true;
               ch_printf( ch, "Mobile %5d has the [%s] absorb(s) set.\r\n", mob->vnum, ext_flag_string( &iflags, ris_flags )  );
            }
         }
         /* 37 is checking the position */
         else if( icheck == 37 )
         {
            if( mob->position != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has position set to %s.\r\n", mob->vnum, pos_names[mob->position] );
         }
         /* 38 is checking the defposition */
         else if( icheck == 38 )
         {
            if( mob->defposition != minamount )
               continue;
            found = true;
            ch_printf( ch, "Mobile %5d has defposition set to %s.\r\n", mob->vnum, pos_names[mob->defposition] );
         }
      }
   }
   return found;
}

/* Check the resets and inform if something was found */
bool grub_reset( CHAR_DATA *ch, int icheck, int vnum )
{
   ROOM_INDEX_DATA *room;
   RESET_DATA *pReset, *tReset, *pReset_next, *tReset_next, *gReset, *gReset_next;
   int icnt;
   bool found = false;

   for( icnt = 0; icnt < MKH; icnt++ )
   {
      for( room = room_index_hash[icnt]; room; room = room->next )
      {
         for( pReset = room->first_reset; pReset; pReset = pReset_next )
         {
            pReset_next = pReset->next;

            switch( pReset->command )
            {
               default:
                  break;

               case 'M':
                  if( icheck == 1 ) /* Check for mobile vnum */
                  {
                     if( vnum == pReset->arg1 )
                     {
                        found = true;
                        ch_printf( ch, "Room %5d has a reset for that mobile vnum.\r\n", room->vnum );
                        break;
                     }
                  }
                  else if( icheck == 2 ) /* Check the other resets for object vnum */
                  {
                     for( tReset = pReset->first_reset; tReset; tReset = tReset_next )
                     {
                        tReset_next = tReset->next_reset;

                        if( vnum == tReset->arg1 )
                        {
                           found = true;
                           ch_printf( ch, "Room %5d has a reset for that object vnum.\r\n", room->vnum );
                           break;
                        }

                        for( gReset = tReset->first_reset; gReset; gReset = gReset_next )
                        {
                           gReset_next = gReset->next_reset;

                           switch( gReset->command )
                           {
                              default:
                                 break;

                              case 'P':
                                 if( vnum == gReset->arg1 )
                                 {
                                    found = true;
                                    ch_printf( ch, "Room %5d has a reset for that object vnum.\r\n", room->vnum );
                                    break;
                                 }
                                 if( vnum == gReset->arg3 )
                                 {
                                    found = true;
                                    ch_printf( ch, "Room %5d has a reset for that object vnum.\r\n", room->vnum );
                                    break;
                                 }
                                 break;
                           }
                        }
                     }
                  }
                  break;

               case 'O':
                  if( icheck == 2 ) /* Check the other resets for object vnum */
                  {
                     if( vnum == pReset->arg1 )
                     {
                        found = true;
                        ch_printf( ch, "Room %5d has a reset for that object vnum.\r\n", room->vnum );
                        break;
                     }

                     for( tReset = pReset->first_reset; tReset; tReset = tReset_next )
                     {
                        tReset_next = tReset->next_reset;

                        switch( tReset->command )
                        {
                           default:
                              break;

                           case 'P':
                              if( vnum == tReset->arg1 )
                              {
                                 found = true;
                                 ch_printf( ch, "Room %5d has a reset for that object vnum.\r\n", room->vnum );
                                 break;
                              }
                              if( vnum == tReset->arg3 )
                              {
                                 found = true;
                                 ch_printf( ch, "Room %5d has a reset for that object vnum.\r\n", room->vnum );
                                 break;
                              }
                              break;
                        }
                     }
                  }
                  break;
            }
         }
      }
   }
   return found;
}

CMDF( do_grub )
{
   EXT_BV iflags;
   char arg[MSL];
   int minamount = -1, maxamount = -1, stat;
   bool objchck = false, mobchck = false, roomchck = false;

   argument = one_argument( argument, arg );
   if( !str_cmp( arg, "obj" ) || !str_cmp( arg, "mob" ) || !str_cmp( arg, "room" ) || !str_cmp( arg, "reset" ) )
   {
      if( !str_cmp( arg, "reset" ) )
      {
         argument = one_argument( argument, arg );
         if( !str_cmp( arg, "obj" ) )
         {
            argument = one_argument( argument, arg );
            if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
            {
               send_to_char( "Usage: grub reset obj <#>\r\n", ch );
               return;
            }
            minamount = atoi( arg );
            if( !grub_reset( ch, 2, minamount ) )
               ch_printf( ch, "No resets found for object vnum %d.\r\n", minamount );
            return;
         }
         else if( !str_cmp( arg, "mob" ) )
         {
            argument = one_argument( argument, arg );
            if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
            {
               send_to_char( "Usage: grub reset mob <#>\r\n", ch );
               return;
            }
            minamount = atoi( arg );
            if( !grub_reset( ch, 1, minamount ) )
               ch_printf( ch, "No resets found for mobile vnum %d.\r\n", minamount );
            return;
         }
         else
         {
            send_to_char( "Usage: grub reset mob/obj <#>\r\n", ch );
            return;
         }
      }
      if( !str_cmp( arg, "obj" ) )
         objchck = true;
      else if( !str_cmp( arg, "mob" ) )
         mobchck = true;
      else if( !str_cmp( arg, "room" ) )
         roomchck = true;
   }
   else
   {
      send_to_char( "For usage information see 'help grub'.\r\n", ch );
      return;
   }

   argument = one_argument( argument, arg );

   xCLEAR_BITS( iflags );

   if( objchck  )
   {
      if( !str_cmp( arg, "flags" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub obj flags <flag> [<...>]\r\n", ch );
            return;
         }
         while( argument && argument[0] != '\0' )
         {
            argument = one_argument( argument, arg );

            minamount = get_flag( arg, o_flags, ITEM_MAX );
            if( minamount < 0 || minamount >= ITEM_MAX )
               ch_printf( ch, "Unknown object flag: %s\r\n", arg );
            else
               xTOGGLE_BIT( iflags, minamount );
         }
         if( xIS_EMPTY( iflags ) )
         {
            send_to_char( "No flags would be checked.\r\n", ch );
            return;
         }
         if( !grub_obj( ch, 1, -1, -1, iflags ) )
            send_to_char( "No objects found with those flags set.\r\n", ch );
         return;
      }
      if( !str_cmp( arg, "weight" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub obj weight <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_obj( ch, 2, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No objects found with weight between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No objects found with weight set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "type" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' )
         {
            send_to_char( "Usage: grub obj type <type>/<#>\r\n", ch );
            return;
         }
         minamount = get_flag( arg, o_types, ITEM_TYPE_MAX );
         if( minamount < 0 && is_number( arg ) )
            minamount = atoi( arg );
         if( minamount < 0 || minamount >= ITEM_TYPE_MAX )
            ch_printf( ch, "No such type to look for (%s).\r\n", arg );
         else if( !grub_obj( ch, 3, minamount, -1, iflags ) )
            ch_printf( ch, "No objects found with type set to %s.\r\n", o_types[minamount] );
         return;
      }
      if( !str_cmp( arg, "level" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub obj level <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount < 0 )
         {
            send_to_char( "Use a value equal to or higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_obj( ch, 4, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No objects found with level between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No objects found with level set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "cost" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub obj cost <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount < 0 )
         {
            send_to_char( "Use a value equal to or higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_obj( ch, 5, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No objects found with cost between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No objects found with cost set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "value0" ) || !str_cmp( arg, "value1" ) || !str_cmp( arg, "value2" )
      || !str_cmp( arg, "value3" ) || !str_cmp( arg, "value4" ) || !str_cmp( arg, "value5" ) )
      {
         int value;

         if( arg[5] == '0' )
            value = 0;
         else if( arg[5] == '1' )
            value = 1;
         else if( arg[5] == '2' )
            value = 2;
         else if( arg[5] == '3' )
            value = 3;
         else if( arg[5] == '4' )
            value = 4;
         else if( arg[5] == '5' )
            value = 5;
         else
         {
            send_to_char( "No clue what went wrong here but better safe than sorry.\r\n", ch );
            return;
         }

         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            ch_printf( ch, "Usage: grub obj value%d <#> [<#>]\r\n", value );
            return;
         }
         minamount = atoi( arg );
         if( minamount < 0 )
         {
            send_to_char( "Use a value equal to or higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_obj( ch, ( 6 + value ), minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No objects found with value[%d] between %d and %d.\r\n", value, minamount, maxamount );
            else
               ch_printf( ch, "No objects found with value[%d] set to %d.\r\n", minamount, value );
         }
         return;
      }
      if( !str_cmp( arg, "count" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub obj count <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount < 0 )
         {
            send_to_char( "Use a value equal to or higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_obj( ch, 12, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No objects found with a count between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No objects found with a count of %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "class" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub obj class <class> [<...>]\r\n", ch );
            return;
         }
         while( argument && argument[0] != '\0' )
         {
            argument = one_argument( argument, arg );

            minamount = get_pc_class( arg );
            if( minamount < 0 || minamount >= MAX_PC_CLASS )
               ch_printf( ch, "Unknown class: %s\r\n", arg );
            else
               xTOGGLE_BIT( iflags, minamount );
         }
         if( xIS_EMPTY( iflags ) )
         {
            send_to_char( "No classes would be checked.\r\n", ch );
            return;
         }
         if( !grub_obj( ch, 13, -1, -1, iflags ) )
            send_to_char( "No objects found with those classes restricted.\r\n", ch );
         return;
      }
      if( !str_cmp( arg, "race" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub obj race <race> [<...>]\r\n", ch );
            return;
         }
         while( argument && argument[0] != '\0' )
         {
            argument = one_argument( argument, arg );

            minamount = get_pc_race( arg );
            if( minamount < 0 || minamount >= MAX_PC_RACE )
               ch_printf( ch, "Unknown race: %s\r\n", arg );
            else
               xTOGGLE_BIT( iflags, minamount );
         }
         if( xIS_EMPTY( iflags ) )
         {
            send_to_char( "No races would be checked.\r\n", ch );
            return;
         }
         if( !grub_obj( ch, 14, -1, -1, iflags ) )
            send_to_char( "No objects found with those races restricted.\r\n", ch );
         return;
      }
      if( !str_cmp( arg, "layers" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub obj layers <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount < 0 )
         {
            send_to_char( "Use a value equal to or higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_obj( ch, 15, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No objects found with layers between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No objects found with layers set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "wear" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub obj wear <flag> [<...>]\r\n", ch );
            return;
         }
         while( argument && argument[0] != '\0' )
         {
            argument = one_argument( argument, arg );

            minamount = get_flag( arg, w_flags, ITEM_WEAR_MAX );
            if( minamount < 0 || minamount >= ITEM_WEAR_MAX )
               ch_printf( ch, "Unknown object wear flag: %s\r\n", arg );
            else
               xTOGGLE_BIT( iflags, minamount );
         }
         if( xIS_EMPTY( iflags ) )
         {
            send_to_char( "No wear flags would be checked.\r\n", ch );
            return;
         }
         if( !grub_obj( ch, 16, -1, -1, iflags ) )
            send_to_char( "No objects found with those wear flags set.\r\n", ch );
         return;
      }
      for( stat = 0; stat < STAT_MAX; stat++ )
      {
         if( !str_cmp( arg, stattypes[stat] ) )
         {
            argument = one_argument( argument, arg );
            if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
            {
               ch_printf( ch, "Usage: grub obj %s <#> [<#>]\r\n", stattypes[stat] );
               return;
            }
            minamount = atoi( arg );
            if( minamount < 0 )
            {
               send_to_char( "Use a value equal to or higher than 0.\r\n", ch );
               return;
            }
            if( is_number( argument ) )
            {
               maxamount = atoi( argument );
               if( maxamount < minamount )
               {
                  send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
                  return;
               }
            }
            if( !grub_obj( ch, ( 17 + stat ), minamount, maxamount, iflags ) )
            {
               if( maxamount != -1 )
                  ch_printf( ch, "No objects found with %s between %d and %d.\r\n", stattypes[stat], minamount, maxamount );
               else
                  ch_printf( ch, "No objects found with %s set to %d.\r\n", stattypes[stat], minamount );
            }
            return;
         }
      }
      send_to_char( "Usage: grub obj flags <flag> [<...>]\r\n", ch );
      send_to_char( "Usage: grub obj weight <#> [<#>]\r\n", ch );
      send_to_char( "Usage: grub obj type <type>/<#>\r\n", ch );
      send_to_char( "Usage: grub obj level <#> [<#>]\r\n", ch );
      send_to_char( "Usage: grub obj cost <#> [<#>]\r\n", ch );
      send_to_char( "Usage: grub obj value<0-5> <#> [<#>]\r\n", ch );
      send_to_char( "Usage: grub obj count <#> [<#>]\r\n", ch );
      send_to_char( "Usage: grub obj class <class> [<...>]\r\n", ch );
      send_to_char( "Usage: grub obj race <race> [<...>]\r\n", ch );
      send_to_char( "Usage: grub obj layers <#> [<#>]\r\n", ch );
      send_to_char( "Usage: grub obj wear <flag> [<...>]\r\n", ch );
      send_to_char( "Usage: grub obj <stat> <#> [<#>]\r\n", ch );
   }
   else if( mobchck )
   {
      if( !str_cmp( arg, "level" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob level <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 1, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with level between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with level set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "level" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob killed <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 2, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with killed between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with killed set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "count" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob count <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 3, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with count between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with count set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "damroll" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob damroll <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 4, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with damroll between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with damroll set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "hitroll" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob hitroll <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 5, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with hitroll between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with hitroll set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "height" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob height <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 6, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with height between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with height set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "weight" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob weight <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 7, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with weight between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with weight set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "minhit" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob minhit <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 8, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with minhit between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with minhit set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "maxhit" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob maxhit <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 9, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with maxhit between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with maxhit set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "savingspellstaff" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob savingspellstaff <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 10, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with saving_spell_staff between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with saving_spell_staff set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "savingbreath" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob savingbreath <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 11, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with savingbreath between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with savingbreath set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "savingparapetri" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob savingparapetri <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 12, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with saving_para_petri between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with saving_para_petri set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "savingwand" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob savingwand <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 13, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with saving_wand between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with saving_wand set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "savingpoisondeath" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob savingpoisondeath <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 14, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with saving_poison_death between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with saving_poison_death set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "numattacks" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob numattacks <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 15, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with numattacks between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with numattacks set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "ac" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob ac <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 16, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with ac between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with ac set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "alignment" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob alignment <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount < -1000 || minamount > 1000 )
         {
            send_to_char( "Use a value between -1000 and 1000.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
            if( maxamount > 1000 )
            {
               send_to_char( "Proper range is between -1000 and 1000.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 17, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with alignment between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with alignment set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "gold" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob gold <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 18, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with gold between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with gold set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "bgold" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub mob bgold <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_mob( ch, 19, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No mobiles found with bgold between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No mobiles found with bgold set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "flags" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub mob flags <flag> [<...>]\r\n", ch );
            return;
         }
         while( argument && argument[0] != '\0' )
         {
            argument = one_argument( argument, arg );

            minamount = get_flag( arg, act_flags, ACT_MAX );
            if( minamount < 0 || minamount >= ACT_MAX )
               ch_printf( ch, "Unknown mobile flag: %s\r\n", arg );
            else
               xTOGGLE_BIT( iflags, minamount );
         }
         if( xIS_EMPTY( iflags ) )
         {
            send_to_char( "No flags would be checked.\r\n", ch );
            return;
         }
         if( !grub_mob( ch, 20, -1, -1, iflags ) )
            send_to_char( "No mobiles found with those flags set.\r\n", ch );
         return;
      }
      if( !str_cmp( arg, "sex" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub mob sex <sex>\r\n", ch );
            return;
         }
         argument = one_argument( argument, arg );
         minamount = get_flag( arg, sex_names, SEX_MAX );
         if( minamount < 0 || minamount >= SEX_MAX )
            ch_printf( ch, "Unknown mobile sex: %s\r\n", arg );
         else if( !grub_mob( ch, 21, minamount, -1, iflags ) )
            send_to_char( "No mobiles found with that sex.\r\n", ch );
         return;
      }
      for( stat = 0; stat < STAT_MAX; stat++ )
      {
         if( !str_cmp( arg, stattypes[stat] ) )
         {
            argument = one_argument( argument, arg );
            if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
            {
               ch_printf( ch, "Usage: grub mob %s <#> [<#>]\r\n", stattypes[stat] );
               return;
            }
            minamount = atoi( arg );
            if( minamount < 0 )
            {
               send_to_char( "Use a value equal to or higher than 0.\r\n", ch );
               return;
            }
            if( is_number( argument ) )
            {
               maxamount = atoi( argument );
               if( maxamount < minamount )
               {
                  send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
                  return;
               }
            }
            if( !grub_mob( ch, ( 22 + stat ), minamount, maxamount, iflags ) )
            {
               if( maxamount != -1 )
                  ch_printf( ch, "No mobiles found with %s between %d and %d.\r\n", stattypes[stat], minamount, maxamount );
               else
                  ch_printf( ch, "No mobiles found with %s set to %d.\r\n", stattypes[stat], minamount );
            }
            return;
         }
      }
      if( !str_cmp( arg, "affected" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub mob affected <aff> [<...>]\r\n", ch );
            return;
         }
         while( argument && argument[0] != '\0' )
         {
            argument = one_argument( argument, arg );

            minamount = get_flag( arg, a_flags, AFF_MAX );
            if( minamount < 0 || minamount >= AFF_MAX )
               ch_printf( ch, "Unknown mobile affect: %s\r\n", arg );
            else
               xTOGGLE_BIT( iflags, minamount );
         }
         if( xIS_EMPTY( iflags ) )
         {
            send_to_char( "No flags would be checked.\r\n", ch );
            return;
         }
         if( !grub_mob( ch, 29, -1, -1, iflags ) )
            send_to_char( "No mobiles found with those affects set.\r\n", ch );
         return;
      }
      if( !str_cmp( arg, "resistant" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub mob resistant <ris> [<...>]\r\n", ch );
            return;
         }
         while( argument && argument[0] != '\0' )
         {
            argument = one_argument( argument, arg );

            minamount = get_flag( arg, ris_flags, RIS_MAX );
            if( minamount < 0 || minamount >= RIS_MAX )
               ch_printf( ch, "Unknown mobile resistant: %s\r\n", arg );
            else
               xTOGGLE_BIT( iflags, minamount );
         }
         if( xIS_EMPTY( iflags ) )
         {
            send_to_char( "No resistants would be checked.\r\n", ch );
            return;
         }
         if( !grub_mob( ch, 30, -1, -1, iflags ) )
            send_to_char( "No mobiles found with those resistants set.\r\n", ch );
         return;
      }
      if( !str_cmp( arg, "immune" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub mob immune <ris> [<...>]\r\n", ch );
            return;
         }
         while( argument && argument[0] != '\0' )
         {
            argument = one_argument( argument, arg );

            minamount = get_flag( arg, ris_flags, RIS_MAX );
            if( minamount < 0 || minamount >= RIS_MAX )
               ch_printf( ch, "Unknown mobile immune: %s\r\n", arg );
            else
               xTOGGLE_BIT( iflags, minamount );
         }
         if( xIS_EMPTY( iflags ) )
         {
            send_to_char( "No immunes would be checked.\r\n", ch );
            return;
         }
         if( !grub_mob( ch, 31, -1, -1, iflags ) )
            send_to_char( "No mobiles found with those immunes set.\r\n", ch );
         return;
      }
      if( !str_cmp( arg, "susceptible" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub mob susceptible <ris> [<...>]\r\n", ch );
            return;
         }
         while( argument && argument[0] != '\0' )
         {
            argument = one_argument( argument, arg );

            minamount = get_flag( arg, ris_flags, RIS_MAX );
            if( minamount < 0 || minamount >= RIS_MAX )
               ch_printf( ch, "Unknown mobile susceptible: %s\r\n", arg );
            else
               xTOGGLE_BIT( iflags, minamount );
         }
         if( xIS_EMPTY( iflags ) )
         {
            send_to_char( "No susceptibles would be checked.\r\n", ch );
            return;
         }
         if( !grub_mob( ch, 32, -1, -1, iflags ) )
            send_to_char( "No mobiles found with those susceptibles set.\r\n", ch );
         return;
      }
      if( !str_cmp( arg, "parts" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub mob parts <part> [<...>]\r\n", ch );
            return;
         }
         while( argument && argument[0] != '\0' )
         {
            argument = one_argument( argument, arg );

            minamount = get_flag( arg, part_flags, PART_MAX );
            if( minamount < 0 || minamount >= PART_MAX )
               ch_printf( ch, "Unknown mobile part: %s\r\n", arg );
            else
               xTOGGLE_BIT( iflags, minamount );
         }
         if( xIS_EMPTY( iflags ) )
         {
            send_to_char( "No parts would be checked.\r\n", ch );
            return;
         }
         if( !grub_mob( ch, 33, -1, -1, iflags ) )
            send_to_char( "No mobiles found with those parts set.\r\n", ch );
         return;
      }
      if( !str_cmp( arg, "attacks" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub mob attacks <attack> [<...>]\r\n", ch );
            return;
         }
         while( argument && argument[0] != '\0' )
         {
            argument = one_argument( argument, arg );

            minamount = get_flag( arg, attack_flags, ATCK_MAX );
            if( minamount < 0 || minamount >= ATCK_MAX )
               ch_printf( ch, "Unknown mobile attack: %s\r\n", arg );
            else
               xTOGGLE_BIT( iflags, minamount );
         }
         if( xIS_EMPTY( iflags ) )
         {
            send_to_char( "No attackss would be checked.\r\n", ch );
            return;
         }
         if( !grub_mob( ch, 34, -1, -1, iflags ) )
            send_to_char( "No mobiles found with those attacks set.\r\n", ch );
         return;
      }
      if( !str_cmp( arg, "defenses" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub mob defenses <defense> [<...>]\r\n", ch );
            return;
         }
         while( argument && argument[0] != '\0' )
         {
            argument = one_argument( argument, arg );

            minamount = get_flag( arg, defense_flags, DFND_MAX );
            if( minamount < 0 || minamount >= DFND_MAX )
               ch_printf( ch, "Unknown mobile defense: %s\r\n", arg );
            else
               xTOGGLE_BIT( iflags, minamount );
         }
         if( xIS_EMPTY( iflags ) )
         {
            send_to_char( "No defenses would be checked.\r\n", ch );
            return;
         }
         if( !grub_mob( ch, 35, -1, -1, iflags ) )
            send_to_char( "No mobiles found with those defenses set.\r\n", ch );
         return;
      }
      if( !str_cmp( arg, "absorb" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub mob absorb <ris> [<...>]\r\n", ch );
            return;
         }
         while( argument && argument[0] != '\0' )
         {
            argument = one_argument( argument, arg );

            minamount = get_flag( arg, ris_flags, RIS_MAX );
            if( minamount < 0 || minamount >= RIS_MAX )
               ch_printf( ch, "Unknown mobile absorb: %s\r\n", arg );
            else
               xTOGGLE_BIT( iflags, minamount );
         }
         if( xIS_EMPTY( iflags ) )
         {
            send_to_char( "No absorbs would be checked.\r\n", ch );
            return;
         }
         if( !grub_mob( ch, 36, -1, -1, iflags ) )
            send_to_char( "No mobiles found with those absorbs set.\r\n", ch );
         return;
      }
      if( !str_cmp( arg, "position" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub mob position <pos>\r\n", ch );
            return;
         }
         argument = one_argument( argument, arg );
         minamount = get_flag( arg, pos_names, POS_MAX );
         if( minamount < 0 || minamount >= POS_MAX )
            ch_printf( ch, "Unknown mobile position: %s\r\n", arg );
         else if( !grub_mob( ch, 37, minamount, -1, iflags ) )
            send_to_char( "No mobiles found with that position.\r\n", ch );
         return;
      }
      if( !str_cmp( arg, "defposition" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub mob defposition <pos>\r\n", ch );
            return;
         }
         argument = one_argument( argument, arg );
         minamount = get_flag( arg, pos_names, POS_MAX );
         if( minamount < 0 || minamount >= POS_MAX )
            ch_printf( ch, "Unknown mobile defposition: %s\r\n", arg );
         else if( !grub_mob( ch, 38, minamount, -1, iflags ) )
            send_to_char( "No mobiles found with that defposition.\r\n", ch );
         return;
      }
      send_to_char( "Usage: grub mob flags <flag> [<...>]\r\n", ch );
      send_to_char( "Usage: grub mob sex <sex>\r\n", ch );
      send_to_char( "Usage: grub mob <stat> <#> [<#>]\r\n", ch );
      send_to_char( "Usage: grub mob affected <aff> [<...>]\r\n", ch );
      send_to_char( "Usage: grub mob resistant/immune/susceptible/absorb <ris> [<...>]\r\n", ch );
      send_to_char( "Usage: grub mob parts <part> [<...>]\r\n", ch );
      send_to_char( "Usage: grub mob attacks <attack> [<...>]\r\n", ch );
      send_to_char( "Usage: grub mob defenses <defense> [<...>]\r\n", ch );
      send_to_char( "Usage: grub mob position/defposition <pos>\r\n", ch );
      send_to_char( "Usage: grub mob <check> <#> [<#>]\r\n", ch );
      send_to_char( "Checks:\r\n", ch );
      send_to_char( "     ac   bgold   minhit     alignment    savingparapetri\r\n", ch );
      send_to_char( "   gold  height   weight    numattacks   savingspellstaff\r\n", ch );
      send_to_char( "  count  killed  damroll    savingwand  savingpoisondeath\r\n", ch );
      send_to_char( "  level  maxhit  hitroll  savingbreath\r\n", ch );
   }
   else if( roomchck )
   {
      if( !str_cmp( arg, "tunnel" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub room tunnel <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_room( ch, 1, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No rooms found with tunnel between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No rooms found with tunnel set to %d.\r\n", minamount );
         }
         return;
      }
      if( !str_cmp( arg, "sector" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' )
         {
            send_to_char( "Usage: grub room sector <sector>/<#>\r\n", ch );
            return;
         }
         minamount = get_flag( arg, sect_flags, SECT_MAX );
         if( minamount < 0 && is_number( arg ) )
            minamount = atoi( arg );
         if( minamount < 0 || minamount >= SECT_MAX )
            ch_printf( ch, "No such sector to look for (%s).\r\n", arg );
         else if( !grub_room( ch, 2, minamount, -1, iflags ) )
            ch_printf( ch, "No rooms found with sector set to %s.\r\n", sect_flags[minamount] );
         return;
      }
      if( !str_cmp( arg, "televnum" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' )
         {
            if( !grub_room( ch, 3, -1, -1, iflags ) )
               send_to_char( "No rooms found with a set televnum.\r\n", ch );
            return;
         }
         if( !is_number( arg ) )
         {
            send_to_char( "Usage: grub room televnum [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a number above 0.\r\n", ch );
            return;
         }
         if( !grub_room( ch, 3, minamount, -1, iflags ) )
            ch_printf( ch, "No rooms found with televnum set to %d.\r\n", minamount );
         return;
      }
      if( !str_cmp( arg, "flags" ) )
      {
         if( !argument || argument[0] == '\0' )
         {
            send_to_char( "Usage: grub room flags <flag> [<...>]\r\n", ch );
            return;
         }
         while( argument && argument[0] != '\0' )
         {
            argument = one_argument( argument, arg );

            minamount = get_flag( arg, r_flags, ROOM_MAX );
            if( minamount < 0 || minamount >= ROOM_MAX )
               ch_printf( ch, "Unknown room flag: %s\r\n", arg );
            else
               xTOGGLE_BIT( iflags, minamount );
         }
         if( xIS_EMPTY( iflags ) )
         {
            send_to_char( "No flags would be checked.\r\n", ch );
            return;
         }
         if( !grub_room( ch, 4, -1, -1, iflags ) )
            send_to_char( "No rooms found with those flags set.\r\n", ch );
         return;
      }
      if( !str_cmp( arg, "light" ) )
      {
         argument = one_argument( argument, arg );
         if( arg == NULL || arg[0] == '\0' || !is_number( arg ) )
         {
            send_to_char( "Usage: grub room light <#> [<#>]\r\n", ch );
            return;
         }
         minamount = atoi( arg );
         if( minamount <= 0 )
         {
            send_to_char( "Use a value higher than 0.\r\n", ch );
            return;
         }
         if( is_number( argument ) )
         {
            maxamount = atoi( argument );
            if( maxamount < minamount )
            {
               send_to_char( "Use a max amount higher than the minamount.\r\n", ch );
               return;
            }
         }
         if( !grub_room( ch, 5, minamount, maxamount, iflags ) )
         {
            if( maxamount != -1 )
               ch_printf( ch, "No rooms found with light between %d and %d.\r\n", minamount, maxamount );
            else
               ch_printf( ch, "No rooms found with light set to %d.\r\n", minamount );
         }
         return;
      }
      send_to_char( "Usage: grub room tunnel <#> [<#>]\r\n", ch );
      send_to_char( "Usage: grub room sector <sector>/<#>\r\n", ch );
      send_to_char( "Usage: grub room televnum [<#>]\r\n", ch );
      send_to_char( "Usage: grub room flags <flag> [<...>]\r\n", ch );
      send_to_char( "Usage: grub room light <#> [<#>]\r\n", ch );
   }
}