Преглед изворни кода

Fixed an issue with bReduceDamageReturn (#5722)

Fixed #5650
Thanks to @eppc0330, Lemongrass3110 !
Atemo пре 4 година
родитељ
комит
6b8e369da3
2 измењених фајлова са 9 додато и 8 уклоњено
  1. 6 4
      src/map/battle.cpp
  2. 3 4
      src/map/skill.cpp

+ 6 - 4
src/map/battle.cpp

@@ -7374,10 +7374,12 @@ int64 battle_calc_return_damage(struct block_list* bl, struct block_list *src, i
 		}
 	}
 
-	if (sd && sd->bonus.reduce_damage_return != 0) {
-		rdamage -= rdamage * sd->bonus.reduce_damage_return / 100;
-		if (rdamage < 1)
-			rdamage = 1;
+	if (rdamage > 0) {
+		map_session_data* ssd = BL_CAST(BL_PC, src);
+		if (ssd && ssd->bonus.reduce_damage_return != 0) {
+			rdamage -= rdamage * ssd->bonus.reduce_damage_return / 100;
+			rdamage = i64max(rdamage, 1);
+		}
 	}
 
 	if (ssc) {

+ 3 - 4
src/map/skill.cpp

@@ -3430,10 +3430,9 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
 					dmg.damage -= dmg.damage * (6 * (1+per)) / 100;
 				}
 
-				if (sd && sd->bonus.reduce_damage_return != 0) {
-					dmg.damage -= dmg.damage * sd->bonus.reduce_damage_return / 100;
-					if (dmg.damage < 1)
-						dmg.damage = 1;
+				if (dmg.damage > 0 && tsd && tsd->bonus.reduce_damage_return != 0) {
+					dmg.damage -= dmg.damage * tsd->bonus.reduce_damage_return / 100;
+					dmg.damage = i64max(dmg.damage, 1);
 				}
 			}
 #endif