/* 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.skl", CLASS_DIR, class_table[num].name); if (!(fp = fopen (buf, "w"))) { bug("Could not open file in order to save class.", 0); perror(buf); 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,n, rating; FILE *fp; sprintf (buf, "%s%s.skl", CLASS_DIR, class_table[num].name); if (!(fp = fopen (buf, "r"))) { bug("Could not open file %s in order to load class %s.", 0); perror(buf); return; } fscanf (fp, "%d", &level); while (level != -1) { fscanf (fp, "%d", &rating); 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; skill_table[n].rating[num]=rating; } 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_skilledit (CHAR_DATA *ch ,char * argument) { char class_name[MAX_STRING_LENGTH], skill_name[MAX_STRING_LENGTH], lvl[5]; int sn, level, class_no, rating; char buf[MAX_STRING_LENGTH]; argument = one_argument (argument, class_name); argument = one_argument (argument, skill_name); argument = one_argument (argument, lvl); if (!argument[0]) { send_to_char ("Syntax is: SKILLEDIT <class> <skill> <level> <rating>.\n\r",ch); return; } level=atoi (lvl); rating = atoi (argument); if (!is_number(argument) || level < 0 || level > LEVEL_IMMORTAL) { sprintf(buf, "Level range is from 0 to %d.\n\r", LEVEL_IMMORTAL); send_to_char(buf, ch); return; } if ( (sn = skill_lookup (skill_name)) == -1) { sprintf(buf, "There is no such spell/skill as '%s'.\n\r", skill_name); send_to_char(buf, ch); return; } for (class_no = 0; class_no < MAX_CLASS; class_no++) if (!str_cmp(class_name, class_table[class_no].who_name)) break; if (class_no == MAX_CLASS) { sprintf(buf, "No class named '%s' exists. Use the 3-letter WHO names (Mag, Cle etc.)\n\r", class_name); send_to_char(buf, ch); return; } skill_table[sn].skill_level[class_no] = level; skill_table[sn].rating[class_no]=rating; sprintf(buf, "OK, %ss will now gain %s at level %d%s, and at rating %d.\n\r", class_table[class_no].name, skill_table[sn].name, level, level == LEVEL_IMMORTAL ? " (i.e. never)" : "",rating); send_to_char(buf, ch); save_classes(); }