void load_changes(void) { FILE *fp; int i; totChanges = 0; if ( !(fp = fopen( CHANGES_FILE, "r")) ) { bug( "Could not open Changes File for reading.", 0 ); return; } fscanf( fp, "%d\n", &maxChanges ); /* Use malloc so we can realloc later on */ changes_table = malloc( sizeof( CHANGE_DATA) * (maxChanges+1) ); for( i = 0; i < maxChanges; i++ ) { totChanges++; changes_table[i].change = fread_string( fp ); changes_table[i].coder = fread_string( fp ); changes_table[i].date = fread_string( fp ); changes_table[i].mudtime = fread_number( fp ); } changes_table[maxChanges].coder = str_dup(""); fclose(fp); return; /* just return */ }
void load_logs(void) { FILE *fp; int i; totLogs = 0; if ( !(fp = fopen( LOG_FILE, "r")) ) { bug( "Could not open Log File for reading.", 0 ); return; } fscanf( fp, "%d\n", &maxLogs ); /* Use malloc so we can realloc later on */ log_table = malloc( sizeof( LOG_DATA) * (maxLogs+1) ); for( i = 0; i < maxLogs; i++ ) { totLogs++; log_table[i].reporter = fread_string( fp ); log_table[i].type = fread_string( fp ); log_table[i].date = fread_string( fp ); log_table[i].log = fread_string( fp ); } log_table[maxLogs].reporter = str_dup(""); fclose(fp); return; /* just return */ }
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 ); }
NOTE_DATA * read_log( FILE *fp ) { NOTE_DATA * log; char * word; log = alloc_mem( sizeof( NOTE_DATA ) ); for ( ; ; ) { word = fread_word( fp ); if ( !str_cmp( word, "Sender" ) ) log->sender = fread_string( fp ); else if ( !str_cmp( word, "Date" ) ) log->date = fread_string( fp ); else if ( !str_cmp( word, "Subject" ) ) log->subject = fread_string( fp ); else if ( !str_cmp( word, "Text" ) ) log->text = fread_string( fp ); else if ( !str_cmp( word, "Endlog" ) ) { fread_to_eol( fp ); log->next = NULL; return log; } else { free_mem( log, sizeof( NOTE_DATA ) ); bug( "read_log: bad key word.", 0 ); return NULL; } } }
void load_group( FILE *fp, struct group_type *group ) { int i; char *temp; group->name = fread_string(fp); for ( i = 0; i < MAX_CLASS; ++i ) group->rating[i] = fread_number( fp ); i = 0; while(TRUE) { temp = fread_string(fp); if ( !str_cmp( temp, "End" ) || i >= MAX_IN_GROUP ) { while( i < MAX_IN_GROUP ) group->spells[i++] = str_dup( "" ); break; } else group->spells[i++] = temp; } }
/* * Snarf a help section. */ void load_helps( FILE *fp ) { HELP_DATA *pHelp; for ( ; ; ) { pHelp = alloc_perm( sizeof(*pHelp) ); pHelp->level = fread_number( fp ); pHelp->keyword = fread_string( fp ); if ( pHelp->keyword[0] == '$' ) break; pHelp->text = fread_string( fp ); if ( !str_cmp( pHelp->keyword, "greeting" ) ) help_greeting = pHelp->text; if ( help_first == NULL ) help_first = pHelp; if ( help_last != NULL ) help_last->next = pHelp; help_last = pHelp; pHelp->next = NULL; top_help++; } return; }
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_trivia(void) { FILE *fp; TRIVIA *strivia = 0; HINT *hint; char *word; if((fp = fopen(TRIVIA_FILE, "r")) == 0) { bug("read_trivia: unable to open file ro reading!", 0); return; } while(1) { word = fread_word(fp); if(!str_cmp(word, "end")) break; if(!str_cmp(word, "trivia")) { strivia = alloc_perm(sizeof(*strivia)); strivia->question = fread_string(fp); strivia->answer = fread_string(fp); strivia->character = fread_string(fp); strivia->winner = fread_string(fp); strivia->guesses = fread_number(fp); strivia->time = fread_number(fp); strivia->timeleft = fread_number(fp); strivia->reward = fread_number(fp); strivia->next = trivia_list; trivia_list = strivia; continue; } if(!str_cmp(word, "hint")) { if(!strivia) { bug("read_trivia: hint read before trivia laoded!", 0); exit(1); } hint = alloc_perm(sizeof(*hint)); hint->hint = fread_string(fp); hint->next = strivia->hints; strivia->hints = hint; continue; } bug("read_trivia: wrong word!", 0); break; } return; }
void fread_comment( CHAR_DATA * ch, FILE * fp ) { NOTE_DATA *pnote; for( ;; ) { char letter; do { letter = getc( fp ); if( feof( fp ) ) { fclose( fp ); return; } } while( isspace( letter ) ); ungetc( letter, fp ); CREATE( pnote, NOTE_DATA, 1 ); if( str_cmp( fread_word( fp ), "sender" ) ) break; pnote->sender = fread_string( fp ); if( str_cmp( fread_word( fp ), "date" ) ) break; pnote->date = fread_string( fp ); if( str_cmp( fread_word( fp ), "to" ) ) break; pnote->to_list = fread_string( fp ); if( str_cmp( fread_word( fp ), "subject" ) ) break; pnote->subject = fread_string( fp ); if( str_cmp( fread_word( fp ), "text" ) ) break; pnote->text = fread_string( fp ); pnote->next = ch->comments; pnote->prev = NULL; ch->comments = pnote; return; } bug( "fread_comment: bad key word. strap in!", 0 ); /* * exit( 1 ); */ }
/* Read in an individual slaytype */ void fread_slay( SLAY_DATA * slay, FILE * fp ) { const char *word; bool fMatch; for( ;; ) { word = feof( fp ) ? "End" : fread_word( fp ); fMatch = FALSE; switch ( UPPER( word[0] ) ) { case '*': fMatch = TRUE; fread_to_eol( fp ); break; case 'C': KEY( "Cmessage", slay->cmsg, fread_string( fp ) ); KEY( "Color", slay->color, fread_number( fp ) ); break; case 'E': if( !str_cmp( word, "End" ) ) { if( !slay->owner ) slay->owner = STRALLOC( "Any" ); return; } break; case 'O': KEY( "Owner", slay->owner, fread_string( fp ) ); break; case 'R': KEY( "Rmessage", slay->rmsg, fread_string( fp ) ); break; case 'T': KEY( "Type", slay->type, fread_string( fp ) ); break; case 'V': KEY( "Vmessage", slay->vmsg, fread_string( fp ) ); break; } if( !fMatch ) bug( "Fread_slay: no match: %s", word ); } }
/* added for new index - 5/5/02 - Nopey */ void fread_news_type( NEWS_TYPE * type, FILE * fp ) { const char *word; bool fMatch; for( ;; ) { word = feof( fp ) ? "End" : fread_word( fp ); fMatch = FALSE; switch ( UPPER( word[0] ) ) { case '*': fread_to_eol( fp ); break; case 'C': KEY( "Cmd_Name", type->cmd_name, fread_string( fp ) ); break; case 'E': if( !str_cmp( word, "END" ) ) { if( !type->name ) type->name = STRALLOC( "Unknown" ); return; } break; case 'H': KEY( "Header", type->header, fread_string( fp ) ); break; case 'L': KEY( "Level", type->level, fread_number( fp ) ); break; case 'N': KEY( "Name", type->name, fread_string( fp ) ); break; case 'V': KEY( "Vnum", type->vnum, fread_number( fp ) ); break; } if( !fMatch ) bug( "fread_news_type(): no match: %s", word ); } }
static struct mail_t *read_mail_record(FILE *mail_file) { char line[READ_SIZE]; long sender, recipient; time_t sent_time; struct mail_t *record; if (!get_line(mail_file, line)) return NULL; if (sscanf(line, "### %ld %ld %ld", &recipient, &sender, (long *)&sent_time) != 3) { log("Mail system - fatal error - malformed mail header"); log("Line was: %s", line); return NULL; } CREATE(record, struct mail_t, 1); record->recipient = recipient; record->sender = sender; record->sent_time = sent_time; record->body = fread_string(mail_file, "read mail record"); return record; }
void load_materials(void) { bool fMatch; closeReserve(); FILE *fp = fopen(MATERIAL_FILE, "r"); if(!fp) return; // no materials to load. while(true) { const char *word = feof( fp ) ? "End" : fread_word( fp ); fMatch = FALSE; if(!str_cmp(word, "End")) { break; } if(!str_cmp(word, "MAT")) { MAT_TYPE *mat = new_mat(); while(true) { word = feof( fp ) ? "End" : fread_word(fp); if(!str_cmp(word, "End")) { bug(Format("Prematurely reached end of materials data file; data corrupted!"), 0); fclose(fp); openReserve(); return; } bool finished = false; switch ( UPPER(word[0]) ) { case '*': fMatch = TRUE; fread_to_eol( fp ); break; case 'E': if(!str_cmp(word, "ENDMAT")) { mat->next = mat_list; mat_list = mat; matValue++; finished = true; break; } case 'V': KEY("VAL", mat->assignedValue, fread_number(fp) ); break; case 'N': KEYS( "NAME", mat->name, fread_string(fp) ); break; } if(finished) break; } } } fclose(fp); openReserve(); }
void LoadAnnounce() { int nNum; FILE *fpi; if ((fpi = fopen("../txt/announce.txt", "r")) == NULL) { log_string("Fatal Error: announce.txt not found! Making one!"); SaveAnnounce(); return; } for ( nNum = 0; nNum < 10; nNum++ ) { mudannounce_table[nNum].caAnnounceName = str_dup(fread_string( fpi )); mudannounce_table[nNum].caAnnounceDescription = str_dup(fread_string( fpi )); } fclose(fpi); }
static void fread_string_discard(gbfile *fd) { char *temp = fread_string(fd); if (temp != NULL) { xfree(temp); } }
void Load_Economy() { int i; FILE *fp; if ((fp = fopen("../txt/economy.txt", "r")) == NULL) { log_string("Fatal Error: economy.txt not found!"); exit(1); } for (i = 0; i < MAX_ECONOMY; i++) { economy_table[i].caEconomyName = fread_string(fp); economy_table[i].nExpRate = fread_number(fp); economy_table[i].nPrimalRate = fread_number(fp); economy_table[i].nQuestRate = fread_number(fp); economy_table[i].nClassRate = fread_number(fp); economy_table[i].nExpAmount = fread_number(fp); economy_table[i].nPrimalAmount = fread_number(fp); economy_table[i].nQuestAmount = fread_number(fp); economy_table[i].nClassAmount = fread_number(fp); economy_table[i].nMaxAmount = fread_number(fp); economy_table[i].nTimeTillRegeneration = fread_number(fp); economy_table[i].nTimeTillReset = fread_number(fp); economy_table[i].caLastPerson = fread_string(fp); economy_table[i].nExchanges = fread_number(fp); economy_table[i].nExpBought = fread_number(fp); economy_table[i].nPrimalBought = fread_number(fp); economy_table[i].nQuestBought = fread_number(fp); economy_table[i].nClassBought = fread_number(fp); economy_table[i].nExpSold = fread_number(fp); economy_table[i].nPrimalSold = fread_number(fp); economy_table[i].nQuestSold = fread_number(fp); economy_table[i].nClassSold = fread_number(fp); } fclose(fp); }
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 load_social (FILE *fp, struct social_type *social) { strcpy(social->name, fread_string (fp)); social->char_no_arg = fread_string (fp); social->others_no_arg = fread_string (fp); social->char_found = fread_string (fp); social->others_found = fread_string (fp); social->vict_found = fread_string (fp); social->char_auto = fread_string (fp); social->others_auto = fread_string (fp); }
void load_helps( void ) { help_data* help; FILE* fp; int pos; echo( "Loading Help ...\n\r" ); help_list = NULL; max_help = 0; fp = open_file( HELP_FILE, "r" ); if( strcmp( fread_word( fp ), "#HELPS" ) ) panic( "Load_helps: missing header" ); for( ; ; ) { help = new help_data; help->level[0] = fread_number( fp ); help->level[1] = fread_number( fp ); help->category = fread_number( fp ); help->name = fread_string( fp, MEM_HELP ); if( *help->name == '$' ) { delete help; break; } help->text = fread_string( fp, MEM_HELP ); help->immortal = fread_string( fp, MEM_HELP ); pos = pntr_search( help_list, max_help, help->name ); if( pos < 0 ) pos = -pos-1; insert( help_list, max_help, help, pos ); } fclose( fp ); }
void load_pkfile() { FILE * fp = fopen(PKRANK_FILE,"r"); if (fp) { PKINFO_TYPE * pkholder; char * tmp = fread_string(fp); while (strcmp(tmp,"END")) { PKINFO_TYPE * pk = alloc_perm(sizeof(*pk)); pk->character = str_dup(tmp); bug("Read: %s",pk->character); pk->pk_count = fread_number(fp); bug("Read: %d",pk->pk_count); pk->pk_death_count = fread_number(fp); bug("Read: %d",pk->pk_death_count); if (pkranks == NULL) { pkranks = pk; pkholder = pk; pk->next = NULL; } else; { pkholder->next = pk; pkholder = pk; pk->next = NULL; } tmp = fread_string(fp); } } else { pkranks = NULL; fp = fopen(PKRANK_FILE,"w"); fprintf(fp,"END~\n"); fclose(fp); } }
void load_pkstore() { int nNum; FILE *fp; if ((fp = fopen("../txt/pkstore.txt", "r")) == NULL) { log_string("Fatal Error: pkstore.txt not found! Making one!"); save_pkstore(); return; } pkstore_table.sStoreName = fread_string ( fp ); for ( nNum = 0; nNum < 10; nNum++ ) { pkstore_table.sItem[nNum] = str_dup(fread_string( fp )); pkstore_table.sItemDescriptions[nNum] = str_dup(fread_string( fp )); pkstore_table.nItemVnum[nNum] = fread_number( fp ); pkstore_table.nItemPk[nNum] = fread_number( fp ); pkstore_table.nItemQp[nNum] = fread_number( fp ); pkstore_table.nItemDe[nNum] = fread_number( fp ); pkstore_table.nItemBought[nNum] = fread_number( fp ); } fclose(fp); }
void clan_table_read() { int clan_pos; int kill_count; FILE *fp; char *dummy; if((fp = fopen(CLAN_LIST, "r")) != NULL) { for(clan_pos = 0; clan_pos <= MAX_CLAN - 1; clan_pos++) { dummy = fread_word(fp); clan_table[clan_pos].clan_name = fread_string(fp); dummy = fread_word(fp); clan_table[clan_pos].clan_leader = fread_string(fp); dummy = fread_word(fp); clan_table[clan_pos].clan_powers_1 = fread_string(fp); dummy = fread_word(fp); clan_table[clan_pos].clan_powers_2 = fread_string(fp); dummy = fread_word(fp); clan_table[clan_pos].clan_powers_3 = fread_string(fp); dummy = fread_word(fp); clan_table[clan_pos].lvnum = fread_number(fp); dummy = fread_word(fp); clan_table[clan_pos].uvnum = fread_number(fp); dummy = fread_word(fp); clan_table[clan_pos].clan_recall = fread_number(fp); dummy = fread_word(fp); for(kill_count = 0; kill_count <= MAX_CLAN - 1; kill_count++) { clan_table[clan_pos].clan_kills[kill_count] = fread_number(fp); } } } else { /*bug("Cannot Open Clan Table:- Loading Default Table", 0);*/ return; } fflush(fp); fclose(fp); return; }
void artifact_table_read() { int art_pos; FILE *fp; if((fp = fopen(ART_LIST, "r")) != NULL) { for(art_pos = 0; art_pos < MAX_ART; art_pos++) { artifact_table[art_pos].object_vnum = fread_number(fp); artifact_table[art_pos].player_name = fread_string(fp); } } else { /*bug("Cannot Open ARTIFACT Table:- Loading Default Table", 0);*/ return; } fflush(fp); fclose(fp); return; }
append_to_file(fbuf, buf); } void remove_member(char *name, char *shortname) { FILE *fpList; FILE *fpNew; char *buf; char list[MAX_STRING_LENGTH]; char temp[MAX_STRING_LENGTH]; if(name[0] == '\0') { bug("remove_member: No name!\n\r"); return; } if(shortname[0] == '\0' || !shortname) { bug("remove_member: No shortname!\n\r"); return; } sprintf(list, "%s%s.list", CLAN_DIR, shortname); sprintf(temp,"%s.temp", list); if ( ( fpList = fopen(list, "r" ) ) == NULL ) { bug("Unable to open member list"); return; } if ( ( fpNew = fopen(temp, "w" ) ) == NULL) { bug("remove_member: Unable to write temp list"); return; } for ( ; ; ) { if(feof(fpList)) break; buf = feof( fpList ) ? "End" : fread_string( fpList ); if(!str_cmp(buf, "End") || buf[0] == '\0') break; if(str_cmp(name, buf) && strlen(buf) > 2) fprintf(fpNew, "%s~\n", buf); } fclose( fpNew ); fclose( fpList ); rename(temp, list); }
/* * Snarf an 'area' header line. */ void load_area( FILE *fp ) { AREA_DATA *pArea; pArea = alloc_perm( sizeof(*pArea) ); pArea->reset_first = NULL; pArea->reset_last = NULL; pArea->name = fread_string( fp ); pArea->age = 15; pArea->nplayer = 0; if ( area_first == NULL ) area_first = pArea; if ( area_last != NULL ) area_last->next = pArea; area_last = pArea; pArea->next = NULL; top_area++; return; }
void boot_context_help(void) { int i, num; FILE *fl; char line[READ_SIZE]; fl = fopen(CONTEXT_HELP_FILE, "r"); /* init to 'no help' string */ for (i=0;i < NUM_CONTEXTS;i++) context_help_list[i] = NO_HELP; if (!fl) { log("No context help found : %s", strerror(errno)); return; } while (get_line(fl, line)) { if (sscanf(line, "#%d *", &num) == 1) /* got a number, now get the text */ context_help_list[num] = fread_string(fl, "Context sensitive help"); } fclose(fl); }
/* * Legge una struttura di sinonimo da un file. */ SYNO_DATA *fread_synonym( MUD_FILE *fp, int type ) { SYNO_DATA *synonym; if ( !fp ) { send_log( NULL, LOG_BUG, "fread_synonym: fp passato è NULL" ); return NULL; } if ( type < 0 || type >= MAX_CODE ) { send_log( NULL, LOG_BUG, "fread_synonym: type passato errato: %d", type ); return NULL; } CREATE( synonym, SYNO_DATA, 1 ); synonym->cat = code_code( fp, fread_word(fp), type ); synonym->syn = fread_string( fp ); return synonym; }
int fread_number( FILE *fp ) { int number = 0; int sign = 1; char c; do { c = getc( fp ); } while( isspace( c ) ); switch( c ) { case '-' : sign = -1; case '+' : c = getc( fp ); } if( !isdigit( c ) ) { bug( "Fread_number: bad format." ); printf( "%s\n", fread_string( fp, MEM_UNKNOWN ) ); exit( 1 ); } while( isdigit( c ) ) { number = number * 10 + c - '0'; c = getc( fp ); } number *= sign; while( c == ' ' ) { c = getc( fp ); } ungetc( c, fp ); return number; }
NEWS_DATA *fread_news( FILE * fpin ) { const char *word; bool fMatch; NEWS_DATA *news = NULL; CREATE( news, NEWS_DATA, 1 ); for ( ;; ) { word = feof( fpin ) ? "End" : fread_word( fpin ); fMatch = FALSE; switch ( UPPER( word[0] ) ) { case '*': fMatch = TRUE; fread_to_eol( fpin ); break; case 'D': if ( !str_cmp( word, "Day" ) ) { news->day = fread_number( fpin ); fMatch = TRUE; break; } case 'E': if ( !str_cmp( word, "End" ) ) return news; case 'M': if ( !str_cmp( word, "Month" ) ) { news->month = fread_number( fpin ); fMatch = TRUE; break; } case 'N': if ( !str_cmp( word, "NewsData" ) ) { news->data = fread_string( fpin ); fMatch = TRUE; break; } case 'T': if ( !str_cmp( word, "TimeStamp" ) ) { news->time_stamp = fread_number( fpin ); if ( news->time_stamp > 0 ) { format_posttime( news ); } fMatch = TRUE; break; } case 'Y': if ( !str_cmp( word, "Year" ) ) { news->year = fread_number( fpin ); fMatch = TRUE; break; } } if ( !fMatch ) { bug( "Load_news: no match: %s", word ); bug( word, 0 ); } } return NULL; }
CHAR_DATA *load_mobile( FILE * fp ) { CHAR_DATA *mob = NULL; const char *word; bool fMatch; int inroom = 0; ROOM_INDEX_DATA *pRoomIndex = NULL; word = feof( fp ) ? "EndMobile" : fread_word( fp ); if( !str_cmp( word, "Vnum" ) ) { int vnum; vnum = fread_number( fp ); if( get_mob_index( vnum ) == NULL ) { bug( "%s: No index data for vnum %d", __FUNCTION__, vnum ); return NULL; } mob = create_mobile( get_mob_index( vnum ) ); if( !mob ) { for( ;; ) { word = feof( fp ) ? "EndMobile" : fread_word( fp ); /* * So we don't get so many bug messages when something messes up * * --Shaddai */ if( !str_cmp( word, "EndMobile" ) ) break; } bug( "%s: Unable to create mobile for vnum %d", __FUNCTION__, vnum ); return NULL; } } else { for( ;; ) { word = feof( fp ) ? "EndMobile" : fread_word( fp ); /* * So we don't get so many bug messages when something messes up * * --Shaddai */ if( !str_cmp( word, "EndMobile" ) ) break; } extract_char( mob, TRUE ); bug( "%s: Vnum not found", __FUNCTION__ ); return NULL; } for( ;; ) { word = feof( fp ) ? "EndMobile" : fread_word( fp ); fMatch = FALSE; switch ( UPPER( word[0] ) ) { case '*': fMatch = TRUE; fread_to_eol( fp ); break; case '#': if( !str_cmp( word, "#OBJECT" ) ) { mob->tempnum = -9999; /* Hackish, yes. Works though doesn't it? */ fread_obj( mob, fp, OS_CARRY ); } break; case 'A': if( !str_cmp( word, "Affect" ) || !str_cmp( word, "AffectData" ) ) { AFFECT_DATA *paf; CREATE( paf, AFFECT_DATA, 1 ); if( !str_cmp( word, "Affect" ) ) { paf->type = fread_number( fp ); } else { int sn; const char *sname = fread_word( fp ); if( ( sn = skill_lookup( sname ) ) < 0 ) { if( ( sn = herb_lookup( sname ) ) < 0 ) bug( "%s", "load_mobile: unknown skill." ); else sn += TYPE_HERB; } paf->type = sn; } paf->duration = fread_number( fp ); paf->modifier = fread_number( fp ); paf->location = fread_number( fp ); if( paf->location == APPLY_WEAPONSPELL || paf->location == APPLY_WEARSPELL || paf->location == APPLY_REMOVESPELL || paf->location == APPLY_STRIPSN ) paf->modifier = slot_lookup( paf->modifier ); paf->bitvector = fread_bitvector( fp ); LINK( paf, mob->first_affect, mob->last_affect, next, prev ); fMatch = TRUE; break; } KEY( "AffectedBy", mob->affected_by, fread_bitvector( fp ) ); break; #ifdef OVERLANDCODE case 'C': if( !str_cmp( word, "Coordinates" ) ) { mob->x = fread_number( fp ); mob->y = fread_number( fp ); mob->map = fread_number( fp ); fMatch = TRUE; break; } break; #endif case 'D': if( !str_cmp( word, "Description" ) ) { STRFREE( mob->description ); mob->description = fread_string( fp ); fMatch = TRUE; break; } break; case 'E': if( !str_cmp( word, "EndMobile" ) ) { if( inroom == 0 ) inroom = ROOM_VNUM_LIMBO; pRoomIndex = get_room_index( inroom ); if( !pRoomIndex ) pRoomIndex = get_room_index( ROOM_VNUM_LIMBO ); char_to_room( mob, pRoomIndex ); mob->tempnum = -9998; /* Yet another hackish fix! */ update_room_reset( mob, FALSE ); return mob; } if( !str_cmp( word, "End" ) ) /* End of object, need to ignore this. sometimes they creep in there somehow -- Scion */ fMatch = TRUE; /* Trick the system into thinking it matched something */ break; case 'F': KEY( "Flags", mob->act, fread_number( fp ) ); break; case 'G': KEY( "Gold", mob->gold, fread_number( fp ) ); break; case 'H': if( !str_cmp( word, "HpManaMove" ) ) { mob->hit = fread_number( fp ); mob->max_hit = fread_number( fp ); mob->mana = fread_number( fp ); mob->max_mana = fread_number( fp ); mob->move = fread_number( fp ); mob->max_move = fread_number( fp ); if( mob->max_move <= 0 ) mob->max_move = 150; fMatch = TRUE; break; } break; case 'L': if( !str_cmp( word, "Long" ) ) { STRFREE( mob->long_descr ); mob->long_descr = fread_string( fp ); fMatch = TRUE; break; } KEY( "Level", mob->top_level, fread_number( fp ) ); break; case 'M': if( !str_cmp( word, "Mobclan" ) ) { STRFREE( mob->mob_clan ); mob->mob_clan = fread_string( fp ); fMatch = TRUE; break; } break; case 'N': if( !str_cmp( word, "Name" ) ) { STRFREE( mob->name ); mob->name = fread_string( fp ); fMatch = TRUE; break; } break; case 'P': KEY( "Position", mob->position, fread_number( fp ) ); break; case 'R': KEY( "Room", inroom, fread_number( fp ) ); KEY( "Resetvnum", mob->resetvnum, fread_number( fp ) ); KEY( "Resetnum", mob->resetnum, fread_number( fp ) ); break; case 'S': if( !str_cmp( word, "Short" ) ) { STRFREE( mob->short_descr ); mob->short_descr = fread_string( fp ); fMatch = TRUE; break; } break; } if( !fMatch && str_cmp( word, "End" ) ) bug( "%s: no match: %s", __FUNCTION__, word ); } return NULL; }