/* Slist written by Sirius [o0Sirius0o@hotmail.com]
* Add this to act_info.c, this was written for Rom2.4
* Some of the for loops levels for (level = 1 ;level <= 101;level++)
* may have to be changed depending on your Max Mortal Level.
*/
void do_slist(CHAR_DATA *ch,char *argument) {
char arg1[MIL],group[MSL];
int skill,class = 0,cl = 0;
int sn = 0,col = 0,level = 0, sp,gr;
int skCount = 0,spCount = 0, class_name = 0, gn = 0;
bool found = FALSE;
argument = one_argument(argument,arg1);

    if (arg1[0] == '\0') {
        printf_to_char(ch,"Enter the name of the spell or class.\n\r");
        return;
    }
        if (((skill = skill_lookup(arg1)) == -1) && (cl = class_lookup(arg1)) == -1) {
        printf_to_char(ch,"That is not a valid class or skill.\n\r");
        return;
    }

    if (((skill = skill_lookup(arg1)) == -1) && (cl = class_lookup(arg1)) != -1) {
      for (class_name = 0; class_name < MAX_CLASS; class_name++) {
          if (!str_cmp(arg1, class_table[class_name].name))
            break;
      }
      if (class_name == MAX_CLASS) {
        send_to_char( "Please spell out the full class name.\n\r",ch);
        return;
      } else {
          printf_to_char(ch,"{CAviable skill/spells for the class{c: {W%s{x\n\r", class_table[cl].name);
          printf_to_char(ch,"{cSpells{W:{x\n\r");
          for (level = 1 ;level <= 101;level++) {
              for (sn = 0; sn < MAX_SKILL; sn++) {
                  if (skill_table[sn].skill_level[cl] > 100)
                      continue;
                  if (skill_table[sn].skill_level[cl] != level)
                      continue;
                  if (skill_table[sn].spell_fun == spell_null)
                      continue;
                  printf_to_char(ch, "{B[{C%3d{B] {W%-18s{x",
                  level,
                  skill_table[sn].name);
                  spCount++;
                  if (++col % 3 == 0)
                      send_to_char("\n\r",ch);
              }
          }
          send_to_char("\n\r",ch); col = 0;
          printf_to_char(ch, "{CTotal spells found{g: {W%d{x\n\r",spCount);
          printf_to_char(ch, "{cSkills{W:{x\n\r");
          for (level = 1 ;level <= 101;level++) {
              for (sn = 0; sn < MAX_SKILL; sn++) {
                  if (skill_table[sn].skill_level[cl] > 100)
                      continue;
                  if (skill_table[sn].skill_level[cl] != level)
                      continue;
                  if (skill_table[sn].spell_fun != spell_null)
                      continue;
                  printf_to_char(ch, "{B[{C%3d{B] {W%-18s{x",
                  level,
                  skill_table[sn].name);
                  skCount++;
                  if (++col % 3 == 0)
                      send_to_char("\n\r",ch);
              }
          }
          send_to_char("\n\r",ch);
          printf_to_char(ch, "{cBase Group{W: {W%s{x\n\r",class_table[cl].base_group);
          gn = 0; col = 0; level = 1;
          gn = group_lookup(class_table[class].base_group);
          printf_to_char(ch, "{CSkills included with {W%s{x.{x\n\r",class_table[cl].base_group);
              for (sn = 0; sn < MAX_IN_GROUP; sn++) {
                  if (group_table[gn].spells[sn] == NULL)
                      continue;
                  printf_to_char(ch,"{W%-18s{x",group_table[gn].spells[sn]);
                  if (++col % 3 == 0)
                      send_to_char("\n\r",ch);
              }
          send_to_char("\n\r",ch);
          printf_to_char(ch, "{cDefault Group{W: {W%s{x\n\r",class_table[cl].default_group);
          gn = 0; col = 0; level = 1;
          gn = group_lookup(class_table[cl].default_group);
          printf_to_char(ch, "{CSkills included with {W%s{x.{x\n\r",class_table[cl].default_group);
              for (sn = 0; sn < MAX_IN_GROUP; sn++) {
                  if (group_table[gn].spells[sn] == NULL)
                      continue;
                  printf_to_char(ch,"{W%-18s{x",group_table[gn].spells[sn]);
                  if (++col % 3 == 0)
                      send_to_char("\n\r",ch);
              }
          send_to_char("\n\r",ch);
          printf_to_char(ch, "{CTotal skills found{g: {W%d{x\n\r",skCount);
          printf_to_char(ch, "{WTotal skills/spells found: {B%d{x\n\r",(spCount + skCount));
          return;
      }
    }
    if (((skill = skill_lookup(arg1)) != -1) && (cl = class_lookup(arg1)) == -1) {
        for (gr = 1; gr < MAX_GROUP; gr++) {
          if (group_table[gr].name == NULL) {
            continue;
          }
          for (sp = 0; sp < MAX_IN_GROUP; sp++) {
            if (group_table[gr].spells[sp] == NULL) {
              continue;
            }
            if(group_table[gr].spells[sp] == skill_table[skill].name) {
              found = TRUE;
              sprintf(group,"%s",capitalize(group_table[gr].name));
              break;
            }
          }
        }
        printf_to_char(ch,"{CSettings for skill/spell{c: {W%s{x\n\r",skill_table[skill].name);
        if (found)
          printf_to_char(ch,"{CIn the group: {W%s{C.{x\n\r",group);
        else
          printf_to_char(ch,"{CIn the group: {WUnknown{C!{x\n\r");
        send_to_char("{cClass       Level Gain Wait-Time Min-Mana Rating{x\n\r",ch);
        send_to_char("{W----------- ----- ---- --------- -------- ------{x\n\r",ch);
        for (class = 0;class < MAX_CLASS;class++) {
        if (skill_table[skill].skill_level[class] > 100)
            continue;
        printf_to_char(ch,"{G%-11s {g%5d %4d %9d %8d %6d\n\r",
        class_table[class].name,
        skill_table[skill].skill_level[class],
        skill_table[skill].rating[class],
        skill_table[skill].beats,
        skill_table[skill].min_mana,
        skill_table[skill].rating[class]);
        }
        return;
    }
}