Lyonesse/bin/
Lyonesse/doc/eng/
Lyonesse/doc/ita/
Lyonesse/lib/
Lyonesse/lib/buildings/
Lyonesse/lib/clans/
Lyonesse/lib/data/
Lyonesse/lib/etc/
Lyonesse/lib/house/
Lyonesse/lib/misc/
Lyonesse/lib/plralias/A-E/
Lyonesse/lib/plralias/F-J/
Lyonesse/lib/plralias/K-O/
Lyonesse/lib/plralias/P-T/
Lyonesse/lib/plralias/U-Z/
Lyonesse/lib/plralias/ZZZ/
Lyonesse/lib/plrobjs/A-E/
Lyonesse/lib/plrobjs/F-J/
Lyonesse/lib/plrobjs/K-O/
Lyonesse/lib/plrobjs/P-T/
Lyonesse/lib/plrobjs/U-Z/
Lyonesse/lib/plrobjs/ZZZ/
Lyonesse/lib/plrsave/A-E/
Lyonesse/lib/plrsave/F-J/
Lyonesse/lib/plrsave/K-O/
Lyonesse/lib/plrsave/P-T/
Lyonesse/lib/plrsave/U-Z/
Lyonesse/lib/plrsave/ZZZ/
Lyonesse/lib/ships/
Lyonesse/lib/stables/
Lyonesse/lib/text/help/
Lyonesse/lib/world/
Lyonesse/lib/world/bld/
Lyonesse/lib/world/ship/
Lyonesse/lib/world/shp/
Lyonesse/lib/world/wls/
Lyonesse/lib/world/wls/Life/
Lyonesse/lib/world/wls/Map/
Lyonesse/log/
/**************************************************************************
 * #   #   #   ##   #  #  ###   ##   ##  ###       http://www.lyonesse.it *
 * #    # #   #  #  ## #  #    #    #    #                                *
 * #     #    #  #  # ##  ##    #    #   ##   ## ##  #  #  ##             *
 * #     #    #  #  # ##  #      #    #  #    # # #  #  #  # #            *
 * ###   #     ##   #  #  ###  ##   ##   ###  #   #  ####  ##    Ver. 1.0 *
 *                                                                        *
 * -Based on CircleMud & Smaug-     Copyright (c) 2001-2002 by Mithrandir *
 *                                                                        *
 * ********************************************************************** */
/* ************************************************************************
*   File: db.h                                          Part of CircleMUD *
*  Usage: header file for database handling                               *
*                                                                         *
*  All rights reserved.  See license.doc for complete information.        *
*                                                                         *
*  Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University *
*  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               *
************************************************************************ */

/* arbitrary constants used by index_boot() (must be unique) */
#define DB_BOOT_WLD				0
#define DB_BOOT_MOB				1
#define DB_BOOT_OBJ				2
#define DB_BOOT_ZON				3
#define DB_BOOT_SHP				4
#define DB_BOOT_HLP				5

#if defined(CIRCLE_MACINTOSH)
#define LIB_WORLD		":world:"
#define LIB_TEXT		":text:"
#define LIB_TEXT_HELP	":text:help:"
#define LIB_MISC		":misc:"
#define LIB_ETC			":etc:"
#define LIB_PLRTEXT		":plrtext:"
#define LIB_PLROBJS		":plrobjs:"
#define LIB_PLRALIAS	":plralias:"
#define LIB_HOUSE		":house:"
#define SLASH			":"
#elif defined(CIRCLE_AMIGA) || defined(CIRCLE_UNIX) || defined(CIRCLE_WINDOWS) || defined(CIRCLE_ACORN) || defined(CIRCLE_VMS)
#define LIB_WORLD		"world/"
#define LIB_TEXT		"text/"
#define LIB_TEXT_HELP	"text/help/"
#define LIB_MISC		"misc/"
#define LIB_ETC			"etc/"
#define LIB_PLRTEXT		"plrtext/"
#define LIB_PLROBJS		"plrobjs/"
#define LIB_PLRALIAS	"plralias/"
#define LIB_PLAYERS 	"plrsave/"
#define LIB_HOUSE		"house/"
#define LIB_STABLES		"stables/"
#define LIB_BUILDINGS	"buildings/"
#define LIB_GOODS		"goods/"
#define LIB_CLANS		"clans/"
#define LIB_SHIPS		"ships/"
#define LIB_AREA		"area/"
#define LIB_DATA		"data/"

