/** * @file db.h * Header file for database handling. * * Part of the core tbaMUD source code distribution, which is a derivative * of, and continuation of, CircleMUD. * * All rights reserved. See license for complete information. * Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University * CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. * */ #ifndef _DB_H_ #define _DB_H_ /* 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 #define DB_BOOT_TRG 6 #define DB_BOOT_QST 7 #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_PLRVARS ":plrvars:" #define LIB_PLRFILES ":plrfiles:" #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_PLRVARS "plrvars/" #define LIB_HOUSE "house/" #define LIB_PLRFILES "plrfiles/" #define SLASH "/" #else #error "Unknown path components." #endif #define SUF_OBJS "objs" #define SUF_TEXT "text" #define SUF_MEM "mem" #define SUF_PLR "plr" #if defined(CIRCLE_AMIGA) #define EXE_FILE "/bin/circle" /* maybe use argv[0] but it's not reliable */ #define KILLSCRIPT_FILE "/.killscript" /* autorun: shut mud down */ #define PAUSE_FILE "/pause" /* autorun: don't restart mud */ #elif defined(CIRCLE_MACINTOSH) #define EXE_FILE "::bin:circle" /* maybe use argv[0] but it's not reliable */ #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 EXE_FILE "bin/circle" /* maybe use argv[0] but it's not reliable */ #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 TRG_PREFIX LIB_WORLD"trg"SLASH /* trigger files */ #define HLP_PREFIX LIB_TEXT"help"SLASH /* Help files */ #define QST_PREFIX LIB_WORLD"qst"SLASH /* quest files */ #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"help" /* for HELP <CR> */ #define IHELP_PAGE_FILE LIB_TEXT_HELP"ihelp" /* for HELP <CR> imms */ #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 HELP_FILE "help.hlp" #define IDEAS_FILE LIB_MISC"ideas" /* for the 'idea'-command */ #define TYPOS_FILE LIB_MISC"typos" /* 'typo' */ #define BUGS_FILE LIB_MISC"bugs" /* 'bug' */ #define MESS_FILE LIB_MISC"messages" /* damage messages */ #define SOCMESS_FILE LIB_MISC"socials" /* messages for social acts */ #define SOCMESS_FILE_NEW LIB_MISC"socials.new" /* messages for social acts with aedit patch*/ #define XNAME_FILE LIB_MISC"xnames" /* invalid name substrings */ /* BEGIN: Assumed default locations for logfiles, mainly used in do_file. */ /**/ #define SYSLOG_LOGFILE "../syslog" #define CRASH_LOGFILE "../syslog.CRASH" #define PREFIX_LOGFILE "../log/" #define LEVELS_LOGFILE PREFIX_LOGFILE"levels" #define RIP_LOGFILE PREFIX_LOGFILE"rip" #define NEWPLAYERS_LOGFILE PREFIX_LOGFILE"newplayers" #define RENTGONE_LOGFILE PREFIX_LOGFILE"rentgone" #define ERRORS_LOGFILE PREFIX_LOGFILE"errors" #define GODCMDS_LOGFILE PREFIX_LOGFILE"godcmds" #define HELP_LOGFILE PREFIX_LOGFILE"help" #define DELETES_LOGFILE PREFIX_LOGFILE"delete" #define RESTARTS_LOGFILE PREFIX_LOGFILE"restarts" #define USAGE_LOGFILE PREFIX_LOGFILE"usage" #define BADPWS_LOGFILE PREFIX_LOGFILE"badpws" #define OLC_LOGFILE PREFIX_LOGFILE"olc" #define TRIGGER_LOGFILE PREFIX_LOGFILE"trigger" /**/ /* END: Assumed default locations for logfiles, mainly used in do_file. */ #define CONFIG_FILE LIB_ETC"config" /* OasisOLC * GAME CONFIG FL */ #define PLAYER_FILE LIB_ETC"players" /* the player database */ #define MAIL_FILE LIB_ETC"plrmail" /* for the mudmail system */ #define MAIL_FILE_TMP LIB_ETC"plrmail_tmp" /* 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 CHANGE_LOG_FILE "../changelog" /* for the changelog */ /* new bitvector data for use in player_index_element */ #define PINDEX_DELETED (1 << 0) /* deleted player */ #define PINDEX_NODELETE (1 << 1) /* protected player */ #define PINDEX_SELFDELETE (1 << 2) /* player is selfdeleting*/ #define PINDEX_NOWIZLIST (1 << 3) /* Player shouldn't be on wizlist*/ #define REAL 0 #define VIRTUAL 1 /* structure for the reset commands */ 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 */ char *sarg1; /* string argument */ char *sarg2; /* string argument */ /* Commands: * 'M': Read a mobile * 'O': Read an object * 'G': Give obj to mob * 'P': Put obj in obj * 'G': Obj to char * 'E': Obj to char equip * 'D': Set state of door * 'T': Trigger command * 'V': Assign a variable */ }; /* zone definition structure. for the 'zone-table' */ struct zone_data { char *name; /* name of this zone */ char *builders; /* namelist of builders allowed to */ /* modify this zone. */ int lifespan; /* how long between resets (minutes) */ int age; /* current age of this zone (minutes) */ room_vnum bot; /* starting room number for this zone */ room_vnum top; /* upper limit for rooms in this zone */ int zone_flags[ZN_ARRAY_MAX]; /* Zone Flags bitvector */ int min_level; /* Minimum level a player must be to enter this zone */ int max_level; /* Maximum level a player must be to enter this zone */ int reset_mode; /* conditions for reset (see below) */ zone_vnum number; /* virtual number of this zone */ struct reset_com *cmd; /* command table for reset */ /* Reset mode: * 0: Don't reset, and don't update age. * 1: Reset if no PC's are located in zone. * 2: Just reset. */ }; /* for queueing zones for update */ struct reset_q_element { zone_rnum zone_to_reset; /* ref to zone_data */ struct reset_q_element *next; }; /* structure for the update queue */ struct reset_q_type { struct reset_q_element *head; struct reset_q_element *tail; }; /* Added level, flags, and last, primarily for pfile autocleaning. You can also * use them to keep online statistics, and add race, class, etc if you like. */ struct player_index_element { char *name; long id; int level; int flags; time_t last; }; struct help_index_element { char *index; /*Future Use */ char *keywords; /*Keyword Place holder and sorter */ char *entry; /*Entries for help files with Keywords at very top*/ int duplicate; /*Duplicate entries for multple keywords*/ int min_level; /*Min Level to read help entry*/ }; /* The ban defines and structs were moved to ban.h */ /* for the "buffered" rent and house object loading */ struct obj_save_data_t { struct obj_data *obj; int locate; struct obj_save_data_t *next; }; typedef struct obj_save_data_t obj_save_data; /* public procedures in db.c */ void boot_db(void); void destroy_db(void); char *fread_action(FILE *fl, int nr); int create_entry(char *name); void zone_update(void); char *fread_string(FILE *fl, const char *error); char *fread_clean_string(FILE *fl, const char *error); int fread_number(FILE *fp); char *fread_line(FILE *fp); int fread_flags(FILE *fp, int *fg, int fg_size); char *fread_word(FILE *fp); void fread_to_eol(FILE *fp); long get_id_by_name(const char *name); char *get_name_by_id(long id); void save_mud_time(struct time_info_data *when); void free_text_files(void); void free_help_table(void); void free_player_index(void); void load_help(FILE *fl, char *name); zone_rnum real_zone(zone_vnum vnum); room_rnum real_room(room_vnum vnum); mob_rnum real_mobile(mob_vnum vnum); obj_rnum real_object(obj_vnum vnum); /* Public Procedures from objsave.c */ void Crash_save_all(void); void Crash_idlesave(struct char_data *ch); void Crash_crashsave(struct char_data *ch); int Crash_load(struct char_data *ch); void Crash_listrent(struct char_data *ch, char *name); int Crash_clean_file(char *name); int Crash_delete_crashfile(struct char_data *ch); int Crash_delete_file(char *name); void update_obj_file(void); void Crash_rentsave(struct char_data *ch, int cost); obj_save_data *objsave_parse_objects(FILE *fl); int objsave_save_obj_record(struct obj_data *obj, FILE *fl, int location); /* Special functions */ SPECIAL(receptionist); SPECIAL(cryogenicist); /* Functions from players.c */ void tag_argument(char *argument, char *tag); int load_char(const char *name, struct char_data *ch); void save_char(struct char_data *ch); void init_char(struct char_data *ch); struct char_data* create_char(void); struct char_data *read_mobile(mob_vnum nr, int type); int vnum_mobile(char *searchname, struct char_data *ch); void clear_char(struct char_data *ch); void reset_char(struct char_data *ch); void free_char(struct char_data *ch); void save_player_index(void); long get_ptable_by_name(const char *name); void remove_player(int pfilepos); void clean_pfiles(void); void build_player_index(void); struct obj_data *create_obj(void); void clear_object(struct obj_data *obj); void free_obj(struct obj_data *obj); struct obj_data *read_object(obj_vnum nr, int type); int vnum_object(char *searchname, struct char_data *ch); int vnum_room(char *, struct char_data *); int vnum_trig(char *, struct char_data *); void setup_dir(FILE *fl, int room, int dir); void index_boot(int mode); void discrete_load(FILE *fl, int mode, char *filename); void parse_room(FILE *fl, int virtual_nr); void parse_mobile(FILE *mob_f, int nr); char *parse_object(FILE *obj_f, int nr); int is_empty(zone_rnum zone_nr); void reset_zone(zone_rnum zone); void reboot_wizlists(void); ACMD(do_reboot); void boot_world(void); int count_hash_records(FILE *fl); bitvector_t asciiflag_conv(char *flag); void renum_world(void); void load_config( void ); /* global buffering system */ #ifndef __DB_C__ /* Various Files */ extern char *credits; extern char *news; extern char *motd; extern char *imotd; extern char *GREETINGS; extern char *help; extern char *ihelp; extern char *info; extern char *wizlist; extern char *immlist; extern char *background; extern char *handbook; extern char *policies; extern char *bugs; extern char *typos; extern char *ideas; /* The ingame helpfile */ extern int top_of_helpt; extern struct help_index_element *help_table; /* Mud configurable variables */ extern int no_mail; extern int mini_mud; extern int no_rent_check; extern time_t boot_time; extern int circle_restrict; extern room_rnum r_mortal_start_room; extern room_rnum r_immort_start_room; extern room_rnum r_frozen_start_room; extern struct config_data config_info; extern struct time_info_data time_info; extern struct weather_data weather_info; extern struct player_special_data dummy_mob; extern struct reset_q_type reset_q; extern struct room_data *world; extern room_rnum top_of_world; extern struct zone_data *zone_table; extern zone_rnum top_of_zone_table; extern struct char_data *character_list; extern struct index_data *mob_index; extern struct char_data *mob_proto; extern mob_rnum top_of_mobt; extern struct index_data *obj_index; extern struct obj_data *object_list; extern struct obj_data *obj_proto; extern obj_rnum top_of_objt; extern struct social_messg *soc_mess_list; extern int top_of_socialt; extern struct shop_data *shop_index; extern int top_shop; extern struct index_data **trig_index; extern struct trig_data *trigger_list; extern int top_of_trigt; extern long max_mob_id; extern long max_obj_id; extern int dg_owner_purged; extern struct message_list fight_messages[MAX_MESSAGES]; /* autoquest globals */ extern struct aq_data *aquest_table; extern qst_rnum total_quests; /* Happyhour global */ extern struct happyhour happy_data; /* begin previously located in players.c, returned to db.c */ extern struct player_index_element *player_table; extern int top_of_p_table; extern int top_of_p_file; extern long top_idnum; /* end previously located in players.c */ #endif /* __DB_C__ */ #endif /* _DB_H_ */