Or just use perl OUTSIDE of the mud to do this:
perl -pi~ -e 's/66(\d\d)/17\1/g' file.are
where 66 is the first two numbers of the vnum (what they are)
17 is the second two numbers(what you want them to) 
file.are is the one you want to change
This would change all references to 66XX for example to 17XX, etc and on
down the line.
If you do this inside of the mud, your mud won't boot, it'll try to load
the area, detect conflicting vnums and then not load it up at all.
IF you do this though, be careful, if you're using OLC2, because this
will change the vnum for the prog, but NOT the vnum of the file the prog
is written to (because they're written separate from area files w/
olc2).
All you have to do there is make sure you renumber the prog from
66xx.prg to 17xx.prg

-------------------------------------------
TJW: Head tech, Dreamless Realms Mud
Web: http://drealms.kyndig.com
Snippets http://drealms.kyndig.com/snippets
Telnet telnet://drealms.kyndig.com:9275
The OLC2 Pages http://olc.kyndig.com
-------------------------------------------

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jason
Gauthier
Sent: Monday, January 07, 2002 10:10 AM
To: 'Matthew Kerwin'; [email protected]
Subject: RE: New VNums

You could.. or you could just write a function to renumber an area.

(Works on my mud, you WILL need to change it to work on yours)

void do_renumber(CHAR_DATA *ch, char *argument)
{
   extern int port;
   char arg[MSL];
   char test[1];
   long base, difference, vnum, room;
   AREA_DATA *pArea;

   if (port == 1536 || port == 1538){
      ptc(ch, "This command cannot be used on live or build.\n\r");
            return;
   }

   if (IS_WILDERNESS(ch->in_room)){
      ptc(ch, "Not in the wilderness.\n\r");
      return;
   }

   test[0]=1;
   if (argument[0] == 0 || arg[0] == 0){
      ptc(ch, "Syntax: renumber <min vnum>\n\r");
      return;
   }

   if (atol(argument) == 0){
      ptc(ch, "Sorry, not supporting 0 as an argument.\n\r");
      return;
   }
     base  = atol(argument);
           do_links(ch, test);

   if (test[0] == 'Y'){
      ptc(ch, "Cannot renumber areas with links.\n\r");
      return;
   }

   for (pArea = area_first; pArea; pArea = pArea->next){
      if (pArea->min_vnum <= base && pArea->max_vnum >=base){
         ptc(ch, "Area '%s' conflicts with base vnum.\n\r",
pArea->file_name);
         return;
      }
   }

   difference = base - ch->in_room->area->min_vnum;
   room = ch->in_room->vnum + difference;
   /* renumber rooms */
   for (vnum = ch->in_room->area->min_vnum;
vnum<ch->in_room->area->max_vnum; vnum++){
      ROOM_INDEX_DATA *r;
      OBJ_INDEX_DATA  *o;
      MOB_INDEX_DATA  *m;
      PROG_LIST  *mplist;
      PROG_CODE  *mpcode;
      RESET_DATA  *reset;
      EXIT_DATA *exits;
      int i;
      r = pRoomArray[vnum];
      if (r){
         pRoomArray[vnum + difference] = r;
         pRoomArray[vnum + difference]->vnum += difference;
         /* and do the resets */
         for ( reset = get_room_reset(pRoomArray[vnum+difference]);
reset;
reset = reset->next ){
            reset->arg1 += difference;
            reset->arg3 += difference;
         }
         pRoomArray[vnum] = NULL;
         /* go through the exits, change keys! */
         for (i=0; i<MAX_DIR; i++){
            exits = get_exit(0, r, i);
            if (!exits) continue;
            if (exits->key>0){
               if (exits->key >= ch->in_room->area->min_vnum &&
exits->key
<= ch->in_room->area->max_vnum)
                 exits->key+=difference;
            }
         }
      }

      /* renumber the object */
      o = pObjArray[vnum];
      if (o){
         pObjArray[vnum + difference] = o;
         pObjArray[vnum + difference]->vnum += difference;
         pObjArray[vnum] = NULL;
         if (o->item_type == ITEM_PORTAL){
            if (o->value[3] >= ch->in_room->area->min_vnum &&
o->value[3] <=
ch->in_room->area->max_vnum)
              o->value[3]+=difference;
         }
      }

      /* renumber the mob */
      m = pMobArray[vnum];
      if (m){
         pMobArray[vnum + difference] = m;
         pMobArray[vnum + difference]->vnum += difference;
         /* mprog list */
         for (mplist = pMobArray[vnum+difference]->mprogs; mplist !=
NULL;
mplist = mplist->next)
           mplist->vnum += difference;

         /* shop time */
         if (pMobArray[vnum+difference]->pShop)
           pMobArray[vnum+difference]->pShop->keeper += difference;

         pMobArray[vnum] = NULL;
            }

      /* renumber mob progs */
      mpcode = pMprogArray[vnum];
      if (mpcode){
         pMprogArray[vnum + difference] = mpcode;
         pMprogArray[vnum + difference]->vnum += difference;
         pMprogArray[vnum] = NULL;
      }
   }
   /*now make area changes */
   ch->in_room->area->min_vnum += difference;
   ch->in_room->area->max_vnum += difference;

   ch->in_room = pRoomArray[room];
   ptc(ch, "Done. Base vnum of '%s' is %ld.\n\r",
ch->in_room->area->name,
base);
   ptc(ch, "Saving the world....\n\r");
   process_output(ch->desc, FALSE);
     do_asave(ch, "world");
}

