//      /adm/daemon/skills_d.c
//      from the Nightmare mudlib
//      contains code that would be very memory wasteful if in the user object
//      created by Descartes of Borg 14 february 1993
//      modified by Seeker,  March 2001
#include <security.h>
#include <save.h>
mapping m_skills;
void save_skills();
void create()
{
 m_skills = ([]);
 seteuid( UID_SECURE_DAEMONSAVE );
 if(file_exists(SAVE_SKILLS+".o")) restore_object( SAVE_SKILLS );
 seteuid( getuid() );
}
void save_skills()
{
 seteuid( UID_SECURE_DAEMONSAVE );
 save_object( SAVE_SKILLS );
 seteuid( getuid());
}
void add_skill(string *classes, string *subclasses, string name)
{
 m_skills[name] = ([ "c_elig" : classes, "sc_elig" : subclasses ]);
 save_skills();
}
string *query_skills() { return keys(m_skills); }
mapping query_skill(string skill) { return m_skills[skill]; }
mapping init_skills(string cl) {
    mapping skills;
    if(!skills) skills = ([]);
    if(!cl) {
        skills["melee"] =  ([ "level":0, "points":0, "max":1 ]);
        skills["attack"] = ([ "level":0, "points":0, "max":1 ]);
        skills["defense"] = ([]);
        skills["double wielding"] = ([]);
        skills["charging"] = ([]);
        skills["riding"] = ([]);
        skills["rage"] = ([]);
        skills["discipline"] = ([]);
        skills["valor"] = ([]);
        skills["ferocity"] = ([]);
        skills["knife"] = ([]);
        skills["blunt"] = ([]);
        skills["projectile"] = ([]);
        skills["blade"] = ([]);
        skills["axe"] = ([]);
        skills["flail"] = ([]);
        skills["murder"] = ([]);
        skills["stealing"] = ([]);
        skills["bargaining"] = ([]);
        skills["locks"] = ([]);
        skills["entertainment"] = ([]);
        skills["euphony"] = ([]);
        skills["agility"] = ([]);
        skills["clairvoyance"] = ([]);
        skills["magic defense"] = ([]);
        skills["magic attack"] = ([]);
        skills["conjuring"] = ([]);
        skills["nature"] = ([]);
        skills["psionics"] = ([]);
        skills["summoning"] = ([]);
        skills["necromancy"] = ([]);
        skills["wizardry"] = ([]);
        skills["pyromancy"] = ([]);
        skills["illusion"] = ([]);
        skills["belief"] = ([]);
        skills["healing"] = ([]);
        skills["faith"] = ([]);
        skills["breath"] = ([]);
        skills["claw"] = ([]);
        skills["tail"] = ([]);
        skills["flying"] = ([]);
        skills["perception"] = ([]);
        skills["ranged"] = ([]);
    }
    else {
        switch(cl) {
            case "fighter":                
                skills["melee"] = ([ "level": 5, "points": 0, "max": 10 ]);
                skills["attack"] = ([ "level": 6, "points": 0, "max": 12]);
                skills["defense"] = ([ "level": 5, "points":0, "max": 10 ]);
                skills["double wielding"] = (["level": 5, "points":0, "max":10]);
                skills["knife"] = ([ "level": 5, "points":0, "max":10 ]);
                skills["blunt"] = (["level": 5, "points":0, "max": 10 ]);
                skills["projectile"] = (["level":5, "points":0, "max": 10  ]);
                skills["flail"] = ([ "level": 5, "points": 0, "max": 10 ]);
                skills["blade"] = (["level":5, "points":0, "max":10 ]);
                skills["axe"] = (["level":5, "points":0, "max":10 ]);
                skills["ranged"] = (["level":4, "points":0, "max":8 ]);
                skills["murder"] = (["level":0, "points":0, "max": 2 ]);
                skills["perception"] = (["level":4, "points":0, "max": 8 ]);
                skills["bargaining"] = (["level":3, "points":0, "max":7 ]);
                skills["stealth"] = ([ "level":0, "points":0, "max":6 ]);
            if (previous_object()->query_subclass()=="paladin") {
                skills["magic defense"] = (["level":4, "points":0, "max":8 ]);
                skills["magic attack"] = (["level":4, "points":0, "max":8 ]);
                skills["healing"] = (["level":3, "points":0, "max":6 ]);
                skills["faith"] = (["level":4, "points":0, "max":8 ]);
                skills["valor"] = ([ "level":5, "points":0, "max":10 ]);
               }
               if (previous_object()->query_subclass()=="antipaladin") {
                skills["magic defense"] = (["level":4, "points":0, "max":8 ]);
                skills["magic attack"] = (["level":4, "points":0, "max":8 ]);
                skills["healing"] = (["level":2, "points":0, "max":4 ]);
                skills["faith"] = (["level":4, "points":0, "max":8 ]);   
                skills["ferocity"] = ([ "level": 5, "points": 0, "max": 10 ]);
               }
               if (previous_object()->query_subclass()=="berserker") {
                skills["rage"] = ([ "level":6, "points":0, "max":12 ]);
                skills["melee"] = ([ "level": 6, "points": 0, "max": 12 ]);   
                skills["ferocity"] = ([ "level": 5, "points": 0, "max": 10 ]);
               }   
               if (previous_object()->query_subclass()=="ranger") {   
                skills["nature"] = ([ "level": 5, "points": 0, "max": 11 ]);
                skills["discipline"] = ([ "level": 5, "points": 0, "max": 10 ]);
                skills["ranged"] = (["level":6, "points":0, "max":12 ]);
               }
               if (previous_object()->query_subclass()=="warrior") {   
                skills["discipline"] = ([ "level": 5, "points": 0, "max": 10 ]);
                skills["double wielding"] = (["level": 6, "points":0, "max":12]);
                skills["knife"] = ([ "level": 6, "points":0, "max":12 ]);
                skills["blunt"] = (["level": 6, "points":0, "max": 12 ]);
                skills["projectile"] = (["level":6, "points":0, "max": 12  ]);
                skills["flail"] = ([ "level": 6, "points": 0, "max": 12 ]);
                skills["blade"] = (["level":6, "points":0, "max":12 ]);
                skills["axe"] = (["level":6, "points":0, "max":12 ]);
                skills["ranged"] = (["level":6, "points":0, "max":12 ]);
               }
               if (previous_object()->query_race()=="centaur" ||
                previous_object()->query_race()=="weimic" ||
                previous_object()->query_race()=="raknid")
                skills["charging"] = ([ "level": 5, "points": 0, "max": 10 ]);
                else
                skills["riding"] = ([ "level": 5, "points": 0, "max": 10 ]);
               if (previous_object()->query_race()=="archangel" ||
                previous_object()->query_race()=="demon")
                skills["flying"] = (["level": 3, "points":0, "max":6 ]);
                break;
            case "rogue":
                skills["melee"] = (["level": 3, "points":0, "max": 7 ]);
                skills["attack"] = (["level": 5, "points":0, "max": 10 ]);
                skills["defense"] = (["level":4, "points":0, "max":8 ]);
                skills["double wielding"] = (["level":3, "points":0, "max":10 ]);
                skills["knife"] = (["level":5, "points":0, "max": 10 ]);
                skills["blunt"] = (["level":2, "points":0, "max":6 ]);
                skills["projectile"] = (["level":4, "points":0, "max":8]);
                skills["flail"] = ([ "level": 2, "points": 0, "max": 7 ]);
                skills["blade"] = (["level":0, "points":0, "max": 5]);
                skills["axe"] = (["level":0, "points":0, "max":5 ]);
                skills["ranged"] = (["level":0, "points":0, "max":5  ]);
                skills["perception"] = (["level":4, "points":0, "max": 8 ]);
               if (previous_object()->query_subclass() == "assassin") {
                skills["murder"] = (["level":6, "points":0, "max":12 ]);
                skills["stealth"] = (["level":6, "points":0, "max":12 ]);
                skills["stealing"] = (["level":3, "points":0, "max":6 ]);
                skills["bargaining"] = (["level":5, "points":0, "max":10 ]);
                skills["locks"] = (["level":4, "points":0, "max":8 ]);
                skills["agility"] = (["level":6, "points":0, "max":12 ]);
               }
               if (previous_object()->query_subclass() == "thief") {
                skills["murder"] = (["level":3, "points":0, "max":6 ]);
                skills["stealth"] = (["level":4, "points":0, "max":8 ]);
                skills["stealing"] = (["level":6, "points":0, "max":12 ]);
                skills["bargaining"] = (["level":5, "points":0, "max":10 ]);
                skills["locks"] = (["level":6, "points":0, "max":12 ]);
                skills["agility"] = (["level":5, "points":0, "max":10 ]);
               }
               if (previous_object()->query_subclass() == "thug") {
                skills["murder"] = (["level":5, "points":0, "max":10 ]);
                skills["stealth"] = (["level":5, "points":0, "max":10 ]);
                skills["stealing"] = (["level":4, "points":0, "max":8 ]);
                skills["bargaining"] = (["level":6, "points":0, "max":12 ]);
                skills["locks"] = (["level":4, "points":0, "max":8 ]);
                skills["agility"] = (["level":5, "points":0, "max":10 ]);
               }
               if (previous_object()->query_subclass() == "scout") {
                skills["murder"] = (["level":4, "points":0, "max":8 ]);
                skills["stealth"] = (["level":10, "points":0, "max":12 ]);
                skills["stealing"] = (["level":3, "points":0, "max":6 ]);
                skills["bargaining"] = (["level":5, "points":0, "max":10 ]);
                skills["locks"] = (["level":5, "points":0, "max":10 ]);
                skills["agility"] = (["level":5, "points":0, "max":10 ]);
               }
               if (previous_object()->query_race()=="archangel" ||
                previous_object()->query_race()=="demon")
                skills["flying"] = (["level": 3, "points":0, "max":6 ]);
                break;
            case "wanderer":
                skills["melee"] = (["level": 2, "points":0, "max": 5 ]);
                skills["attack"] = (["level": 4, "points":0, "max": 8 ]);
                skills["defense"] = (["level":4, "points":0, "max":8 ]);
                skills["blade"] = (["level":3, "points":0, "max": 6]);
                skills["double wielding"] = (["level":3, "points":0, "max":5 ]);
                skills["knife"] = (["level":3, "points":0, "max": 4 ]);
                skills["blunt"] = (["level":11, "points":0, "max":11 ]);
                skills["projectile"] = (["level":1, "points":0, "max":2]);
                skills["flail"] = ([ "level": 3, "points": 0, "max": 7 ]);
                skills["axe"] = (["level":0, "points":0, "max":5 ]);
                skills["ranged"] = (["level":0, "points":0, "max":5 ]);
                skills["bargaining"] = (["level":5, "points":0, "max":10 ]);
                skills["murder"] = (["level":2, "points":0, "max":4 ]);
                skills["stealth"] = (["level":3, "points":0, "max":6 ]);
                skills["stealing"] = (["level":2, "points":0, "max":4 ]);
                skills["perception"] = (["level":4, "points":0, "max": 8 ]);
               if (previous_object()->query_subclass() == "gypsy") {
                skills["entertainment"] = (["level":6, "points":0, "max":8 ]);
                skills["clairvoyance"] = (["level":6, "points":0, "max":12 ]);
                skills["euphony"] = ([ "level":3, "points":0, "max":6 ]);
                skills["locks"] = (["level":3, "points":0, "max":6 ]);
                skills["knife"] = (["level":5, "points":0, "max": 10 ]);
               }
               if (previous_object()->query_subclass() == "jester") {
                skills["entertainment"] = (["level":6, "points":0, "max":12 ]);
                skills["euphony"] = ([ "level":3, "points":0, "max":6 ]);
                skills["attack"] = (["level": 4, "points":0, "max": 8 ]);
                skills["defense"] = (["level":5, "points":0, "max":10 ]);
                skills["knife"] = (["level":4, "points":0, "max": 8 ]);
                skills["locks"] = (["level":3, "points":0, "max":6 ]);
               }
               if (previous_object()->query_subclass() == "bard") {
                skills["entertainment"] = (["level":6, "points":0, "max":8 ]);
                skills["euphony"] = ([ "level":10, "points":0, "max":10 ]);
                skills["attack"] = (["level": 9, "points":0, "max": 9 ]);
                skills["defense"] = (["level":8, "points":0, "max":10 ]);
                skills["blunt"] = (["level":5, "points":0, "max":10 ]);
                skills["stealth"] = (["level":5, "points":0, "max":8 ]);
                skills["stealing"] = (["level":2, "points":0, "max":5 ]);
               }
               if (previous_object()->query_subclass() == "swashbuckler") {
                skills["entertainment"] = (["level":3, "points":0, "max":6 ]);
                skills["blade"] = (["level":6, "points":0, "max":12 ]);
                skills["euphony"] = ([ "level":3, "points":0, "max":6 ]);
                skills["attack"] = (["level": 4, "points":0, "max": 9 ]);
                skills["defense"] = (["level":5, "points":0, "max":10 ]);
                skills["riding"] = ([ "level": 4, "points": 0, "max": 8 ]);
                skills["double wielding"] = (["level":4, "points":0, "max":10 ]);
               }
               if (previous_object()->query_race()=="archangel" ||
                previous_object()->query_race()=="demon")
                skills["flying"] = (["level": 3, "points":0, "max":6 ]);
                break;
            case "mage":
                skills["melee"] = (["level":1, "points":0, "max":5 ]);
                skills["attack"] = (["level":0, "points":0, "max": 5 ]);
                skills["defense"] = (["level":1, "points":0, "max":5 ]);
                skills["double wielding"] = (["level":0, "points":0, "max":1 ]);
                skills["knife"] = (["level":1, "points":0, "max":1 ]);
                skills["blunt"] = (["level":5, "points":0, "max":10 ]);
                skills["projectile"] = (["level":0, "points":0, "max":1  ]);
                skills["flail"] = ([ "level": 2, "points": 0, "max": 4 ]);
                skills["blade"] = (["level":0, "points":0, "max":1 ]);
                skills["axe"] = (["level":0, "points":0, "max":1 ]);
                skills["ranged"] = (["level":0, "points":0, "max":1 ]);
                skills["bargaining"] = (["level":3, "points":0, "max":8  ]);
                skills["perception"] = (["level":4, "points":0, "max": 8 ]);
               if (previous_object()->query_subclass()=="sorceror") {
                skills["magic defense"] = (["level" :4, "points":0, "max":8 ]);
                skills["magic attack"] = (["level": 6, "points": 0, "max":12 ]);
                skills["conjuring"] = (["level":4, "points":0, "max":9 ]);
                skills["psionics"] = (["level":6, "points":0, "max":12 ]);
               }
               if (previous_object()->query_subclass()=="necromancer") {
                skills["magic defense"] = (["level" :4, "points":0, "max":8 ]);
                skills["magic attack"] = (["level": 6, "points": 0, "max":12 ]);
                skills["conjuring"] = (["level":4, "points":0, "max":9 ]);
                skills["necromancy"] = (["level":6, "points":0, "max":12]);
               }
               if (previous_object()->query_subclass()=="pyromancer") {
                skills["magic defense"] = (["level" :5, "points":0, "max":10 ]);
                skills["magic attack"] = (["level": 5, "points": 0, "max":11 ]);
                skills["conjuring"] = (["level":4, "points":0, "max":8 ]);
                skills["pyromancy"] = (["level":6, "points":0, "max":12]);
               }
               if (previous_object()->query_subclass()=="wizard") {
                skills["magic defense"] = (["level" :6, "points":0, "max":12 ]);
                skills["magic attack"] = (["level": 4, "points": 0, "max":9 ]);
                skills["conjuring"] = (["level":4, "points":0, "max":9 ]);
                skills["wizardry"] = (["level":6, "points":0, "max":12]);
               }
               if (previous_object()->query_race()=="archangel" ||
                previous_object()->query_race()=="demon")
                skills["flying"] = (["level": 3, "points":0, "max":6 ]);
                break;
            case "vampire":
                skills["melee"] = (["level": 5, "points":0, "max": 10 ]);
                skills["attack"] = (["level": 4, "points":0, "max": 9 ]);
                skills["defense"] = (["level": 5, "points":0, "max": 11 ]);
                skills["knife"] = (["level":1, "points":0, "max":1 ]);
                skills["blunt"] = (["level":5, "points":0, "max":2 ]);
                skills["projectile"] = (["level":0, "points":0, "max":1  ]);
                skills["flail"] = ([ "level": 2, "points": 0, "max": 4 ]);
                skills["blade"] = (["level":2, "points":0, "max":6 ]);
                skills["perception"] = (["level":4, "points":0, "max": 8 ]);
                skills["bargaining"] = (["level": 2, "points":0, "max":5 ]);
                skills["death"] = (["level":4, "points":0, "max": 8 ]);
                skills["murder"] = (["level":1, "points":0, "max": 4 ]);
                skills["illusion"] = (["level":4, "points":0, "max": 8 ]);
                skills["nature"] = (["level":0, "points":0, "max": 5 ]);
                skills["knife"] = (["level":2, "points":0, "max": 5 ]);
                skills["locks"] = (["level":1, "points":0, "max": 4 ]);
                break;

            case "clergy":
                skills["melee"] = (["level":4, "points":0, "max":8 ]);
                skills["attack"] = (["level":4, "points":0, "max":8 ]);
                skills["defense"] = (["level":4, "points":0, "max":8]);
                skills["double wielding"] = (["level":0, "points":0,"max":6]);  
                skills["knife"] = (["level":0, "points":0,"max":6 ]);
                skills["blunt"] = (["level":0, "points":0, "max": 8 ]);
                skills["projectile"] = (["level":0, "points":0, "max":8]);
                skills["flail"] = ([ "level": 4, "points": 0, "max": 10 ]);
                skills["blade"] = (["level":3, "points":0, "max":6 ]);
                skills["axe"] = (["level":0, "points":0, "max":2 ]);
                skills["ranged"] = (["level":0, "points":0, "max":2 ]);
                skills["stealing"] = (["level":0, "points":0, "max":1 ]);
                skills["bargaining"] = (["level":0, "points":0, "max":5 ]);
                skills["perception"] = (["level":4, "points":0, "max": 8 ]);
               if (previous_object()->query_subclass()=="monk") {
                skills["melee"] = (["level":6, "points":0, "max":12 ]);
                skills["attack"] = (["level":5, "points":0, "max":10 ]);
                skills["defense"] = (["level":5, "points":0, "max":10]);
                skills["projectile"] = (["level":5, "points":0, "max":10 ]);
                skills["magic defense"] = (["level":3, "points":0, "max":6 ]);
                skills["magic attack"] = (["level":3, "points":0, "max": 6 ]);
                skills["healing"] = (["level":2, "points":0, "max": 5 ]);
                skills["faith"] = (["level":6, "points":0, "max":12 ]);
               }
               if (previous_object()->query_subclass()=="cleric") {
                skills["flail"] = ([ "level":5, "points":0, "max":10 ]);
                skills["ranged"] = (["level":0, "points":0, "max":2 ]);
                skills["magic defense"] = ([ "level":4, "points":0, "max": 8 ]);
                skills["magic attack"] = ([ "level":4, "points":0, "max": 8 ]);
                skills["healing"] = ([ "level":6, "points":0, "max":12 ]);
                skills["conjuring"] = ([ "level":5, "points":0, "max":10  ]);
                skills["belief"] = ([ "level":6, "points":0, "max":12 ]);
                skills["faith"] = (["level":6, "points":0, "max":12 ]);
               }
               if (previous_object()->query_subclass()=="kataan") {
                skills["double wielding"]=(["level":3, "points":0, "max":8]);
                skills["projectile"]=(["level":10, "points":0, "max":10]);
                skills["stealth"]=(["level":3, "points":0, "max":10]);
                skills["murder"]=(["level":3, "points":0, "max":10]);
                skills["magic attack"]=(["level":3, "points":0, "max":10]);
                skills["faith"]=(["level":6, "points":0, "max":12]);
                skills["magic defense"]=(["level":1, "points":0, "max":3]);
                skills["summoning"]=(["level":6, "points":0, "max":12]);
                skills["faith"] = (["level":6, "points":0, "max":12 ]);
               }
               if (previous_object()->query_subclass()=="druid") {
                skills["blunt"] = (["level":5, "points":0, "max":10 ]);
                skills["magic defense"] = (["level" :5, "points":0, "max":10 ]);
                skills["magic attack"] = (["level": 5, "points": 0, "max":10 ]);
                skills["conjuring"] = (["level":4, "points":0, "max":8 ]);
                skills["nature"]   = (["level":6, "points":0, "max":12 ]);
                skills["faith"]=(["level":6, "points":0, "max":12]);                    
               }
               if (previous_object()->query_race()=="archangel" ||
                previous_object()->query_race()=="demon")
                skills["flying"] = (["level": 3, "points":0, "max":6 ]);
                break;
            case "dragon":
                skills["melee"] = (["level": 5, "points":0, "max": 10 ]);
                skills["attack"] = (["level": 4, "points":0, "max": 9 ]);
                skills["defense"] = (["level": 5, "points":0, "max": 11 ]);
                skills["bargaining"] = (["level": 2, "points":0, "max":5 ]);
                skills["breath"] = (["level": 4, "points":0, "max":9 ]);
                skills["claw"] = (["level": 4, "points":0, "max":8 ]);
                skills["tail"] = (["level": 4, "points":0, "max":8 ]);
                skills["flying"] = (["level": 3, "points":0, "max":7 ]);
                skills["perception"] = (["level":4, "points":0, "max": 8 ]);
                if (previous_object()->query_subclass() == "black") {
                 skills["magic attack"] = (["level": 4, "points":0, "max": 8 ]);
                 skills["magic defense"] = (["level": 3, "points":0, "max": 6 ]);
                 skills["conjuring"] = (["level": 3, "points":0, "max": 6 ]);
                skills["wizardry"] = (["level": 4, "points":0, "max": 10 ]);
                }
                if (previous_object()->query_subclass() == "red") {
                 skills["attack"] = (["level": 5, "points":0, "max": 11 ]);
                 skills["breath"] = (["level": 5, "points":0, "max": 10 ]);
                 skills["claw"] = (["level": 4, "points":0, "max": 9 ]);
                 skills["tail"] = (["level": 4, "points":0, "max": 9 ]);
                 skills["defense"] = (["level": 6, "points":0, "max": 13 ]);
                 skills["melee"] = (["level": 5, "points":0, "max": 11 ]);
                }
                if (previous_object()->query_subclass() == "white") {
                 skills["magic attack"] = (["level": 3, "points":0, "max": 6 ]);
                 skills["magic defense"] = (["level": 4, "points":0, "max": 8 ]);
                 skills["conjuring"] = (["level": 3, "points":0, "max": 7 ]);
                 skills["faith"] = (["level": 5, "points":0, "max": 10 ]);
                }
                if (previous_object()->query_subclass() == "blue") {
                 skills["faith"] = (["level":4, "points":0, "max": 10 ]);
                 skills["magic defense"] = (["level":4, "points":0, "max": 8 ]);
                 skills["healing"] = (["level":4, "points":0, "max": 8 ]);
                 skills["conjuring"] = (["level":3, "points":0, "max": 6 ]);
                 skills["flying"] = (["level": 2, "points":0, "max": 4 ]);
                }
                break;
            case "child": 
            skills["melee"] = (["level":1, "points":0, "max":8 ]);
            skills["attack"] = (["level":1, "points":0, "max":8 ]);
            skills["defense"] = (["level":1, "points":0, "max":8]);
            skills["double wielding"] = (["level":0, "points":0,"max":8]);  
            skills["knife"] = (["level":0, "points":0,"max":8 ]);
            skills["blunt"] = (["level":0, "points":0, "max": 8 ]);
            skills["projectile"] = (["level":0, "points":0, "max":8]);
            skills["flail"] = ([ "level": 0, "points": 0, "max": 8 ]);
            skills["blade"] = (["level":1, "points":0, "max":8 ]);
            skills["axe"] = (["level":0, "points":0, "max":1 ]);
            skills["ranged"] = (["level":0, "points":0, "max":8]);
            skills["perception"] = (["level":2, "points":0, "max": 4 ]);
            skills["bargaining"] = (["level":0, "points":0, "max":1 ]);
               if (previous_object()->query_race()=="archangel" ||
                previous_object()->query_race()=="demon")
                skills["flying"] = (["level": 3, "points":0, "max":6 ]);
                break;
            default: init_skills(0);
        }
    }
    return skills;
}
int training_formula(string cl, string subcl, int lvl, string skill) {
    if(previous_object()->query_race()=="archangel" ||
                previous_object()->query_race()=="demon") {
        switch(skill) {
            case "flying":
                return lvl * lvl * 3; break;
            default: break;                 
        }
    }
    if(subcl == "antipaladin") {
        switch(skill) {
            case "attack": case "ferocity": case "faith": case "blade":
                return lvl * lvl; break;
            case "melee": case "defense": case "double wielding":
                return lvl * lvl; break; 
            case "riding": case "charging": case "healing":
                return lvl * lvl * 4; break; 
            case "magic attack": case "magic defense":
                return lvl * lvl * 4; break;
            case "knife": case "bargaining": case "flail": case "axe": 
                return lvl * lvl * 4; break;
            case "projectile": case "ranged": case "blunt": case "perception":
                return lvl * lvl * 4; break;
            default: break;                 
        }
    }
    else if(subcl == "paladin") {
        switch(skill) {
            case "attack": case "valor": case "faith": case "blade":
                return lvl * lvl; break;
            case "melee": case "defense": case "double wielding":
                return lvl * lvl; break; 
            case "riding": case "charging":
                return lvl * lvl * 4; break; 
            case "healing": case "magic attack": case "magic defense":
                return lvl * lvl * 4; break;
            case "knife": case "bargaining": case "flail": case "axe": 
                return lvl * lvl * 4; break;
            case "projectile": case "ranged": case "blunt": case "perception":
                return lvl * lvl * 4; break;
            default: break;                 
        }
    }
    else if(subcl == "berserker") {
        switch(skill) {
            case "rage": case "ferocity":
                return lvl * lvl/2; break;
            case "attack":
                return lvl * lvl/2; break;
            case "melee": case "defense": case "double wielding":
            case "ranged": case "blade": case "axe": case "projectile":
            case "blunt": case "knife":
                return lvl * lvl; break;
            default: break;                 
        }
    }
    else if(subcl == "ranger") {
        switch(skill) {
            case "nature": case "discipline":
                return lvl * lvl/2; break;
            case "attack": case "ranged": 
                return lvl * lvl/2; break;
            case "melee": case "defense": case "double wielding":
            case "blade": case "axe": case "projectile": case "flail":
            case "riding": 
                return lvl * lvl; break;
            default: break;                 
        }
    }
    else if(subcl == "warrior") {
        switch(skill) {
            case "knife": case "flail": case "axe": case "blade":
                return lvl * lvl/2; break;
            case "projectile": case "ranged": case "blunt": case "knife":
                return lvl * lvl/2; break; 
            case "attack":
                return lvl * lvl/2; break;
            case "discipline":
                return lvl * lvl; break; 
            default: break;                 
        }
    }
    if(cl == "fighter") {
        switch(skill) {
            case "perception":
                return lvl * lvl; break;
            case "riding": case "charging": case "double wielding":
            case "defense":
                return lvl * lvl; break;
            case "axe": case "blade": case "projectile": case "ranged":
            case "blunt": case "knife": case "flail":
            case "bargaining":
               return lvl * lvl * 2; break;
            default: return lvl * lvl * lvl; break;
        }
    }
 
    if(subcl == "cleric") {
        switch(skill) {
            case "belief": 
                return lvl * lvl/2; break;
            case "healing": case "defense": 
                return lvl * lvl; break;
            case "melee": case "blunt": case "flail":
                return lvl * lvl * 8; break;
            default: break;
        }
    }
    else if(subcl == "druid") {
        switch(skill) {
            case "nature": 
                return lvl * lvl/3; break;
            case "defense": case "flail":    
                return lvl * lvl; break;
            case "melee": case "knife": case "blunt": case "conjuring":
                return lvl * lvl * 8; break;
            default: break;
        }
    }
    else if(subcl == "kataan") {
        switch(skill) {
            case "projectile":  
            case "defense": case "summoning":
              return lvl * lvl; break;
            case "attack": case "melee":
              return lvl * lvl * 6; break;
            case "ranged": case "double wielding": case "murder":
            case "stealth":
              return lvl * lvl * 8; break;
            default: break;
        }
    }
    else if(subcl == "monk") {
        switch(skill) {
            case "melee":
            case "defense": case "projectile":
            case "bargaining": case "attack":
                return lvl * lvl; break;
            case "healing":
                return lvl * lvl * 8; break;
            default: break;
        }
    }
    if(cl == "clergy") {
        switch(skill) {
            case "faith":  
                return lvl * lvl; break;
            case "magic attack":
                if(subcl == "cleric")
                    return lvl * lvl * 8;
                else
                    return lvl * lvl; break;
            case "magic defense":
                if(subcl == "kataan")
                    return lvl * lvl * 8;
                else
                    return lvl * lvl; break;
            case "knife": case "conjuring":
            case "flail":
                return lvl * lvl * 8; break;
            default: return lvl * lvl * lvl; break;
        }
    }
 
    if(subcl == "necromancer") {
        switch(skill) {
            case "necromancy":
              return lvl * lvl/3; break;
            default: break;
        }
    }
    else if(subcl == "sorceror") {
        switch(skill) {
            case "psionics":
              return lvl * lvl/3; break;
            default: break;
        }
    }
    else if(subcl == "pyromancer") {
        switch(skill) {
            case "pyromancy":
              return lvl * lvl/3; break;
            default: break;
        }
    }
    else if(subcl == "wizard") {
        switch(skill) {
            case "wizardry":
              return lvl * lvl/3; break;
            default: break;
        }
    }
    if(cl == "mage") {
        switch(skill) {
         case "conjuring": case "magic attack": case "magic defense":
         case "blunt": case "flail":
           return lvl * lvl; break;
         case "projectile": case "perception": case "attack":
         case "knife": case "bargaining":
           return lvl * lvl * 8; break;
         default: return lvl * lvl * lvl; break;
        }
    }
 
    if(subcl == "bard") {
        switch(skill) {
            case "euphony":
              return lvl * lvl/3; break;
            case "entertainment":
              return lvl * lvl; break;
            case "blade":
              return lvl * lvl * 6; break;
            default: break;
        }
    }
    else if(subcl == "jester") {
        switch(skill) {
            case "entertainment":
              return lvl * lvl/3; break;
            case "euphony": case "knife":
              return lvl * lvl; break;
            case "blade":
              return lvl * lvl * 6; break;
            default: break;
        }
    }
    else if(subcl == "gypsy") {
        switch(skill) {
            case "clairvoyance":
              return lvl * lvl/3; break;
            case "euphony": case "entertainment":
            case "knife":
              return lvl * lvl; break;
            case "blade":
              return lvl * lvl * 6; break;
            default: break;
        }
    }
    else if(subcl == "swashbuckler") {
        switch(skill) {
            case "entertainment": case "blade":
              return lvl * lvl/3; break;
            case "attack":
                return lvl * lvl/2; break;
            default: break;
        }
    }
    if(cl == "wanderer") {
        switch(skill) {
            case "defense":
                return lvl * lvl/3; break;
            case "bargaining":
                return lvl * lvl; break;             
            case "attack":
               return lvl * lvl; break;
            case "melee": case "knife":
            case "locks": case "murder": case "double wielding":
                return lvl * lvl * 8; break;
            case "blunt": case "projectile": case "ranged":
                return lvl * lvl * 8; break;
            default: return lvl * lvl * lvl; break;
      }
   }
 
   if(subcl == "black") {
        switch(skill) {
            case "magic attack": case "wizardry":
                return lvl * lvl/3; break;
            case "magic defense": case "conjuring":
                return lvl * lvl; break;
            default: break;
        }
    }
    else if(subcl == "white") {
        switch(skill) {
            case "faith": case "magic defense":
                return lvl * lvl/3; break;
            case "magic attack": case "conjuring":
                return lvl * lvl; break;
            default: break;
        }
    }
    else if(subcl == "blue") {
        switch(skill) {
            case "faith": case "magic defense":
                return lvl * lvl/3; break;
            case "conjuring": case "healing":
                return lvl * lvl; break;
            default: break;
        }
    }
    if(cl == "dragon") {
        switch(skill) {
            case "attack": case "defense": case "melee":
                if(subcl == "red")
                    return lvl * lvl/3;
                else
                    return lvl * lvl * 4; break;
            case "claw": case "tail": case "breath":
                if(subcl == "red")
                    return lvl * lvl;
                else
                    return lvl * lvl * 6; break;
            case "flying":
                if(subcl == "blue")
                    return lvl * lvl * 8;
                else
                    return lvl * lvl; break;
            case "bargaining": case "perception":
                return lvl * lvl * 8; break;
            default: return lvl * lvl * lvl; break;
        }
    }
 
   if(subcl == "assassin") {
        switch(skill) {
            case "murder": case "ranged":
                return lvl * lvl/3; break;
            case "stealing": case "double wielding":
                return lvl * lvl * 2; break;
            default: break;
        }
    }
    else if(subcl == "scout") {
        switch(skill) {
            case "knife":
                return lvl * lvl/3; break;
            case "ranged": case "murder":
                return lvl * lvl; break;
            case "stealing":
                return lvl * lvl * 6; break;
            default: break;
        }
    }
    else if(subcl == "thief") {
        switch(skill) {
            case "stealing":
                return lvl * lvl/3; break;
            case "murder": case "attack": case "defense":
                return lvl * lvl * 4; break;
            default: break;
        }
    }
    else if(subcl == "thug") {
        switch(skill) {
            case "murder": case "melee":
                return lvl * lvl/3; break;
            case "stealing":
                return lvl * lvl; break;
            default: break;
        }
    }
    if(cl == "rogue") {
        switch(skill) {
            case "stealth":
                return lvl * lvl/2; break;             
            case "bargaining": case "attack": case "defense": case "knife":
             case "locks": case "agility": 
                return lvl * lvl; break;
            case "ranged": case "melee": case "perception":
              return lvl * lvl * 4; break;
            case "blunt": case "projectile": case "double wielding":
                return lvl * lvl * 8; break;   
            default: return lvl * lvl * lvl; break;
        }
    }
    if(cl == "child") {

     return lvl*lvl*lvl*lvl;

    }
}
int query_melee_ac(string cl) {
    switch(cl) {
        case "wanderer": return 19; break; 
        case "fighter": return 20; break;
        case "rogue": return 18; break;
        case "dragon":
           if (previous_object()->query_subclass()=="red")return 21;
           return 18;
           break;
        case "clergy": 
           if (previous_object()->query_subclass()=="cleric")return 8;
           if (previous_object()->query_subclass()=="druid")return 8;
           if (previous_object()->query_subclass()=="kataan")return 10;
           if (previous_object()->query_subclass()=="monk")return 26;
          break;
        case "mage": return 6; break;
        default: return 1;
    }
}
