pfile problem w/autoquest

From: Nate Winters (wintersn@HOTMAIL.COM)
Date: 04/25/00


Under bpl16 I added the autoquest code (by Vassago) from:
http://developer.circlemud.org/1998/08/12/2334233.shtml

With additions from a 15 Aug 1997 post Re: [circle] autoquest code
by Eduo from the archives.

The snippet, after Eduo's additions, went fine, no errors. But the pfile
become fuddled :-).
Even after a pwipe, my spare int for clan was being overwritten, as were
some others settings like move/dex/str/exp. After receiving some great help
on the newbie mailing list from Del we narrowed it down to one line. Before
adding this one line the mud runs perfectly. After adding the single line
structs.h:

struct player_special_data_saved {
   byte skills[MAX_SKILLS+1];/* array of skills plus skill 0 */
   byte PADDING0;  /* used to be spells_to_learn */
   bool talks[MAX_TONGUE]; /* PC s Tongues 0 for NPC */
   int wimp_level; /* Below this # of hit points, flee! */
   byte freeze_level; /* Level of god who froze char, if any */
   sh_int invis_level;  /* level of invisibility */
   room_vnum load_room;  /* Which room to place char in */
   long /*bitvector_t*/ pref; /* preference flags for PC's. */
   ubyte bad_pws; /* number of bad password attemps */
   sbyte conditions[3];         /* Drunk, full, thirsty         */



struct char_data *questgiver;/*<--evil line causing pfile problem**********/



/* spares below for future expansion.  You can change the names
from 'sparen' to something meaningful, but don't change the order.  */

   ubyte clan_rank;
   ubyte spare1;
   ubyte spare2;
   ubyte spare3;
   ubyte spare4;
   ubyte spare5;
   int spells_to_learn; /* How many can you learn yet this level*/
   int olc_zone;
   int clan;
   int questpoints;
   int nextquest;
   int countdown;
   int questobj;
   int questmob;
   int spare14;
   int spare15;
   int spare16;
   long spare17;
   long spare18;
   long spare19;
   long spare20;
   long spare21;
};

This causes all the pfile problems. So I messed with it for a few days and
finally got it to work by placing it at the very end of that function after
the spare longs. The autoquest code then worked perfectly. This was all
under windows using the Cygnus shell. So then I tried it on the Linux
server.

Ran into similiar problems, except this time it would crash after the
second boot. So I again narrowed it down to the same one line. After adding
that one line, and doing a pwipe, the first boot works fine. Then after the
first boot it crashes: LOG:

Apr  4 12:23:02 :: Resetting Newbie Zone (rooms 15100-18699).
Apr  4 12:23:02 :: Booting clans.
Apr  4 12:23:02 ::    Calculating powers and members
Apr  4 12:23:02 :: Boot db -- DONE.
Segmentation fault (core dumped)

GDB 4.16 (i586-unknown-linux), Copyright 1996 Free Software Foundation,
Inc...
Core was generated by `bin/circle'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /lib/libc.so.5.3.12...done.
Reading symbols from /lib/ld-linux.so.1...done.
#0  0x8075bd9 in boot_db () at db.c:390
390     }
No backtrace!

void boot_db(void) 380-390
  }

  reset_q.head = reset_q.tail = NULL;

  log("Booting clans.");
  init_clans();

  boot_time = time(0);

  log("Boot db -- DONE.");
}*/<----end of function 390

This made no sense to me. I tried moving questgiver around again, no luck,
tried multiple pwipes/clanwipes... nothing worked, same crash on second
boot. I am not very familiar with pfiles, but my take from all this is that
you can't just add in a struct like the additions post said to do... But it
worked under windows? After several weeks of working on this I have run out
of ideas, any help would be greatly appreciated.

Rumble


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     |  http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html  |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 04/10/01 PDT