From 4eb0c37f3c4c9bc545a37afcbfdd0493df29de28 Mon Sep 17 00:00:00 2001 From: skotlex Date: Wed, 29 Aug 2007 18:30:25 +0000 Subject: - Added bonus bSkillHeal to distinguish offensive skill damage increases from healing power boosts. - Moved battle_skillatk_bonus to pc.c, cleaned up the related skillatk bonus code to consider the skillheal bonus option. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@11085 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/skill.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'src/map/skill.c') diff --git a/src/map/skill.c b/src/map/skill.c index f35de5edd..339525d93 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -849,13 +849,8 @@ int skill_calc_heal (struct block_list *src, struct block_list *target, int skil return battle_config.max_heal; heal = ( status_get_lv(src)+status_get_int(src) )/8 *(4+ skill_lv*8); - if(src->type == BL_PC) - { - if ((skill = pc_checkskill((TBL_PC*)src, HP_MEDITATIO)) > 0) - heal += heal * skill * 2 / 100; - if ((skill = battle_skillatk_bonus((TBL_PC*)src, AL_HEAL)) > 0) - heal += heal * skill / 100; - } + if(src->type == BL_PC && ((skill = pc_checkskill((TBL_PC*)src, HP_MEDITATIO)) > 0)) + heal += heal * skill * 2 / 100; if(src->type == BL_HOM && (skill = merc_hom_checkskill(((TBL_HOM*)src), HLIF_BRAIN)) > 0) heal += heal * skill * 2 / 100; @@ -3450,6 +3445,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in if (status_isimmune(bl) || (dstmd && dstmd->class_ == MOBID_EMPERIUM)) heal=0; if (sd) { + if ((i = pc_skillheal_bonus(sd, skillid))) + heal += heal * i / 100; if (sd && dstsd && sd->status.partner_id == dstsd->status.char_id && (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.sex == 0) heal = heal*2; @@ -4667,7 +4664,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in sp = sp * (100 + pc_checkskill(dstsd,MG_SRECOVERY)*10) / 100; } } - if ((i = battle_skillatk_bonus(sd, skillid)) > 0) + if ((i = pc_skillheal_bonus(sd, skillid))) { hp += hp * i / 100; sp += sp * i / 100; @@ -5640,6 +5637,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in if (!bl) bl = src; i = skill_calc_heal( src, bl, 1+rand()%skilllv); + if (sd && (rnd = pc_skillheal_bonus(sd, skillid)) > 0) + i += i * rnd / 100; //Eh? why double skill packet? clif_skill_nodamage(src,bl,AL_HEAL,i,1); clif_skill_nodamage(src,bl,skillid,i,1); @@ -6297,7 +6296,7 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, int s i = pc_checkskill(sd,CR_SLIMPITCHER)*10 + pc_checkskill(sd,AM_POTIONPITCHER)*10 + pc_checkskill(sd,AM_LEARNINGPOTION)*5 - + battle_skillatk_bonus(sd, skillid); + + pc_skillheal_bonus(sd, skillid); potion_hp = potion_hp * (100+i)/100; potion_sp = potion_sp * (100+i)/100; @@ -6703,8 +6702,6 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid, case NPC_EVILLAND: val1=(skilllv+3)*2; val2=(skilllv>6)?(skillid == PR_SANCTUARY?777:666):skilllv*100; - if (sd && (i = battle_skillatk_bonus(sd, skillid)) > 0) - val2 += val2 * i / 100; break; case WZ_FIREPILLAR: @@ -7272,6 +7269,8 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns int heal = sg->val2; if (tstatus->hp >= tstatus->max_hp) break; + if (sd && (type = pc_skillheal_bonus(sd, sg->skill_id))) + heal += heal * type / 100; if (tsc && tsc->count && tsc->data[SC_CRITICALWOUND].timer!=-1) heal -= heal * tsc->data[SC_CRITICALWOUND].val2 / 100; if (status_isimmune(bl)) @@ -7450,6 +7449,8 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns if (sg->src_id == bl->id) break; heal = sg->val2; + if (sd && (type = pc_skillheal_bonus(sd, sg->skill_id))) + heal += heal * type / 100; if(tsc && tsc->count && tsc->data[SC_CRITICALWOUND].timer!=-1) heal -= heal * tsc->data[SC_CRITICALWOUND].val2 / 100; clif_skill_nodamage(&src->bl, bl, AL_HEAL, heal, 1); -- cgit v1.2.3-60-g2f50