void load_bans(void) { FILE *fp; BAN_DATA *ban_last; strcat(boot_buf,"ators.\n\r Le"); if ( ( fp = fopen( BAN_FILE, "r" ) ) == NULL ) return; ban_last = NULL; for ( ; ; ) { BAN_DATA *pban; if ( feof(fp) ) { fclose( fp ); return; } pban = new_ban(); pban->name = str_dup(fread_word(fp)); pban->level = fread_number(fp); pban->ban_flags = fread_flag(fp); fread_to_eol(fp); if (ban_list == NULL) ban_list = pban; else ban_last->next = pban; ban_last = pban; } }
/* * Loads the ban file from the system directory. */ void load_bans(void) { FILE *fp; BAN_DATA *ban_last; if ((fp = fopen(BAN_FILE, "r")) == NULL) { global.last_boot_result = MISSING; log_string("STATUS: No ban file available to load in the system directory."); return; } ban_last = NULL; for (;;) { BAN_DATA *pban; if (feof(fp)) { if (global.last_boot_result == UNKNOWN) { global.last_boot_result = SUCCESS; } fclose(fp); return; } pban = new_ban(); pban->name = str_dup(fread_word(fp)); pban->level = fread_number(fp); pban->ban_flags = fread_flag(fp); fread_to_eol(fp); if (ban_list == NULL) { ban_list = pban; } else { ban_last->next = pban; } ban_last = pban; } if (global.last_boot_result == UNKNOWN) global.last_boot_result = SUCCESS; } // end load_bans
void load_bans( void ) { FILE * fp; BAN_DATA *ban_last; char * site; if ( ( fp = fopen( BAN_FILE, "r" ) ) == NULL ) return ; ban_last = NULL; for ( ; ; ) { BAN_DATA *pban; if ( feof( fp ) ) { fclose( fp ); return ; } pban = new_ban(); site = fread_word( fp ); if ( !str_cmp( site, "#" ) ) { fclose( fp ); return ; } pban->site = str_dup( site ); pban->ban_flags = fread_flag( fp ); pban->person = str_dup( fread_word( fp ) ); pban->date_stamp = fread_long_number( fp ); pban->period = fread_number( fp ); pban->reason = fread_string_eol( fp ); if ( pban->period > 0 && pban->date_stamp + ( pban->period * 24 * 3600 ) <= current_time ) { free_ban( pban ); continue; } if ( ban_list == NULL ) ban_list = pban; else ban_last->next = pban; ban_last = pban; } }
long fread_flag_circle( FILE *fp) { long number; char c; bool negative = FALSE; do { c = getc(fp); } while ( isspace(c)); /* By Oxtal for MZF compatibility */ if (c == '\'') { c = getc(fp); if (c != '\'') bug("Wrong flag format. (Double quote expected)"); return 0; } if (c == '-') { negative = TRUE; c = getc(fp); } number = 0; if (!isdigit(c)) { while ('a' <= c && c <= 'z') { number += flag_convert_circle(c); c = getc(fp); } } while (isdigit(c)) { number = number * 10 + c - '0'; c = getc(fp); } if (c == '|') number += fread_flag(fp); else if ( c != ' ') ungetc(c,fp); if (negative) return -1 * number; return number; }
long fread_flag(FILE *fp) { int number; char c; bool negative = false; do c = (char)getc(fp); while (isspace((int)c)); if (c == '-') { negative = true; c = (char)getc(fp); } number = 0; if (!isdigit((int)c)) { while (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')) { number += flag_convert(c); c = (char)getc(fp); } } while (isdigit((int)c)) { number = number * 10 + (int)c - (int)'0'; c = (char)getc(fp); } if (c == '|') number += fread_flag(fp); else if (c != ' ') ungetc(c, fp); if (negative) return -1 * number; return number; }
long fread_flag(FILE *fp) { int number = 0; char c; bool negative= FALSE; do { c = getc(fp); } while (isspace(c)); if (c == '-') { negative = TRUE; c = getc(fp); } if (!isdigit(c)) { while (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')) { number += flag_convert(c); c = getc(fp); } } while (isdigit(c)) { number = number * 10 + c - '0'; c = getc(fp); } if (c == '|') number += fread_flag(fp); else if (c != ' ') ungetc(c, fp); if (negative) return -1 * number; return number; }
/* * Load BBS config file. */ void load_config(void) { FILE *fpConfig; char *word = '\0'; bool fMatch= FALSE; log_string("Load_config: Loading config file"); fclose(fpReserve); if (!(fpConfig = fopen(CONFIG_FILE, "r"))) { bbs_bug("Load_config: Could not open to read %s", CONFIG_FILE); fpReserve = fopen(NULL_FILE, "r"); config.bbs_name = "(Noname)"; config.bbs_email = "userid@host"; config.bbs_host = "localhost"; config.bbs_port = 3000; config.bbs_version = "3.0"; config.bbs_flags = 0; config.bbs_state = "Turkiye"; return; } for (;;) { word = feof(fpConfig) ? "End" : fread_word(fpConfig); fMatch = FALSE; switch (UPPER(word[0])) { case '*': case '#': fread_to_eol(fpConfig); fMatch = TRUE; break; case 'E': SKEY( "Email", config.bbs_email, fget_string(fpConfig)) ; if (!str_cmp(word, "End")) { fclose(fpConfig); fpReserve = fopen(NULL_FILE, "r"); log_string("Load_config: Done"); return; } break; case 'F': KEY( "Flags", config.bbs_flags, fread_flag(fpConfig)) ; break; case 'H': SKEY( "Host", config.bbs_host, fget_string(fpConfig)) ; break; case 'N': SKEY( "Name", config.bbs_name, fget_string(fpConfig)) ; break; case 'P': KEY( "Port", config.bbs_port, fread_number(fpConfig)) ; break; case 'S': SKEY( "State", config.bbs_state, fget_string(fpConfig)) ; break; case 'V': SKEY( "Version", config.bbs_version, fget_string(fpConfig)) ; break; } if (!fMatch) { bbs_bug("Load_config: No match '%s'", word); exit(1); } } return; }
void load_clans(void) { FILE *fp; char buf[MAX_STRING_LENGTH]; char *string; int count = 0; int i; bool fMatch = FALSE; for (i=0; i < MAX_CLAN; i++) { clan_table[i].name = ""; clan_table[i].who_name = ""; clan_table[i].room[0]= 0; clan_table[i].room[1]= 0; clan_table[i].room[2]= 0; clan_table[i].rank[0].rankname = ""; clan_table[i].rank[0].skillname = ""; clan_table[i].ml[0] = 0; clan_table[i].ml[1] = 0; clan_table[i].ml[2] = 0; clan_table[i].ml[3] = 0; clan_table[i].flags = 0; } sprintf(buf, "%sclan.dat", DATA_DIR); if ((fp = fopen(buf, "r")) == NULL) { log_string("Error: clan.dat file not found!"); exit(1); } for (;;) { string = feof(fp) ? "End" : fread_word(fp); if (!str_cmp(string, "End")) break; switch (UPPER(string[0])) { case 'F': clan_table[count].flags = fread_flag( fp ); fMatch = TRUE; break; case 'G': count++; clan_table[count].name = fread_string(fp); fMatch = TRUE; break; case 'R': if (!str_cmp(string, "Rooms")) { clan_table[count].room[0] = fread_number(fp); /* hall */ clan_table[count].room[1] = fread_number(fp); /* morgue */ clan_table[count].room[2] = fread_number(fp); /* temple */ fMatch = TRUE; } else if (!str_cmp(string, "Rank")) { i = fread_number(fp); clan_table[count].rank[i - 1].rankname = fread_string(fp); fMatch = TRUE; } break; case 'S': i = fread_number(fp); clan_table[count].rank[i - 1].skillname = fread_string(fp); fMatch = TRUE; break; case 'M': clan_table[count].ml[0] = fread_number(fp); clan_table[count].ml[1] = fread_number(fp); clan_table[count].ml[2] = fread_number(fp); clan_table[count].ml[3] = fread_number(fp); fMatch = TRUE; break; case 'W': clan_table[count].who_name = fread_string(fp); fMatch = TRUE; break; } /* end of switch */ } /* end of while (!feof) */ if (!fMatch) { bug("Fread_clans: no match.", 0); fread_to_eol(fp); } fclose(fp); return; } /* end: load_guilds */
void load_objects(FILE * fp) { OBJ_INDEX_DATA *pObjIndex; if (!area_last) { /* OLC */ bug("Load_objects: no #AREA seen yet.", 0); exit(1); } for (;;) { sh_int vnum; char letter; int iHash; letter = fread_letter(fp); if (letter != '#') { bug("Load_objects: # not found.", 0); exit(1); } vnum = fread_number(fp); if (vnum == 0) break; fBootDb = FALSE; if (get_obj_index(vnum) != NULL) { bug("Load_objects: vnum %d duplicated.", vnum); exit(1); } fBootDb = TRUE; pObjIndex = alloc_perm(sizeof(*pObjIndex)); pObjIndex->vnum = vnum; pObjIndex->area = area_last; /* OLC */ pObjIndex->new_format = TRUE; pObjIndex->reset_num = 0; newobjs++; pObjIndex->name = fread_string(fp); pObjIndex->short_descr = fread_string(fp); pObjIndex->description = fread_string(fp); pObjIndex->material = fread_string(fp); pObjIndex->item_type = item_lookup(fread_word(fp)); pObjIndex->extra_flags = fread_flag(fp); pObjIndex->wear_flags = fread_flag(fp); switch (pObjIndex->item_type) { case ITEM_WEAPON: pObjIndex->value[0] = weapon_type(fread_word(fp)); pObjIndex->value[1] = fread_number(fp); pObjIndex->value[2] = fread_number(fp); pObjIndex->value[3] = attack_lookup(fread_word(fp)); pObjIndex->value[4] = fread_flag(fp); break; case ITEM_CONTAINER: pObjIndex->value[0] = fread_number(fp); pObjIndex->value[1] = fread_flag(fp); pObjIndex->value[2] = fread_number(fp); pObjIndex->value[3] = fread_number(fp); pObjIndex->value[4] = fread_number(fp); break; case ITEM_DRINK_CON: case ITEM_FOUNTAIN: pObjIndex->value[0] = fread_number(fp); pObjIndex->value[1] = fread_number(fp); pObjIndex->value[2] = liq_lookup(fread_word(fp)); pObjIndex->value[3] = fread_number(fp); pObjIndex->value[4] = fread_number(fp); break; case ITEM_WAND: case ITEM_STAFF: pObjIndex->value[0] = fread_number(fp); pObjIndex->value[1] = fread_number(fp); pObjIndex->value[2] = fread_number(fp); pObjIndex->value[3] = skill_lookup(fread_word(fp)); pObjIndex->value[4] = fread_number(fp); break; case ITEM_POTION: case ITEM_PILL: case ITEM_SCROLL: pObjIndex->value[0] = fread_number(fp); pObjIndex->value[1] = skill_lookup(fread_word(fp)); pObjIndex->value[2] = skill_lookup(fread_word(fp)); pObjIndex->value[3] = skill_lookup(fread_word(fp)); pObjIndex->value[4] = skill_lookup(fread_word(fp)); break; default: pObjIndex->value[0] = fread_flag(fp); pObjIndex->value[1] = fread_flag(fp); pObjIndex->value[2] = fread_flag(fp); pObjIndex->value[3] = fread_flag(fp); pObjIndex->value[4] = fread_flag(fp); break; } pObjIndex->level = fread_number(fp); pObjIndex->weight = fread_number(fp); pObjIndex->cost = fread_number(fp); /* condition */ letter = fread_letter(fp); switch (letter) { case ('P'): pObjIndex->condition = 100; break; case ('G'): pObjIndex->condition = 90; break; case ('A'): pObjIndex->condition = 75; break; case ('W'): pObjIndex->condition = 50; break; case ('D'): pObjIndex->condition = 25; break; case ('B'): pObjIndex->condition = 10; break; case ('R'): pObjIndex->condition = 0; break; default: pObjIndex->condition = 100; break; } for (;;) { char letter; letter = fread_letter(fp); if (letter == 'A') { AFFECT_DATA *paf; paf = alloc_perm(sizeof(*paf)); paf->where = TO_OBJECT; paf->type = -1; paf->level = pObjIndex->level; paf->duration = -1; paf->location = fread_number(fp); paf->modifier = fread_number(fp); paf->bitvector = 0; paf->next = pObjIndex->affected; pObjIndex->affected = paf; top_affect++; } else if (letter == 'F') { AFFECT_DATA *paf; paf = alloc_perm(sizeof(*paf)); letter = fread_letter(fp); switch (letter) { case 'A': paf->where = TO_AFFECTS; break; case 'I': paf->where = TO_IMMUNE; break; case 'R': paf->where = TO_RESIST; break; case 'V': paf->where = TO_VULN; break; default: bug("Load_objects: Bad where on flag set.", 0); exit(1); } paf->type = -1; paf->level = pObjIndex->level; paf->duration = -1; paf->location = fread_number(fp); paf->modifier = fread_number(fp); paf->bitvector = fread_flag(fp); paf->next = pObjIndex->affected; pObjIndex->affected = paf; top_affect++; } 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 = pObjIndex->extra_descr; pObjIndex->extra_descr = ed; top_ed++; } else { ungetc(letter, fp); break; } } iHash = vnum % MAX_KEY_HASH; pObjIndex->next = obj_index_hash[iHash]; obj_index_hash[iHash] = pObjIndex; top_obj_index++; top_vnum_obj = top_vnum_obj < vnum ? vnum : top_vnum_obj; /* OLC */ assign_area_vnum(vnum); /* OLC */ } return; }
void load_mobiles(FILE * fp) { MOB_INDEX_DATA *pMobIndex; if (!area_last) { /* OLC */ bug("Load_mobiles: no #AREA seen yet.", 0); exit(1); } for (;;) { sh_int vnum; char letter; int iHash; letter = fread_letter(fp); if (letter != '#') { bug("Load_mobiles: # not found.", 0); exit(1); } vnum = fread_number(fp); if (vnum == 0) break; fBootDb = FALSE; if (get_mob_index(vnum) != NULL) { bug("Load_mobiles: vnum %d duplicated.", vnum); exit(1); } fBootDb = TRUE; pMobIndex = alloc_perm(sizeof(*pMobIndex)); 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(fp); pMobIndex->long_descr_orig = fread_string(fp); pMobIndex->description = fread_string(fp); pMobIndex->race = race_lookup(fread_string(fp)); pMobIndex->long_descr[0] = UPPER(pMobIndex->long_descr[0]); pMobIndex->description[0] = UPPER(pMobIndex->description[0]); pMobIndex->act = fread_flag(fp) | ACT_IS_NPC | race_table[pMobIndex->race].act; pMobIndex->affected_by = fread_flag(fp) | race_table[pMobIndex->race].aff; pMobIndex->pShop = NULL; pMobIndex->alignment = fread_number(fp); pMobIndex->group = fread_number(fp); pMobIndex->level = fread_number(fp); pMobIndex->hitroll = fread_number(fp); /* 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); /* read mana dice */ pMobIndex->mana[DICE_NUMBER] = fread_number(fp); fread_letter(fp); pMobIndex->mana[DICE_TYPE] = fread_number(fp); fread_letter(fp); pMobIndex->mana[DICE_BONUS] = fread_number(fp); /* 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->dam_type = attack_lookup(fread_word(fp)); /* read armor class */ pMobIndex->ac[AC_PIERCE] = fread_number(fp) * 10; pMobIndex->ac[AC_BASH] = fread_number(fp) * 10; pMobIndex->ac[AC_SLASH] = fread_number(fp) * 10; pMobIndex->ac[AC_EXOTIC] = fread_number(fp) * 10; /* read flags and add in data from the race table */ pMobIndex->off_flags = fread_flag(fp) | race_table[pMobIndex->race].off; pMobIndex->imm_flags = fread_flag(fp) | race_table[pMobIndex->race].imm; pMobIndex->res_flags = fread_flag(fp) | race_table[pMobIndex->race].res; pMobIndex->vuln_flags = fread_flag(fp) | race_table[pMobIndex->race].vuln; /* vital statistics */ pMobIndex->start_pos = position_lookup(fread_word(fp)); pMobIndex->default_pos = position_lookup(fread_word(fp)); pMobIndex->sex = sex_lookup(fread_word(fp)); pMobIndex->wealth = fread_number(fp); pMobIndex->form = fread_flag(fp) | race_table[pMobIndex->race].form; pMobIndex->parts = fread_flag(fp) | race_table[pMobIndex->race].parts; /* size */ pMobIndex->size = size_lookup(fread_word(fp)); pMobIndex->material = str_dup(fread_word(fp)); for (;;) { letter = fread_letter(fp); if (letter == 'F') { char *word; long vector; word = fread_word(fp); vector = fread_flag(fp); if (!str_prefix(word, "act")) REMOVE_BIT(pMobIndex->act, vector); else if (!str_prefix(word, "aff")) REMOVE_BIT(pMobIndex->affected_by, vector); else if (!str_prefix(word, "off")) REMOVE_BIT(pMobIndex->off_flags, vector); else if (!str_prefix(word, "imm")) REMOVE_BIT(pMobIndex->imm_flags, vector); else if (!str_prefix(word, "res")) REMOVE_BIT(pMobIndex->res_flags, vector); else if (!str_prefix(word, "vul")) REMOVE_BIT(pMobIndex->vuln_flags, vector); else if (!str_prefix(word, "for")) REMOVE_BIT(pMobIndex->form, vector); else if (!str_prefix(word, "par")) REMOVE_BIT(pMobIndex->parts, vector); else { bug("Flag remove: flag not found.", 0); exit(1); } } else if (letter == 'M') { MPROG_LIST *pMprog; char *word; int trigger = 0; pMprog = alloc_perm(sizeof(*pMprog)); word = fread_word(fp); if (!(trigger = flag_lookup(word, mprog_flags))) { bug("MOBprogs: invalid trigger.", 0); exit(1); } SET_BIT(pMobIndex->mprog_flags, trigger); pMprog->trig_type = trigger; pMprog->vnum = fread_number(fp); pMprog->trig_phrase = fread_string(fp); pMprog->next = pMobIndex->mprogs; pMobIndex->mprogs = pMprog; } else { ungetc(letter, fp); break; } } iHash = vnum % MAX_KEY_HASH; pMobIndex->next = mob_index_hash[iHash]; mob_index_hash[iHash] = pMobIndex; top_mob_index++; 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 an obj section. new style */ void load_objects ( FILE *fp ) { ItemData *pObjIndex; if ( !area_last ) { /* OLC */ log_hd ( LOG_ERROR, "Load_objects: no #AREA seen yet." ); exit ( 1 ); } while ( true ) { int vnum; char letter; int iHash; letter = fread_letter ( fp ); if ( letter != '#' ) { log_hd ( LOG_ERROR, "Load_objects: # not found." ); exit ( 1 ); } vnum = fread_number ( fp ); if ( vnum == 0 ) { break; } fBootDb = FALSE; if ( get_obj_index ( vnum ) != NULL ) { log_hd ( LOG_ERROR, Format ( "Load_objects: vnum %d duplicated.", vnum ) ); exit ( 1 ); } fBootDb = TRUE; ALLOC_DATA ( pObjIndex, ItemData, 1 ); pObjIndex->vnum = vnum; pObjIndex->area = area_last; /* OLC */ pObjIndex->new_format = TRUE; pObjIndex->reset_num = 0; newobjs++; pObjIndex->name = fread_string ( fp ); pObjIndex->short_descr = fread_string ( fp ); pObjIndex->description = fread_string ( fp ); CHECK_POS ( pObjIndex->item_type, item_lookup ( fread_word ( fp ) ), "item_type" ); pObjIndex->extra_flags = fread_flag ( fp ); pObjIndex->wear_flags = fread_flag ( fp ); pObjIndex->material_flags = fread_flag ( fp ); switch ( pObjIndex->item_type ) { case ITEM_WEAPON: pObjIndex->value[0] = weapon_type ( fread_word ( fp ) ); pObjIndex->value[1] = fread_number ( fp ); pObjIndex->value[2] = fread_number ( fp ); pObjIndex->value[3] = attack_lookup ( fread_word ( fp ) ); pObjIndex->value[4] = fread_flag ( fp ); break; case ITEM_CONTAINER: pObjIndex->value[0] = fread_number ( fp ); pObjIndex->value[1] = fread_flag ( fp ); pObjIndex->value[2] = fread_number ( fp ); pObjIndex->value[3] = fread_number ( fp ); pObjIndex->value[4] = fread_number ( fp ); break; case ITEM_DRINK_CON: case ITEM_FOUNTAIN: pObjIndex->value[0] = fread_number ( fp ); pObjIndex->value[1] = fread_number ( fp ); CHECK_POS ( pObjIndex->value[2], liq_lookup ( fread_word ( fp ) ), "liq_lookup" ); pObjIndex->value[3] = fread_number ( fp ); pObjIndex->value[4] = fread_number ( fp ); break; case ITEM_WAND: case ITEM_STAFF: pObjIndex->value[0] = fread_number ( fp ); pObjIndex->value[1] = fread_number ( fp ); pObjIndex->value[2] = fread_number ( fp ); pObjIndex->value[3] = skill_lookup ( fread_word ( fp ) ); pObjIndex->value[4] = fread_number ( fp ); break; case ITEM_POTION: case ITEM_PILL: case ITEM_SCROLL: pObjIndex->value[0] = fread_number ( fp ); pObjIndex->value[1] = skill_lookup ( fread_word ( fp ) ); pObjIndex->value[2] = skill_lookup ( fread_word ( fp ) ); pObjIndex->value[3] = skill_lookup ( fread_word ( fp ) ); pObjIndex->value[4] = skill_lookup ( fread_word ( fp ) ); break; default: pObjIndex->value[0] = fread_flag ( fp ); pObjIndex->value[1] = fread_flag ( fp ); pObjIndex->value[2] = fread_flag ( fp ); pObjIndex->value[3] = fread_flag ( fp ); pObjIndex->value[4] = fread_flag ( fp ); break; } pObjIndex->level = fread_number ( fp ); pObjIndex->weight = fread_number ( fp ); pObjIndex->cost = fread_number ( fp ); /* condition */ letter = fread_letter ( fp ); switch ( letter ) { case ( 'P' ) : pObjIndex->condition = 100; break; case ( 'G' ) : pObjIndex->condition = 90; break; case ( 'A' ) : pObjIndex->condition = 75; break; case ( 'W' ) : pObjIndex->condition = 50; break; case ( 'D' ) : pObjIndex->condition = 25; break; case ( 'B' ) : pObjIndex->condition = 10; break; case ( 'R' ) : pObjIndex->condition = 0; break; default: pObjIndex->condition = 100; break; } while ( true ) { char letter; letter = fread_letter ( fp ); if ( letter == 'A' ) { Affect *paf; ALLOC_DATA ( paf, Affect, 1 ); paf->where = TO_OBJECT; paf->type = -1; paf->level = pObjIndex->level; paf->duration = -1; paf->location = fread_number ( fp ); paf->modifier = fread_number ( fp ); paf->bitvector = 0; paf->next = pObjIndex->affected; pObjIndex->affected = paf; top_affect++; } else if ( letter == 'F' ) { Affect *paf; ALLOC_DATA ( paf, Affect, 1 ); letter = fread_letter ( fp ); switch ( letter ) { case 'A': paf->where = TO_AFFECTS; break; case 'I': paf->where = TO_IMMUNE; break; case 'R': paf->where = TO_RESIST; break; case 'V': paf->where = TO_VULN; break; default: log_hd ( LOG_ERROR, "Load_objects: Bad where on flag set." ); exit ( 1 ); } paf->type = -1; paf->level = pObjIndex->level; paf->duration = -1; paf->location = fread_number ( fp ); paf->modifier = fread_number ( fp ); paf->bitvector = fread_flag ( fp ); paf->next = pObjIndex->affected; pObjIndex->affected = paf; top_affect++; } else if ( letter == 'E' ) { DescriptionData *ed; ALLOC_DATA ( ed, DescriptionData, 1 ); ed->keyword = fread_string ( fp ); ed->description = fread_string ( fp ); ed->next = pObjIndex->extra_descr; pObjIndex->extra_descr = ed; top_ed++; } else if ( letter == 'R' ) { pObjIndex->requirements[SIZ_REQ] = fread_number ( fp ); pObjIndex->requirements[STR_REQ] = fread_number ( fp ); pObjIndex->requirements[DEX_REQ] = fread_number ( fp ); pObjIndex->requirements[CON_REQ] = fread_number ( fp ); pObjIndex->requirements[INT_REQ] = fread_number ( fp ); pObjIndex->requirements[WIS_REQ] = fread_number ( fp ); } else if ( letter == 'L' ) { pObjIndex->repop_percent = fread_number ( fp ); } else { ungetc ( letter, fp ); break; } } iHash = vnum % MAX_KEY_HASH; pObjIndex->next = obj_index_hash[iHash]; obj_index_hash[iHash] = pObjIndex; top_obj_index++; top_vnum_obj = top_vnum_obj < vnum ? vnum : top_vnum_obj; /* OLC */ assign_area_vnum ( vnum ); /* OLC */ } return; }