/******************************************************************************* * _ | File Name: new_dbx.c * / \ _-' | Description: This c program loads the races and * _/| \-''- _ / | classes into thier linked lists. * __-' | \ | * / \ | * / "o. |o | | * | \ ; | * ', | * \_ __\ | (c) 2000-2001 TAKA * ''-_ \.// | (c) 2000-2001 The GhostMud Project Team * / '-____' | * / | You may use this code under GNU license restriction * _' The Wolf | 1) This header block remains in the code. * _-' strikes! | 2) You email me at a_ghost_dancer@excite.com *_________________________| letting me know you are using this code * please incluse your name, your mud name * All rights reserved your mud address, your email and this file * GhostMud is copyrighted name. * by TAKA 3) In your help files mention me where appropriate * IE: help snippets. *********************************************************************************/ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <time.h> #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #include <sys/time.h> #if defined(macintosh) || defined(WIN32) #include <sys/types.h> #else #include <sys/types.h> #include <sys/time.h> #include <sys/resource.h> #endif #endif #include "merc.h" int MAX_PC_RACE; int MAX_RACE; /* Debug information 1108 */ char SHOW_RACE; /* Show Debug Race Information */ char SHOW_AREA; /* Show Debug Area Information */ char SHOW_AREAD; /* Show Debug Area Details */ char SHOW_CLASS; /* Show Debug Class Information */ char SHOW_CLAN; /* Show Debug Clan Information */ char SHOW_CSAVES; /* Show Debug Clan Saves */ char SHOW_CONFL; /* Show Debug Configuration Load */ /* Tests for config file */ #define MAX_IN_CONFIG 108 char ConfigValid[MAX_IN_CONFIG]; char *ConfigName[] = { /* mobs */ "MOB_VNUM_FIDO", "MOB_VNUM_CITYGUARD", "MOB_VNUM_VAMPIRE", "MOB_VNUM_PATROLMAN", "MOB_VNUM_GGOLEM", /* objects */ "OBJ_VNUM_SILVER_ONE", "OBJ_VNUM_GOLD_ONE", "OBJ_VNUM_GOLD_SOME", "OBJ_VNUM_SILVER_SOME", "OBJ_VNUM_COINS", "OBJ_VNUM_CORPSE_NPC", "OBJ_VNUM_CORPSE_PC", "OBJ_VNUM_SEVERED_HEAD", "OBJ_VNUM_TORN_HEART", "OBJ_VNUM_SLICED_ARM", "OBJ_VNUM_SLICED_LEG", "OBJ_VNUM_GUTS", "OBJ_VNUM_BRAINS", "OBJ_VNUM_MUSHROOM", "OBJ_VNUM_LIGHT_BALL", "OBJ_VNUM_SPRING", "OBJ_VNUM_DISC", "OBJ_VNUM_PORTAL", "OBJ_VNUM_ROSE", "OBJ_VNUM_PIT", "OBJ_VNUM_MAP", "OBJ_VNUM_WHISTLE", "OBJ_VNUM_STEAK", "OBJ_VNUM_PILL", "OBJ_VNUM_POTION", "OBJ_VNUM_DUMMY", "OBJ_VNUM_DIAMOND_RING", /* school objects */ "OBJ_VNUM_SCHOOL_MACE", "OBJ_VNUM_SCHOOL_DAGGER", "OBJ_VNUM_SCHOOL_SWORD", "OBJ_VNUM_SCHOOL_SPEAR", "OBJ_VNUM_SCHOOL_STAFF", "OBJ_VNUM_SCHOOL_AXE", "OBJ_VNUM_SCHOOL_FLAIL", "OBJ_VNUM_SCHOOL_WHIP", "OBJ_VNUM_SCHOOL_POLEARM", "OBJ_VNUM_SCHOOL_VEST", "OBJ_VNUM_SCHOOL_SHIELD", "OBJ_VNUM_SCHOOL_BANNER", "OBJ_VNUM_NEWBIE", /* rooms */ "ROOM_VNUM_LIMBO", "ROOM_VNUM_CHAT", "ROOM_VNUM_TEMPLE", "ROOM_VNUM_ALTAR", "ROOM_VNUM_SCHOOL", "ROOM_VNUM_BALANCE", "ROOM_VNUM_CIRCLE", "ROOM_VNUM_DEMISE", "ROOM_VNUM_HONOR", "ROOM_VNUM_RTD", /* mud options morge */ "USE_MORGE_CODE", "MORGE_TO_LEVEL", "ROOM_VNUM_MORGE", "CHAR_BODY_TO_MORGE", "USE_RACE_MORGE", "USE_NEWBIE_MORGE", "NEWBIE_MORGE_VNUM", "NEWBIE_MORGE_LEVEL", "RACE_MORGE_LEVEL", /* home recall */ "USE_HOME_RECALL", "MIN_HOME_LEVEL", "USE_RACE_RECALL", "USE_RACE_RECALL_LEVEL", "USE_NEWBIE_RECALL", "NEWBIE_RECALL_VNUM", /* marriage */ "USE_MARRY", "MIN_LEVEL_MARRY", /* misc */ "USE_DEFAULT_WIZI", "MUD_USES_REMORTS", "USE_IMMORTAL_CUSTOM_TITLES", /* slay messages */ "ALLOW_MULTI_SLAY", "ALLOW_CUSTOM_SLAY", "CUSTOM_SLAY_COUNT", "CUSTOM_SLAY_LEVEL", "ALLOW_SHARE_CUSTOM", /* Paint Ball */ "ALLOW_PB_WARS", "PB_JOIN_TICKS", "RELOAD_OPTION_ON", "NO_SHOOTS", "PCT_HIT_SHOOT", "CHAMP_MSG", "RELOAD_LAG", /* other options */ "MUD_CODE_BASE", "MUD_NAME", "AUTHOR_CODEBASE", "GREET_MESSAGE", "LEAVE_MESSAGE", "GRATS_MESSAGE", "SAVE_MESSAGE", "RESTRICTED_SAVE", /* show lists */ "RACE_SHOW_LIST", "CLASS_SHOW_LIST", /* Adjust Exp penalty/bonus system 031601 */ "ALLOW_EXP", "MIN_EXP", "MAX_EXP", "MAX_EXP_TIMER", "DEFAULT_EXP_TIMER", /* Hunger options */ "HUNGER_LEVEL", "HUNGER_SUB_HP", "HUNGER_SUB_MANA", "HUNGER_SUB_MOVE", "HUNGER_KILL", "HUNGER_TICKS", "" }; struct deity_type deity_table[MAX_DEITY]; /* --TBD * Well known mob virtual numbers. * Defined in #MOBILES. */ long MOB_VNUM_FIDO; long MOB_VNUM_CITYGUARD; long MOB_VNUM_VAMPIRE; long MOB_VNUM_PATROLMAN; long GROUP_VNUM_TROLLS; long GROUP_VNUM_OGRES; long MOB_VNUM_GGOLEM; /* * Well known object virtual numbers. * Defined in #OBJECTS. */ long OBJ_VNUM_SILVER_ONE; long OBJ_VNUM_GOLD_ONE; long OBJ_VNUM_GOLD_SOME; long OBJ_VNUM_SILVER_SOME; long OBJ_VNUM_COINS; long OBJ_VNUM_CORPSE_NPC; long OBJ_VNUM_CORPSE_PC; long OBJ_VNUM_SEVERED_HEAD; long OBJ_VNUM_TORN_HEART; long OBJ_VNUM_SLICED_ARM; long OBJ_VNUM_SLICED_LEG; long OBJ_VNUM_GUTS; long OBJ_VNUM_BRAINS; long OBJ_VNUM_MUSHROOM; long OBJ_VNUM_LIGHT_BALL; long OBJ_VNUM_SPRING; long OBJ_VNUM_DISC; long OBJ_VNUM_PORTAL; long OBJ_VNUM_ROSE; long OBJ_VNUM_PIT; long OBJ_VNUM_SCHOOL_MACE; long OBJ_VNUM_SCHOOL_DAGGER; long OBJ_VNUM_SCHOOL_SWORD; long OBJ_VNUM_SCHOOL_SPEAR; long OBJ_VNUM_SCHOOL_STAFF; long OBJ_VNUM_SCHOOL_AXE; long OBJ_VNUM_SCHOOL_FLAIL; long OBJ_VNUM_SCHOOL_WHIP; long OBJ_VNUM_SCHOOL_POLEARM; long OBJ_VNUM_SCHOOL_VEST; long OBJ_VNUM_SCHOOL_SHIELD; long OBJ_VNUM_SCHOOL_BANNER; long OBJ_VNUM_MAP; long OBJ_VNUM_NEWBIE; long OBJ_VNUM_WHISTLE; long OBJ_VNUM_STEAK; long OBJ_VNUM_PILL; long OBJ_VNUM_POTION; /* * Well known room virtual numbers. * Defined in #ROOMS. */ long ROOM_VNUM_LIMBO; long ROOM_VNUM_CHAT; long ROOM_VNUM_TEMPLE; long ROOM_VNUM_ALTAR; long ROOM_VNUM_SCHOOL; long ROOM_VNUM_BALANCE; long ROOM_VNUM_CIRCLE; long ROOM_VNUM_DEMISE; long ROOM_VNUM_HONOR; long ROOM_VNUM_RTD; /* * Object defined in limbo.are * Used in save.c to load objects that don't exist. */ long OBJ_VNUM_DUMMY; long OBJ_VNUM_DIAMOND_RING; /* * morge options */ long USE_MORGE_CODE; long CHAR_BODY_TO_MORGE; long MORGE_TO_LEVEL; long ROOM_VNUM_MORGE; long USE_RACE_MORGE; long USE_NEWBIE_MORGE; long NEWBIE_MORGE_VNUM; long NEWBIE_MORGE_LEVEL; long RACE_MORGE_LEVEL; /* * home recall options */ long USE_HOME_RECALL; long MIN_HOME_LEVEL; long USE_RACE_RECALL; long USE_RACE_RECALL_LEVEL; long USE_NEWBIE_RECALL; long NEWBIE_RECALL_VNUM; /* * marriage code flexable flags */ long USE_MARRY; long MIN_LEVEL_MARRY; /* * settings for the mud */ long USE_DEFAULT_WIZI; long MUD_USES_REMORTS; long USE_IMMORTAL_CUSTOM_TITLES; long ALLOW_MULTI_SLAY; /* Allow Multi Slay */ long ALLOW_CUSTOM_SLAY; /* Allow immortals to make their own custom slays */ long CUSTOM_SLAY_COUNT; /* Number of custom slays per person */ long CUSTOM_SLAY_LEVEL; /* Level to allow custom slays */ long ALLOW_SHARE_CUSTOM; /* Allow other immortals to use someone elses custom slay */ long PB_JOIN_TICKS; /* number of ticks to allow people to join war */ long ALLOW_PB_WARS; /* allow paintball wars on this mud 1=yes 0=no*/ long RELOAD_OPTION_ON; /* force players to reload after # of shoots expended */ long NO_SHOOTS; /* Allow x number of shoots before reload */ long PCT_HIT_SHOOT; /* Percent chance to hit */ long CHAMP_MSG; /* display champion message */ long RELOAD_LAG; /* reload lag time it takes to reload */ char *MUD_CODE_BASE; char *MUD_NAME; char *AUTHOR_CODEBASE; char *GREET_MESSAGE; char *LEAVE_MESSAGE; char *GRATS_MESSAGE; char *SAVE_MESSAGE; char *RESTRICTED_SAVE; /* settings for adjusted exp. 031601 */ long ALLOW_EXP; long MIN_EXP; long MAX_EXP; long DEFAULT_EXP_TIMER; long MAX_EXP_TIMER; /* * Hunger options by Taka of GhostMUD project for ROFT */ long HUNGER_LEVEL; long HUNGER_SUB_HP; long HUNGER_SUB_MANA; long HUNGER_SUB_MOVE; long HUNGER_KILL; long HUNGER_TICKS; /* * load nanny options */ long RACE_SHOW_LIST; long CLASS_SHOW_LIST; /* * temp rooms */ long ROOM_CLAN_HALL; /* * establish values for use in this program */ FILE * fpRace; char strRace[MIL]; int MPR = 0; /* * class type xref * 1=mage type, 2=cleric type, 3=thief type * 4=fighter type, 5=ranger type, 6=paladin type */ int cType[MAX_CLASS] = { 1, 2, 3, 4, 5, 3, 6, 1, 1, 1, 4, 6, 4, 3, 1, 5, 1, 2, 5, 1, 1, 2, 6, 2, 1, 3 }; int ctype[MAX_CLASS_TYPE]; /* Taka added 022702 */ /* max totals stuff */ long TOTAL_newbie; long TOTAL_maxwho; long TOTAL_LastDown; long TOTAL_signon; long TOTAL_levels; long TOTAL_deletes; long TOTAL_deathsmob; long TOTAL_deathspc; long TOTAL_killspc; long TOTAL_slays; /* * define external functions * load_helps from db.c */ extern void load_helps args( ( FILE *fp, char *fname ) ); /* * define local functions or prototypes */ void load_race args( ( FILE *fp ) ); void load_race_info args( ( FILE *fp ) ); void AppendRace (RACE_INFO_DATA *RIptr); void PrintRace (void); void load_slaym (); /* 010501 */ void save_slaym (); /* 010501 */ void AppendSlayMsg (SLAY_MESSAGE *SMptr); /* 010501 */ void load_total_info (void); void save_total_info(void); /* load debug information 1108 */ void load_debug_info (void); void save_debug_info (void); /* * Read in all PC Races into PC Race Table */ void load_races() { /* * Read in all the races files. */ char buf[MSL]; char strSave[MSL]; { FILE *fpList; if ( ( fpList = fopen( RACE_LIST, "r" ) ) == NULL ) { perror( RACE_LIST ); exit( 1 ); } log_string( "Loading Race Files" ); /* * Loop through the race files reading the list of races */ for ( ; ; ) { strcpy( strRace, fread_word( fpList ) ); if ( strRace[0] == '$' ) break; sprintf(strSave, "%s%s",RACE_DIR, strRace); /* 1108 show race debug */ if ((SHOW_RACE == 'Y') || (SHOW_RACE == 'y')) { sprintf(buf, "Race File load for %s file is %s", strRace, strSave); log_string( buf ); } if ( strRace[0] == '-' ) { fpRace = stdin; } else { if ( ( fpRace = fopen( strSave, "r" ) ) == NULL ) { perror( strSave ); exit( 1 ); } } /* * each new race read through the individual race files * HELPS - contains help entries for the race * RACE - contains information pertaining to PC Races * INFO - contains information on every active race for the mud */ for ( ; ; ) { char *word; /* * unknown section */ if ( fread_letter( fpRace ) != '#' ) { sprintf(buf, "Boot_new_db: # not found. Letter in error is %s", fread_string(fpRace)); bug( buf, 0 ); exit( 1 ); } word = fread_word( fpRace ); if ( word[0] == '$' ) break; else if ( !str_cmp( word, "HELPS" ) ) load_helps (fpRace, strRace); else if ( !str_cmp( word, "RACE" ) ) load_race (fpRace); else if ( !str_cmp( word, "INFO" ) ) load_race_info (fpRace); else { sprintf(buf, "Boot_new_db: bad section name. Word in error is %s", word); bug( buf, 0 ); exit( 1 ); } } if ( fpRace != stdin ) fclose( fpRace ); fpRace = NULL; MPR++; } fclose( fpList ); } /* 1108 show race debug */ if ((SHOW_RACE == 'Y') || (SHOW_RACE == 'y')) { log_string("human race pointer"); log_string(RIhuman->name); PrintRace(); } return; } /* * load PC Race information * name, creation points, and class multipliers * skills and stats */ void load_race( FILE *fp ) { int rLoop; char *wName; /* * set up new pointer */ RIptr = malloc(sizeof(struct race_info)); RIptr->name = fread_string( fp ); if (!str_cmp(RIptr->name,"human")) RIhuman = RIptr; wName = fread_string( fp ); for(rLoop = 0; rLoop < 6; rLoop++) RIptr->who_name[rLoop] = wName[rLoop]; RIptr->points = fread_number( fp ); for(rLoop = 0; rLoop < MAX_CLASS_TYPE; rLoop++) { ctype[rLoop] = fread_number( fp ); } for(rLoop = 0; rLoop < MAX_CLASS; rLoop++) { RIptr->class_mult[rLoop] = ctype[(cType[rLoop] - 1)]; } for(rLoop = 0; rLoop < 5; rLoop++) RIptr->skills[rLoop] = fread_string( fp ); for(rLoop = 0; rLoop < 5; rLoop++) RIptr->stats[rLoop] = fread_number( fp ); for(rLoop = 0; rLoop < 5; rLoop++) RIptr->max_stats[rLoop] = fread_number( fp ); RIptr->size = fread_number( fp ); RIptr->number_trains = fread_number( fp ); RIptr->recall_vnum = fread_long_number( fp ); RIptr->morge_vnum = fread_long_number( fp ); MAX_PC_RACE++; return; } /* * load all race information * this must be done for all races on the mud */ void load_race_info( FILE *fp ) { char *word; word = fread_word( fp ); word = fread_string( fp ); if ( str_cmp( word, RIptr->name ) ) { RIptr = malloc(sizeof(struct race_info)); RIptr->name = word; } word = fread_word( fp ); RIptr->pc_race = fread_number( fp ); word = fread_word( fp ); RIptr->act = fread_flag( fp ); word = fread_word( fp ); RIptr->aff = fread_flag( fp ); word = fread_word( fp ); RIptr->off = fread_flag( fp ); word = fread_word( fp ); RIptr->imm = fread_flag( fp ); word = fread_word( fp ); RIptr->res = fread_flag( fp ); word = fread_word( fp ); RIptr->vuln = fread_flag( fp ); word = fread_word( fp ); RIptr->form = fread_flag( fp ); word = fread_word( fp ); RIptr->parts = fread_flag( fp ); word = fread_word( fp ); RIptr->remort_race = fread_number( fp ); RIptr->race_number = MAX_RACE; MAX_RACE++; AppendRace(RIptr); return; } /* * Append to Race Linked List */ void AppendRace(RACE_INFO_DATA *RIptr) { if (RIhead == NULL) { RIhead = RIptr; RIptr->RIprev = NULL; } else { RItail->RInext = RIptr; RIptr->RIprev = RItail; } RItail = RIptr; RIptr->RInext = NULL; return; } /* * Use this to bebug race errors feel free to add fields as * you see needed. * It currently does not get called in this routine! * -Taka */ void PrintRace() { char buf[MSL]; RACE_INFO_DATA *ri; for(ri=RIhead; ri != NULL; ri=ri->RInext) { sprintf(buf, "%s %d %d", ri->name, ri->pc_race, ri->points); log_string( buf ); } return; } #if defined(CKEY) #undef CKEY #endif #define CKEY( literal, field, value ) \ if ( !str_cmp( word, literal ) ) \ { \ field = value; \ fMatch = TRUE; \ break; \ } /* provided to free strings */ #if defined(CKEYS) #undef CKEYS #endif #define CKEYS( literal, field, value ) \ if ( !str_cmp( word, literal ) ) \ { \ free_string(field); \ field = value; \ fMatch = TRUE; \ break; \ } /* * load debug information 1108 * -Taka * SHOW_RACE - lists the races as they are loaded and shows the table * SHOW_AREA - list the area file as it is loaded * SHOW_AREAD - lists area sections as they are read into the game * SHOW_CLASS - lists the classes as they are loaded * SHOW_CLAN - Shows clan debug information * SHOW_CSAVES - Show clan saves * SHOW_CONFL - Show configuration File Load */ void load_debug_info (void) { /* * Read in all the races files. */ char *word; bool fMatch; FILE *DBInfo; if ( ( DBInfo = fopen( DEBUG_FILE_INFO, "r" ) ) == NULL ) { perror( DEBUG_FILE_INFO ); exit( 1 ); } log_string ("Opening Debug File DEBUG.TXT."); for ( ; ; ) { word = feof( DBInfo ) ? "End" : fread_word( DBInfo ); fMatch = FALSE; log_string(word); switch ( UPPER(word[0]) ) { case '*': fMatch = TRUE; fread_to_eol( DBInfo ); break; case 'E': fMatch = TRUE; return; case 'S': CKEY( "SRace", SHOW_RACE, fread_letter( DBInfo ) ); CKEY( "SArea", SHOW_AREA, fread_letter( DBInfo ) ); CKEY( "SRead", SHOW_AREAD, fread_letter( DBInfo ) ); CKEY( "SClas", SHOW_CLASS, fread_letter( DBInfo ) ); CKEY( "SClan", SHOW_CLAN, fread_letter( DBInfo ) ); CKEY( "SCSav", SHOW_CSAVES, fread_letter( DBInfo ) ); CKEY( "SConf", SHOW_CONFL, fread_letter( DBInfo ) ); break; } if ( !fMatch ) { bug( "Fread_char: no match.", 0 ); logf("load_debug *ERROR* Fread_char: no match to word %s", word); fread_to_eol( DBInfo ); } } fclose( DBInfo ); return; } /* * load debug information 1108 * -Taka * SHOW_RACE - lists the races as they are loaded and shows the table * SHOW_AREA - list the area file as it is loaded * SHOW_AREAD - lists area sections as they are read into the game * SHOW_CLASS - lists the classes as they are loaded * SHOW_CLAN - Shows clan debug information * SHOW_CSAVES - Show clan saves * SHOW_CONFL - Show configuration File Load */ void save_debug_info (void) { /* * Read in all the races files. */ FILE *DBInfo; if ( ( DBInfo = fopen( DEBUG_FILE_INFO, "w" ) ) == NULL ) { bug( "Save_debug_info: fopen", 0 ); perror( DEBUG_FILE_INFO ); } else { log_string ("Saveing Debug File DEBUG.TXT."); fprintf( DBInfo, "* Debug Information 110403~\n" ); fprintf( DBInfo, "* -Taka~\n" ); fprintf( DBInfo, "* SHOW_RACE - lists the races as they are loaded and shows the table~\n" ); fprintf( DBInfo, "* SHOW_AREA - list the area file as it is loaded~\n" ); fprintf( DBInfo, "* SHOW_AREAD - lists area sections as they are read into the game~\n" ); fprintf( DBInfo, "* SHOW_CLASS - lists the classes as they are loaded~\n" ); fprintf( DBInfo, "* SHOW_CLAN - Shows clan debug information~\n" ); fprintf( DBInfo, "* SHOW_CSAVES - Show clan saves~\n" ); fprintf( DBInfo, "* SHOW_CONFL - Show configuration File Load~\n" ); fprintf( DBInfo, "* ~\n" ); fprintf( DBInfo, "SRace %c\n", SHOW_RACE); fprintf( DBInfo, "SArea %c\n", SHOW_AREA); fprintf( DBInfo, "SRead %c\n", SHOW_AREAD); fprintf( DBInfo, "SClas %c\n", SHOW_CLASS); fprintf( DBInfo, "SClan %c\n", SHOW_CLAN); fprintf( DBInfo, "SCSav %c\n", SHOW_CSAVES); fprintf( DBInfo, "SConf %c\n", SHOW_CONFL); fprintf( DBInfo, "End\n"); } fclose( DBInfo ); return; } /* * 010501 * (c) 2001 Taka * Custom slay messages * load_slaym - Loads a slay message * AppendSlayMsg - Adds a new message to the linked list * save_slaym - saves the slay message file */ void load_slaym() { char *word; FILE *fp; if ( ( fp = fopen( SLAY_MESSAGE_LIST, "r" ) ) == NULL ) { perror( SLAY_MESSAGE_LIST ); exit( 1 ); } log_string( "Loading Slay Message File" ); for (;;) { word = fread_word( fp ); if(word[0] == '$') return; SMptr = malloc(sizeof(struct slay_message)); word = fread_word( fp ); SMptr->Slay_Number = fread_number( fp ); word = fread_word( fp ); SMptr->Slay_Name = fread_string( fp ); word = fread_word( fp ); SMptr->Char_Name = fread_string( fp ); word = fread_word( fp ); SMptr->Show_Vict = fread_string( fp ); word = fread_word( fp ); SMptr->Show_Char = fread_string( fp ); word = fread_word( fp ); SMptr->Show_Room = fread_string( fp ); AppendSlayMsg( SMptr ); } return; } /* * Append to Slay Message Linked List */ void AppendSlayMsg(SLAY_MESSAGE *SMptr) { if (SMHead == NULL) { SMHead = SMptr; SMptr->SMprev = NULL; } else { SMTail->SMnext = SMptr; SMptr->SMprev = SMTail; } SMTail = SMptr; SMptr->SMnext = NULL; return; } void save_slaym() { FILE *fp; SLAY_MESSAGE *smIndex; /* loop through slays and save */ if ( ( fp = fopen( SLAY_MESSAGE_LIST, "w" ) ) == NULL ) { bug( "Save_slay_message_list: fopen", 0 ); perror( SLAY_MESSAGE_LIST ); } else { for(smIndex=SMHead; smIndex != NULL; smIndex=smIndex->SMnext) { fprintf( fp, "#\n" ); fprintf( fp, "Snmbr %d\n", smIndex->Slay_Number); fprintf( fp, "SName %s~\n", smIndex->Slay_Name); fprintf( fp, "PName %s~\n", smIndex->Char_Name); fprintf( fp, "TVict %s~\n", smIndex->Show_Vict); fprintf( fp, "TChar %s~\n", smIndex->Show_Char); fprintf( fp, "TRoom %s~\n", smIndex->Show_Room); } fprintf( fp, "$\n" ); fclose( fp ); } return; } /* end 010501 adds */ void load_config_info (void) { /* * Read in all the races files. */ char *word; FILE *CFInfo; int Indx; if ( ( CFInfo = fopen( CONFIG_INFO_FILE, "r" ) ) == NULL ) { perror( CONFIG_INFO_FILE ); exit( 1 ); } log_string ("Opening Configuration File CONFIG.TXT."); /* set all the validates to blanks */ for(Indx = 0; Indx <= MAX_IN_CONFIG; Indx++) { ConfigValid[Indx] = '0'; } for( ; ; ) { word = fread_word( CFInfo ); /* Debug switches */ if(SHOW_CONFL == 'Y' || SHOW_CONFL == 'y') { logf("Word read: %s", word); } /* end of file */ if(word[0] == '$') break; /* skip comments */ if(word[0] == '*') { fread_string( CFInfo ); continue; } /* load mobs */ else if(!str_cmp(word, "MOB_VNUM_FIDO")) MOB_VNUM_FIDO = fread_long_number( CFInfo ); else if(!str_cmp(word, "MOB_VNUM_CITYGUARD")) MOB_VNUM_CITYGUARD = fread_long_number( CFInfo ); else if(!str_cmp(word, "MOB_VNUM_VAMPIRE")) MOB_VNUM_VAMPIRE = fread_long_number( CFInfo ); else if(!str_cmp(word, "MOB_VNUM_PATROLMAN")) MOB_VNUM_PATROLMAN = fread_long_number( CFInfo ); else if(!str_cmp(word, "MOB_VNUM_GGOLEM")) MOB_VNUM_GGOLEM = fread_long_number( CFInfo ); /* load groups */ else if(!str_cmp(word, "GROUP_VNUM_TROLLS")) GROUP_VNUM_TROLLS = fread_long_number( CFInfo ); else if(!str_cmp(word, "GROUP_VNUM_OGRES")) GROUP_VNUM_OGRES = fread_long_number( CFInfo ); /* load objects */ else if(!str_cmp(word, "OBJ_VNUM_SILVER_ONE")) OBJ_VNUM_SILVER_ONE = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_GOLD_ONE")) OBJ_VNUM_GOLD_ONE = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_GOLD_SOME")) OBJ_VNUM_GOLD_SOME = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SILVER_SOME")) OBJ_VNUM_SILVER_SOME = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_COINS")) OBJ_VNUM_COINS = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_CORPSE_NPC")) OBJ_VNUM_CORPSE_NPC = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_CORPSE_PC")) OBJ_VNUM_CORPSE_PC = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SEVERED_HEAD")) OBJ_VNUM_SEVERED_HEAD = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_TORN_HEART")) OBJ_VNUM_TORN_HEART = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SLICED_ARM")) OBJ_VNUM_SLICED_ARM = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SLICED_LEG")) OBJ_VNUM_SLICED_LEG = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_GUTS")) OBJ_VNUM_GUTS = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_BRAINS")) OBJ_VNUM_BRAINS = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_MUSHROOM")) OBJ_VNUM_MUSHROOM = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_LIGHT_BALL")) OBJ_VNUM_LIGHT_BALL = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SPRING")) OBJ_VNUM_SPRING = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_DISC")) OBJ_VNUM_DISC = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_PORTAL")) OBJ_VNUM_PORTAL = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_ROSE")) OBJ_VNUM_ROSE = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_PIT")) OBJ_VNUM_PIT = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_MAP")) OBJ_VNUM_MAP = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_WHISTLE")) OBJ_VNUM_WHISTLE = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_STEAK")) OBJ_VNUM_STEAK = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_PILL")) OBJ_VNUM_PILL = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_POTION")) OBJ_VNUM_POTION = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_DUMMY")) OBJ_VNUM_DUMMY = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_DIAMOND_RING")) OBJ_VNUM_DIAMOND_RING = fread_long_number( CFInfo ); /* load school items */ else if(!str_cmp(word, "OBJ_VNUM_SCHOOL_MACE")) OBJ_VNUM_SCHOOL_MACE = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SCHOOL_DAGGER")) OBJ_VNUM_SCHOOL_DAGGER = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SCHOOL_SWORD")) OBJ_VNUM_SCHOOL_SWORD = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SCHOOL_SPEAR")) OBJ_VNUM_SCHOOL_SPEAR = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SCHOOL_STAFF")) OBJ_VNUM_SCHOOL_STAFF = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SCHOOL_AXE")) OBJ_VNUM_SCHOOL_AXE = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SCHOOL_FLAIL")) OBJ_VNUM_SCHOOL_FLAIL = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SCHOOL_WHIP")) OBJ_VNUM_SCHOOL_WHIP = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SCHOOL_POLEARM")) OBJ_VNUM_SCHOOL_POLEARM = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SCHOOL_VEST")) OBJ_VNUM_SCHOOL_VEST = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SCHOOL_SHIELD")) OBJ_VNUM_SCHOOL_SHIELD = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_SCHOOL_BANNER")) OBJ_VNUM_SCHOOL_BANNER = fread_long_number( CFInfo ); else if(!str_cmp(word, "OBJ_VNUM_NEWBIE")) OBJ_VNUM_NEWBIE = fread_long_number( CFInfo ); /* load rooms */ else if(!str_cmp(word, "ROOM_VNUM_LIMBO")) ROOM_VNUM_LIMBO = fread_long_number( CFInfo ); else if(!str_cmp(word, "ROOM_VNUM_CHAT")) ROOM_VNUM_CHAT = fread_long_number( CFInfo ); else if(!str_cmp(word, "ROOM_VNUM_TEMPLE")) ROOM_VNUM_TEMPLE = fread_long_number( CFInfo ); else if(!str_cmp(word, "ROOM_VNUM_ALTAR")) { ROOM_VNUM_ALTAR = fread_long_number( CFInfo ); ROOM_CLAN_HALL = ROOM_VNUM_ALTAR; } else if(!str_cmp(word, "ROOM_VNUM_SCHOOL")) ROOM_VNUM_SCHOOL = fread_long_number( CFInfo ); else if(!str_cmp(word, "ROOM_VNUM_BALANCE")) ROOM_VNUM_BALANCE = fread_long_number( CFInfo ); else if(!str_cmp(word, "ROOM_VNUM_CIRCLE")) ROOM_VNUM_CIRCLE = fread_long_number( CFInfo ); else if(!str_cmp(word, "ROOM_VNUM_DEMISE")) ROOM_VNUM_DEMISE = fread_long_number( CFInfo ); else if(!str_cmp(word, "ROOM_VNUM_HONOR")) ROOM_VNUM_HONOR = fread_long_number( CFInfo ); else if(!str_cmp(word, "ROOM_VNUM_RTD")) ROOM_VNUM_RTD = fread_long_number( CFInfo ); /* morge options */ else if(!str_cmp(word, "USE_MORGE_CODE")) USE_MORGE_CODE = fread_long_number( CFInfo ); else if(!str_cmp(word, "CHAR_BODY_TO_MORGE")) CHAR_BODY_TO_MORGE = fread_long_number( CFInfo ); else if(!str_cmp(word, "MORGE_TO_LEVEL")) MORGE_TO_LEVEL = fread_long_number( CFInfo ); else if(!str_cmp(word, "ROOM_VNUM_MORGE")) ROOM_VNUM_MORGE = fread_long_number( CFInfo ); else if(!str_cmp(word, "USE_RACE_MORGE")) USE_RACE_MORGE = fread_long_number( CFInfo ); else if(!str_cmp(word, "USE_NEWBIE_MORGE")) USE_NEWBIE_MORGE = fread_long_number( CFInfo ); else if(!str_cmp(word, "NEWBIE_MORGE_VNUM")) NEWBIE_MORGE_VNUM = fread_long_number( CFInfo ); else if(!str_cmp(word, "NEWBIE_MORGE_LEVEL")) NEWBIE_MORGE_LEVEL = fread_long_number( CFInfo ); else if(!str_cmp(word, "RACE_MORGE_LEVEL")) RACE_MORGE_LEVEL = fread_long_number( CFInfo ); /* home recall options */ else if(!str_cmp(word, "USE_HOME_RECALL")) USE_HOME_RECALL = fread_long_number( CFInfo ); else if(!str_cmp(word, "MIN_HOME_LEVEL")) MIN_HOME_LEVEL = fread_long_number( CFInfo ); else if(!str_cmp(word, "USE_RACE_RECALL")) USE_RACE_RECALL = fread_long_number( CFInfo ); else if(!str_cmp(word, "USE_RACE_RECALL_LEVEL")) USE_RACE_RECALL_LEVEL = fread_long_number( CFInfo ); else if(!str_cmp(word, "USE_NEWBIE_RECALL")) USE_NEWBIE_RECALL = fread_long_number( CFInfo ); else if(!str_cmp(word, "NEWBIE_RECALL_VNUM")) NEWBIE_RECALL_VNUM = fread_long_number( CFInfo ); /* marry options */ else if(!str_cmp(word, "USE_MARRY")) USE_MARRY = fread_long_number( CFInfo ); else if(!str_cmp(word, "MIN_LEVEL_MARRY")) MIN_LEVEL_MARRY = fread_long_number( CFInfo ); /* mud options */ else if(!str_cmp(word, "USE_DEFAULT_WIZI")) USE_DEFAULT_WIZI = fread_long_number( CFInfo ); else if(!str_cmp(word, "MUD_USES_REMORTS")) MUD_USES_REMORTS = fread_long_number( CFInfo ); else if(!str_cmp(word, "USE_IMMORTAL_CUSTOM_TITLES")) USE_IMMORTAL_CUSTOM_TITLES = fread_long_number( CFInfo ); else if(!str_cmp(word, "ALLOW_MULTI_SLAY")) ALLOW_MULTI_SLAY = fread_long_number( CFInfo ); else if(!str_cmp(word, "ALLOW_CUSTOM_SLAY")) ALLOW_CUSTOM_SLAY = fread_long_number( CFInfo ); else if(!str_cmp(word, "CUSTOM_SLAY_COUNT")) CUSTOM_SLAY_COUNT = fread_long_number( CFInfo ); else if(!str_cmp(word, "CUSTOM_SLAY_LEVEL")) CUSTOM_SLAY_LEVEL = fread_long_number( CFInfo ); else if(!str_cmp(word, "ALLOW_SHARE_CUSTOM")) ALLOW_SHARE_CUSTOM = fread_long_number( CFInfo ); else if(!str_cmp(word, "PB_JOIN_TICKS")) PB_JOIN_TICKS = fread_long_number( CFInfo ); else if(!str_cmp(word, "ALLOW_PB_WARS")) ALLOW_PB_WARS = fread_long_number( CFInfo ); else if(!str_cmp(word, "RELOAD_OPTION_ON")) RELOAD_OPTION_ON = fread_long_number( CFInfo ); else if(!str_cmp(word, "NO_SHOOTS")) NO_SHOOTS = fread_long_number( CFInfo ); else if(!str_cmp(word, "PCT_HIT_SHOOT")) PCT_HIT_SHOOT = fread_long_number( CFInfo ); else if(!str_cmp(word, "CHAMP_MSG")) CHAMP_MSG = fread_long_number( CFInfo ); else if(!str_cmp(word, "RELOAD_LAG")) RELOAD_LAG = fread_long_number( CFInfo ); /* messages load */ else if(!str_cmp(word, "MUD_CODE_BASE")) MUD_CODE_BASE = fread_string( CFInfo ); else if(!str_cmp(word, "MUD_NAME")) MUD_NAME = fread_string( CFInfo ); else if(!str_cmp(word, "AUTHOR_CODEBASE")) AUTHOR_CODEBASE = fread_string( CFInfo ); else if(!str_cmp(word, "GREET_MESSAGE")) GREET_MESSAGE = fread_string( CFInfo ); else if(!str_cmp(word, "LEAVE_MESSAGE")) LEAVE_MESSAGE = fread_string( CFInfo ); else if(!str_cmp(word, "GRATS_MESSAGE")) GRATS_MESSAGE = fread_string( CFInfo ); else if(!str_cmp(word, "SAVE_MESSAGE")) SAVE_MESSAGE = fread_string( CFInfo ); else if(!str_cmp(word, "RESTRICTED_SAVE")) RESTRICTED_SAVE = fread_string( CFInfo ); /* Nanny options */ else if(!str_cmp(word, "RACE_SHOW_LIST")) RACE_SHOW_LIST = fread_long_number( CFInfo ); else if(!str_cmp(word, "CLASS_SHOW_LIST")) CLASS_SHOW_LIST = fread_long_number( CFInfo ); /* Adjust Exp options 031601 */ else if(!str_cmp(word, "ALLOW_EXP")) ALLOW_EXP = fread_long_number( CFInfo ); else if(!str_cmp(word, "MIN_EXP")) MIN_EXP = fread_long_number( CFInfo ); else if(!str_cmp(word, "MAX_EXP")) MAX_EXP = fread_long_number( CFInfo ); else if(!str_cmp(word, "DEFAULT_EXP_TIMER")) DEFAULT_EXP_TIMER = fread_long_number( CFInfo ); else if(!str_cmp(word, "MAX_EXP_TIMER")) MAX_EXP_TIMER = fread_long_number( CFInfo ); /* Adjust Exp options 031601 */ else if(!str_cmp(word, "HUNGER_LEVEL")) HUNGER_LEVEL = fread_long_number( CFInfo ); else if(!str_cmp(word, "HUNGER_SUB_HP")) HUNGER_SUB_HP = fread_long_number( CFInfo ); else if(!str_cmp(word, "HUNGER_SUB_MANA")) HUNGER_SUB_MANA = fread_long_number( CFInfo ); else if(!str_cmp(word, "HUNGER_SUB_MOVE")) HUNGER_SUB_MOVE = fread_long_number( CFInfo ); else if(!str_cmp(word, "HUNGER_KILL")) HUNGER_KILL = fread_long_number( CFInfo ); else if(!str_cmp(word, "HUNGER_TICKS")) HUNGER_TICKS = fread_long_number( CFInfo ); /* not found place bug */ else { fread_to_eol( CFInfo ); logf("Invalid word not found %s", word); continue; } /* set all the validates to blanks */ for(Indx = 0; Indx <= MAX_IN_CONFIG; Indx++) { if(!str_cmp(word, ConfigName[Indx])) { ConfigValid[Indx] = '1'; break; } } } /* test all the validates not blanks */ for(Indx = 0; Indx < MAX_IN_CONFIG; Indx++) { if(ConfigValid[Indx] == '0') { logf("Error %s not used", ConfigName[Indx]); } } return; } void load_total_info (void) { /* * Read in all the total info from total file */ char *word; bool fMatch; FILE *TInfo; if ( ( TInfo = fopen( TOTALS_FILE, "r" ) ) == NULL ) { perror( TOTALS_FILE ); exit( 1 ); } log_string ("Opening Totals File TOTALS.TXT."); for ( ; ; ) { word = feof( TInfo ) ? "$" : fread_word( TInfo ); fMatch = FALSE; /* Debug switches */ if(SHOW_CONFL == 'Y' || SHOW_CONFL == 'y') { logf("Total word read: %s", word); } switch ( UPPER(word[0]) ) { case '*': fMatch = TRUE; fread_to_eol( TInfo ); break; case '$': fMatch = TRUE; return; break; case 'T': CKEY( "TOTAL_NEWBIE", TOTAL_newbie, fread_long_number( TInfo ) ); CKEY( "TOTAL_MAXWHO", TOTAL_maxwho, fread_long_number( TInfo ) ); CKEY( "TOTAL_LASTDOWN", TOTAL_LastDown, fread_long_number( TInfo ) ); CKEY( "TOTAL_SIGNON", TOTAL_signon, fread_long_number( TInfo ) ); CKEY( "TOTAL_LEVELS", TOTAL_levels, fread_long_number( TInfo ) ); CKEY( "TOTAL_DELETES", TOTAL_deletes, fread_long_number( TInfo ) ); CKEY( "TOTAL_DEATHSM", TOTAL_deathsmob, fread_long_number( TInfo ) ); CKEY( "TOTAL_DEATHSP", TOTAL_deathspc, fread_long_number( TInfo ) ); CKEY( "TOTAL_KILLSPC", TOTAL_killspc, fread_long_number( TInfo ) ); CKEY( "TOTAL_SLAYS", TOTAL_slays, fread_long_number( TInfo ) ); break; } if ( !fMatch ) { bug( "Fread_char: no match.", 0 ); logf("load_totals *ERROR* Fread_char: no match to word %s", word); fread_to_eol( TInfo ); } } fclose(TInfo); return; } void save_total_info(void) { FILE *fp; /* loop through slays and save */ if ( ( fp = fopen( TOTALS_FILE, "w" ) ) == NULL ) { bug( "Save_totals_info: fopen", 0 ); perror( TOTALS_FILE ); } else { fprintf( fp, "* ~\n"); fprintf( fp, "* Totals information file by Taka~\n"); fprintf( fp, "* ~\n"); fprintf( fp, "* total newbies created~\n"); fprintf( fp, "TOTAL_NEWBIE %ld\n", TOTAL_newbie); fprintf( fp, "* total max on who list ever~\n"); fprintf( fp, "TOTAL_MAXWHO %ld\n", TOTAL_maxwho); fprintf( fp, "* total signons~\n"); fprintf( fp, "TOTAL_SIGNON %ld\n", TOTAL_signon); fprintf( fp, "* total levels~\n"); fprintf( fp, "TOTAL_LEVELS %ld\n", TOTAL_levels); fprintf( fp, "* total characters who deleted~\n"); fprintf( fp, "TOTAL_DELETES %ld\n", TOTAL_deletes); fprintf( fp, "* deaths of PCs by a mob~\n"); fprintf( fp, "TOTAL_DEATHSM %ld\n", TOTAL_deathsmob); fprintf( fp, "* Deaths of PCs by PCs~\n"); fprintf( fp, "TOTAL_DEATHSP %ld\n", TOTAL_deathspc); fprintf( fp, "* Mobs killed by PCs~\n"); fprintf( fp, "TOTAL_KILLSPC %ld\n", TOTAL_killspc); fprintf( fp, "* number of slays since mud went active~\n"); fprintf( fp, "TOTAL_SLAYS %ld\n", TOTAL_slays); fprintf( fp, "* ~\n"); fprintf( fp, "* 1=reboot 2=shutdown, 3=crash~\n"); fprintf( fp, "* ~\n"); fprintf( fp, "TOTAL_LASTDOWN %ld\n", TOTAL_LastDown); fprintf( fp, "$\n" ); fclose( fp ); } return; } /* end 022702 adds */ /* * Load Diety file. */ void load_deity_info (void) { /* * Read in all the races files. */ FILE *DInfo; int Index = 0; char buf[MSL]; if ( ( DInfo = fopen( DEITY_FILE, "r" ) ) == NULL ) { perror( DEITY_FILE ); exit( 1 ); } log_string ("Opening Deity File DEITY.TXT."); /* * Loop through the race files reading the list of races */ for (Index = 0;Index < MAX_DEITY ; Index++ ) { deity_table[Index].number = fread_number(DInfo); deity_table[Index].name = fread_string(DInfo); deity_table[Index].alignment = fread_string(DInfo); sprintf(buf, "%d %d %s %s", Index, deity_table[Index].number, deity_table[Index].name, deity_table[Index].alignment); log_string( buf ); } fclose( DInfo ); return; }