Instead of calling new_obj, use create_object to create an instance of
the dummy object. new_obj will cause problems since the object
doesn't have a pIndexData set, amongst other things (look at the
conditions that cause the "incomplete object" error).
so something like this...
if ( get_obj_index( vnum ) == NULL )
{
bug( "Fread_obj: bad vnum %d.", vnum );
obj = create_object(get_obj_index(OBJ_VNUM_DUMMY),-1);
}
else
obj = create_object(get_obj_index(vnum),-1);
--Palrich.
On Mon, 18 Oct 2004 15:02:36 -0400, Alderon <[EMAIL PROTECTED]> wrote:
> Ok,
>
> I've recently subscribed to the list, and I did some searching before
> posting this. In all reality, I could just be blind. I'll ask anyway:
>
> I've decided to clean up my area list. Mostly to get rid of overpowered eq
> that previous immortals have created.
> When I remove areas, and there are players who have eq that is from that
> area, the mud would freeze until I could
> kill the process and reboot. It would throw out the "Fread_obj: bad vnum
> %d." error in the logs. I have fixed this
> problem when it comes to individual pieces of eq by editing my save.c to
> look like:
>
> if (get_obj_index(vnum) == NULL) { /* Changed to
> fix crash when player
> logged in with */
> bug("Fread_obj: bad vnum %d.", vnum); /*
> non-existant eq. -Alderon */
> obj = new_obj();
> obj->name = str_dup("");
> obj->short_descr = str_dup("");
> obj->description = str_dup("");
> } else {
> obj = create_object(get_obj_index(vnum), -1);
> new_format = TRUE;
> }
>
> The problem is that if the piece of eq is a container (like a backpack) that
> is full of eq. The mud will freeze with the
> "Fread_obj: incomplete object." error message in the logs. From what I can
> gather, the mud is removing the illegal
> container, but when it comes to an object that is "nested" in the container
> it has no clue what to do and just stops
> doing everything. The piece of code is:
>
> if (!str_cmp(word, "End")) {
> // if (!fNest || !fVnum || obj->pIndexData == NULL) {
> if ( !fNest || ( fVnum && obj->pIndexData == NULL ) ){
> bug("Fread_obj: incomplete object.", 0);
> free_obj(obj);
> return;
> } else
> {
> if ( !fVnum )
> {
> free_obj( obj );
> obj = create_object( get_obj_index( OBJ_VNUM_DUMMY ), 0
> );
> }
>
> I'm sorry that the note is too long...I'll try to do better on my next
> posting.
>
> Thank you,
>
> Alderon
> AnimeMUD 2 anime2.ipupdater.net:7000
>
> --
> ROM mailing list
> [email protected]
> http://www.rom.org/cgi-bin/mailman/listinfo/rom
>