/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /*************************************************************************** * ROM 2.4 is copyright 1993-1995 Russ Taylor * * ROM has been brought to you by the ROM consortium * * Russ Taylor (rtaylor@pacinfo.com) * * Gabrielle Taylor (gtaylor@pacinfo.com) * * Brian Moore (rom@rom.efn.org) * * By using this code, you have agreed to follow the terms of the * * ROM license, in the file Rom24/doc/rom.license * ***************************************************************************/ /*************************************************************************** * ROT 1.4 is copyright 1996-1997 by Russ Walsh * * By using this code, you have agreed to follow the terms of the * * ROT license, in the file doc/rot.license * ***************************************************************************/ #if defined(macintosh) #include <types.h> #include <time.h> #else #include <sys/types.h> #include <sys/time.h> #endif #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include "merc.h" #include "recycle.h" WIZ_DATA *wiz_list; char *const wiz_titles[] = { "Implementors", "Creators ", "Supremacies ", "Deities ", "Gods ", "Immortals ", "DemiGods ", "Knights ", "Squires " }; /* * Local functions. */ void change_wizlist args ( ( CHAR_DATA * ch, bool add, int level, char *argument ) ); void save_wizlist ( void ) { WIZ_DATA *pwiz; FILE *fp; bool found = FALSE; if ( ( fp = file_open ( WIZ_FILE, "w" ) ) == NULL ) { perror ( WIZ_FILE ); } for ( pwiz = wiz_list; pwiz != NULL; pwiz = pwiz->next ) { found = TRUE; fprintf ( fp, "%s %d\n", pwiz->name, pwiz->level ); } file_close ( fp ); if ( !found ) unlink ( WIZ_FILE ); } void load_wizlist ( void ) { FILE *fp; WIZ_DATA *wiz_last; strcat ( boot_buf, "sson to all ." ); if ( ( fp = file_open ( WIZ_FILE, "r" ) ) == NULL ) { strcat ( boot_buf, "....\n\r\n\r " ); return; } wiz_last = NULL; strcat ( boot_buf, "....\n\r\n\r " ); for ( ;; ) { WIZ_DATA *pwiz; if ( feof ( fp ) ) { file_close ( 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; } } CH_CMD ( do_wizlist ) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; char title[MAX_STRING_LENGTH]; BUFFER *buffer; int level; WIZ_DATA *pwiz; int lngth; int amt; bool found; argument = one_argument ( argument, arg1 ); argument = one_argument ( argument, arg2 ); argument = one_argument ( argument, arg3 ); /* * Uncomment the following to use the old method of having * a fixed wizlist in the rot.are file. */ /* do_help(ch,"wizlist"); return; */ if ( ( arg1[0] != '\0' ) && ( ch->level == MAX_LEVEL ) ) { if ( !str_prefix ( arg1, "add" ) ) { if ( !is_number ( arg2 ) || ( arg3[0] == '\0' ) ) { send_to_char ( "Syntax: wizlist add <level> <name>\n\r", ch ); return; } level = atoi ( arg2 ); change_wizlist ( ch, TRUE, level, arg3 ); return; } if ( !str_prefix ( arg1, "delete" ) ) { if ( arg2[0] == '\0' ) { send_to_char ( "Syntax: wizlist delete <name>\n\r", ch ); return; } change_wizlist ( ch, FALSE, 0, arg2 ); return; } send_to_char ( "Syntax:\n\r", ch ); send_to_char ( " wizlist delete <name>\n\r", ch ); send_to_char ( " wizlist add <level> <name>\n\r", ch ); return; } if ( wiz_list == NULL ) { send_to_char ( "No immortals listed at this time.\n\r", ch ); return; } buffer = new_buf ( ); sprintf ( title, "The IMMORTALS of Death Rising{x" ); sprintf ( buf, "{W ___________________________________________________________________________{x\n\r" ); add_buf ( buffer, buf ); sprintf ( buf, "{W /\\_\\%70s\\_\\\n\r", " " ); add_buf ( buffer, buf ); lngth = ( 70 - strlen ( title ) ) / 2; for ( ; lngth >= 0; lngth-- ) { strcat ( title, " " ); } sprintf ( buf, "{W|/\\\\_\\{D%72s{W\\_\\\n\r", title ); add_buf ( buffer, buf ); sprintf ( buf, "{W\\_/_|_|{x%69s{W|_|\n\r", " " ); add_buf ( buffer, buf ); for ( level = IMPLEMENTOR; level > ANCIENT; level-- ) { found = FALSE; amt = 0; for ( pwiz = wiz_list; pwiz != NULL; pwiz = pwiz->next ) { if ( pwiz->level == level ) { amt++; found = TRUE; } } if ( !found ) { if ( level == ANCIENT + 1 ) { sprintf ( buf, "{x {W___|_|{x%69s{W|_|\n\r", " " ); add_buf ( buffer, buf ); } continue; } sprintf ( buf, "{x {W|_|{B%37s {b[{W%d{b]{x%26s{W|_|{x\n\r", wiz_titles[IMPLEMENTOR - level], level, " " ); add_buf ( buffer, buf ); sprintf ( buf, "{x {W|_|{c%25s******************{x%26s{W|_|{x\n\r", " ", " " ); add_buf ( buffer, buf ); lngth = 0; for ( pwiz = wiz_list; pwiz != NULL; pwiz = pwiz->next ) { if ( pwiz->level == level ) { if ( lngth == 0 ) { if ( amt > 2 ) { sprintf ( buf, "{x {W|_|{x{%s%12s%-17s ", level >= DEMI ? "R" : "r", " ", pwiz->name ); add_buf ( buffer, buf ); lngth = 1; } else if ( amt > 1 ) { sprintf ( buf, "{x {W|_|{x{%s%21s%-17s ", level >= DEMI ? "R" : "r", " ", pwiz->name ); add_buf ( buffer, buf ); lngth = 1; } else { sprintf ( buf, "{x {W|_|{x{%s%30s%-39s{W|_|{x\n\r", level >= DEMI ? "R" : "r", " ", pwiz->name ); add_buf ( buffer, buf ); lngth = 0; } } else if ( lngth == 1 ) { if ( amt > 2 ) { sprintf ( buf, "%-17s ", pwiz->name ); add_buf ( buffer, buf ); lngth = 2; } else { sprintf ( buf, "%-30s{W|_|{x\n\r", pwiz->name ); add_buf ( buffer, buf ); lngth = 0; } } else { sprintf ( buf, "%-21s{W|_|{x\n\r", pwiz->name ); add_buf ( buffer, buf ); lngth = 0; amt -= 3; } } } if ( level == ANCIENT + 1 ) { sprintf ( buf, "{x {W___|_|{x%69s{W|_|{x\n\r", " " ); } else { sprintf ( buf, "{x {W |_|{x%69s{W|_|{x\n\r", " " ); } add_buf ( buffer, buf ); } sprintf ( buf, "{x/ \\ {W|_|{x%69s{W|_|{x\n\r", " " ); add_buf ( buffer, buf ); sprintf ( buf, "{W|\\//_/{x%70s{W/_/\n\r", " " ); add_buf ( buffer, buf ); sprintf ( buf, "{x\\{W/_/_______________________________________________________________________/_/{x\n\r" ); add_buf ( buffer, buf ); page_to_char ( buf_string ( buffer ), ch ); free_buf ( buffer ); return; } 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 <= ANCIENT ) { return; } curr = new_wiz ( ); curr->name = str_dup ( ch->name ); curr->level = level; curr->next = wiz_list; wiz_list = curr; save_wizlist ( ); return; } 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 <= ANCIENT ) || ( 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; }