#define SLASH			"/"
#else
#error "Unknown path components."
#endif

#define SUF_OBJS		"objs"
#define SUF_TEXT		"text"
#define SUF_ALIAS		"alias"
#define SUF_PLAYERS		"txt"

#if defined(CIRCLE_AMIGA)
#define FASTBOOT_FILE   "/.fastboot"			/* autorun: boot without sleep			*/
#define KILLSCRIPT_FILE "/.killscript"			/* autorun: shut mud down				*/
#define PAUSE_FILE      "/pause"				/* autorun: don't restart mud			*/
#elif defined(CIRCLE_MACINTOSH)
#define FASTBOOT_FILE	"::.fastboot"			/* autorun: boot without sleep			*/
#define KILLSCRIPT_FILE	"::.killscript"			/* autorun: shut mud down				*/
#define PAUSE_FILE		"::pause"				/* autorun: don't restart mud			*/
#else
#define FASTBOOT_FILE   "../.fastboot"			/* autorun: boot without sleep			*/
#define KILLSCRIPT_FILE "../.killscript"		/* autorun: shut mud down				*/
#define PAUSE_FILE      "../pause"				/* autorun: don't restart mud			*/
#endif

/* names of various files and directories */
#define INDEX_FILE		"index"					/* index of world files				*/
#define MINDEX_FILE		"index.mini"			/* ... and for mini-mud-mode		*/
#define WLD_PREFIX		LIB_WORLD"wld"SLASH		/* room definitions					*/
#define MOB_PREFIX		LIB_WORLD"mob"SLASH		/* monster prototypes				*/
#define OBJ_PREFIX		LIB_WORLD"obj"SLASH		/* object prototypes				*/
#define ZON_PREFIX		LIB_WORLD"zon"SLASH		/* zon defs & command tables		*/
#define SHP_PREFIX		LIB_WORLD"shp"SLASH		/* shop definitions					*/
#define HLP_PREFIX		LIB_TEXT"help"SLASH		/* for HELP <keyword>				*/
#define WLS_PREFIX      LIB_WORLD"wls"SLASH     /* wilderness definitions			*/
#define BLD_PREFIX		LIB_WORLD"bld"SLASH		/* For building templates			*/
#define SHIP_PREFIX		LIB_WORLD"ship"SLASH	/* For ship templates				*/

#define CREDITS_FILE	LIB_TEXT"credits"		/* for the 'credits' command		*/
#define NEWS_FILE		LIB_TEXT"news"			/* for the 'news' command			*/
#define MOTD_FILE		LIB_TEXT"motd"			/* messages of the day / mortal		*/
#define IMOTD_FILE		LIB_TEXT"imotd"			/* messages of the day / immort		*/
#define GREETINGS_FILE	LIB_TEXT"greetings"		/* The opening screen.				*/
#define HELP_PAGE_FILE	LIB_TEXT_HELP"screen"	/* for HELP <CR>					*/
#define INFO_FILE		LIB_TEXT"info"			/* for INFO							*/
#define WIZLIST_FILE	LIB_TEXT"wizlist"		/* for WIZLIST						*/
#define IMMLIST_FILE	LIB_TEXT"immlist"		/* for IMMLIST						*/
#define BACKGROUND_FILE	LIB_TEXT"background"	/* for the background story			*/
#define POLICIES_FILE	LIB_TEXT"policies"		/* player policies/rules			*/
#define HANDBOOK_FILE	LIB_TEXT"handbook"		/* handbook for new immorts			*/
#define NEWSPAPER_FILE	LIB_TEXT"newspaper"		/* Trade Newspaper					*/

#define IDEA_FILE		LIB_MISC"ideas"			/* for the 'idea'-command			*/
#define TYPO_FILE		LIB_MISC"typos"			/*         'typo'					*/
#define BUG_FILE		LIB_MISC"bugs"			/*         'bug'					*/
#define MESS_FILE		LIB_MISC"messages"		/* damage messages					*/
#define SOCMESS_FILE	LIB_MISC"socials"		/* messages for social acts			*/
#define XNAME_FILE		LIB_MISC"xnames"		/* invalid name substrings			*/

