/ circle3.1 / src / db.h
db.h
  1  /* ************************************************************************
  2  *   File: db.h                                          Part of CircleMUD *
  3  *  Usage: header file for database handling                               *
  4  *                                                                         *
  5  *  All rights reserved.  See license.doc for complete information.        *
  6  *                                                                         *
  7  *  Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University *
  8  *  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               *
  9  ************************************************************************ */
 10  
 11  /* arbitrary constants used by index_boot() (must be unique) */
 12  #define DB_BOOT_WLD	0
 13  #define DB_BOOT_MOB	1
 14  #define DB_BOOT_OBJ	2
 15  #define DB_BOOT_ZON	3
 16  #define DB_BOOT_SHP	4
 17  #define DB_BOOT_HLP	5
 18  
 19  #if defined(CIRCLE_MACINTOSH)
 20  #define LIB_WORLD	":world:"
 21  #define LIB_TEXT	":text:"
 22  #define LIB_TEXT_HELP	":text:help:"
 23  #define LIB_MISC	":misc:"
 24  #define LIB_ETC		":etc:"
 25  #define LIB_PLRTEXT	":plrtext:"
 26  #define LIB_PLROBJS	":plrobjs:"
 27  #define LIB_PLRALIAS	":plralias:"
 28  #define LIB_HOUSE	":house:"
 29  #define SLASH		":"
 30  #elif defined(CIRCLE_AMIGA) || defined(CIRCLE_UNIX) || defined(CIRCLE_WINDOWS) || defined(CIRCLE_ACORN) || defined(CIRCLE_VMS)
 31  #define LIB_WORLD	"world/"
 32  #define LIB_TEXT	"text/"
 33  #define LIB_TEXT_HELP	"text/help/"
 34  #define LIB_MISC	"misc/"
 35  #define LIB_ETC		"etc/"
 36  #define LIB_PLRTEXT	"plrtext/"
 37  #define LIB_PLROBJS	"plrobjs/"
 38  #define LIB_PLRALIAS	"plralias/"
 39  #define LIB_HOUSE	"house/"
 40  #define SLASH		"/"
 41  #else
 42  #error "Unknown path components."
 43  #endif
 44  
 45  #define SUF_OBJS	"objs"
 46  #define SUF_TEXT	"text"
 47  #define SUF_ALIAS	"alias"
 48  
 49  #if defined(CIRCLE_AMIGA)
 50  #define FASTBOOT_FILE   "/.fastboot"    /* autorun: boot without sleep  */
 51  #define KILLSCRIPT_FILE "/.killscript"  /* autorun: shut mud down       */
 52  #define PAUSE_FILE      "/pause"        /* autorun: don't restart mud   */
 53  #elif defined(CIRCLE_MACINTOSH)
 54  #define FASTBOOT_FILE	"::.fastboot"	/* autorun: boot without sleep	*/
 55  #define KILLSCRIPT_FILE	"::.killscript"	/* autorun: shut mud down	*/
 56  #define PAUSE_FILE	"::pause"	/* autorun: don't restart mud	*/
 57  #else
 58  #define FASTBOOT_FILE   "../.fastboot"  /* autorun: boot without sleep  */
 59  #define KILLSCRIPT_FILE "../.killscript"/* autorun: shut mud down       */
 60  #define PAUSE_FILE      "../pause"      /* autorun: don't restart mud   */
 61  #endif
 62  
 63  /* names of various files and directories */
 64  #define INDEX_FILE	"index"		/* index of world files		*/
 65  #define MINDEX_FILE	"index.mini"	/* ... and for mini-mud-mode	*/
 66  #define WLD_PREFIX	LIB_WORLD"wld"SLASH	/* room definitions	*/
 67  #define MOB_PREFIX	LIB_WORLD"mob"SLASH	/* monster prototypes	*/
 68  #define OBJ_PREFIX	LIB_WORLD"obj"SLASH	/* object prototypes	*/
 69  #define ZON_PREFIX	LIB_WORLD"zon"SLASH	/* zon defs & command tables */
 70  #define SHP_PREFIX	LIB_WORLD"shp"SLASH	/* shop definitions	*/
 71  #define HLP_PREFIX	LIB_TEXT"help"SLASH	/* for HELP <keyword>	*/
 72  
 73  #define CREDITS_FILE	LIB_TEXT"credits" /* for the 'credits' command	*/
 74  #define NEWS_FILE	LIB_TEXT"news"	/* for the 'news' command	*/
 75  #define MOTD_FILE	LIB_TEXT"motd"	/* messages of the day / mortal	*/
 76  #define IMOTD_FILE	LIB_TEXT"imotd"	/* messages of the day / immort	*/
 77  #define GREETINGS_FILE	LIB_TEXT"greetings"	/* The opening screen.	*/
 78  #define HELP_PAGE_FILE	LIB_TEXT_HELP"screen"	/* for HELP <CR>	*/
 79  #define INFO_FILE	LIB_TEXT"info"		/* for INFO		*/
 80  #define WIZLIST_FILE	LIB_TEXT"wizlist"	/* for WIZLIST		*/
 81  #define IMMLIST_FILE	LIB_TEXT"immlist"	/* for IMMLIST		*/
 82  #define BACKGROUND_FILE	LIB_TEXT"background"/* for the background story	*/
 83  #define POLICIES_FILE	LIB_TEXT"policies"  /* player policies/rules	*/
 84  #define HANDBOOK_FILE	LIB_TEXT"handbook"  /* handbook for new immorts	*/
 85  
 86  #define IDEA_FILE	LIB_MISC"ideas"	   /* for the 'idea'-command	*/
 87  #define TYPO_FILE	LIB_MISC"typos"	   /*         'typo'		*/
 88  #define BUG_FILE	LIB_MISC"bugs"	   /*         'bug'		*/
 89  #define MESS_FILE	LIB_MISC"messages" /* damage messages		*/
 90  #define SOCMESS_FILE	LIB_MISC"socials"  /* messages for social acts	*/
 91  #define XNAME_FILE	LIB_MISC"xnames"   /* invalid name substrings	*/
 92  
 93  #define PLAYER_FILE	LIB_ETC"players"   /* the player database	*/
 94  #define MAIL_FILE	LIB_ETC"plrmail"   /* for the mudmail system	*/
 95  #define BAN_FILE	LIB_ETC"badsites"  /* for the siteban system	*/
 96  #define HCONTROL_FILE	LIB_ETC"hcontrol"  /* for the house system	*/
 97  #define TIME_FILE	LIB_ETC"time"	   /* for calendar system	*/
 98  
 99  /* public procedures in db.c */
