/* Online setting of skill/spell levels, * (c) 1996 Erwin S. Andreasen <erwin@pip.dknet.dk> * */ #include "include.h" /* This includes all the usual include files */ /* 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"))) { bug ("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 %s\n", lev, 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,n; FILE *fp; sprintf (buf, "%s%s", CLASS_DIR, class_table[num].name); if (!(fp = fopen (buf, "r"))) { bug ("Could not open file %s in order to load class %s.", buf, class_table[num].name); return; } fscanf (fp, "%d", &level); 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].skill_level[num] = level; fscanf (fp, "%d", &level); } 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; load_class (i); } } void do_skill (CHAR_DATA *ch ,char * argument) { char class_type[MAX_CLASS], skill_type[MAX_SKILL]; int sn, level, class_no; argument = one_argument (argument, class_type); argument = one_argument (argument, skill_type); if (!argument[0]) { send_to_char ("Syntax is: SKILL <class> <skill> <level>.\n\r",ch); return; } level = 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_type)) == -1) { printf_to_char (ch, "There is no such spell/skill as '%s'.\n\r", skill_type); return; } for (class_no = 0; class_no < MAX_CLASS; class_no++) if (!str_cmp(class_type, class_table[class_no].who_name)) break; if (class_no >= MAX_CLASS) { printf_to_char (ch, "No class named '%s' exists. Use the 3-letter WHO names (Psi, Mag etc.)\n\r", class_type); return; } skill_table[sn].skill_level[class_no] = level; printf_to_char (ch, "OK, %ss will now gain %s at level %d%s.\n\r", class_table[class_no].name, skill_table[sn].name, level, level == LEVEL_IMMORTAL ? " (i.e. never)" : ""); save_classes(); }