|
@@ -2406,10 +2406,9 @@ static bool is_attack_critical(struct Damage wd, struct block_list *src, struct
|
|
|
|
|
|
if (sd) {
|
|
|
cri += sd->critaddrace[tstatus->race] + sd->critaddrace[RC_ALL];
|
|
|
- if(is_skill_using_arrow(src, skill_id)) {
|
|
|
+ if(!skill_id && is_skill_using_arrow(src, skill_id)) {
|
|
|
cri += sd->bonus.arrow_cri;
|
|
|
- if (!skill_id)
|
|
|
- cri += sd->bonus.critical_rangeatk;
|
|
|
+ cri += sd->bonus.critical_rangeatk;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -3278,7 +3277,7 @@ struct Damage battle_calc_skill_base_damage(struct Damage wd, struct block_list
|
|
|
RE_ALLATK_ADDRATE(wd, sd->bonus.atk_rate);
|
|
|
}
|
|
|
#ifndef RENEWAL
|
|
|
- if(sd->bonus.crit_atk_rate && is_attack_critical(wd, src, target, skill_id, skill_lv, false)) { // add +crit damage bonuses here in pre-renewal mode [helvetica]
|
|
|
+ if(sd->bonus.crit_atk_rate && !skill_id && is_attack_critical(wd, src, target, skill_id, skill_lv, false)) { // add +crit damage bonuses here in pre-renewal mode [helvetica]
|
|
|
ATK_ADDRATE(wd.damage, wd.damage2, sd->bonus.crit_atk_rate);
|
|
|
}
|
|
|
#endif
|
|
@@ -5481,7 +5480,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
|
|
|
return wd; //Enough, rest is not needed.
|
|
|
|
|
|
#ifdef RENEWAL
|
|
|
- if (is_attack_critical(wd, src, target, skill_id, skill_lv, false)) {
|
|
|
+ if (!skill_id && is_attack_critical(wd, src, target, skill_id, skill_lv, false)) {
|
|
|
if (sd) { //Check for player so we don't crash out, monsters don't have bonus crit rates [helvetica]
|
|
|
wd.damage = (int)floor((float)((wd.damage * 140) / 100 * (100 + sd->bonus.crit_atk_rate)) / 100);
|
|
|
if (is_attack_left_handed(src, skill_id))
|