#define MAIL_FILE		LIB_ETC"plrmail"		/* for the mudmail system			*/
#define BAN_FILE		LIB_ETC"badsites"		/* for the siteban system			*/
#define HCONTROL_FILE	LIB_ETC"hcontrol"		/* for the house system				*/
#define TIME_FILE		LIB_ETC"time"			/* for calendar system				*/
#define USERCNT_FILE	LIB_ETC"usercnt"		/* for counting users				*/

#define CLAN_DIP_FILE	LIB_CLANS"clandata"		/* stores clan diplomacy data		*/

#define PLR_INDEX_FILE	"plrsave"SLASH"plr_index"

#define SECT_FILE		LIB_DATA"sectors.data"
#define LIFE_FILE		LIB_DATA"life.data"

/* public procedures in db.c */
CHAR_DATA *create_char(void);
CHAR_DATA *read_mobile(mob_vnum nr, int type);
ROOM_DATA *get_room(room_vnum vnum);
ROOM_DATA *new_room( void );
OBJ_DATA *create_obj(void);
OBJ_DATA *read_object(obj_vnum nr, int type);
char	*fread_string(FILE *fl, const char *error);
char	*get_name_by_id(long id);
int		create_entry(char *name);
int		load_char(char *name, CHAR_DATA *ch);
int		vnum_mobile(char *searchname, CHAR_DATA *ch);
int		vnum_object(char *searchname, CHAR_DATA *ch);
int		vnum_weapon(int attacktype, CHAR_DATA *ch);
long	get_id_by_name(const char *name);
void	zone_update(void);
void	boot_db(void);
void	save_mud_time(TIME_INFO_DATA *when);
void	init_char(CHAR_DATA *ch);
void	clear_char(CHAR_DATA *ch);
void	reset_char(CHAR_DATA *ch);
void	free_char(CHAR_DATA *ch);
void	save_player_index(void);
void	SaveAll(bool bQuit);
void	save_char(CHAR_DATA *ch, ROOM_DATA *load_room);
void	SaveCharObj(CHAR_DATA *ch, bool quitting);
void	clear_object(OBJ_DATA *obj);
void	free_obj(OBJ_DATA *obj);
zone_rnum real_zone(zone_vnum vnum);
mob_rnum real_mobile(mob_vnum vnum);
obj_rnum real_object(obj_vnum vnum);


char	*fread_string_nospace( FILE *fp );
char	*fread_line( FILE *fp );
char	*fread_word( FILE *fp );
char	fread_letter( FILE *fp );
int		fread_number( FILE *fp );
void	fread_to_eol( FILE *fp );


/* ========================================= */

#define REAL 0
#define VIRTUAL 1

/* structure for the reset commands */

/*
        *****************************************************************
        *  Commands:                                                    *
        *                                                               *
        *  'D': Set state of door                                       *
        *                                                               *
        *  'E': Obj to char equip                                       *
        *                                                               *
        *  'G': Obj to char                                             *
        *                                                               *
        *  'H': Random Obj to room                                      *
        *       - arg1 : item type (add 100 for magical item)           *
        *       - arg2 : item level                                     *
        *       - arg3 : room vnum                                      *
        *                                                               *
        *  'I': Random Obj to char                                      *
        *       - arg1 : item type (add 100 for magical item)           *
        *       - arg2 : unused                                         *
        *       - arg3 : unused                                         *
        *                                                               *
        *  'J': Random Obj to char equip                                *
        *       - arg1 : item type (add 100 for magical item)           *
        *       - arg2 : unused                                         *
        *       - arg3 : unused                                         *
        *                                                               *
        *  'M': Read a mobile                                           *
        *                                                               *
        *  'O': Read an object                                          *
        *                                                               *
        *  'P': Put obj in obj                                          *
        *                                                               *
        *  'R': Remove obj from room                                    *
        *                                                               *
        *  'Z': Create a maze                                           *
        *       - arg1 : unused                                         *
        *       - arg2 : unused                                         *
        *       - arg3 : unused                                         *
        *                                                               *
        *****************************************************************
*/

