ive been working on tweaking aedit_vnum to automatically update every vnum in the area when the vnums are changed(havent put in the if check so the difference remains the same[eg 3100-3200 and 4550-4750 ->200 dif). the function itself doesnt crash the game, but when i asave it crashes, and ive been trying to locate where, but am having trouble.i figured perhaps someone would have some good insight on how to go about this properly...anyway, heres the function:

AEDIT( aedit_vnum )
{
   AREA_DATA *pArea;
        ROOM_INDEX_DATA *pRoom;
        OBJ_INDEX_DATA *pObj;
        MOB_INDEX_DATA *pMob;
        RESET_DATA *pReset;
        PROG_CODE *prg;
   char lower[MAX_STRING_LENGTH];
   char upper[MAX_STRING_LENGTH];
   int  ilower;
   int  iupper;
        int  vnum;
        int  diff;

   EDIT_AREA(ch, pArea);
        if( !strcmp(pArea->file_name,"limbo.are") )
        {
ptc(ch,"Limbo cannot be modified. It would conflict with internal code.\n\r");
                return FALSE;
        }


   argument = one_argument( argument, lower );
   one_argument( argument, upper );

   if ( !is_number( lower ) || lower[0] == '\0'
   || !is_number( upper ) || upper[0] == '\0' )
   {
        send_to_char( "Syntax:  vnum [#xlower] [#xupper]\n\r", ch );
        return FALSE;
   }

   if ( ( ilower = atoi( lower ) ) > ( iupper = atoi( upper ) ) )
   {
        send_to_char( "AEdit:  Upper must be larger then lower.\n\r", ch );
        return FALSE;
   }

   if ( !check_range( atoi( lower ), atoi( upper ) ) )
   {
        send_to_char( "AEdit:  Range must include only this area.\n\r", ch );
        return FALSE;
   }

   if ( get_vnum_area( ilower )
   && get_vnum_area( ilower ) != pArea )
   {
        send_to_char( "AEdit:  Lower vnum already assigned.\n\r", ch );
        return FALSE;
   }


   if ( get_vnum_area( iupper )
   && get_vnum_area( iupper ) != pArea )
   {
        send_to_char( "AEdit:  Upper vnum already assigned.\n\r", ch );
        return TRUE;    /* The lower value has been set. */
   }

        diff = pArea->min_vnum - ilower;
        //update rooms
        for( vnum = pArea->min_vnum;vnum <= pArea->max_vnum;vnum++)
        {
                if( !(pRoom = get_room_index(vnum)) )
                        continue;
                pRoom->vnum -= diff;
                for ( pReset = pRoom->reset_first; pReset; pReset = 
pReset->next )
                {
                        if( pReset->arg3 <= pArea->max_vnum &&
                                pReset->arg3 >= pArea->min_vnum )
                        pReset->arg3 -= diff;
                }
        }
        //update progs
        for( vnum = pArea->min_vnum;vnum <= pArea->max_vnum;vnum++)
        {
                if( (prg = get_prog_index(vnum,PRG_MPROG)) )
                        prg->vnum -= diff;
                if( (prg = get_prog_index(vnum,PRG_OPROG)) )
                        prg->vnum -= diff;
                if( (prg = get_prog_index(vnum,PRG_RPROG)) )
                        prg->vnum -= diff;
        }
        //update mobs
        for( vnum = pArea->min_vnum;vnum <= pArea->max_vnum;vnum++)
        {
                if( !(pMob = get_mob_index(vnum)) )
                        continue;
                pMob->vnum -= diff;
        }
        //update objects
        for( vnum = pArea->min_vnum;vnum <= pArea->max_vnum;vnum++)
        {
                if( !(pObj = get_obj_index(vnum)) )
                        continue;
                pObj->vnum -= diff;
        }
   pArea->min_vnum = ilower;
   send_to_char( "Lower vnum set.\n\r", ch );
   pArea->max_vnum = iupper;
   send_to_char( "Upper vnum set.\n\r", ch );
        SET_BIT(pArea->area_flags,AREA_CHANGED);

   return TRUE;
}

_________________________________________________________________
Take advantage of powerful junk e-mail filters built on patented Microsoft® SmartScreen Technology. http://join.msn.com/?pgmarket=en-ca&page=byoa/prem&xAPID=1994&DI=1034&SU=http://hotmail.com/enca&HL=Market_MSNIS_Taglines Start enjoying all the benefits of MSN® Premium right now and get the first two months FREE*.

Reply via email to