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
This commit is contained in:
parent
f91bf02154
commit
1640b40236
@ -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) {
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user