empiremud/cnf/
empiremud/doc/
empiremud/lib/boards/
empiremud/lib/etc/
empiremud/lib/misc/
empiremud/lib/plralias/F-J/
empiremud/lib/plralias/K-O/
empiremud/lib/plralias/P-T/
empiremud/lib/plralias/U-Z/
empiremud/lib/plrobjs/
empiremud/lib/plrobjs/F-J/
empiremud/lib/plrobjs/K-O/
empiremud/lib/plrobjs/P-T/
empiremud/lib/plrobjs/U-Z/
empiremud/lib/world/
empiremud/lib/world/mob/
empiremud/lib/world/obj/
empiremud/log/
/* ************************************************************************
*   File: db.h                                           EmpireMUD AD 1.0 *
*  Usage: header file for database handling                               *
*                                                                         *
*  All rights reserved.  See license.doc for complete information.        *
*                                                                         *
*  Code base by Paul Clarke.  EmpireMUD Project, a tbgMUD Production.     *
*  Based upon CircleMUD 3.0, beta patch level 17, by Jeremy Elson.        *
*                                                                         *
*  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_EMP		4

#define LIB_WORLD			"world/"
#define LIB_TEXT			"text/"
#define LIB_TEXT_HELP		"text/help/"
#define LIB_MISC			"misc/"
#define LIB_ETC				"etc/"
#define LIB_BOARD			"boards/"
#define LIB_PLRTEXT			"plrtext/"
#define LIB_PLROBJS			"plrobjs/"
#define LIB_PLRALIAS		"plralias/"
#define LIB_OBJPACK			"packs/"
#define LIB_EMPIRE			"empires/"
#define LIB_PLRREC			"plrrec/"
#define LIB_PLRLORE			"plrlore/"

#define SUF_OBJS			"objs"
#define SUF_TEXT			"text"
#define SUF_ALIAS			"alias"
#define SUF_PACK			"pack"
#define SUF_EMPIRE			"empire"
#define SUF_REC				"rec"
#define SUF_LORE			"lore"

#define KILLSCRIPT_FILE		"../.killscript"	/* autorun: shut mud down       */
#define PAUSE_FILE			"../pause"			/* autorun: don't restart mud   */

/* names of various files and directories */
#define INDEX_FILE		"index"					/* index of world files			*/
#define WLD_PREFIX		LIB_WORLD"wld/"			/* room definitions				*/
#define MOB_PREFIX		LIB_WORLD"mob/"			/* monster prototypes			*/
#define OBJ_PREFIX		LIB_WORLD"obj/"			/* object prototypes			*/
#define ZON_PREFIX		LIB_WORLD"zon/"			/* zon defs & command tables 	*/
#define HLP_PREFIX		LIB_TEXT"help/"			/* for HELP <keyword>			*/

#define CREDITS_FILE	LIB_TEXT"credits"		/* for the 'credits' command	*/
#define SCREDITS_FILE	LIB_TEXT"credits.short"	/* short version of credits		*/
#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 MENU_FILE		LIB_TEXT"menu"			/* The main menu 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 GODLIST_FILE	LIB_TEXT"godlist"		/* for GODLIST					*/
#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 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"		/* messgs for social acts		*/
#define XNAME_FILE		LIB_MISC"xnames"		/* invalid name substrings		*/

#define PLAYER_FILE		LIB_ETC"players"		/* the player database			*/
#define MAIL_FILE		LIB_ETC"plrmail"		/* for the mudmail system		*/
#define BAN_FILE		LIB_ETC"badsites"		/* for the siteban system		*/
#define TIME_FILE		LIB_ETC"time"			/* for recording the big bang	*/
#define EXP_FILE		LIB_ETC"exp_cycle"		/* for experience cycling		*/

#define NUM_ZONE_UPDATES	10

/* public procedures in db.c */
void boot_db(void);
int create_entry(char *name);
void zone_update(bool all);
room_rnum real_room(room_vnum vnum);
char *fread_string(FILE *fl, char *error);
long get_id_by_name(char *name);
char *get_name_by_id(long id);

void char_to_store(Creature ch, struct char_file_u *st);
void store_to_char(struct char_file_u *st, Creature ch);
int load_char(char *name, struct char_file_u *char_element);
void init_char(Creature ch);
struct char_data* create_char(void);
Creature read_mobile(mob_vnum nr, int type);
mob_rnum real_mobile(mob_vnum vnum);
int vnum_mobile(char *searchname, Creature ch);
void clear_char(Creature ch);
void reset_char(Creature ch);
void free_char(Creature ch);

Object create_obj(void);
void clear_object(Object obj);
void free_obj(Object obj);
obj_rnum real_object(obj_vnum vnum);
Object read_object(obj_vnum nr, int type);
int vnum_object(char *searchname, Creature ch);

#define REAL 0
#define VIRTUAL 1

/* structure for the reset commands */
struct reset_com {
	char command;   /* current command                      */

	int arg1;		/*                                      */
	int arg2;		/* Arguments to the command             */
	};


/* zone definition structure. for the 'zone-table'   */
struct zone_data {
	room_vnum top;           /* upper limit for rooms in this zone */

	zone_vnum number;	    /* virtual number of this zone	  */
	struct reset_com *cmd;   /* command table for reset	          */

	byte rotation;
	};


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


struct help_index_element {
	char *keyword;
	char *entry;
	int level;
	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 {
	char site[BANNED_SITE_LENGTH+1];
	int type;
	time_t date;
	char name[MAX_NAME_LENGTH+1];
	struct ban_list_element *next;
	};


/* global buffering system */

#ifdef __DB_C__
char buf[MAX_STRING_LENGTH];
char buf1[MAX_STRING_LENGTH];
char buf2[MAX_STRING_LENGTH];
char arg[MAX_STRING_LENGTH];
#else
extern struct player_special_data dummy_mob;
extern char buf[MAX_STRING_LENGTH];
extern char buf1[MAX_STRING_LENGTH];
extern char buf2[MAX_STRING_LENGTH];
extern char arg[MAX_STRING_LENGTH];
#endif

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


extern int real_zone(int number);
extern int Global_ignore_dark;


/* Global Externs, for Convenience */
extern Room world;
extern struct zone_data *zone_table;
extern Descr descriptor_list;
extern Creature character_list;
extern struct index_data *mob_index;
extern Object object_list;
extern struct index_data *obj_index;

extern zone_rnum top_of_zone_table;
extern mob_rnum top_of_mobt;
extern obj_rnum top_of_objt;
extern room_rnum top_of_world;