Banzai
This is what I noticed...
olc_add_to_save_list() is always called like this: (this is stripped
straight from the patch which is located on George's page)
+ olc_add_to_save_list(zone_table[OLC_ZNUM(d)].number, OLC_SAVE_OBJ);
Ok, here it seems, that zone VNUM's are added to the save list...
But then in oedit_save_to_disk() these are first few lines:
+ sprintf(buf, "%s/%d.new", OBJ_PREFIX, zone_table[zone_num].number);
+ if (!(fp = fopen(buf, "w+"))) {
+ mudlog("SYSERR: OLC: Cannot open objects file!", BRF, LVL_BUILDER, TRUE);
+ return;
+ }
I've noticed that xxx_save_to_disk() accepts one parameter zone_num in
this case which would be zone number that woill be saved... So far so
good... I also noticed, that this zone_num parameter has to be zone's real
number,, since it gets resolved to the vnum in that sprintf()... ok, no
problem here..
Here is the problem...
comm.c search for this:
+ switch (entry->type) {
+ case OLC_SAVE_ROOM: redit_save_to_disk(entry->zone); break;
+ case OLC_SAVE_OBJ: oedit_save_to_disk(entry->zone); break;
+ case OLC_SAVE_MOB: medit_save_to_disk(entry->zone); break;
+ case OLC_SAVE_ZONE: zedit_save_to_disk(entry->zone); break;
this is where that shutdown now was implemented and stuff...
Heck, if we added changes to the list in VNUM's and every xxx_save_to_disk
tries to convert them again into vnums, foobar will happen...
Am I right here? It seems weird to me, that nobody noticed this before...
*scratch*
David!
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/08/00 PST