merentha_fluffos_v2/
merentha_fluffos_v2/bin/
merentha_fluffos_v2/fluffos-2.9-ds2.03/
merentha_fluffos_v2/fluffos-2.9-ds2.03/ChangeLog.old/
merentha_fluffos_v2/fluffos-2.9-ds2.03/Win32/
merentha_fluffos_v2/fluffos-2.9-ds2.03/compat/
merentha_fluffos_v2/fluffos-2.9-ds2.03/compat/simuls/
merentha_fluffos_v2/fluffos-2.9-ds2.03/include/
merentha_fluffos_v2/fluffos-2.9-ds2.03/testsuite/
merentha_fluffos_v2/fluffos-2.9-ds2.03/testsuite/clone/
merentha_fluffos_v2/fluffos-2.9-ds2.03/testsuite/command/
merentha_fluffos_v2/fluffos-2.9-ds2.03/testsuite/data/
merentha_fluffos_v2/fluffos-2.9-ds2.03/testsuite/etc/
merentha_fluffos_v2/fluffos-2.9-ds2.03/testsuite/include/
merentha_fluffos_v2/fluffos-2.9-ds2.03/testsuite/inherit/
merentha_fluffos_v2/fluffos-2.9-ds2.03/testsuite/inherit/master/
merentha_fluffos_v2/fluffos-2.9-ds2.03/testsuite/log/
merentha_fluffos_v2/fluffos-2.9-ds2.03/testsuite/single/
merentha_fluffos_v2/fluffos-2.9-ds2.03/testsuite/single/tests/compiler/
merentha_fluffos_v2/fluffos-2.9-ds2.03/testsuite/single/tests/efuns/
merentha_fluffos_v2/fluffos-2.9-ds2.03/testsuite/single/tests/operators/
merentha_fluffos_v2/fluffos-2.9-ds2.03/testsuite/u/
merentha_fluffos_v2/fluffos-2.9-ds2.03/tmp/
merentha_fluffos_v2/fluffos-2.9-ds2.03/windows/
merentha_fluffos_v2/lib/cfg/
merentha_fluffos_v2/lib/cfg/races/
merentha_fluffos_v2/lib/cmds/abilities/
merentha_fluffos_v2/lib/cmds/actions/
merentha_fluffos_v2/lib/cmds/spells/
merentha_fluffos_v2/lib/daemon/include/
merentha_fluffos_v2/lib/daemon/services/
merentha_fluffos_v2/lib/doc/
merentha_fluffos_v2/lib/doc/building/
merentha_fluffos_v2/lib/doc/help/classes/
merentha_fluffos_v2/lib/doc/help/general/
merentha_fluffos_v2/lib/doc/help/races/
merentha_fluffos_v2/lib/doc/help/skills/
merentha_fluffos_v2/lib/doc/help/stats/
merentha_fluffos_v2/lib/doc/man/efuns/
merentha_fluffos_v2/lib/doc/man/lfuns/
merentha_fluffos_v2/lib/doc/news/
merentha_fluffos_v2/lib/doc/old/
merentha_fluffos_v2/lib/doc/old/concepts/
merentha_fluffos_v2/lib/doc/old/lpc/constructs/
merentha_fluffos_v2/lib/doc/old/lpc/types/
merentha_fluffos_v2/lib/domains/ROOMS/
merentha_fluffos_v2/lib/domains/obj/armour/
merentha_fluffos_v2/lib/domains/obj/monsters/
merentha_fluffos_v2/lib/domains/obj/other/
merentha_fluffos_v2/lib/domains/obj/weapons/
merentha_fluffos_v2/lib/realms/petrarch/
merentha_fluffos_v2/lib/save/daemons/
merentha_fluffos_v2/lib/save/rid/
merentha_fluffos_v2/lib/save/users/a/
merentha_fluffos_v2/lib/save/users/p/
merentha_fluffos_v2/lib/save/users/t/
merentha_fluffos_v2/lib/std/login/
merentha_fluffos_v2/lib/std/obj/
merentha_fluffos_v2/win32/
// Petrarch
// Merentha Lib 1.0
// skill daemon

#include <skills.h>
#include <math.h>
#include <std.h>

inherit DAEMON;

void init_skills(object ob) {
    mapping tmp_skills=([]);
    string *skills;
    int i=sizeof(skills=ALL_SKILLS);
    if (!ob) return;
    ob->set_skill_bonus("attack",0);
    while(i--) tmp_skills[skills[i]]=(["level":25,"points":0,"adjustment":0,"adj_points":0]);
    ob->set_skills( tmp_skills );
}

