Hey, thanks Jed Yang. That did the trick. my Load_mobprogs for some reason was missing that entire if statement. I put it in, and now it's working fine.
-----Original Message----- From: Jed Yang [mailto:[EMAIL PROTECTED] Sent: Thursday, August 07, 2003 22:31 To: [EMAIL PROTECTED] Cc: [email protected] Subject: Re: problem with get_prog_index I am not sure if my mobprog is the same as yours, but: In load_mobprogs( FILE *fp ) called by boot_areas( ) after checking `vnum = fread_number( fp )' is not duplicated you should allocate memory say pMprog, then: pMprog->vnum = vnum; // we read this earlier pMprog->code = fread_string( fp ); // !mportant if( mprog_list == NULL ) // first mprog mprog_list = pMprog; else // link it in to the beginning { pMprog->next = mprog_list; mprog_list = pMprog; } // now the linked list mprog_list has the newly read mprog linked in. :] If your version is not the same, it should always look something similiar, I suppose. Look around ( compare to loading other stuff and see ) and hope you solve it. Htam Robert Casko wrote: > > Problem symptoms: > When I olc mobprogs in game, they work fine. but, once even one mob is > linked to a mobprog, the mud will not boot, giving me the bug message > "fix_mobprogs, vnum not found". when I delete the call to the mobprog in > the mob section of the .are file, the mud starts fine...but the mobprog is > not loaded from the #mobprog section. meaning, I basically have to re-write > all mobprogs every boot. > > What I have done so far: > > Looking at the code in fix_mobprogs, I traced the problem(using bug > statements) into a call of the get_prog_index() function. > > Here is what I can see...... > > PROG_CODE *get_prog_index( int vnum, int type ) > { > PROG_CODE *prg; > int debug; > bug( "inside get_prog_index.right before the switch statement using type = > %d", type ); > bug( "And the other paramater that should have been passed was vnum = %d", > vnum ); > /*The above two bugs print fine, the two parameters are being passed > correctly*/ > switch ( type ) > { > case PRG_MPROG: > prg = mprog_list; > break; > case PRG_OPROG: > prg = oprog_list; > break; > case PRG_RPROG: > prg = rprog_list; > break; > default: > return NULL; > } > bug( "if this shows, the type switch statement worked.", 0 ); > /*This bug prints fine, type is set to "0" which is equivalent to PRG_MPROG: > *thus the code of "prg = mprog_list;" should have been executed > */ > debug = prg->vnum; > /*Here the boot craps out. complete stop. access violation. > *In debugging, it shows that there are NO values set in prg > *leading me to think that the line "prg = mprog_list" didn't > *work, leading to all of my problems. > */ > bug( "prg should have been set to mprog_list prg->vnum is %d.", debug ); > for( ; prg; prg = prg->next ) > { > if ( prg->vnum == vnum ) > return( prg ); > } > return NULL; > /*with prg entering that for loop as NULL, the if check is false, thus > *this function returns null, giving me the Fix_mobrpog error I have > *been getting. > */ > } > > All is fine and dandy up to this point, I'm tracking down and narrowing in > on the problem all by myself. > > The problem that leads me to email you guru's for help, however, is when I > try to track down mprog_list from the statement "prg = mprog_list". > > I ask myself, "if prg isn't getting set with any values, maybe the problem > is that mprog_list doesn't have any values to put into prg" > > Well, I search for all instances of mprog_list... > I find it declared in db.c: > PROG_CODE * mprog_list; > > I find it declared in merc.h: > extern PROG_CODE * mprog_list; > > I find it used in the mpedit_create() function: > pMcode = new_mpcode(); > pMcode->vnum = value; > pMcode->next = mprog_list; > mprog_list = pMcode; > > And, I find it used in the mpedit_list()function: > for (mprg = mprog_list; mprg !=NULL; mprg = mprg->next) > > The only place it is set with a value that I can find is in the > mpedit_create function...which is not called during the boot process (that I > can tell). > > So, my questions to you all basically boil down to three questions. > 1) Am I right that my problem stems from prg not getting set with any values > because nowhere is mprog_list getting set with any values? > > 2) If I am right, I am at a loss as to where that SHOULD be getting set. > > 3) If I am wrong, what else should I be looking for? > > -- > ROM mailing list > [email protected] > http://www.rom.org/cgi-bin/mailman/listinfo/rom

