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 clear_wizlist(void) { WIZ_DATA *wiz, *wiz_next; log_string("Cleaning: wiz_list"); for(wiz = wiz_list; wiz; wiz = wiz_next) { wiz_next = wiz->next; UNLINK_SINGLE(wiz, next, WIZ_DATA, wiz_list); free_wiz(wiz); } wiz_list = NULL; }
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; }