diff -i smaug14/src/clans.c smaug18/src/clans.c 8c8 < * Tricops and Fireblade | * --- > * Tricops, Fireblade, Edmond, Conran | * 23,25d22 < #define MAX_NEST 100 < static OBJ_DATA *rgObjNest[MAX_NEST]; < 29a27,29 > MEMBER_LIST *first_member_list; > MEMBER_LIST *last_member_list; > 39a40,48 > void save_member_lists args( ( void ) ); > void show_members args( ( CHAR_DATA * ch, char *argument ) ); > void remove_member args( ( char *clanname, char *membername ) ); > > void add_member args( ( CHAR_DATA * ch, char *clanname ) ); > void save_member_lists args( ( void ) ); > void fread_member_list args( ( FILE * fp ) ); > > 48c57 < if ( !str_cmp( name, clan->name ) ) --- > if ( !str_cmp( name, clan->name ) || ( ( clan->abbrev != '\0' ) && !str_cmp( name, clan->abbrev ) ) ) 52a62,74 > /* > CLAN_DATA *get_clan( char *name ) > { > CLAN_DATA *clan; > > for ( clan = first_clan; clan; clan = clan->next ) > if ( !str_cmp( name, clan->name ) ) > return clan; > return NULL; > } > */ > > 58c80,84 < if ( !str_cmp( name, council->name ) ) --- > if ( !str_cmp( name, council->name ) > /* > * council_short > */ > || ( ( council->abbrev != '\0' ) && !str_cmp( name, council->abbrev ) ) ) 62a89,102 > > /* > COUNCIL_DATA *get_council( char *name ) > { > COUNCIL_DATA *council; > > for ( council = first_council; council; council = council->next ) > if ( !str_cmp( name, council->name ) ) > return council; > return NULL; > } > */ > > 134a175 > fprintf( fp, "Abbrev %s~\n", clan->abbrev ); 222a264 > fprintf( fp, "Storeroom %d\n", council->storeroom ); 223a266 > fprintf( fp, "Abbrev %s~\n", council->abbrev ); 276a320 > KEY( "Abbrev", clan->abbrev, fread_string( fp ) ); 473a518,521 > case 'A': > KEY( "Abbrev", council->abbrev, fread_string( fp ) ); > break; > 515a564,566 > case 'S': > KEY( "Storeroom", council->storeroom, fread_number( fp ) ); > break; 605c656,657 < ROOM_INDEX_DATA *storeroom; --- > char fname[256]; > VAULT_DATA *vault; 609,613c661,663 < if ( clan->storeroom == 0 || ( storeroom = get_room_index( clan->storeroom ) ) == NULL ) < { < log_string( "Storeroom not found" ); < return found; < } --- > for ( vault = first_vault; vault; vault = vault->next ) > if ( clan->storeroom == vault->vnum ) > return found; 615,669c665,666 < sprintf( filename, "%s%s.vault", CLAN_DIR, clan->filename ); < if ( ( fp = fopen( filename, "r" ) ) != NULL ) < { < int iNest; < bool found; < OBJ_DATA *tobj, *tobj_next; < < log_string( "Loading clan storage room" ); < rset_supermob( storeroom ); < for ( iNest = 0; iNest < MAX_NEST; iNest++ ) < rgObjNest[iNest] = NULL; < < found = TRUE; < for ( ;; ) < { < char letter; < char *word; < < letter = fread_letter( fp ); < if ( letter == '*' ) < { < fread_to_eol( fp ); < continue; < } < < if ( letter != '#' ) < { < bug( "Load_clan_vault: # not found.", 0 ); < bug( clan->name, 0 ); < 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( "Load_clan_vault: bad section.", 0 ); < bug( clan->name, 0 ); < break; < } < } < fclose( fp ); < for ( tobj = supermob->first_carrying; tobj; tobj = tobj_next ) < { < tobj_next = tobj->next_content; < obj_from_char( tobj ); < obj_to_room( tobj, storeroom ); < } < release_supermob( ); < } < else < log_string( "Cannot open clan vault" ); --- > sprintf( fname, "%s%s.vault", CLAN_DIR, clan->filename ); > fread_storage( clan->storeroom, fname ); 732a730,733 > { > char fname[256]; > VAULT_DATA *vault; > 734a736,742 > for ( vault = first_vault; vault; vault = vault->next ) > if ( council->storeroom == vault->vnum ) > return found; > > sprintf( fname, "%s%s.vault", COUNCIL_DIR, council->filename ); > fread_storage( council->storeroom, fname ); > } 950a959,973 > if ( !IS_PKILL( victim ) && clan->clan_type != CLAN_GUILD && > clan->clan_type != CLAN_ORDER && clan->clan_type != CLAN_NOKILL ) > { > send_to_char( "You cannot induct a peaceful character.\n\r", ch ); > return; > } > > /* > if ( xIS_SET( victim->act, PLR_NICE ) ) > { > send_to_char( "This character is too 'nice' to induct.\n\r", ch ); > return; > } > */ > 1010a1034,1035 > { > xREMOVE_BIT( victim->act, PLR_NICE ); 1011a1037 > } 1029a1056,1057 > add_member( victim, victim->pcdata->clan_name ); > save_member_lists( ); 1080c1108 < /* if ( victim->level < 51 ) --- > /* if ( victim->level < LEVEL_IMMORTAL ) 1109a1138 > int x = 0, y = 0; 1131d1159 < 1151a1180,1199 > > if ( !str_cmp( ch->name, clan->leader ) ) > x = 3; > if ( !str_cmp( ch->name, clan->number1 ) ) > x = 2; > if ( !str_cmp( ch->name, clan->number2 ) ) > x = 1; > if ( !str_cmp( victim->name, clan->leader ) ) > y = 3; > if ( !str_cmp( victim->name, clan->number1 ) ) > y = 2; > if ( !str_cmp( victim->name, clan->number2 ) ) > y = 1; > > if ( x <= y && ( get_trust( ch ) <= get_trust( victim ) ) ) > { > send_to_char( "You are not powerful enough to outcast this character.\n\r", ch ); > return; > } > 1221a1270,1271 > remove_member( victim->pcdata->clan_name, victim->name ); > save_member_lists( ); 1227c1277,1281 < act( AT_MAGIC, "$n outcasts you from $t", ch, clan->name, victim, TO_VICT ); --- > if ( victim->desc && victim->desc->host ) > act( AT_MAGIC, "$n outcasts you from $t", ch, clan->name, victim, TO_VICT ); > else > add_loginmsg( victim->name, 6, NULL ); > 1231c1285 < echo_to_all( AT_MAGIC, buf, ECHOTAR_ALL ); --- > echo_to_all( AT_MAGIC, buf, ECHOTAR_PK ); 1335c1389,1390 < if ( get_trust( ch ) >= LEVEL_GOD ) --- > send_to_char( " badge abbrev\n\r", ch ); > if ( get_trust( ch ) >= LEVEL_LESSER ) 1414a1470,1477 > if ( !str_cmp( arg2, "abbrev" ) ) > { > STRFREE( clan->abbrev ); > clan->abbrev = STRALLOC( argument ); > send_to_char( "Done.\n\r", ch ); > save_clan( clan ); > return; > } 1444a1508,1515 > VAULT_DATA *vault; > > if ( clan->storeroom ) > { > for ( vault = first_vault; vault; vault = vault->next ) > if ( vault->vnum == clan->storeroom ) > UNLINK( vault, first_vault, last_vault, next, prev ); > } 1445a1517,1519 > CREATE( vault, VAULT_DATA, 1 ); > vault->vnum = atoi( argument ); > sort_vaults( vault ); 1499c1573 < if ( get_trust( ch ) < LEVEL_GOD ) --- > if ( get_trust( ch ) < LEVEL_LESSER ) 1646a1721 > send_to_char( " abbrev storage\n\r", ch ); 1701a1777,1794 > if ( !str_cmp( arg2, "storage" ) ) > { > VAULT_DATA *vault; > > if ( council->storeroom ) > { > for ( vault = first_vault; vault; vault = vault->next ) > if ( vault->vnum == council->storeroom ) > UNLINK( vault, first_vault, last_vault, next, prev ); > } > council->storeroom = atoi( argument ); > CREATE( vault, VAULT_DATA, 1 ); > vault->vnum = atoi( argument ); > sort_vaults( vault ); > send_to_char( "Done.\n\r", ch ); > save_council( council ); > return; > } 1723a1817,1824 > if ( !str_cmp( arg2, "abbrev" ) ) > { > STRFREE( council->abbrev ); > council->abbrev = STRALLOC( argument ); > send_to_char( "Done.\n\r", ch ); > save_council( council ); > return; > } 1781a1883 > ch_printf_color( ch, "&wAbbrev : &W%s\n\r", clan->abbrev ? clan->abbrev : "(not set)" ); 1836a1939 > ch_printf_color( ch, "&wAbbreviation : &W%s\n\r", council->abbrev ); 1841a1945 > ch_printf_color( ch, "&wStoreroom: &W%-5d\n\r", council->storeroom ); 1866a1971 > clan->abbrev = STRALLOC( "" ); 1902a2008,2009 > council->abbrev = STRALLOC( "" ); > 1961c2068,2069 < || !str_cmp( ch->name, clan->number1 ) || !str_cmp( ch->name, clan->number2 ) ) --- > || !str_cmp( ch->name, clan->number1 ) > || !str_cmp( ch->name, clan->number2 ) || get_trust( ch ) >= LEVEL_GREATER ) 1962a2071 > ch_printf( ch, "Abbrev : %s\n\r", clan->abbrev ? clan->abbrev : "" ); 2012c2121,2122 < || !str_cmp( ch->name, order->number1 ) || !str_cmp( ch->name, order->number2 ) ) --- > || !str_cmp( ch->name, order->number1 ) > || !str_cmp( ch->name, order->number2 ) || get_trust( ch ) >= LEVEL_GREATER ) 2013a2124 > ch_printf( ch, "Abbrev : %s\n\r", order->abbrev ? order->abbrev : "" ); 2023c2134 < set_char_color( AT_CYAN, ch ); --- > set_char_color( AT_GREEN, ch ); 2031c2142 < send_to_char_color( "\n\r&cTitle Head\n\r", ch ); --- > send_to_char_color( "\n\r>itle Head\n\r", ch ); 2039c2150 < send_to_char_color( "&cUse 'councils <name of council>' for more detailed information.\n\r", ch ); --- > send_to_char_color( "&GUse 'councils <name of council>' for more detailed information.\n\r", ch ); 2045c2156 < send_to_char_color( "&cNo such council exists...\n\r", ch ); --- > send_to_char_color( "&GNo such council exists...\n\r", ch ); 2048c2159 < ch_printf_color( ch, "&c\n\r%s\n\r", council->name ); --- > ch_printf_color( ch, "&G\n\r%s\n\r", council->name ); 2050c2161 < ch_printf_color( ch, "&cHead: &w%s\n\r&cMembers: &w%d\n\r", council->head, council->members ); --- > ch_printf_color( ch, "&GHead: &w%s\n\r&GMembers: &w%d\n\r", council->head, council->members ); 2052c2163 < ch_printf_color( ch, "&cCo-Heads: &w%s &cand &w%s\n\r&cMembers: &w%d\n\r", --- > ch_printf_color( ch, "&GCo-Heads: &w%s &Gand &w%s\n\r&GMembers: &w%d\n\r", 2054c2165,2166 < ch_printf_color( ch, "&cDescription:\n\r&w%s\n\r", council->description ); --- > ch_printf_color( ch, "&GAbbrev: &w%s\n\r", council->abbrev ? council->abbrev : "" ); > ch_printf_color( ch, "&GDescription:\n\r&w%s\n\r", council->description ); 2090a2203,2204 > guild = get_clan( argument ); > if ( !guild || guild->clan_type != CLAN_GUILD ) 2103c2217,2218 < || !str_cmp( ch->name, guild->number1 ) || !str_cmp( ch->name, guild->number2 ) ) --- > || !str_cmp( ch->name, guild->number1 ) > || !str_cmp( ch->name, guild->number2 ) || get_trust( ch ) >= LEVEL_GREATER ) 2104a2220 > ch_printf( ch, "Abbrev: %s\n\r", guild->abbrev ? guild->abbrev : "" ); 2109a2226,2261 > void do_defeats( CHAR_DATA * ch, char *argument ) > { > char filename[256]; > > if ( IS_NPC( ch ) || !ch->pcdata->clan ) > { > send_to_char( "Huh?\n\r", ch ); > return; > } > if ( ch->pcdata->clan->clan_type != CLAN_ORDER && ch->pcdata->clan->clan_type != CLAN_GUILD ) > { > sprintf( filename, "%s%s.defeats", CLAN_DIR, ch->pcdata->clan->name ); > set_pager_color( AT_PURPLE, ch ); > if ( !str_cmp( ch->name, ch->pcdata->clan->leader ) && !str_cmp( argument, "clean" ) ) > { > FILE *fp = fopen( filename, "w" ); > > if ( fp ) > fclose( fp ); > send_to_pager( "\n\rDefeats ledger has been cleared.\n\r", ch ); > return; > } > else > { > send_to_pager( "\n\rLVL Character LVL Character\n\r", ch ); > show_file( ch, filename ); > return; > } > } > else > { > send_to_char( "Huh?\n\r", ch ); > return; > } > } > 2157a2310 > sh_int temp; 2222c2375 < if ( IS_SET( victim->in_room->room_flags, ROOM_SAFE ) && get_timer( victim, TIMER_SHOVEDRAG ) <= 0 ) --- > if ( xIS_SET( victim->in_room->room_flags, ROOM_SAFE ) && get_timer( victim, TIMER_SHOVEDRAG ) <= 0 ) 2227c2380 < victim->position = POS_SHOVE; --- > /* victim->position = POS_SHOVE; -- August, 2000 */ 2237c2390 < victim->position = POS_STANDING; --- > /* victim->position = POS_STANDING; --August, 2000 */ 2241c2394 < if ( IS_SET( to_room->room_flags, ROOM_DEATH ) ) --- > if ( xIS_SET( to_room->room_flags, ROOM_DEATH ) ) 2244c2397 < victim->position = POS_STANDING; --- > /* victim->position = POS_STANDING; --August, 2000 */ 2251c2404,2406 < victim->position = POS_STANDING; --- > /* > victim->position = POS_STANDING; -- August, 2000 > */ 2313c2468 < victim->position = POS_STANDING; --- > /* victim->position = POS_STANDING; -- August, 2000 */ 2315a2471,2472 > temp = victim->position; > victim->position = POS_SHOVE; 2320c2477 < victim->position = POS_STANDING; --- > victim->position = temp; 2325c2482 < if ( IS_SET( ch->in_room->room_flags, ROOM_SAFE ) && get_timer( ch, TIMER_SHOVEDRAG ) <= 0 ) --- > if ( xIS_SET( ch->in_room->room_flags, ROOM_SAFE ) && get_timer( ch, TIMER_SHOVEDRAG ) <= 0 ) 2433c2590 < if ( IS_SET( victim->in_room->room_flags, ROOM_SAFE ) && get_timer( victim, TIMER_SHOVEDRAG ) <= 0 ) --- > if ( xIS_SET( victim->in_room->room_flags, ROOM_SAFE ) && get_timer( victim, TIMER_SHOVEDRAG ) <= 0 ) 2452c2609 < if ( IS_SET( to_room->room_flags, ROOM_DEATH ) ) --- > if ( xIS_SET( to_room->room_flags, ROOM_DEATH ) ) 2461c2618 < victim->position = POS_STANDING; --- > /* victim->position = POS_STANDING; --August, 2000 */ 2520c2677 < victim->position = POS_STANDING; --- > /* victim->position = POS_STANDING; -- August, 2000 */ 2541a2699,3094 > > > void show_members( CHAR_DATA * ch, char *argument ) > { > MEMBER_LIST *members_list; > MEMBER_DATA *member; > CLAN_DATA *clan; > int count = 0; > > > for ( members_list = first_member_list; members_list; members_list = members_list->next ) > { > if ( !str_cmp( members_list->name, argument ) ) > break; > } > > if ( !members_list ) > return; > > clan = get_clan( argument ); > > if ( !clan ) > return; > > pager_printf_color( ch, "\n\r&G%s membership roster\n\r", clan->name ); > pager_printf_color( ch, "&GLeader : &w%s\n\r", clan->leader ); > pager_printf_color( ch, "&GNumber One: &w%s\n\r", clan->number1 ); > pager_printf_color( ch, "&GNumber Two: &w%s\n\r", clan->number2 ); > pager_printf_color( ch, "&G::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\r" ); > pager_printf_color( ch, "&GLvl Name Class Kills Deaths Entered\n\r\n\r" ); > for ( member = members_list->first_member; member; member = member->next ) > { > if ( str_cmp( member->name, clan->leader ) && str_cmp( member->name, clan->number1 ) > && str_cmp( member->name, clan->number2 ) ) > pager_printf_color( ch, "&G%3d &w%-12s &G%-10s %6d %7d &g%10s\n\r", > member->level, > capitalize( member->name ), > class_table[member->class]->who_name, member->kills, member->deaths, member->since ); > count++; > } > pager_printf_color( ch, "\n\r%d members on the roll sheet.\n\r", count ); > } > > void remove_member( char *clanname, char *membername ) > { > MEMBER_LIST *members_list; > MEMBER_DATA *member; > > for ( members_list = first_member_list; members_list; members_list = members_list->next ) > { > if ( !str_cmp( members_list->name, clanname ) ) > break; > } > > if ( !members_list ) > return; > > for ( member = members_list->first_member; member; member = member->next ) > { > if ( !str_cmp( member->name, membername ) ) > { > UNLINK( member, members_list->first_member, members_list->last_member, next, prev ); > STRFREE( member->name ); > STRFREE( member->since ); > DISPOSE( member ); > break; > } > } > } > > void add_member( CHAR_DATA * ch, char *clanname ) > { > MEMBER_LIST *members_list; > MEMBER_DATA *nmember, *member; > CLAN_DATA *clan; > struct tm *t = localtime( ¤t_time ); > char buf[MAX_STRING_LENGTH]; > > if ( IS_IMMORTAL( ch ) && str_cmp( ch->name, ch->pcdata->clan->deity ) ) > return; > > for ( members_list = first_member_list; members_list; members_list = members_list->next ) > { > if ( !str_cmp( members_list->name, clanname ) ) > break; > } > > if ( ( clan = get_clan( clanname ) ) == NULL ) > return; > > if ( !members_list ) > return; > > for ( member = members_list->first_member; member; member = member->next ) > { > if ( !str_cmp( member->name, ch->name ) ) > return; > } > > CREATE( nmember, MEMBER_DATA, 1 ); > nmember->name = STRALLOC( ch->name ); > nmember->level = ch->level; > nmember->class = ch->class; > sprintf( buf, "%02d/%02d/%04d", t->tm_mon + 1, t->tm_mday, t->tm_year + 1900 ); > nmember->since = STRALLOC( buf ); > if ( clan->clan_type == CLAN_ORDER || clan->clan_type == CLAN_GUILD ) > { > nmember->kills = ch->pcdata->mkills; > nmember->deaths = ch->pcdata->mdeaths; > } > else > { > nmember->kills = ch->pcdata->pkills; > nmember->deaths = ch->pcdata->pdeaths; > } > LINK( nmember, members_list->first_member, members_list->last_member, next, prev ); > > } > > void do_roster( CHAR_DATA * ch, char *argument ) > { > > if ( IS_NPC( ch ) || !ch->pcdata->clan ) > { > send_to_char( "Huh?\n\r", ch ); > return; > } > > /* > if ( IS_SET( ch->pcdata->flags, PCFLAG_PAGERON ) && !IS_IMMORTAL( ch ) ) > { > send_to_char( "The 'roster' command may not be used in conjunction with the pager until further notification.\n\r", ch ); > return; > } > */ > > if ( IS_IMMORTAL( ch ) > || !str_cmp( ch->name, ch->pcdata->clan->leader ) > || !str_cmp( ch->name, ch->pcdata->clan->number1 ) || !str_cmp( ch->name, ch->pcdata->clan->number2 ) ) > { > show_members( ch, ch->pcdata->clan_name ); > return; > } > send_to_char( "Huh?\n\r", ch ); > return; > } > > > void do_memberlist( CHAR_DATA * ch, char *argument ) > { > > if ( !IS_IMMORTAL( ch ) ) > { > if ( IS_NPC( ch ) || !ch->pcdata->clan || str_cmp( ch->name, ch->pcdata->clan->leader ) ) > { > send_to_char( "Huh?\n\r", ch ); > return; > } > > show_members( ch, ch->pcdata->clan_name ); > return; > } > else > { > char arg1[MAX_STRING_LENGTH]; > > argument = one_argument( argument, arg1 ); > > if ( argument[0] == '\0' || arg1[0] == '\0' ) > { > send_to_char( "Arguments are: show, create or delete.\n\r", ch ); > return; > } > > if ( !str_cmp( arg1, "show" ) ) > { > if ( !str_cmp( argument, "all" ) ) > { > MEMBER_LIST *members_list; > > for ( members_list = first_member_list; members_list; members_list = members_list->next ) > show_members( ch, members_list->name ); > return; > } > > show_members( ch, argument ); > return; > } > > if ( !str_cmp( arg1, "create" ) ) > { > MEMBER_LIST *members_list; > > CREATE( members_list, MEMBER_LIST, 1 ); > members_list->name = STRALLOC( argument ); > LINK( members_list, first_member_list, last_member_list, next, prev ); > save_member_lists( ); > ch_printf( ch, "Member lists \"%s\" created.\n\r", argument ); > return; > } > > if ( !str_cmp( arg1, "delete" ) ) > { > MEMBER_LIST *members_list; > MEMBER_DATA *member; > > for ( members_list = first_member_list; members_list; members_list = members_list->next ) > if ( !str_cmp( argument, members_list->name ) ) > { > while ( members_list->first_member ) > { > member = members_list->first_member; > STRFREE( member->name ); > STRFREE( member->since ); > UNLINK( member, members_list->first_member, members_list->last_member, next, prev ); > DISPOSE( member ); > } > > STRFREE( members_list->name ); > UNLINK( members_list, first_member_list, last_member_list, next, prev ); > DISPOSE( members_list ); > ch_printf( ch, "Member list \"%s\" destroyed.\n\r", argument ); > save_member_lists( ); > return; > } > send_to_char( "No such list.\n\r", ch ); > return; > } > } > } > > void save_member_lists( ) > { > MEMBER_LIST *members_list; > MEMBER_DATA *member; > FILE *fp; > > if ( ( fp = fopen( MEMBERS_FILE, "w" ) ) == NULL ) > { > bug( "Cannot open members.dat for writing", 0 ); > perror( SOCIAL_FILE ); > return; > } > > for ( members_list = first_member_list; members_list; members_list = members_list->next ) > { > fprintf( fp, "#Members_list\n" ); > fprintf( fp, "Name %s~\n", members_list->name ); > for ( member = members_list->first_member; member; member = member->next ) > fprintf( fp, "Member %s %s %d %d %d %d\n", member->name, member->since, > member->kills, member->deaths, member->level, member->class ); > fprintf( fp, "End\n\n" ); > } > > fprintf( fp, "#END\n\n" ); > fclose( fp ); > } > > void load_member_lists( ) > { > FILE *fp; > > if ( ( fp = fopen( MEMBERS_FILE, "r" ) ) == NULL ) > { > bug( "Cannot open members.dat for reading", 0 ); > return; > } > > for ( ;; ) > { > char letter; > char *word; > > letter = fread_letter( fp ); > > if ( letter != '#' ) > { > bug( "load_member_lists: # not found", 0 ); > return; > } > > word = fread_word( fp ); > > if ( !str_cmp( word, "Members_list" ) ) > fread_member_list( fp ); > else if ( !str_cmp( word, "END" ) ) > break; > else > { > bug( "load_member_lists: bad section", 0 ); > break; > } > } > > fclose( fp ); > save_member_lists( ); > > } > > > void fread_member_list( FILE * fp ) > { > MEMBER_LIST *members_list; > MEMBER_DATA *member; > > CREATE( members_list, MEMBER_LIST, 1 ); > > for ( ;; ) > { > char *word; > > word = fread_word( fp ); > > if ( !str_cmp( word, "Name" ) ) > { > members_list->name = fread_string( fp ); > continue; > } > #define PURGEROSTER > if ( !str_cmp( word, "Member" ) ) > { > #ifdef PURGEROSTER > FILE *tfp; > char pfile[MAX_INPUT_LENGTH]; > #endif > > CREATE( member, MEMBER_DATA, 1 ); > member->name = STRALLOC( fread_word( fp ) ); > #ifdef PURGEROSTER > sprintf( pfile, "%s%c/%s", PLAYER_DIR, tolower( member->name[0] ), capitalize( member->name ) ); > if ( ( tfp = fopen( pfile, "r" ) ) == NULL ) > { > bug( "Deleting %s from roster - no pfile", member->name ); > STRFREE( member->name ); > DISPOSE( member ); > continue; > } > fclose( tfp ); > #endif > member->since = STRALLOC( fread_word( fp ) ); > member->kills = fread_number( fp ); > member->deaths = fread_number( fp ); > member->level = fread_number( fp ); > member->class = fread_number( fp ); > LINK( member, members_list->first_member, members_list->last_member, next, prev ); > continue; > } > > if ( !str_cmp( word, "End" ) ) > { > LINK( members_list, first_member_list, last_member_list, next, prev ); > return; > } > } > > } > > void update_member( CHAR_DATA * ch ) > { > MEMBER_LIST *members_list; > MEMBER_DATA *member; > struct tm *t = localtime( ¤t_time ); > char buf[MAX_STRING_LENGTH]; > > if ( IS_NPC( ch ) || !ch->pcdata->clan ) > return; > > for ( members_list = first_member_list; members_list; members_list = members_list->next ) > { > if ( !str_cmp( members_list->name, ch->pcdata->clan_name ) ) > { > for ( member = members_list->first_member; member; member = member->next ) > { > if ( !str_cmp( member->name, ch->name ) ) > { > if ( ch->pcdata->clan->clan_type == CLAN_PLAIN ) > { > member->kills = ch->pcdata->pkills; > member->deaths = ch->pcdata->pdeaths; > } > else > { > member->kills = ch->pcdata->mkills; > member->deaths = ch->pcdata->mdeaths; > } > STRFREE( member->since ); > sprintf( buf, "%02d/%02d/%04d", t->tm_mon + 1, t->tm_mday, t->tm_year + 1900 ); > member->since = STRALLOC( buf ); > member->level = ch->level; > if ( quitting_char == ch ) > save_member_lists( ); > } > } > } > } > }