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

Reply via email to