/* 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();
}