diff options
author | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-08-29 18:30:25 +0000 |
---|---|---|
committer | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-08-29 18:30:25 +0000 |
commit | 4eb0c37f3c4c9bc545a37afcbfdd0493df29de28 (patch) | |
tree | 61e0caaaba6a9bab1431ec1be4e9cf103f2a17ee /src/map/skill.c | |
parent | ad8fe4131ee71b832d9cf5c75997705ff0f9770a (diff) | |
download | hercules-4eb0c37f3c4c9bc545a37afcbfdd0493df29de28.tar.gz hercules-4eb0c37f3c4c9bc545a37afcbfdd0493df29de28.tar.bz2 hercules-4eb0c37f3c4c9bc545a37afcbfdd0493df29de28.tar.xz hercules-4eb0c37f3c4c9bc545a37afcbfdd0493df29de28.zip |
- 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
Diffstat (limited to 'src/map/skill.c')
-rw-r--r-- | src/map/skill.c | 23 |
1 files changed, 12 insertions, 11 deletions
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); |