summaryrefslogtreecommitdiff
path: root/src/map/skill.c
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-08-29 18:30:25 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-08-29 18:30:25 +0000
commit4eb0c37f3c4c9bc545a37afcbfdd0493df29de28 (patch)
tree61e0caaaba6a9bab1431ec1be4e9cf103f2a17ee /src/map/skill.c
parentad8fe4131ee71b832d9cf5c75997705ff0f9770a (diff)
downloadhercules-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.c23
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);