From e76d92f5385f293cbd98ed741be8b4ec08f5bb3a Mon Sep 17 00:00:00 2001 From: Cydh Ramdh Date: Tue, 13 Jan 2015 12:35:44 +0700 Subject: [PATCH] Fixed #220 * SC_FIGHTINGSPIRIT gives no effect for RK_FIGHTINGSPIRIT level < 10 * Fixed RK_FIGHTINGSPIRIT gives no effect if level < 5 * Little optimization on RK_FIGHTINGSPIRIT codes Signed-off-by: Cydh Ramdh --- src/map/skill.c | 22 ++++++++++++++-------- src/map/status.c | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/map/skill.c b/src/map/skill.c index 40f22d5fd7..13a0c271c6 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2365,7 +2365,7 @@ int skill_strip_equip(struct block_list *src,struct block_list *bl, unsigned sho * Common usages: * [0] holds number of targets in area * [1] holds the id of the original target -* [2] counts how many targets have already been processed +* [2] counts how many targets have been processed. counter is added in skill_area_sub if the foreach function flag is: flag&(SD_SPLASH|SD_PREAMBLE) */ static int skill_area_temp[8]; @@ -8510,17 +8510,23 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; case RK_FIGHTINGSPIRIT: { - int atkbonus = 7 * party_foreachsamemap(skill_area_sub,sd,skill_get_splash(skill_id,skill_lv),src,skill_id,skill_lv,tick,BCT_PARTY,skill_area_sub_count); + // val1: ATKBonus: Caster: 7*PartyMember. Member: 7*PartyMember/4 + // val2: ASPD boost: [RK_RUNEMASTERYlevel * 4 / 10] * 10 ==> RK_RUNEMASTERYlevel * 4 if( flag&1 ) { - if( src == bl ) - sc_start2(src,bl,type,100,atkbonus,10*((sd) ? pc_checkskill(sd,RK_RUNEMASTERY) : skill_get_max(RK_RUNEMASTERY)),skill_get_time(skill_id,skill_lv)); + if( skill_area_temp[1] == bl->id ) + sc_start2(src,bl,type,100,7 * skill_area_temp[0],4 * ((sd) ? pc_checkskill(sd,RK_RUNEMASTERY) : skill_get_max(RK_RUNEMASTERY)),skill_area_temp[4]); else - sc_start(src,bl,type,100,atkbonus / 4,skill_get_time(skill_id,skill_lv)); - } else if( sd && pc_checkskill(sd,RK_RUNEMASTERY) >= 5 ) { - if( sd->status.party_id ) + sc_start(src,bl,type,100,skill_area_temp[3],skill_area_temp[4]); + } else { + if( sd && sd->status.party_id ) { + skill_area_temp[0] = party_foreachsamemap(skill_area_sub,sd,skill_get_splash(skill_id,skill_lv),src,skill_id,skill_lv,tick,BCT_PARTY,skill_area_sub_count); + skill_area_temp[1] = src->id; + skill_area_temp[3] = 7 * skill_area_temp[0] / 4; + skill_area_temp[4] = skill_get_time(skill_id,skill_lv); party_foreachsamemap(skill_area_sub,sd,skill_get_splash(skill_id,skill_lv),src,skill_id,skill_lv,tick,flag|BCT_PARTY|1,skill_castend_nodamage_id); + } else - sc_start2(src,bl,type,100,7,10*((sd) ? pc_checkskill(sd,RK_RUNEMASTERY) : skill_get_max(RK_RUNEMASTERY)),skill_get_time(skill_id,skill_lv)); + sc_start2(src,bl,type,100,7,4 * ((sd) ? pc_checkskill(sd,RK_RUNEMASTERY) : skill_get_max(RK_RUNEMASTERY)),skill_get_time(skill_id,skill_lv)); clif_skill_nodamage(src,bl,skill_id,1,1); } } diff --git a/src/map/status.c b/src/map/status.c index 6e84ba2917..109ff74684 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -6202,7 +6202,7 @@ static short status_calc_fix_aspd(struct block_list *bl, struct status_change *s || sc->data[SC_WILD_STORM_OPTION])) aspd -= 50; // +5 ASPD if (sc->data[SC_FIGHTINGSPIRIT] && sc->data[SC_FIGHTINGSPIRIT]->val2) - aspd -= (bl->type==BL_PC?pc_checkskill((TBL_PC *)bl, RK_RUNEMASTERY):10) / 10 * 40; + aspd -= sc->data[SC_FIGHTINGSPIRIT]->val2; if (sc->data[SC_MTF_ASPD]) aspd -= 10;