Fixes Death Bound to be an auto target skill (triggered on hit) - bugreport:6731

Extremity Fist SP Cap raised to work better with renewal stats - bugreport:7455
Expanded Super Novice receives +10 stat bonuses for a 0 death counter - bugreport:7394
Renewal Assassin Cross of Sunset now includes AGI into the formula - bugreport:6604
Berserk job level check works as intended - bugreport:6960

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17262 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
akinari1087 2013-04-16 03:23:38 +00:00
parent 175f28864c
commit 9b04ad2616
5 changed files with 18 additions and 20 deletions

View File

@ -692,7 +692,7 @@
//**** //****
2001,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0, RK_ENCHANTBLADE,Enchant Blade 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 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 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 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 2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0, RK_IGNITIONBREAK,Ignition Break

View File

@ -2353,15 +2353,13 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
break; break;
case NPC_DARKCROSS: case NPC_DARKCROSS:
case CR_HOLYCROSS: case CR_HOLYCROSS:
{
int ratio = 35*skill_lv;
#ifdef RENEWAL #ifdef RENEWAL
if(sd && sd->status.weapon == W_2HSPEAR) if(sd && sd->status.weapon == W_2HSPEAR)
ratio *= 2; skillratio += 2*(35*skill_lv);
else
#endif #endif
skillratio += ratio; skillratio += 35*skill_lv;
break; break;
}
case AM_DEMONSTRATION: case AM_DEMONSTRATION:
skillratio += 20*skill_lv; skillratio += 20*skill_lv;
break; break;
@ -2376,12 +2374,8 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
flag.pdef = flag.pdef2 = 2; flag.pdef = flag.pdef2 = 2;
break; break;
case MO_EXTREMITYFIST: case MO_EXTREMITYFIST:
{ //Overflow check. [Skotlex] skillratio += 100*(8 + sstatus->sp/10) - 100;
unsigned int ratio = skillratio + 100*(8 + sstatus->sp/10); skillratio = min(500000,skillratio); //We stop at roughly 50k SP for overflow protection
//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;
}
break; break;
case MO_TRIPLEATTACK: case MO_TRIPLEATTACK:
skillratio += 20*skill_lv; skillratio += 20*skill_lv;

View File

@ -1392,8 +1392,12 @@ int pc_calc_skilltree(struct map_session_data *sd)
} }
} }
} }
if( sd->status.job_level < skill_tree[c][i].joblv ) if( sd->status.job_level < skill_tree[c][i].joblv ) { //We need to get the actual class in this case
f = 0; // job level requirement wasn't satisfied 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 ) { if( f ) {

View File

@ -10912,9 +10912,9 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, uint16 skill
} }
break; break;
case BA_ASSASSINCROSS: case BA_ASSASSINCROSS:
val1 = 100+(10*skill_lv)+(status->agi/10); // ASPD increase val1 = 100+(10*skill_lv)+status->agi; // ASPD increase
if(sd) if(sd)
val1 += 5*pc_checkskill(sd,BA_MUSICALLESSON); val1 += 10*((pc_checkskill(sd,BA_MUSICALLESSON)+1)/2); //aspd +1% per 2lvl
break; break;
case DC_FORTUNEKISS: case DC_FORTUNEKISS:
val1 = 10+skill_lv+(status->luk/10); // Critical increase val1 = 10+skill_lv+(status->luk/10); // Critical increase

View File

@ -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 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->str += 10;
status->agi += 10; status->agi += 10;
status->vit += 10; status->vit += 10;
@ -5342,10 +5342,10 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, s
skills1 = 5; skills1 = 5;
if(sc->data[SC_ASSNCROS] && 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) if (bl->type!=BL_PC)
skills1 = 4+1*sc->data[SC_ASSNCROS]->val1; skills1 = sc->data[SC_ASSNCROS]->val2/10;
else else
switch(((TBL_PC*)bl)->status.weapon) 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: case W_GRENADE:
break; break;
default: default:
skills1 = 5+1*sc->data[SC_ASSNCROS]->val1; skills1 = sc->data[SC_ASSNCROS]->val2/10;
} }
} }
} }