Well I realize lots of people are posting about oasis bugs, since I haven't
seen this one I suppose I will ask about it.
I have really wierd errors occuring from time to time on the mud.
Often it is zon file changes. The actual .zon save files are somehow
changing by themselves. Like a shopkeeper normally loads to room 'x'
then all of a sudden a new mob (that was JUST built) is loaded into his
place. And I look at the .zon files and sure enough the new mobs vnum is
there and the file isn't corrupt or anything. This problem happens even
before save_to_disk it happens immediatly. Here is a specific example:
medit creating new mob 8301, is causing the zedit to point to 8301 instead
of 8302 like it should be.
was load mob 8302, now its load mob 8301 in 2 rooms.
Zone file 83 before problem occured:
...lots of lines...
M 0 8302 2 8302
Presently mob 8302 is loading in room 8302. It works fine.
Now we create a mob 8301 (since mob 8301 did not exist before).
We then zedit to make mob 8301 load up in room 8301.
[at this point the bug manifests itself, room 8302 is changed by itself]
we then do zedit save 83, medit save 83. [note the bug came before saving]
here is the new 83.zon after the problem occured:
D 0 8301 0 1 /* this new line is added */
M 0 8301 2 8301 /* this new line is added */
M 0 8301 2 8302 /* This line replaced the old load mob line in the .zon */
===================
I am pretty sure the problem is in zedit.c save_internally as opposed to
save_to_file since the problem manifests before it is saved to file.
[I will include the zedit_save_internally function at the bottom.
Anyone with a clue about this please help.
Note that the bugs are not consistent, they happen at unpredictable times
and do unpredictable things, but normally the zon file gets edited.
--
Mike Donais. (BOFH) (donais@uwindsor.ca)
SOCR: Student Operated Computing Resources (http://supernova.uwindsor.ca)
--
If yours is different or you can see a error plz tell me:
void zedit_save_internally(struct descriptor_data *d)
{ int subcmd = 0, cmd_room = -2, room_num;
room_num = real_room(OLC_NUM(d));
/*. Zap all entried in zone_table that relate to this room .*/
while(ZCMD.command != 'S')
{ switch(ZCMD.command)
{ case 'M':
case 'O':
cmd_room = ZCMD.arg3;
break;
case 'D':
case 'X':
case 'R':
cmd_room = ZCMD.arg1;
break;
default:
break;
}
if(cmd_room == room_num)
remove_cmd_from_list(&(zone_table[OLC_ZNUM(d)].cmd), subcmd);
else
subcmd++;
}
/*. Now add all the entries in the players descriptor list .*/
subcmd = 0;
while(MYCMD.command != 'S')
{ add_cmd_to_list(&(zone_table[OLC_ZNUM(d)].cmd), &MYCMD, subcmd);
subcmd++;
}
/*. Finally, if zone headers have been changed, copy over .*/
if (OLC_ZONE(d)->number)
{ free(zone_table[OLC_ZNUM(d)].name);
zone_table[OLC_ZNUM(d)].name = str_dup(OLC_ZONE(d)->name);
zone_table[OLC_ZNUM(d)].top = OLC_ZONE(d)->top;
zone_table[OLC_ZNUM(d)].reset_mode = OLC_ZONE(d)->reset_mode;
zone_table[OLC_ZNUM(d)].lifespan = OLC_ZONE(d)->lifespan;
}
olc_add_to_save_list(zone_table[OLC_ZNUM(d)].number, OLC_SAVE_ZONE);
}
This archive was generated by hypermail 2b30 : 12/18/00 PST