void update_wizlist(CHAR_DATA *ch, int level) { WIZ_DATA *prev; WIZ_DATA *curr; if (IS_NPC(ch)) { return; } prev = NULL; for ( curr = wiz_list; curr != NULL; prev = curr, curr = curr->next ) { if ( !str_cmp( ch->name, curr->name ) ) { if ( prev == NULL ) wiz_list = wiz_list->next; else prev->next = curr->next; free_wiz(curr); save_wizlist(); } } if (level <= HERO) { return; } curr = new_wiz(); curr->name = str_dup(ch->name); curr->level = level; curr->next = wiz_list; wiz_list = curr; save_wizlist(); return; }
void load_wizlist(void) { FILE *fp; WIZ_DATA *wiz_last; if ( ( fp = fopen( WIZ_FILE, "r" ) ) == NULL ) { return; } wiz_last = NULL; for ( ; ; ) { WIZ_DATA *pwiz; if ( feof(fp) ) { fclose( fp ); return; } pwiz = new_wiz(); pwiz->name = str_dup(fread_word(fp)); pwiz->level = fread_number(fp); fread_to_eol(fp); if (wiz_list == NULL) wiz_list = pwiz; else wiz_last->next = pwiz; wiz_last = pwiz; } }
void change_wizlist(CHAR_DATA *ch, bool add, int level, char *argument) { char arg[MAX_INPUT_LENGTH]; WIZ_DATA *prev; WIZ_DATA *curr; one_argument( argument, arg ); if (arg[0] == '\0') { send_to_char( "Syntax:\n\r", ch ); if ( !add ) send_to_char( " wizlist delete <name>\n\r", ch ); else send_to_char( " wizlist add <level> <name>\n\r", ch ); return; } if ( add ) { if ( ( level <= HERO ) || ( level > MAX_LEVEL ) ) { send_to_char( "Syntax:\n\r", ch ); send_to_char( " wizlist add <level> <name>\n\r", ch ); return; } } if ( !add ) { prev = NULL; for ( curr = wiz_list; curr != NULL; prev = curr, curr = curr->next ) { if ( !str_cmp( capitalize( arg ), curr->name ) ) { if ( prev == NULL ) wiz_list = wiz_list->next; else prev->next = curr->next; free_wiz(curr); save_wizlist(); } } } else { curr = new_wiz(); curr->name = str_dup( capitalize( arg ) ); curr->level = level; curr->next = wiz_list; wiz_list = curr; save_wizlist(); } return; }