100  void	boot_db(void);
101  void	destroy_db(void);
102  int	create_entry(char *name);
103  void	zone_update(void);
104  char	*fread_string(FILE *fl, const char *error);
105  long	get_id_by_name(const char *name);
106  char	*get_name_by_id(long id);
107  void	save_mud_time(struct time_info_data *when);
108  void	free_extra_descriptions(struct extra_descr_data *edesc);
109  void	free_text_files(void);
110  void	free_player_index(void);
111  void	free_help(void);
112  
113  zone_rnum real_zone(zone_vnum vnum);
114  room_rnum real_room(room_vnum vnum);
115  mob_rnum real_mobile(mob_vnum vnum);
116  obj_rnum real_object(obj_vnum vnum);
117  
118  void	char_to_store(struct char_data *ch, struct char_file_u *st);
119  void	store_to_char(struct char_file_u *st, struct char_data *ch);
120  int	load_char(const char *name, struct char_file_u *char_element);
121  void	save_char(struct char_data *ch);
122  void	init_char(struct char_data *ch);
123  struct char_data* create_char(void);
124  struct char_data *read_mobile(mob_vnum nr, int type);
125  int	vnum_mobile(char *searchname, struct char_data *ch);
126  void	clear_char(struct char_data *ch);
127  void	reset_char(struct char_data *ch);
128  void	free_char(struct char_data *ch);
129  
130  struct obj_data *create_obj(void);
131  void	clear_object(struct obj_data *obj);
132  void	free_obj(struct obj_data *obj);
133  struct obj_data *read_object(obj_vnum nr, int type);
134  int	vnum_object(char *searchname, struct char_data *ch);
135  
136  #define REAL 0
137  #define VIRTUAL 1
138  
139  /* structure for the reset commands */
140  struct reset_com {
141     char	command;   /* current command                      */
142  
143     bool if_flag;	/* if TRUE: exe only if preceding exe'd */
144     int	arg1;		/*                                      */
145     int	arg2;		/* Arguments to the command             */
146     int	arg3;		/*                                      */
147     int line;		/* line number this command appears on  */
148  
149     /* 
150  	*  Commands:              *
151  	*  'M': Read a mobile     *
152  	*  'O': Read an object    *
153  	*  'G': Give obj to mob   *
154  	*  'P': Put obj in obj    *
155  	*  'G': Obj to char       *
156  	*  'E': Obj to char equip *
157  	*  'D': Set state of door *
158     */
159  };
160  
161  
162  
163  /* zone definition structure. for the 'zone-table'   */
164  struct zone_data {
165     char	*name;		    /* name of this zone                  */
166     int	lifespan;           /* how long between resets (minutes)  */
167     int	age;                /* current age of this zone (minutes) */
168     room_vnum bot;           /* starting room number for this zone */
169     room_vnum top;           /* upper limit for rooms in this zone */
170  
171     int	reset_mode;         /* conditions for reset (see below)   */
172     zone_vnum number;	    /* virtual number of this zone	  */
173     struct reset_com *cmd;   /* command table for reset	          */
174  
175     /*
176      * Reset mode:
177      *   0: Don't reset, and don't update age.
178      *   1: Reset if no PC's are located in zone.
179      *   2: Just reset.
180      */
181  };
182  
183  
184  
185  /* for queueing zones for update   */
186  struct reset_q_element {
187     zone_rnum zone_to_reset;            /* ref to zone_data */
188     struct reset_q_element *next;
189  };
190  
191  
192  
193  /* structure for the update queue     */
194  struct reset_q_type {
195     struct reset_q_element *head;
196     struct reset_q_element *tail;
197  };
198  
199  
200  
201  struct player_index_element {
202     char	*name;
203     long id;
204  };
205  
206  
207  struct help_index_element {
208     char	*keyword;
209     char *entry;
210     int duplicate;
211  };
212  
213  
214  /* don't change these */
215  #define BAN_NOT 	0
216  #define BAN_NEW 	1
217  #define BAN_SELECT	2
218  #define BAN_ALL		3
219  
220  #define BANNED_SITE_LENGTH    50
221  struct ban_list_element {
222     char	site[BANNED_SITE_LENGTH+1];
223     int	type;
224     time_t date;
225     char	name[MAX_NAME_LENGTH+1];
226     struct ban_list_element *next;
227  };
228  
229  
230  /* global buffering system */
231  
232  #ifndef __DB_C__
233  extern struct room_data *world;
234  extern room_rnum top_of_world;
235  
236  extern struct zone_data *zone_table;
237  extern zone_rnum top_of_zone_table;
238  
239  extern struct descriptor_data *descriptor_list;
240  extern struct char_data *character_list;
241  extern struct player_special_data dummy_mob;
242  
243  extern struct index_data *mob_index;
244  extern struct char_data *mob_proto;
245  extern mob_rnum top_of_mobt;
246  
247  extern struct index_data *obj_index;
248  extern struct obj_data *object_list;
249  extern struct obj_data *obj_proto;
250  extern obj_rnum top_of_objt;
251  #endif
252  
253  #ifndef __CONFIG_C__
254  extern char	*OK;
255  extern char	*NOPERSON;
256  extern char	*NOEFFECT;
257  #endif