void load_songs(void) { FILE *fp; int count = 0, lines, i; char letter; /* reset global */ for (i = 0; i <= MAX_GLOBAL; i++) channel_songs[i] = -1; if ((fp = fopen(MUSIC_FILE,"r")) == NULL) { bug("Couldn't open music file, no songs available.",0); fclose(fp); return; } for (count = 0; count < MAX_SONGS; count++) { letter = fread_letter(fp); if (letter == '#') { if (count < MAX_SONGS) song_table[count].name = NULL; fclose(fp); return; } else ungetc(letter,fp); song_table[count].group = fread_string(fp); song_table[count].name = fread_string(fp); /* read lyrics */ lines = 0; for ( ; ;) { letter = fread_letter(fp); if (letter == '~') { song_table[count].lines = lines; break; } else ungetc(letter,fp); if (lines >= MAX_LINES) { bug("Too many lines in a song -- limit is %d.",MAX_LINES); break; } song_table[count].lyrics[lines] = fread_string_eol(fp); lines++; } } }
void read_exits( FILE* fp, room_data* room, int vnum ) { exit_data* exit; char letter; for( ; ; ) { if( ( letter = fread_letter( fp ) ) != 'D' ) break; exit = add_exit( room, fread_number( fp ) ); exit->name = fread_string( fp, MEM_EXIT ); exit->keywords = fread_string( fp, MEM_EXIT ); exit->exit_info = fread_number( fp ); exit->key = fread_number( fp ); exit->to_room = (room_data*) fread_number( fp ); exit->strength = fread_number( fp ); exit->light = fread_number( fp ); exit->size = fread_number( fp ); if( exit->direction < 0 || exit->direction > 6 ) panic( "Fread_rooms: vnum %d has bad door number.", vnum ); } ungetc( letter, fp ); }
void load_illegal() { FILE *fp; ILLEGAL_DATA *p; char kar; illegal_first = NULL; fclose(fpReserve); fp = fopen(NAME_FILE, "r"); if (!fp) return; do { kar = fread_letter(fp); if (kar == EOF) break; if (kar == '#' || kar == '$' || kar == '@') { p = alloc_mem(sizeof(ILLEGAL_DATA)); p->mode = kar; p->word = str_dup(fread_word(fp)); p->next = illegal_first; illegal_first = p; } } while (kar != EOF); fclose(fp); fpReserve = fopen(NULL_FILE, "r"); }
/* * Snarf spec proc declarations. */ void load_specials( FILE *fp ) { for ( ; ; ) { MOB_INDEX_DATA *pMobIndex; char letter; switch ( letter = fread_letter( fp ) ) { default: bug( "Load_specials: letter '%c' not *MS.", letter ); exit( 1 ); case 'S': return; case '*': break; case 'M': pMobIndex = get_mob_index ( fread_number ( fp ) ); pMobIndex->spec_fun = spec_lookup ( fread_word ( fp ) ); if ( pMobIndex->spec_fun == 0 ) { bug( "Load_specials: 'M': vnum %d.", pMobIndex->vnum ); exit( 1 ); } break; } fread_to_eol( fp ); } }
/* * Load a realm file */ bool load_realm_file( const char *realmfile ) { char filename[256]; realm_data *realm; FILE *fp; bool found; realm = new realm_data; clean_realm( realm ); /* Default settings so we don't get wierd ass stuff */ found = false; snprintf( filename, 256, "%s%s", REALM_DIR, realmfile ); if( ( fp = fopen( filename, "r" ) ) != nullptr ) { found = true; for( ;; ) { char letter; char *word; letter = fread_letter( fp ); if( letter == '*' ) { fread_to_eol( fp ); continue; } if( letter != '#' ) { bug( "%s: # not found.", __func__ ); break; } word = fread_word( fp ); if( !str_cmp( word, "REALM" ) ) fread_realm( realm, fp ); else if( !str_cmp( word, "ROSTER" ) ) fread_realm_memberlist( realm, fp ); else if( !str_cmp( word, "END" ) ) break; else { bug( "%s: bad section: %s.", __func__, word ); break; } } FCLOSE( fp ); } if( found ) realmlist.push_back( realm ); else deleteptr( realm ); return found; }
/* Snarf a MOBprogram section from the area file. */ bool load_mobprogs( FILE *fp ) { MOB_INDEX_DATA *iMob; MPROG_DATA *original; MPROG_DATA *working; char letter; int value; int stat; bool koniec = FALSE; while ( !koniec ) { letter = fread_letter( fp ); switch ( letter ) { default: cbug( "Load_mobprogs: bad command '%c'.", letter ); return TRUE; case 'S': case 's': fread_to_eol( fp ); koniec = TRUE; break; case '*': fread_to_eol( fp ); break; case 'M': case 'm': value = fread_number( fp, &stat ); if ( ( iMob = get_mob_index( value ) ) == NULL ) { cbug( "Load_mobprogs: vnum %d doesnt exist", value ); return TRUE; } /* Go to the end of the prog command list if other commands exist */ if ( ( original = iMob->mobprogs ) ) for ( ; original->next != NULL; original = original->next ) ; working = new_mprog( ); if ( original ) original->next = working; else iMob->mobprogs = working; working = mprog_file_read( fread_word( fp, &stat, TRUE ), working, iMob, 0 ); if ( !working ) return TRUE; working->next = NULL; fread_to_eol( fp ); break; } } return FALSE; }
void load_herb_table( ) { FILE *fp; if( ( fp = fopen( HERB_FILE, "r" ) ) != NULL ) { top_herb = 0; for( ;; ) { char letter; const char *word; letter = fread_letter( fp ); if( letter == '*' ) { fread_to_eol( fp ); continue; } if( letter != '#' ) { bug( "Load_herb_table: # not found.", 0 ); break; } word = fread_word( fp ); if( !str_cmp( word, "HERB" ) ) { if( top_herb >= MAX_HERB ) { bug( "load_herb_table: more herbs than MAX_HERB %d", MAX_HERB ); fclose( fp ); return; } herb_table[top_herb++] = fread_skill( fp, FALSE ); if( herb_table[top_herb - 1]->slot == 0 ) herb_table[top_herb - 1]->slot = top_herb - 1; continue; } else if( !str_cmp( word, "END" ) ) break; else { bug( "Load_herb_table: bad section.", 0 ); continue; } } fclose( fp ); } else { bug( "Cannot open herbs.dat", 0 ); exit( 0 ); } }
void load_socials( void ) { FILE *fp; int stat; char strsave [ MAX_INPUT_LENGTH ]; fclose( fpReserve ); sprintf( strsave, "%s%s", SYSTEM_DIR, SOCIAL_FILE ); if ( !( fp = fopen( strsave, "r" ) ) ) { bug( "Cannot open SOCIALS.TXT", 0 ); exit( 0 ); } for ( ; ; ) { int letter; char *word; letter = fread_letter( fp ); if ( letter == '*' ) { fread_to_eol( fp ); continue; } if ( letter != '#' ) { bug( "Load_socials: # not found.", 0 ); break; } word = fread_word( fp, &stat ); if ( !str_cmp( word, "SOCIAL" ) ) { fread_social( fp ); continue; } else if ( !str_cmp( word, "END" ) ) break; else { bug( "Load_socials: bad section.", 0 ); continue; } } fclose( fp ); fpReserve = fopen( NULL_FILE, "r" ); return; }
void load_disciplines( ) { FILE *fp; if( ( fp = fopen( DISCIPLINE_FILE, "r" ) ) != NULL ) { for( ;; ) { char letter; const char *word; letter = fread_letter( fp ); if( letter == '*' ) { fread_to_eol( fp ); continue; } if( letter != '#' ) { bug( "Load_disciplines: # not found.", 0 ); break; } word = fread_word( fp ); if( !str_cmp( word, "DISCIPLINE" ) ) { DISC_DATA *discipline; if( ( discipline = fread_discipline( fp ) ) == NULL ) { bug( "Huge error loading disciplines.", 0 ); fclose( fp ); return; } LINK( discipline, first_discipline, last_discipline, next, prev ); continue; } else if( !str_cmp( word, "END" ) ) break; else { bug( "Load_disciplines: bad section.", 0 ); continue; } } fclose( fp ); } else { bug( "Cannot open discipline.dat", 0 ); exit( 0 ); } return; }
area_data *fread_smaugfuss_area( FILE * fp ) { area_data *tarea = nullptr; for( ;; ) { char letter; const char *word; letter = fread_letter( fp ); if( letter == '*' ) { fread_to_eol( fp ); continue; } if( letter != '#' ) { bug( "%s: # not found. Invalid format.", __func__ ); if( fBootDb ) exit( 1 ); break; } word = ( feof( fp ) ? "ENDAREA" : fread_word( fp ) ); if( word[0] == '\0' ) { bug( "%s: EOF encountered reading file!", __func__ ); word = "ENDAREA"; } if( !str_cmp( word, "AREADATA" ) ) { tarea = create_area( ); tarea->filename = str_dup( strArea ); fread_fuss_areadata( fp, tarea ); } else if( !str_cmp( word, "MOBILE" ) ) fread_fuss_mobile( fp, tarea ); else if( !str_cmp( word, "OBJECT" ) ) fread_fuss_object( fp, tarea ); else if( !str_cmp( word, "ROOM" ) ) fread_fuss_room( fp, tarea ); else if( !str_cmp( word, "ENDAREA" ) ) break; else { bug( "%s: Bad section header: %s", __func__, word ); fread_to_eol( fp ); } } return tarea; }
void load_skill_table( ) { FILE *fp; if( ( fp = fopen( SKILL_FILE, "r" ) ) != NULL ) { top_sn = 0; for( ;; ) { char letter; const char *word; letter = fread_letter( fp ); if( letter == '*' ) { fread_to_eol( fp ); continue; } if( letter != '#' ) { bug( "Load_skill_table: # not found.", 0 ); break; } word = fread_word( fp ); if( !str_cmp( word, "SKILL" ) ) { if( top_sn >= MAX_SKILL ) { bug( "load_skill_table: more skills than MAX_SKILL %d", MAX_SKILL ); fclose( fp ); return; } skill_table[top_sn++] = fread_skill( fp, FALSE ); continue; } else if( !str_cmp( word, "END" ) ) break; else { bug( "Load_skill_table: bad section.", 0 ); continue; } } fclose( fp ); } else { bug( "Cannot open skills.dat", 0 ); exit( 0 ); } }
/* Load time information from saved file - Samson 1-21-99 */ bool load_timedata( void ) { char filename[256]; FILE *fp; bool found; found = FALSE; snprintf( filename, 256, "%stime.dat", SYSTEM_DIR ); if( ( fp = fopen( filename, "r" ) ) != NULL ) { found = TRUE; for( ;; ) { char letter = '\0'; char *word = NULL; letter = fread_letter( fp ); if( letter == '*' ) { fread_to_eol( fp ); continue; } if( letter != '#' ) { bug( "%s", "Load_timedata: # not found." ); break; } word = fread_word( fp ); if( !str_cmp( word, "TIME" ) ) { fread_timedata( fp ); break; } else if( !str_cmp( word, "END" ) ) break; else { bug( "Load_timedata: bad section - %s.", word ); break; } } fclose( fp ); } return found; }
void load_news( ) { FILE *fpin = FileOpen( NEWS_FILE, "r" ); if ( fpin == NULL ) { bug( "Cannot open news.dat for reading." ); perror( NEWS_FILE ); return; } for ( ;; ) { char letter; char *word; NEWS_DATA *news; letter = fread_letter( fpin ); if ( letter == '*' ) { fread_to_eol( fpin ); continue; } if ( letter != '#' ) { bug( "Load_news: # not found." ); break; } word = ( feof( fpin ) ? ( char * ) "End" : fread_word( fpin ) ); if ( !str_cmp( word, "News" ) ) { news = fread_news( fpin ); if ( news != NULL ) LINK( news, first_news, last_news, next, prev ); } else if ( !str_cmp( word, "HTML" ) ) { USE_HTML_NEWS = fread_number( fpin ) == 1 ? TRUE : FALSE; } else if ( !str_cmp( word, "End" ) ) { FileClose( fpin ); break; } else { bug( "Load_news: bad section encountered." ); break; } } }
void load_quest_list( void ) { FILE *fp; if ( ( fp = FileOpen( QUESTS_FILE, "r" ) ) != NULL ) { for ( ;; ) { char letter; char *word; int x; letter = fread_letter( fp ); if ( letter == '*' ) { fread_to_eol( fp ); continue; } if ( letter != '#' ) { bug( "%s", "Load_quest_list: # not found." ); break; } word = fread_word( fp ); if ( !str_cmp( word, "QUEST" ) ) { fread_quest( FALSE, fp ); continue; } else if ( !str_cmp( word, "NQUEST" ) ) { fread_quest( TRUE, fp ); continue; } else if ( !str_cmp( word, "END" ) ) break; else { bug( "%s", "Load_quest_list: bad section." ); continue; } } FileClose( fp ); } else { perror( QUESTS_FILE ); bug( "%s", "Cannot open quests.dat" ); exit( 0 ); } }
void load_commands( ) { FILE *fp; if( ( fp = fopen( COMMAND_FILE, "r" ) ) != NULL ) { for( ;; ) { char letter; const char *word; letter = fread_letter( fp ); if( letter == '*' ) { fread_to_eol( fp ); continue; } if( letter != '#' ) { bug( "Load_commands: # not found.", 0 ); break; } word = fread_word( fp ); if( !str_cmp( word, "COMMAND" ) ) { fread_command( fp ); continue; } else if( !str_cmp( word, "END" ) ) break; else { bug( "Load_commands: bad section.", 0 ); continue; } } fclose( fp ); } else { bug( "Cannot open commands.dat", 0 ); exit( 0 ); } }
/* * Load the MSSP data file */ bool load_mssp_data( void ) { char filename[MAX_INPUT_LENGTH]; FILE *fp; bool found; CREATE( mssp_info, struct mssp_info, 1 ); found = FALSE; sprintf( filename, "%s", MSSP_FILE ); if ( ( fp = FileOpen( filename, "r" ) ) != NULL ) { found = TRUE; for ( ;; ) { char letter; char *word; letter = fread_letter( fp ); if ( letter == '*' ) { fread_to_eol( fp ); continue; } if ( letter != '#' ) { bug( "%s: # not found.", __FUNCTION__ ); break; } word = fread_word( fp ); if ( !str_cmp( word, "MSSP_INFO" ) ) { fread_mssp_info( fp ); break; } else if ( !str_cmp( word, "END" ) ) break; else { bug( "%s: bad section.", __FUNCTION__ ); break; } } FileClose( fp ); } return found; }
int main(int argc, char** argv) { if(sqlite3_open("murk.db", &database)) { std::cerr << "Can't open database: " << sqlite3_errmsg(database) << std::endl; sqlite3_close(database); return 1; } std::ifstream fp; fp.open (strArea.c_str(), std::ifstream::in | std::ifstream::binary); if (!fp.is_open()) { std::cerr << "Can't find " << strArea << std::endl; } for (;;) { if (fread_letter (fp) != '#') { std::cerr << "# not found." << std::endl; } std::string word = fread_word (fp); if (word[0] == '$') break; else if (word == "HELPS") { for (;;) { int level = fread_number (fp); std::string keyword = fread_string (fp); if (keyword[0] == '$') break; std::string text = fread_string (fp); char * z; if (text[0] == '.') z = sqlite3_mprintf("INSERT INTO 'helps' VALUES(%d,'%q','%q')", level, keyword.c_str(), text.substr(1).c_str()); else z = sqlite3_mprintf("INSERT INTO 'helps' VALUES(%d,'%q','%q')", level, keyword.c_str(), text.c_str()); sqlite3_exec(database, z, 0, 0, 0); sqlite3_free(z); } } else { std::cerr << "Load helps: bad section name." << std::endl; } } fp.close(); sqlite3_close(database); return 0; }
void read_pfile( char *dirname, char *filename, bool count ) { FILE *fp; char fname[256]; struct stat fst; time_t tdiff; now_time = time( 0 ); snprintf( fname, 256, "%s/%s", dirname, filename ); if( stat( fname, &fst ) != -1 ) { tdiff = ( now_time - fst.st_mtime ) / 86400; if( ( fp = fopen( fname, "r" ) ) != NULL ) { for( ;; ) { char letter; const char *word; letter = fread_letter( fp ); if( ( letter != '#' ) && ( !feof( fp ) ) ) continue; word = feof( fp ) ? "End" : fread_word( fp ); if( !str_cmp( word, "End" ) ) break; if( !str_cmp( word, "PLAYER" ) ) fread_pfile( fp, tdiff, fname, count ); else if( !str_cmp( word, "END" ) ) /* Done */ break; } fclose( fp ); fp = NULL; } } return; }
void read_fpfile( CHAR_DATA * ch, char *dirname, char *filename ) { FILE *fp; char fname[MSL]; struct stat fst; sprintf( fname, "%s/%s", dirname, filename ); if( !str_suffix(".home1", filename) || !str_suffix(".home2", filename) || !str_suffix(".home3", filename) || !str_suffix(".clone", filename) ) return; if ( stat( fname, &fst ) != -1 ) { if ( ( fp = fopen ( fname, "r" ) ) != NULL ) { for ( ; ; ) { char letter; char *word; letter = fread_letter( fp ); if ( ( letter != '#' ) && ( !feof( fp ) ) ) continue; word = feof( fp ) ? "End" : fread_word( fp ); if ( !str_cmp( word, "End" ) ) break; if ( !str_cmp( word, "PLAYER" ) ) fread_fpfile( ch, fp, fname ); else if ( !str_cmp( word, "END" ) ) /* Done */ break; } FCLOSE( fp ); } } return; }
/* * Snarf a shop section. */ void load_shops_circle( FILE *fp ) { SHOP_DATA *pShop; log_stringf(" SHOPS"); bool OLD = TRUE; for ( ; ; ) { MOB_INDEX_DATA *pMobIndex; int iTrade = 0; pShop = new_shop(); // log_stringf("====START"); bool stop = FALSE; while (1) { char c = fread_letter(fp); // log_stringf("=>[%c]", c ); if ( c == '0' ) { // If shopvnum is 0: end of shop section stop = TRUE; break; } else if ( c == '#' ) { const char *s = fread_string(fp); // log_stringf("->[%s]", s ); break; } else if ( c < '0' || c > '9' ) { // File starts with a string ungetc(c,fp); const char *s = fread_string(fp); if ( !str_prefix("CircleMUD v3.0 Shop File",s) ) OLD = FALSE; log_stringf("))[%s] [%d]", s, !str_prefix( "CircleMUD v3.0 Shop File", s ) ); } else { int x = fread_number(fp); // should never happens // log_stringf(">>>[%d]", x ); break; } } if (stop) break; log_stringf("OLD: %s", OLD?"yes":"no"); // Skips infinite obj vnum int count = 0; while (1) { int tmp = fread_number(fp); if ( tmp == -1 ) break; count++; if ( count >= 5 && OLD ) break; } pShop->profit_buy = (int)(fread_float( fp )*100.0); pShop->profit_sell = (int)(fread_float( fp )*100.0); // Read item type while (1) { //int tmp = fread_number(fp); fread_to_eol(fp); // skips end of line (special ShopV3 format) int tmp = 0; char letter = fread_letter(fp); if ( ( letter >= '0' && letter <= '9' ) || letter == '-' ) { // if we read a number -> item_type ungetc(letter,fp); tmp = fread_number(fp); } else // else -> skips fread_to_eol(fp); if ( tmp == -1 ) break; if ( iTrade < MAX_TRADE ) pShop->buy_type[iTrade++] = item_type_circle(tmp); else log_stringf("Too many item type, [%d] not stored", tmp ); if ( iTrade >= 5 && OLD ) break; } // Skips 7 string for ( int i = 0; i < 7; i++ ) { const char *s = fread_string(fp); } fread_number(fp); // skips temper fread_number(fp); // skips shop bitvector pShop->keeper = fread_number( fp ); // get shop mob vnum fread_number(fp); // skips with who bitvector // skips shop room vnum while (1) { int tmp = fread_number(fp); if ( tmp == -1 ) break; if ( OLD ) // only one shop vnum for OLD format break; } pShop->open_hour = URANGE(0,fread_number( fp ),23); // get opening hour pShop->close_hour = URANGE(0,fread_number( fp ),23); fread_number(fp); // skips second opening hour fread_number(fp); // " pMobIndex = get_mob_index( pShop->keeper ); pMobIndex->pShop = pShop; if ( shop_first == NULL ) shop_first = pShop; if ( shop_last != NULL ) shop_last->next = pShop; shop_last = pShop; pShop->next = NULL; } return; }
void read_obj_file( char *dirname, char *filename ) { ROOM_INDEX_DATA *room; FILE *fp; char fname[256]; int vnum; vnum = atoi( filename ); if( ( room = get_room_index( vnum ) ) == NULL ) { bug( "read_obj_file: ARGH! Missing room index for %d!", vnum ); return; } snprintf( fname, 256, "%s%s", dirname, filename ); if( ( fp = fopen( fname, "r" ) ) != NULL ) { short iNest; bool found; OBJ_DATA *tobj, *tobj_next; rset_supermob( room ); for( iNest = 0; iNest < MAX_NEST; iNest++ ) rgObjNest[iNest] = NULL; found = TRUE; for( ;; ) { char letter; const char *word; letter = fread_letter( fp ); if( letter == '*' ) { fread_to_eol( fp ); continue; } if( letter != '#' ) { bug( "%s", "read_obj_file: # not found." ); break; } word = fread_word( fp ); if( !str_cmp( word, "OBJECT" ) ) /* Objects */ fread_obj( supermob, fp, OS_CARRY ); else if( !str_cmp( word, "END" ) ) /* Done */ break; else { bug( "read_obj_file: bad section: %s", word ); break; } } FCLOSE( fp ); unlink( fname ); for( tobj = supermob->first_carrying; tobj; tobj = tobj_next ) { tobj_next = tobj->next_content; #ifdef OVERLANDCODE if( IS_OBJ_STAT( tobj, ITEM_ONMAP ) ) { SET_ACT_FLAG( supermob, ACT_ONMAP ); supermob->map = tobj->map; supermob->x = tobj->x; supermob->y = tobj->y; } #endif obj_from_char( tobj ); #ifndef OVERLANDCODE obj_to_room( tobj, room ); #else obj_to_room( tobj, room, supermob ); REMOVE_ACT_FLAG( supermob, ACT_ONMAP ); supermob->map = -1; supermob->x = -1; supermob->y = -1; #endif } release_supermob( ); } else log_string( "Cannot open obj file" ); return; }
/* Load the slay file */ void load_slays( void ) { char filename[256]; SLAY_DATA *slay; FILE *fp; int slaycount; first_slay = NULL; last_slay = NULL; snprintf( filename, 256, "%s%s", SYSTEM_DIR, SLAY_FILE ); if( ( fp = fopen( filename, "r" ) ) != NULL ) { slaycount = 0; for( ;; ) { char letter; char *word; letter = fread_letter( fp ); if( letter == '*' ) { fread_to_eol( fp ); continue; } if( letter != '#' ) { bug( "%s", "Load_slay_file: # not found." ); break; } word = fread_word( fp ); if( !str_cmp( word, "SLAY" ) ) { if( slaycount >= MAX_SLAY_TYPES ) { bug( "load_slays: more slaytypes than MAX_SLAY_TYPES %d", MAX_SLAY_TYPES ); fclose( fp ); fp = NULL; return; } CREATE( slay, SLAY_DATA, 1 ); fread_slay( slay, fp ); slaycount++; LINK( slay, first_slay, last_slay, next, prev ); continue; } else if( !str_cmp( word, "END" ) ) break; else { bug( "Load_slay_file: bad section: %s", word ); continue; } } fclose( fp ); fp = NULL; } return; }
void load_objects( void ) { FILE* fp; obj_clss_data* obj_clss; oprog_data* oprog; char letter; int i; int vnum; echo( "Loading Objects ...\r\n" ); vzero( obj_index_list, MAX_OBJ_INDEX ); fp = open_file( AREA_DIR, OBJECT_FILE, "r", TRUE ); if( strcmp( fread_word( fp ), "#OBJECTS" ) ) panic( "Load_objects: header not found" ); for( ; ; ) { letter = fread_letter( fp ); if( letter != '#' ) panic( "Load_objects: # not found." ); if( ( vnum = fread_number( fp ) ) == 0 ) break; if( vnum < 0 || vnum >= MAX_OBJ_INDEX ) panic( "Load_objects: vnum out of range." ); if( obj_index_list[vnum] != NULL ) panic( "Load_objects: vnum %d duplicated.", vnum ); obj_clss = new obj_clss_data; obj_index_list[vnum] = obj_clss; obj_clss->vnum = vnum; obj_clss->fakes = vnum; obj_clss->singular = fread_string( fp, MEM_OBJ_CLSS ); obj_clss->plural = fread_string( fp, MEM_OBJ_CLSS ); obj_clss->before = fread_string( fp, MEM_OBJ_CLSS ); obj_clss->after = fread_string( fp, MEM_OBJ_CLSS ); obj_clss->long_s = fread_string( fp, MEM_OBJ_CLSS ); obj_clss->long_p = fread_string( fp, MEM_OBJ_CLSS ); obj_clss->prefix_singular = fread_string( fp, MEM_OBJ_CLSS ); obj_clss->prefix_plural = fread_string( fp, MEM_OBJ_CLSS ); obj_clss->creator = fread_string( fp, MEM_OBJ_CLSS ); obj_clss->last_mod = fread_string( fp, MEM_OBJ_CLSS ); obj_clss->item_type = fread_number( fp ); obj_clss->fakes = fread_number( fp ); obj_clss->extra_flags[0] = fread_number( fp ); obj_clss->extra_flags[1] = fread_number( fp ); obj_clss->wear_flags = fread_number( fp ); obj_clss->anti_flags = fread_number( fp ); obj_clss->restrictions = fread_number( fp ); obj_clss->size_flags = fread_number( fp ); obj_clss->materials = fread_number( fp ); obj_clss->affect_flags[0] = fread_number( fp ); obj_clss->affect_flags[1] = fread_number( fp ); obj_clss->affect_flags[2] = fread_number( fp ); obj_clss->layer_flags = fread_number( fp ); obj_clss->value[0] = fread_number( fp ); obj_clss->value[1] = fread_number( fp ); obj_clss->value[2] = fread_number( fp ); obj_clss->value[3] = fread_number( fp ); obj_clss->weight = fread_number( fp ); obj_clss->cost = fread_number( fp ); obj_clss->level = fread_number( fp ); obj_clss->limit = fread_number( fp ); obj_clss->repair = fread_number( fp ); obj_clss->durability = fread_number( fp ); obj_clss->blocks = fread_number( fp ); obj_clss->light = fread_number( fp ); obj_clss->date = fread_number( fp ); read_affects( fp, obj_clss ); read_extra( fp, obj_clss->extra_descr ); fread_letter( fp ); for( ; ; ) { int number = fread_number( fp ); if( number == -1 ) break; oprog = new oprog_data; append( obj_clss->oprog, oprog ); oprog->trigger = number; oprog->obj_vnum = fread_number( fp ); oprog->command = fread_string( fp, MEM_OPROG ); oprog->target = fread_string( fp, MEM_OPROG ); oprog->code = fread_string( fp, MEM_OPROG ); read_extra( fp, oprog->data ); } fix( obj_clss ); } fclose( fp ); for( i = 0; i < MAX_OBJ_INDEX; i++ ) if( obj_index_list[i] != NULL ) for( oprog = obj_index_list[i]->oprog; oprog != NULL; oprog = oprog->next ) if( oprog->obj_vnum > 0 ) oprog->obj_act = get_obj_index( oprog->obj_vnum ); return; }
// Added by SinaC 2003 for Circle style void load_room_circle( FILE *fp ) { ROOM_INDEX_DATA *pRoomIndex; log_stringf(" ROOMS"); if ( area_last == NULL ) { bug( "Load_room_circle: no #AREA seen yet."); exit( 1 ); } for ( ; ; ) { int vnum; char letter; int door; int iHash; char *ln; int x1, x2, x3, x4, x5, x6; letter = fread_letter( fp ); if ( letter != '#' ) { bug( "Load_room_circle: # not found."); exit( 1 ); } vnum = fread_number( fp ); if ( vnum == 0 ) break; fBootDb = FALSE; if ( get_room_index( vnum ) != NULL ) { bug( "Load_room_circle: vnum %d duplicated.", vnum ); exit( 1 ); } fBootDb = TRUE; // pRoomIndex = (ROOM_INDEX_DATA *) alloc_perm( sizeof(*pRoomIndex) ); pRoomIndex = new_room_index(); pRoomIndex->guild = 0; /* Not a guild */ pRoomIndex->owner = str_dup(""); pRoomIndex->people = NULL; pRoomIndex->contents = NULL; pRoomIndex->extra_descr = NULL; pRoomIndex->area = area_last; pRoomIndex->vnum = vnum; pRoomIndex->name = fread_string( fp ); pRoomIndex->description = fread_string( fp ); /* Area number */ fread_number( fp ); pRoomIndex->bstat(flags) = fread_flag_circle(fp); pRoomIndex->bstat(sector) = fread_number(fp); pRoomIndex->bstat(maxsize) = SIZE_NOSIZE; pRoomIndex->bstat(light) = 0; for ( door = 0; door < MAX_DIR; door++ ) // Modified by SinaC 2003 pRoomIndex->exit[door] = NULL; // Modified by SinaC 2003 /* defaults */ pRoomIndex->bstat(healrate) = 100; pRoomIndex->bstat(manarate) = 100; // Added by SinaC 2003 for mental user pRoomIndex->bstat(psprate) = 100; for ( ; ; ) { EXIT_DATA *pexit; int locks; EXTRA_DESCR_DATA *ed; letter = fread_letter( fp ); if ( letter == 'S' ) break; switch ( letter ) { case 'D' : door = fread_number( fp ); if ( door < 0 || door >= MAX_DIR ) { // Modified by SinaC 2003 bug( "Load_room_circle: vnum %d has bad door number.", vnum ); exit( 1 ); } if ( door == DIR_SPECIAL ) log_stringf("DIR_SPECIAL found for room vnum: %d.", vnum ); // pexit = (EXIT_DATA *) alloc_perm( sizeof(*pexit) ); pexit = new_exit(); pexit->description = fread_string( fp ); pexit->keyword = fread_string( fp ); pexit->exit_info = 0; pexit->rs_flags = 0; /* OLC */ locks = fread_number(fp); pexit->key = fread_number(fp); pexit->u1.vnum = fread_number(fp); pexit->orig_door = door; /* OLC */ switch ( locks ) { case 1: pexit->exit_info = pexit->rs_flags = EX_ISDOOR; break; case 2: pexit->exit_info = pexit->rs_flags = EX_ISDOOR | EX_PICKPROOF; break; default: pexit->exit_info = pexit->rs_flags = locks; break; } convert_exit_circle(pexit); // SinaC 2003 if ( IS_SET( pexit->exit_info, EX_CLIMB ) ) log_stringf("Room [%d], exit [%d] has CLIMB flag.", vnum, door ); pRoomIndex->exit[door] = pexit; pRoomIndex->old_exit[door] = pexit; break; case 'E' : // ed = (EXTRA_DESCR_DATA *) alloc_perm( sizeof(*ed) ); ed = new_extra_descr(); ed->keyword = fread_string( fp ); ed->description = fread_string( fp ); ed->next = pRoomIndex->extra_descr; pRoomIndex->extra_descr = ed; break; default : bug( "Load_room_circle: vnum %d has unknown flag.", vnum ); exit( 1 ); } } while (1) { letter = fread_letter( fp ); if ( letter == 'T' ) { // Script int scriptVnum = fread_number( fp ); char buf[MAX_STRING_LENGTH]; sprintf( buf, "room%d", scriptVnum ); pRoomIndex->program = hash_get_prog(buf); if (!pRoomIndex->program) bug("Can't find program for room vnum %d.", pRoomIndex->vnum); else { if ( get_root_class( pRoomIndex->program ) != default_room_class ) { bug("program for mob vnum %d is not a room program.", pRoomIndex->vnum); pRoomIndex->program = NULL; } else if ( pRoomIndex->program->isAbstract ) bug("program for room vnum %d is an ABSTRACT class.", pRoomIndex->vnum ); } } else { ungetc(letter,fp); break; } } convert_room_circle(pRoomIndex); iHash = vnum % MAX_KEY_HASH; pRoomIndex->next = room_index_hash[iHash]; room_index_hash[iHash] = pRoomIndex; top_vnum_room = top_vnum_room < vnum ? vnum : top_vnum_room; /* OLC */ assign_area_vnum( vnum ); /* OLC */ } return; }
// Added by SinaC 2003 for Circle style void load_reset_circle( FILE *fp ) { RESET_DATA *pReset; int iLastRoom = 0; int iLastObj = 0; int iLastObj2 = 0; log_stringf(" RESETS"); if ( !area_last ) { bug( "Load_reset_circle: no #AREA seen yet."); exit( 1 ); } for ( ; ; ) { ROOM_INDEX_DATA *pRoomIndex; char letter; OBJ_INDEX_DATA *temp_index; /* int temp; */ if ( ( letter = fread_letter( fp ) ) == 'S' ) break; if ( letter == '*' ) { fread_to_eol( fp ); continue; } // pReset = (RESET_DATA *) alloc_perm( sizeof(*pReset) ); pReset = new_reset_data(); pReset->command = letter; fread_number( fp ); // not used pReset->arg1 = fread_number( fp ); pReset->arg2 = fread_number( fp ); pReset->arg3 = (letter == 'G' || letter == 'R') ? 0 : fread_number( fp ); fread_to_eol( fp ); pReset->arg4 = pReset->arg2; /* * Validate parameters. * We're calling the index functions for the side effect. */ switch ( letter ) { default: bug( "Load_reset_circle: bad command '%c'.", letter ); exit( 1 ); break; case 'M': //get_mob_index ( pReset->arg1 ); Circle areas may use mob from areas which will be read later /* get_room_index ( pReset->arg3 ); */ // fix added by SinaC 2003 if ( pReset->arg2 == 0 || pReset->arg4 == 0 ) bug("reset M has arg2 equals to 0 (room: %d)", pReset->arg3); if ( ( pRoomIndex = get_room_index ( pReset->arg3 ) ) ) { new_reset( pRoomIndex, pReset ); iLastRoom = pReset->arg3; } break; case 'O': //temp_index = get_obj_index ( pReset->arg1 ); // same for obj //temp_index->reset_num++; if ( ( pRoomIndex = get_room_index ( pReset->arg3 ) ) ) { new_reset( pRoomIndex, pReset ); iLastObj = pReset->arg3; iLastObj2 = pReset->arg1; } break; case 'P': //temp_index = get_obj_index ( pReset->arg1 ); // same for obj //temp_index->reset_num++; //get_obj_index ( pReset->arg1 ); if ( pReset->arg3 == 0 ) { log_stringf("reset P has arg3 equals to 0, fixing to: %d", iLastObj2 ); pReset->arg3 = iLastObj2; } if ( pReset->arg2 == 0 || pReset->arg4 == 0 ) bug("reset P has arg2 equals to 0 (room: %d)", iLastObj); if ( ( pRoomIndex = get_room_index ( iLastObj ) ) ) { new_reset( pRoomIndex, pReset ); } break; case 'G': case 'E': //temp_index = get_obj_index ( pReset->arg1 ); // same for obj //temp_index->reset_num++; if ( ( pRoomIndex = get_room_index ( iLastRoom ) ) ) { new_reset( pRoomIndex, pReset ); iLastObj = iLastRoom; iLastObj2 = pReset->arg1; } break; case 'D': { pRoomIndex = get_room_index( pReset->arg1 ); EXIT_DATA *pexit = NULL; if ( pReset->arg2 < 0 || pReset->arg2 >= MAX_DIR // > (MAX_DIR - 1) SinaC 2003 || !pRoomIndex || !( pexit = pRoomIndex->exit[pReset->arg2] ) || !IS_SET( pexit->rs_flags, EX_ISDOOR ) ) { if ( pexit == NULL ) { bug("Load_reset_circle: 'D': exit from room [%d] not found", pReset->arg1 ); exit(1); } else bug( "Load_reset_circle: 'D': exit %d not door.", pReset->arg2 ); break; //exit( 1 ); } switch ( pReset->arg3 ) { default: bug( "Load_reset_circle: 'D': bad 'locks': %d." , pReset->arg3); case 0: break; case 1: SET_BIT( pexit->rs_flags, EX_CLOSED ); SET_BIT( pexit->exit_info, EX_CLOSED ); break; case 2: SET_BIT( pexit->rs_flags, EX_CLOSED | EX_LOCKED ); SET_BIT( pexit->exit_info, EX_CLOSED | EX_LOCKED ); break; } break; } case 'R': break; } } return; }
// Added by SinaC 2003 for Circle style void load_mob_circle( FILE *fp ) { MOB_INDEX_DATA *pMobIndex; log_stringf(" MOBILES"); if ( !area_last ) { /* OLC */ bug( "Load_mob_circle: no #AREA seen yet."); exit( 1 ); } for ( ; ; ) { int vnum; char letter; int iHash; letter = fread_letter( fp ); if ( letter != '#' ) { bug( "Load_mob_circle: # not found."); exit( 1 ); } vnum = fread_number( fp ); if ( vnum == 0 ) break; fBootDb = FALSE; if ( get_mob_index( vnum ) != NULL ) { bug( "Load_mob_circle: vnum %d duplicated.", vnum ); exit( 1 ); } fBootDb = TRUE; // pMobIndex = (MOB_INDEX_DATA*) alloc_perm( sizeof(*pMobIndex) ); pMobIndex = new_mob_index(); pMobIndex->vnum = vnum; pMobIndex->area = area_last; /* OLC */ pMobIndex->new_format = TRUE; newmobs++; pMobIndex->player_name = fread_string( fp ); pMobIndex->short_descr = fread_string( fp ); pMobIndex->long_descr = fread_string_upper( fp ); pMobIndex->description = fread_string_upper( fp ); // Added by SinaC 2003 pMobIndex->classes = 0; pMobIndex->act = fread_flag_circle( fp ); pMobIndex->affected_by = fread_flag_circle( fp ); // Added by SinaC 2003 pMobIndex->affected2_by = 0; pMobIndex->pShop = NULL; // Added by SinaC 2003 pMobIndex->align.etho = 0; pMobIndex->align.alignment = fread_number( fp ); letter = fread_letter( fp ); // mobile type S or E pMobIndex->group = 0; pMobIndex->level = fread_number( fp ); // Added by SinaC 2003 if ( pMobIndex->level < pMobIndex->area->low_range ) pMobIndex->area->low_range = pMobIndex->level; if ( pMobIndex->level > pMobIndex->area->high_range ) pMobIndex->area->high_range = pMobIndex->level; fread_number( fp ); // thac0 not used pMobIndex->ac[AC_PIERCE] = fread_number( fp ); // ac pMobIndex->ac[AC_BASH] = pMobIndex->ac[AC_PIERCE]; pMobIndex->ac[AC_SLASH] = pMobIndex->ac[AC_PIERCE]; pMobIndex->ac[AC_EXOTIC] = pMobIndex->ac[AC_PIERCE]; /* read hit dice */ pMobIndex->hit[DICE_NUMBER] = fread_number( fp ); /* 'd' */ fread_letter( fp ); pMobIndex->hit[DICE_TYPE] = fread_number( fp ); /* '+' */ fread_letter( fp ); pMobIndex->hit[DICE_BONUS] = fread_number( fp ); pMobIndex->mana[DICE_NUMBER]= 0; pMobIndex->mana[DICE_TYPE] = 0; pMobIndex->mana[DICE_BONUS] = 0; pMobIndex->psp[DICE_NUMBER] = 0; pMobIndex->psp[DICE_TYPE] = 0; pMobIndex->psp[DICE_BONUS] = 0; /* read damage dice */ pMobIndex->damage[DICE_NUMBER] = fread_number( fp ); fread_letter( fp ); pMobIndex->damage[DICE_TYPE] = fread_number( fp ); fread_letter( fp ); pMobIndex->damage[DICE_BONUS] = fread_number( fp ); //pMobIndex->wealth = fread_number( fp ) * 100; *100 was not needed pMobIndex->wealth = fread_number( fp ); fread_number(fp); // Xp not used pMobIndex->start_pos = fread_number(fp); pMobIndex->default_pos = fread_number(fp); pMobIndex->sex = fread_number(fp); if ( letter != 'S' && letter != 'E' ) { bug("Invalid letter (%c) for mob (%d), valid letter are S or E", letter, pMobIndex->vnum ); exit(-1); } pMobIndex->race = 0; pMobIndex->hitroll = 0; pMobIndex->res_flags = 0; pMobIndex->imm_flags = 0; pMobIndex->vuln_flags = 0; if ( letter == 'E' ) { // complex mob while(1) { char *ln = fread_line( fp ); if ( ln[0] == 'E' ) break; } } while(1) { letter = fread_letter( fp ); if ( letter == 'T' ) { // Script int scriptVnum = fread_number( fp ); char buf[MAX_STRING_LENGTH]; sprintf( buf, "mob%d", vnum ); pMobIndex->program = hash_get_prog(buf); if (!pMobIndex->program) bug("Can't find program for mob vnum %d.", pMobIndex->vnum); else { if ( get_root_class( pMobIndex->program ) != default_mob_class ) { bug("program for mob vnum %d is not a mob program.", pMobIndex->vnum); pMobIndex->program = NULL; } else if ( pMobIndex->program->isAbstract ) bug("program for mob vnum %d is an ABSTRACT class.", pMobIndex->vnum ); } } else { ungetc(letter,fp); break; } } convert_mob_circle( pMobIndex ); iHash = vnum % MAX_KEY_HASH; pMobIndex->next = mob_index_hash[iHash]; mob_index_hash[iHash] = pMobIndex; top_vnum_mob = top_vnum_mob < vnum ? vnum : top_vnum_mob; /* OLC */ assign_area_vnum( vnum ); /* OLC */ kill_table[URANGE(0, pMobIndex->level, MAX_LEVEL-1)].number++; } return; }
/* * Snarf a room section. */ void load_rooms( FILE *fp ) { ROOM_INDEX_DATA *pRoomIndex; if ( area_last == NULL ) { bug( "Load_resets: no #AREA seen yet.", 0 ); exit( 1 ); } for ( ; ; ) { sh_int vnum; char letter; int door; int iHash; letter = fread_letter( fp ); if ( letter != '#' ) { bug( "Load_rooms: # not found.", 0 ); exit( 1 ); } vnum = fread_number( fp ); if ( vnum == 0 ) break; fBootDb = FALSE; if ( get_room_index( vnum ) != NULL ) { bug( "Load_rooms: vnum %d duplicated.", vnum ); exit( 1 ); } fBootDb = TRUE; pRoomIndex = alloc_perm( sizeof(*pRoomIndex) ); pRoomIndex->people = NULL; pRoomIndex->contents = NULL; pRoomIndex->extra_descr = NULL; pRoomIndex->area = area_last; pRoomIndex->vnum = vnum; pRoomIndex->name = fread_string( fp ); pRoomIndex->description = fread_string( fp ); /* Area number */ fread_number( fp ); pRoomIndex->room_flags = fread_number( fp ); pRoomIndex->sector_type = fread_number( fp ); pRoomIndex->light = 0; for ( door = 0; door <= 5; door++ ) pRoomIndex->exit[door] = NULL; for ( ; ; ) { letter = fread_letter( fp ); if ( letter == 'S' ) break; if ( letter == 'D' ) { EXIT_DATA *pexit; int locks; door = fread_number( fp ); if ( door < 0 || door > 5 ) { bug( "Fread_rooms: vnum %d has bad door number.", vnum ); exit( 1 ); } pexit = alloc_perm( sizeof(*pexit) ); pexit->description = fread_string( fp ); pexit->keyword = fread_string( fp ); pexit->exit_info = 0; locks = fread_number( fp ); pexit->key = fread_number( fp ); pexit->vnum = fread_number( fp ); switch ( locks ) { case 1: pexit->exit_info = EX_ISDOOR; break; case 2: pexit->exit_info = EX_ISDOOR | EX_PICKPROOF; break; } pRoomIndex->exit[door] = pexit; top_exit++; } else if ( letter == 'E' ) { EXTRA_DESCR_DATA *ed; ed = alloc_perm( sizeof(*ed) ); ed->keyword = fread_string( fp ); ed->description = fread_string( fp ); ed->next = pRoomIndex->extra_descr; pRoomIndex->extra_descr = ed; top_ed++; } else { bug( "Load_rooms: vnum %d has flag not 'DES'.", vnum ); exit( 1 ); } } iHash = vnum % MAX_KEY_HASH; pRoomIndex->next = room_index_hash[iHash]; room_index_hash[iHash] = pRoomIndex; top_room++; } return; }
/* * Snarf an obj section. old style */ void load_obj_circle( FILE *fp ) { OBJ_INDEX_DATA *pObjIndex; char *word; log_stringf(" OBJECTS"); if ( !area_last ) { /* OLC */ bug( "Load_obj_circle: no #AREA seen yet."); exit( 1 ); } for ( ; ; ) { int vnum; char letter; int iHash; int x1, x2, x3, x4, x5, x6; letter = fread_letter( fp ); if ( letter != '#' ) { bug( "Load_obj_circle: # not found."); exit( 1 ); } vnum = fread_number( fp ); if ( vnum == 0 ) break; fBootDb = FALSE; if ( get_obj_index( vnum ) != NULL ) { bug( "Load_obj_circle: vnum %d duplicated.", vnum ); exit( 1 ); } fBootDb = TRUE; pObjIndex = new_obj_index(); pObjIndex->vnum = vnum; pObjIndex->area = area_last; /* OLC */ pObjIndex->new_format = FALSE; pObjIndex->reset_num = 0; newobjs++; pObjIndex->name = fread_string( fp ); pObjIndex->short_descr = fread_string_lower( fp ); pObjIndex->description = fread_string_upper( fp ); fread_string( fp ); // unused: action desc pObjIndex->material = 0; pObjIndex->item_type = fread_number( fp ); pObjIndex->extra_flags = fread_flag_circle( fp ); pObjIndex->wear_flags = fread_flag_circle( fp ); fread_flag_circle(fp); // unused ? pObjIndex->size = SIZE_NOSIZE; pObjIndex->value[0] = fread_number(fp); pObjIndex->value[1] = fread_number(fp); pObjIndex->value[2] = fread_number(fp); pObjIndex->value[3] = fread_number(fp); pObjIndex->weight = UMAX( 1, fread_number( fp ) ); pObjIndex->cost = fread_number( fp ); fread_number( fp ); // unused: rent/day fread_number(fp); // unused ? pObjIndex->condition = 100; pObjIndex->level = 1; for ( ; ; ) { letter = fread_letter( fp ); if ( letter == 'A' ) { AFFECT_DATA *paf; paf = new_affect(); createaff(*paf,-1,20,-1,0,AFFECT_INHERENT); addaff2(*paf,AFTO_CHAR,fread_number( fp ),AFOP_ADD,fread_number( fp )); //paf->where = AFTO_CHAR; //paf->op = AFOP_ADD; //paf->type = -1; //paf->level = 20; /* RT temp fix */ //paf->duration = -1; //paf->location = fread_number( fp ); //paf->modifier = fread_number( fp ); convert_af_circle( paf ); paf->next = pObjIndex->affected; pObjIndex->affected = paf; } else if ( letter == 'E' ) { EXTRA_DESCR_DATA *ed; // ed = (EXTRA_DESCR_DATA *) alloc_perm( sizeof(*ed) ); ed = new_extra_descr(); ed->keyword = fread_string( fp ); ed->description = fread_string( fp ); ed->next = pObjIndex->extra_descr; pObjIndex->extra_descr = ed; } else if ( letter == 'T' ) { // script int scriptVnum = fread_number( fp ); char buf[MAX_STRING_LENGTH]; sprintf( buf, "obj%d", scriptVnum ); pObjIndex->program = hash_get_prog(buf); if (!pObjIndex->program) bug("Can't find program for obj vnum %d.", pObjIndex->vnum); else { if ( get_root_class( pObjIndex->program ) != default_obj_class ) { bug("program for obj vnum %d is not a mob program." ,pObjIndex->vnum); pObjIndex->program = NULL; } else if ( pObjIndex->program->isAbstract ) bug("program for Obj vnum %d is an ABSTRACT class.", pObjIndex->vnum ); } } else { ungetc( letter, fp ); break; } } switch ( pObjIndex->item_type ) { case CIRCLE_ITEM_POTION: case CIRCLE_ITEM_SCROLL: pObjIndex->value[1] = slot_lookup( pObjIndex->value[1] ); pObjIndex->value[2] = slot_lookup( pObjIndex->value[2] ); pObjIndex->value[3] = slot_lookup( pObjIndex->value[3] ); break; case CIRCLE_ITEM_STAFF: case CIRCLE_ITEM_WAND: pObjIndex->value[3] = slot_lookup( pObjIndex->value[3] ); break; } convert_obj_circle( pObjIndex ); iHash = vnum % MAX_KEY_HASH; pObjIndex->next = obj_index_hash[iHash]; obj_index_hash[iHash] = pObjIndex; top_vnum_obj = top_vnum_obj < vnum ? vnum : top_vnum_obj; /* OLC */ assign_area_vnum( vnum ); /* OLC */ } return; }
void do_finger( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; CHAR_DATA *victim; FILE *fp; bool fOld; one_argument( argument, arg ); if ( arg[0] == '\0' ) { send_to_char( "Finger whom?\n\r", ch ); return; } if ( ( victim = get_char_world( ch, arg ) ) != NULL) { if (!IS_NPC(victim)) { act( "$N is on right now!", ch, NULL, victim, TO_CHAR ); return; } } victim = new_char(); victim->pcdata = new_pcdata(); fOld = FALSE; sprintf( buf, "%s%s", PLAYER_DIR, capitalize( arg ) ); if ( ( fp = fopen( buf, "r" ) ) != NULL ) { int iNest; for ( iNest = 0; iNest < MAX_NEST; iNest++ ) rgObjNest[iNest] = NULL; fOld = TRUE; for ( ; ; ) { char letter; char *word; letter = fread_letter( fp ); if ( letter == '*' ) { fread_to_eol( fp ); continue; } if ( letter != '#' ) { bug( "Load_char_obj: # not found.", 0 ); break; } word = fread_word( fp ); if ( !str_cmp( word, "PLAYER" ) ) fread_char( victim, fp ); else if ( !str_cmp( word, "OBJECT" ) ) break; else if ( !str_cmp( word, "O" ) ) break; else if ( !str_cmp( word, "PET" ) ) break; else if ( !str_cmp( word, "END" ) ) break; else { bug( "Load_char_obj: bad section.", 0 ); break; } } fclose( fp ); } if ( !fOld ) { send_to_char("No player by that name exists.\n\r",ch); free_pcdata(victim->pcdata); free_char(victim); return; } if ( (victim->level > LEVEL_HERO) && (victim->level > ch->level) ) { send_to_char("The gods wouldn't like that.\n\r",ch); free_pcdata(victim->pcdata); free_char(victim); return; } sprintf(buf,"%s last logged off on %s", victim->name, (char *) ctime(&victim->llogoff)); send_to_char(buf,ch); free_pcdata(victim->pcdata); free_char(victim); return; }
/* load the linked list from disk */ void load_news( void ) { FILE *fp = NULL; char filename[256]; sprintf( filename, "%s%s", SYSTEM_DIR, NEWS_FILE ); if( ( fp = fopen( filename, "r" ) ) == NULL ) { perror( "load_news(): cannot open file" ); return; } for( ;; ) { NEWS_TYPE *type = NULL; NEWS *news = NULL; char *word; char letter; letter = fread_letter( fp ); if( letter == '*' ) { fread_to_eol( fp ); continue; } if( letter != '#' ) { bug( "load_news(): # not found" ); break; } word = fread_word( fp ); if( !str_cmp( word, "NEWS" ) ) { CREATE( news, NEWS, 1 ); news->type = -1; fread_news( news, fp ); link_news_to_type( news ); continue; } /* * added for new indexing - 5/5/02 */ else if( !str_cmp( word, "NEWSTYPE" ) ) { CREATE( type, NEWS_TYPE, 1 ); fread_news_type( type, fp ); LINK( type, first_news_type, last_news_type, next, prev ); continue; } if( !str_cmp( word, "END" ) ) break; else { bug( "load_news(): unknown section %s", word ); continue; } } fclose( fp ); fp = NULL; renumber_news( ); return; }