/* Online setting of skill/spell levels, * (c) 1996 Erwin S. Andreasen <erwin@andreasen.org> * */ #include "include.h" /* This includes all the usual include files */ #include "magic.h" /* Class table levels loading/saving */ /* Save this class */ void save_class (int num) { FILE *fp; char buf[MAX_STRING_LENGTH]; int lev, i; sprintf (buf, "%s%s", CLASS_DIR, class_table[num].name); if (!(fp = fopen (buf, "w"))) { bugf ("Could not open file %s in order to save class %s.", buf, class_table[num].name); return; } for (lev = 0; lev < LEVEL_IMMORTAL; lev++) for (i = 0; i < MAX_SKILL; i++) { if (!skill_table[i].name || !skill_table[i].name[0]) continue; if (skill_table[i].skill_level[num] == lev) fprintf (fp, "%d %d %s\n", lev, skill_table[i].rating[num], skill_table[i].name); } fprintf (fp, "-1"); /* EOF -1 */ fclose (fp); } void save_classes() { int i; for (i = 0; i < MAX_CLASS; i++) save_class (i); } /* Load a class */ void load_class (int num) { char buf[MAX_STRING_LENGTH]; int level,rating,n; FILE *fp; sprintf (buf, "%s%s", CLASS_DIR, class_table[num].name); if (!(fp = fopen (buf, "r"))) { bugf ("Could not open file %s in order to load class %s.", buf, class_table[num].name); return; } fscanf (fp, "%d", &level); fscanf (fp, "%d", &rating); while (level != -1) { fscanf (fp, " %[^\n]\n", buf); /* read name of skill into buf */ n = skill_lookup (buf); /* find index */ if (n == -1) { char buf2[200]; sprintf (buf2, "Class %s: unknown spell %s", class_table[num].name, buf); bug (buf2, 0); } else { skill_table[n].rating[num] = rating; skill_table[n].skill_level[num] = level; } fscanf (fp, "%d", &level); fscanf (fp, "%d", &rating); } fclose (fp); } void load_classes () { int i,j; for (i = 0; i < MAX_CLASS; i++) { for (j = 0; j < MAX_SKILL; j++) { skill_table[j].skill_level[i] = LEVEL_IMMORTAL; skill_table[j].rating[i] = 0; } load_class (i); } } void do_skillset (CHAR_DATA *ch ,char * argument) { char class_name[MIL], skill_name[MIL], arg3[MIL]; int sn, level, class_no; sh_int rating; argument = one_argument (argument, class_name); argument = one_argument (argument, skill_name); argument = one_argument (argument, arg3); if (!argument[0]) { send_to_char ("Syntax is: skillset <class> <skill> <level> <rating>.\n\r",ch); return; } level = atoi (arg3); rating = atoi (argument); if (!is_number(argument) || level < 0 || level > LEVEL_IMMORTAL) { printf_to_char (ch, "Level range is from 0 to %d.\n\r", LEVEL_IMMORTAL); return; } if ( (sn = skill_lookup (skill_name)) == -1) { printf_to_char (ch, "There is no such spell/skill as '%s'.\n\r", skill_name); return; } if( (class_no = class_lookup(class_name)) == -1 ) { printf_to_char (ch, "%s does not exist.\n\r", class_name); return; } skill_table[sn].rating[class_no] = rating; skill_table[sn].skill_level[class_no] = level; printf_to_char (ch, "OK, %ss will now gain %s at level %d%s with a difficulty of %d.\n\r", class_table[class_no].name, skill_table[sn].name, level, level == LEVEL_IMMORTAL ? " (i.e. never)" : "", skill_table[sn].rating[class_no]); save_classes(); } void do_showskills (CHAR_DATA *ch, char *argument ) { FILE *fp; char arg1[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; char sname[MAX_STRING_LENGTH]; int rating; int lev; int class; int col; int sn; argument = one_argument( argument, arg1); if( !arg1[0] ) { send_to_char( "Syntax: showskills <class>.\n\r", ch ); return; } if( (class = class_lookup(arg1)) == -1 ) { send_to_char( "Class does not exist.\n\r", ch ); return; } sprintf( buf, "%s%s", CLASS_DIR, class_table[class].name ); if( !(fp = fopen(buf, "r")) ) { bugf( "Could not open %s for read.\n\r", buf ); return; } fscanf( fp, "%d", &lev ); fscanf( fp, "%d", &rating ); col = 0; while( lev != -1) { fscanf( fp, " %[^\n]\n", sname ); if( (sn = skill_lookup(sname)) == -1 ) { char buf2[200]; sprintf( buf2, "Class %s: unknown skill: %s", class_table[class].name, sname ); bug( buf2, 0 ); } if( skill_table[sn].spell_fun == spell_null ) { sprintf( buf, "%3d %1d %-18s", lev, rating, sname ); send_to_char( buf, ch ); if( ++col % 3 == 0 ) send_to_char( "\n\r", ch ); } fscanf( fp, "%d", &lev ); fscanf( fp, "%d", &rating ); } fclose( fp ); if( col % 3 != 0 ) send_to_char( "\n\r", ch ); } void do_showspells (CHAR_DATA *ch, char *argument ) { FILE *fp; char arg1[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; char sname[MAX_STRING_LENGTH]; int rating; int lev; int class; int col; int sn; argument = one_argument( argument, arg1); if( !arg1[0] ) { send_to_char( "Syntax: showspells <class>.\n\r", ch ); return; } if( (class = class_lookup(arg1)) == -1 ) { send_to_char( "Class does not exist.\n\r", ch ); return; } sprintf( buf, "%s%s", CLASS_DIR, class_table[class].name ); if( !(fp = fopen(buf, "r")) ) { bugf( "Could not open %s for read.\n\r", buf ); return; } fscanf( fp, "%d", &lev ); fscanf( fp, "%d", &rating ); col = 0; while( lev != -1) { fscanf( fp, " %[^\n]\n", sname ); if( (sn = skill_lookup(sname)) == -1 ) { char buf2[200]; sprintf( buf2, "Class %s: unknown skill: %s", class_table[class].name, sname ); bug( buf2, 0 ); } if( skill_table[sn].spell_fun != spell_null ) { sprintf( buf, "%3d %1d %-18s", lev, rating, sname ); send_to_char( buf, ch ); if( ++col % 3 == 0 ) send_to_char( "\n\r", ch ); } fscanf( fp, "%d", &lev ); fscanf( fp, "%d", &rating ); } fclose( fp ); if( col % 3 != 0 ) send_to_char( "\n\r", ch ); }