瀏覽代碼

Corrected Critical bonuses (#3506)

* Fixes #3501.
* Critical bonuses bCritAtkRate and bCriticalLong should not be applying to skills.
Thanks to @mrjnumber1!
Aleos 6 年之前
父節點
當前提交
147e8da2e4
共有 1 個文件被更改,包括 4 次插入5 次删除
  1. 4 5
      src/map/battle.cpp

+ 4 - 5
src/map/battle.cpp

@@ -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))