Index: src/config/core.h =================================================================== --- src/config/core.h (revision 17326) +++ src/config/core.h (working copy) @@ -29,7 +29,7 @@ /// Uncomment to disable rAthena's anonymous stat report /// We kindly ask you to consider keeping it enabled, it helps us improve rAthena. -//#define STATS_OPT_OUT +#define STATS_OPT_OUT /// uncomment to enable query_sql script command and mysql logs to function on it's own thread /// be aware this feature is under tests and you should use at your own risk, we however Index: src/map/skill.c =================================================================== --- src/map/skill.c (revision 17326) +++ src/map/skill.c (working copy) @@ -1840,7 +1840,7 @@ if( sd && status_isdead(bl) ) { int sp = 0, hp = 0; - if( attack_type&(BF_WEAPON|BF_SHORT) == (BF_WEAPON|BF_SHORT) ) { + if( (attack_type&(BF_WEAPON|BF_SHORT)) == (BF_WEAPON|BF_SHORT) ) { sp += sd->bonus.sp_gain_value; sp += sd->sp_gain_race[status_get_race(bl)]; sp += sd->sp_gain_race[is_boss(bl)?RC_BOSS:RC_NONBOSS]; @@ -5119,11 +5119,11 @@ do { i = rnd() % MAX_SKILL_ABRA_DB; abra_skill_id = skill_abra_db[i].skill_id; + abra_skill_lv = min(skill_lv, skill_get_max(abra_skill_id)); } while (abra_skill_id == 0 || - skill_abra_db[i].req_lv > skill_lv || //Required lv for it to appear - rnd()%10000 >= skill_abra_db[i].per + rnd()%10000 >= skill_abra_db[i].per[abra_skill_lv] ); - abra_skill_lv = min(skill_lv, skill_get_max(abra_skill_id)); + clif_skill_nodamage (src, bl, skill_id, skill_lv, 1); if( sd ) @@ -17582,7 +17582,7 @@ static const int dx[] = {-1,-1,-1,-1, 0, 0, 0, 0, 1, 1, 1, 1, -5,-5,-5,-5,-4,-4,-4,-4,-3,-3,-3,-3,-2,-2,-2,-2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, -1,-1,-1, 0, 0, 0, 1, 1, 1}; - static const int dy[] = { 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, + static const int dy[] = { 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, 0,-1,-2,-3, -4,-5,-6,-4,-5,-6,-4,-5,-6}; skill_unit_layout[pos].count = 53; @@ -18166,7 +18166,7 @@ static bool skill_parse_row_abradb(char* split[], int columns, int current) -{// skill_id,DummyName,RequiredHocusPocusLevel,Rate +{// skill_id,DummyName,RatePerLvl uint16 skill_id = atoi(split[0]); if( !skill_get_index(skill_id) || !skill_get_max(skill_id) ) { @@ -18180,8 +18180,8 @@ } skill_abra_db[current].skill_id = skill_id; - skill_abra_db[current].req_lv = atoi(split[2]); - skill_abra_db[current].per = atoi(split[3]); + safestrncpy(skill_abra_db[current].name, trim(split[1]), sizeof(skill_abra_db[current].name)); //store dummyname + skill_split_atoi(split[2],skill_abra_db[current].per); return true; } Index: src/map/skill.h =================================================================== --- src/map/skill.h (revision 17326) +++ src/map/skill.h (working copy) @@ -217,8 +217,8 @@ struct s_skill_abra_db { uint16 skill_id; - int req_lv; - int per; + char name[NAME_LENGTH]; + int per[MAX_SKILL_LEVEL]; }; extern struct s_skill_abra_db skill_abra_db[MAX_SKILL_ABRA_DB];