/* this function will go through the current areas vnums and report what
 * vnums have links to other areas */
void do_links (CHAR_DATA *ch, char *argument)
{

   long i;
   sh_int exits;
   EXIT_DATA *pexit;
   OBJ_DATA *obj;
   bool passed = TRUE;
   if (IS_WILDERNESS(ch->in_room)){
      ptc(ch, "Not used in the wilderness\n\r");
      return;
   }

     if (argument[0]==0)
         /* command executed 
            * Not 0 means it was passed from another command, like
renumber
*/
         passed=FALSE;

   for (i=ch->in_room->area->min_vnum; i<=ch->in_room->area->max_vnum;
i++){
      /* check for the room */
      if (pRoomArray[i]){
         for(exits=0; exits<MAX_DIR; exits++){
            pexit = get_exit(ch, pRoomArray[i], exits);
                if (!pexit) continue;
                if (pexit->u1.to_room->vnum <
ch->in_room->area->min_vnum ||
                        pexit->u1.to_room->vnum >
ch->in_room->area->max_vnum){
                     if (!passed)
                         ptc(ch, "Room %ld links to %ld [%s].\n\r", i,
pexit->u1.to_room->vnum,  dir_name[exits]);
                     else
                         argument[0]='Y';
                }
         }
                if (!passed){
                   for (obj = get_room_objs(pRoomArray[i]); obj; obj =
obj->next_content){
                      if (obj->item_type == ITEM_PORTAL){
                         if (obj->value[3] < ch->in_room->area->min_vnum
||
                             obj->value[3] >
ch->in_room->area->max_vnum){
                            ptc(ch, "Room %ld has a portal to %ld.\n\r",
i,
obj->value[3]);
                         }
                         
                      }  
                   }
                }
      }
   }
}

> -----Original Message-----
> From: Matthew Kerwin [mailto:[EMAIL PROTECTED]
> Sent: Monday, January 07, 2002 11:02 AM
> To: [email protected]
> Subject: New VNums
> 
> 
> It's late, I'm tired, and I haven't touched my little ROM for 
> a few months. 
> That said, I was just about to head to bed when I had an 
> idea. You know how 
> there are (probably) several really groovy little non-stock 
> area files 
> floating around there, right? And like some of them more than 
> likely have 
> overlapping VNums, right? Which means the person who uses 
> them has to go 
> through and change every single number in the file.. would it 
> be feasible to 
> use relative numbers? Like if I had a little area that had a 
> little mob in a 
> little room with a little sword, I could assign them all as '0' (or 
> whatever), and then whoever downloads my little area could simply set 
> somewhere the 'add the vnum to this base' number, to get a 
> totally unique id 
> for each thingy.
> 
> I know that could potentially make saving pfiles annoying if 
> you're in the 
> habit of continually adding/removing/changing area files, but 
> then again 
> it's already annoying isn't it?
> 
> Matty
> Brainstorming too late on too little Coke
> -----
> I'm not dead.
> 
> _________________________________________________________________
> Chat with friends online, try MSN Messenger: http://messenger.msn.com
> 
> 
> -- 
> ROM mailing list
> [email protected]
> http://www.rom.org/cgi-bin/mailman/listinfo/rom
> 

-- 
ROM mailing list
[email protected]
http://www.rom.org/cgi-bin/mailman/listinfo/rom



Reply via email to