diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index 6da832ea15..6a518f1595 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -692,7 +692,7 @@ //**** 2001,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0, RK_ENCHANTBLADE,Enchant Blade 2002,7:8:9:10:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, RK_SONICWAVE,Sonic Wave -2003,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0, RK_DEATHBOUND,Death Bound +2003,0,6,4,0,0x1,0,10,1,no,0,0x200,0,weapon,0, RK_DEATHBOUND,Death Bound 2004,5,8,1,-1,0,0,10,-5,no,0,0,0,weapon,0, RK_HUNDREDSPEAR,Hundred Spear 2005,1,6,2,4,0x2,2,5,1,no,0,0,0,weapon,3, RK_WINDCUTTER,Wind Cutter 2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0, RK_IGNITIONBREAK,Ignition Break diff --git a/src/map/battle.c b/src/map/battle.c index 31ab86c3f7..b3cbc24069 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2353,15 +2353,13 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo break; case NPC_DARKCROSS: case CR_HOLYCROSS: - { - int ratio = 35*skill_lv; #ifdef RENEWAL if(sd && sd->status.weapon == W_2HSPEAR) - ratio *= 2; + skillratio += 2*(35*skill_lv); + else #endif - skillratio += ratio; + skillratio += 35*skill_lv; break; - } case AM_DEMONSTRATION: skillratio += 20*skill_lv; break; @@ -2376,12 +2374,8 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo flag.pdef = flag.pdef2 = 2; break; case MO_EXTREMITYFIST: - { //Overflow check. [Skotlex] - unsigned int ratio = skillratio + 100*(8 + sstatus->sp/10); - //You'd need something like 6K SP to reach this max, so should be fine for most purposes. - if (ratio > 60000) ratio = 60000; //We leave some room here in case skillratio gets further increased. - skillratio = (unsigned short)ratio; - } + skillratio += 100*(8 + sstatus->sp/10) - 100; + skillratio = min(500000,skillratio); //We stop at roughly 50k SP for overflow protection break; case MO_TRIPLEATTACK: skillratio += 20*skill_lv; diff --git a/src/map/pc.c b/src/map/pc.c index 77c13d70c0..27dac2b58b 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1392,8 +1392,12 @@ int pc_calc_skilltree(struct map_session_data *sd) } } } - if( sd->status.job_level < skill_tree[c][i].joblv ) - f = 0; // job level requirement wasn't satisfied + if( sd->status.job_level < skill_tree[c][i].joblv ) { //We need to get the actual class in this case + int class = pc_mapid2jobid(sd->class_, sd->status.sex); + class = pc_class2idx(class); + if (class == c || (class != c && sd->status.job_level < skill_tree[class][i].joblv)) + f = 0; // job level requirement wasn't satisfied + } } if( f ) { diff --git a/src/map/skill.c b/src/map/skill.c index 2c5c9e4592..c69ba614f3 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -10912,9 +10912,9 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, uint16 skill } break; case BA_ASSASSINCROSS: - val1 = 100+(10*skill_lv)+(status->agi/10); // ASPD increase + val1 = 100+(10*skill_lv)+status->agi; // ASPD increase if(sd) - val1 += 5*pc_checkskill(sd,BA_MUSICALLESSON); + val1 += 10*((pc_checkskill(sd,BA_MUSICALLESSON)+1)/2); //aspd +1% per 2lvl break; case DC_FORTUNEKISS: val1 = 10+skill_lv+(status->luk/10); // Critical increase diff --git a/src/map/status.c b/src/map/status.c index 45279b20d5..404682c09f 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2704,7 +2704,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) } // If a Super Novice has never died and is at least joblv 70, he gets all stats +10 - if((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->die_counter == 0 && sd->status.job_level >= 70){ + if(((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && (sd->status.job_level >= 70 || sd->class_&JOBL_THIRD)) && sd->die_counter == 0){ status->str += 10; status->agi += 10; status->vit += 10; @@ -5342,10 +5342,10 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, s skills1 = 5; if(sc->data[SC_ASSNCROS] && - skills1 < 5+1*sc->data[SC_ASSNCROS]->val1) // needs more info + skills1 < sc->data[SC_ASSNCROS]->val2/10) { if (bl->type!=BL_PC) - skills1 = 4+1*sc->data[SC_ASSNCROS]->val1; + skills1 = sc->data[SC_ASSNCROS]->val2/10; else switch(((TBL_PC*)bl)->status.weapon) { @@ -5357,7 +5357,7 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, s case W_GRENADE: break; default: - skills1 = 5+1*sc->data[SC_ASSNCROS]->val1; + skills1 = sc->data[SC_ASSNCROS]->val2/10; } } }