struct reset_com
{
  char			command;						/* current command						*/
  bool			if_flag;						/* if TRUE: exe only if preceding exe'd	*/
  int			arg1;							/*										*/
  int			arg2;							/* Arguments to the command				*/
  int			arg3;							/*										*/
  int			line;							/* line number this command appears on	*/
};

struct zone_wild_data
{
  COORD_DATA	z_start;
  COORD_DATA	z_end;
  char			*survey;						/* description when see from wilderness	*/
  char			*flyto;							/* keyword for targeting with dragons	*/
  int			dist;							/* how far is visible?					*/
};

/* zone definition structure. for the 'zone-table'   */
/*
    * Reset mode:
    *   0: Don't reset, and don't update age.
    *   1: Reset if no PC's are located in zone.
    *   2: Just reset.
*/

struct zone_data
{
  RESET_COM		*cmd;							/* command table for reset				*/
  ZONE_WILD		wild;							/* wilderness info for zone				*/
  char			*name;							/* name of this zone					*/
  int			lifespan;						/* how long between resets (minutes)	*/
  int			age;							/* current age of this zone (minutes)	*/
  int			reset_mode;						/* conditions for reset (see below)		*/
  room_vnum		bot;							/* starting room number for this zone	*/
  room_vnum		top;							/* upper limit for rooms in this zone	*/
  zone_vnum		number;							/* virtual number of this zone			*/
};


/* for queueing zones for update   */
struct reset_q_element
{
  RESET_Q_ELEM	*next;
  zone_rnum		zone_to_reset;					/* ref to zone_data						*/
};



/* structure for the update queue     */
struct reset_q_type
{
   RESET_Q_ELEM *head;
   RESET_Q_ELEM *tail;
};


struct player_index_element
{
  char			*name;
  long			id;
};


struct help_index_element
{
  char			*keyword;
  char			*entry;
  int			duplicate;
};


/* don't change these */
#define BAN_NOT 				0
#define BAN_NEW 				1
#define BAN_SELECT				2
#define BAN_ALL					3

#define BANNED_SITE_LENGTH		50

struct ban_list_element
{
  BAN_LIST_ELEM	*next;
  char			site[BANNED_SITE_LENGTH+1];
  char			name[MAX_NAME_LENGTH+1];
  int			type;
  time_t		date;
};


/* global buffering system */

#ifdef __DB_C__
char	buf[MAX_STRING_LENGTH];
char	buf1[MAX_STRING_LENGTH];
char	buf2[MAX_STRING_LENGTH];
char	buf3[MAX_STRING_LENGTH];
char	arg[MAX_STRING_LENGTH];
#else
extern room_vnum		top_of_world;
extern obj_rnum			top_of_objt;
extern mob_rnum			top_of_mobt;
extern zone_rnum		top_of_zone_table;
extern int				top_of_p_table;
extern int				top_idnum;

extern ROOM_DATA		*World[ROOM_HASH];
extern ZONE_DATA		*zone_table;

extern DESCRIPTOR_DATA	*descriptor_list;
extern CHAR_DATA		*character_list;
extern PLAYER_SPECIAL	dummy_mob;

extern INDEX_DATA		*mob_index;
extern CHAR_DATA		*mob_proto;

extern INDEX_DATA		*obj_index;
extern OBJ_DATA			*first_object;
extern OBJ_DATA			*last_object;
extern OBJ_DATA			*obj_proto;

extern TERRAIN_DATA		*terrain_type[MAX_SECT];

extern PLR_INDEX_ELEM	*player_table;

extern SURVEY_DATA		*survey_table;
extern ROOM_AFFECT		*raff_list;

extern ROOM_DATA		*r_mortal_start_room;
extern ROOM_DATA		*r_immort_start_room;
extern ROOM_DATA		*r_frozen_start_room;

extern char				buf[MAX_STRING_LENGTH];
extern char				buf1[MAX_STRING_LENGTH];
extern char				buf2[MAX_STRING_LENGTH];
extern char				buf3[MAX_STRING_LENGTH];
extern char				arg[MAX_STRING_LENGTH];

extern int				Sunlight;
extern int				MoonPhase;
#endif

#ifndef __CONFIG_C__
extern char	*OK;
extern char	*NOPERSON;
extern char	*NOEFFECT;
#endif