Unfortunately, it's not that easy..
You're going to have to move things around in room_index_hash and
stuff.  Otherwise it'll crash one way or another before long.
It probably crashes in asave because olc_save.c calls get_mob_index
and get_room_index etc a lot.

On 4/24/05, omar miisa <[EMAIL PROTECTED]> wrote:
> 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(r)
> 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(r) Premium right now and get the
> first two months FREE*.
> 
> --
> ROM mailing list
> [email protected]
> Unsubscribe here ->>> http://www.rom.org/cgi-bin/mailman/listinfo/rom
>

Reply via email to