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