From 1640b4023620f122a9dae28098d19f9766fd28f0 Mon Sep 17 00:00:00 2001 From: Playtester Date: Thu, 26 May 2016 20:06:24 +0200 Subject: [PATCH] Official Enchant Blade damage (fixes #975) - Implemented the fully official damage calculation for this skill, it's now 100% accurate ** Partially reverted c3f4618 ** The damage bonus is: [((SkillLv x 20) + 100) x srcBaseLevel / 150] + srcINT + srcMATK - tarMDEF - tarMDEF2 ** The damage bonus from base level and INT is calculated when the status change starts ** The damage bonus from MATK and the reduction from MDEF/MDEF2 is calculated per hit --- src/map/battle.c | 30 ++++++++++++++---------------- src/map/skill.c | 2 +- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/map/battle.c b/src/map/battle.c index f67ef22104..29b89ce040 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -4445,22 +4445,6 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s #endif } } - if (!skill_id) { - if (sc->data[SC_ENCHANTBLADE]) { - //[((Skill Lv x 20) + 100) x (casterBaseLevel / 150)] + casterInt - int64 enchant_dmg = (sc->data[SC_ENCHANTBLADE]->val1 * 20 + 100) * status_get_lv(src) / 150 + status_get_int(src); - - enchant_dmg = enchant_dmg - (tstatus->mdef + tstatus->mdef2); - if (sstatus->matk_max > sstatus->matk_min) - enchant_dmg = enchant_dmg + sstatus->matk_min + rnd()%(sstatus->matk_max - sstatus->matk_min); - else - enchant_dmg = enchant_dmg + sstatus->matk_min; - if (enchant_dmg > 0) { - ATK_ADD(wd.damage, wd.damage2, enchant_dmg); - RE_ALLATK_ADD(wd, enchant_dmg); - } - } - } if (sc->data[SC_GLOOMYDAY_SK] && (inf3&INF3_SC_GLOOMYDAY_SK)) { ATK_ADDRATE(wd.damage, wd.damage2, sc->data[SC_GLOOMYDAY_SK]->val2); RE_ALLATK_ADDRATE(wd, sc->data[SC_GLOOMYDAY_SK]->val2); @@ -5023,6 +5007,20 @@ struct Damage battle_calc_weapon_final_atk_modifiers(struct Damage wd, struct bl hp = 2*hp/100; //2% hp loss per hit status_zap(src, hp, 0); } + // Only affecting non-skills + if (!skill_id) { + if (sc->data[SC_ENCHANTBLADE]) { + //[((Skill Lv x 20) + 100) x (casterBaseLevel / 150)] + casterInt + MATK - MDEF - MDEF2 + int64 enchant_dmg = sc->data[SC_ENCHANTBLADE]->val2; + if (sstatus->matk_max > sstatus->matk_min) + enchant_dmg = enchant_dmg + sstatus->matk_min + rnd() % (sstatus->matk_max - sstatus->matk_min); + else + enchant_dmg = enchant_dmg + sstatus->matk_min; + enchant_dmg = enchant_dmg - (tstatus->mdef + tstatus->mdef2); + if (enchant_dmg > 0) + ATK_ADD(wd.damage, wd.damage2, enchant_dmg); + } + } status_change_end(src,SC_CAMOUFLAGE, INVALID_TIMER); } switch (skill_id) { diff --git a/src/map/skill.c b/src/map/skill.c index 2654ee5c09..a451346fbb 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -8801,7 +8801,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; case RK_ENCHANTBLADE: clif_skill_nodamage(src,bl,skill_id,skill_lv, - sc_start2(src,bl,type,100,skill_lv,(100+20*skill_lv)*(status_get_lv(src)/150)+sstatus->int_,skill_get_time(skill_id,skill_lv))); + sc_start2(src,bl,type,100,skill_lv,((100+20*skill_lv)*status_get_lv(src))/150+sstatus->int_,skill_get_time(skill_id,skill_lv))); break; case RK_DRAGONHOWLING: if( flag&1)