int skill_cost(object ob, string _class, mixed skill) {
    if(_class=="mage") 
        if(ob->query_class("mage")) {
            if (member_array(skill, MAGE_TERRIBLE_SKILLS)!=-1) return 15;
            if (member_array(skill, MAGE_BAD_SKILLS)!=-1) return 9;
            if (member_array(skill, MAGE_AVG_SKILLS)!=-1) return 3;
            if (member_array(skill, MAGE_GOOD_SKILLS)!=-1) return -3;
            if (member_array(skill, MAGE_GREAT_SKILLS)!=-1) return -10;
        }
    if(_class=="fighter") 
        if(ob->query_class("fighter")) {
            if (member_array(skill, FIGHTER_TERRIBLE_SKILLS)!=-1) return 15;
            if (member_array(skill, FIGHTER_BAD_SKILLS)!=-1) return 9;
            if (member_array(skill, FIGHTER_AVG_SKILLS)!=-1) return 3;
            if (member_array(skill, FIGHTER_GOOD_SKILLS)!=-1) return -3;
            if (member_array(skill, FIGHTER_GREAT_SKILLS)!=-1) return -10;
        }
    if(_class=="healer") 
        if(ob->query_class("healer")) {
            if (member_array(skill, HEALER_TERRIBLE_SKILLS)!=-1) return 15;
            if (member_array(skill, HEALER_BAD_SKILLS)!=-1) return 9;
            if (member_array(skill, HEALER_AVG_SKILLS)!=-1) return 3;
            if (member_array(skill, HEALER_GOOD_SKILLS)!=-1) return -3;
            if (member_array(skill, HEALER_GREAT_SKILLS)!=-1) return -10;
        }
    if(_class=="monk") 
        if(ob->query_class("monk")) {
            if (member_array(skill, MONK_TERRIBLE_SKILLS)!=-1) return 15;
            if (member_array(skill, MONK_BAD_SKILLS)!=-1) return 9;
            if (member_array(skill, MONK_AVG_SKILLS)!=-1) return 3;
            if (member_array(skill, MONK_GOOD_SKILLS)!=-1) return -3;
            if (member_array(skill, MONK_GREAT_SKILLS)!=-1) return -10;
        }
    return 0;
}

int class_adjustment(object ob, mixed skill) {
    int val;
    if (ob->query_class()) val=sizeof(explode(ob->query_class(),"/"));
    else val=1;
    if(val==4) val=5;
    else if(val==3) val=6;
    else if(val==2) val=7;
    else val=8;
    return (skill_cost(ob,"mage",skill)+
      skill_cost(ob,"fighter",skill)+
      skill_cost(ob,"healer",skill)+
      skill_cost(ob,"monk",skill) )*val/10;
}

int gender_adjustment(object ob, string skill) {
    if (ob->query_gender()=="male") {
        if (member_array(skill,  MALE_GREAT_SKILLS )!=-1) return -12;
        if (member_array(skill,  MALE_GOOD_SKILLS )!=-1) return -6;
        if (member_array(skill,  MALE_BAD_SKILLS )!=-1) return 8;
        if (member_array(skill,  MALE_TERRIBLE_SKILLS )!=-1) return 16;
    }
    if (ob->query_gender()=="female") {
        if (member_array(skill,  FEMALE_GREAT_SKILLS )!=-1) return -12;
        if (member_array(skill,  FEMALE_GOOD_SKILLS )!=-1) return -6;
        if (member_array(skill,  FEMALE_BAD_SKILLS )!=-1) return 8;
        if (member_array(skill,  FEMALE_TERRIBLE_SKILLS )!=-1) return 16;
    }
}

int race_adjustment(object ob, string skill) {
  if (ob->query_race()=="human") {
        if (member_array(skill,  HUMAN_GOOD_SKILLS )!=-1) return -6;
        if (member_array(skill,  HUMAN_BAD_SKILLS )!=-1) return 8;
  }
  if (ob->query_race()=="elf") {
        if (member_array(skill,  ELF_GOOD_SKILLS )!=-1) return -6;
        if (member_array(skill,  ELF_BAD_SKILLS )!=-1) return 8;
  }
  if (ob->query_race()=="fairy") {
        if (member_array(skill,  FAIRY_GOOD_SKILLS )!=-1) return -6;
        if (member_array(skill,  FAIRY_BAD_SKILLS )!=-1) return 8;
  }
  if (ob->query_race()=="gnome") {
        if (member_array(skill,  GNOME_GOOD_SKILLS )!=-1) return -6;
        if (member_array(skill,  GNOME_BAD_SKILLS )!=-1) return 8;
  }
  if (ob->query_race()=="giant") {
        if (member_array(skill,  GIANT_GOOD_SKILLS )!=-1) return -6;
        if (member_array(skill,  GIANT_BAD_SKILLS )!=-1) return 8;
  }
  if (ob->query_race()=="dwarf") {
        if (member_array(skill,  DWARF_GOOD_SKILLS )!=-1) return -6;
        if (member_array(skill,  DWARF_BAD_SKILLS )!=-1) return 8;
  }
}

int overall_skill_adjustment(object ob, string skill) {
    return 
    class_adjustment(ob, skill)+
    gender_adjustment(ob, skill)+
    race_adjustment(ob, skill)+
    ob->query_skill_adjustment(skill)+
    ob->query_level()
    ;
}

int formula(object ob, string skill) {
    int val=sizeof(explode(""+ob->query_class(),"/"));
    int lev=ob->query_skill_level(skill);
    if(!ob || !skill || !val) return 1;
    return (lev*lev)*(100+
      overall_skill_adjustment(ob, skill)
    )/100;
}

int adj_formula(object ob, string skill) {
    int lev=ob->query_skill_level(skill);
    if(!ob || !skill) return 1;
    return (lev*lev*2)/(ob->query_stat("wisdom"));
}