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

Fixes monster Sharp Shooting damage formula (#5822)

* Fixes #5769.
* Adjusts the formula for Sharp Shooting if a monster uses the skill.
Thanks to @mrjnumber1 and @Lemongrass3110!
Aleos пре 4 година
родитељ
комит
96163623b9
2 измењених фајлова са 12 додато и 0 уклоњено
  1. 8 0
      src/map/battle.cpp
  2. 4 0
      src/map/skill.cpp

+ 8 - 0
src/map/battle.cpp

@@ -4117,6 +4117,14 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 #endif
 			break;
 		case SN_SHARPSHOOTING:
+			if (src->type == BL_MOB) { // TODO: Did these formulas change in the renewal balancing?
+				if (wd->miscflag & 1) // Splash damage bonus
+					skillratio += -100 + 140 * skill_lv;
+				else
+					skillratio += 100 + 50 * skill_lv;
+				break;
+			}
+			// Fall through
 		case MA_SHARPSHOOTING:
 #ifdef RENEWAL
 			skillratio += 50 + 200 * skill_lv;

+ 4 - 0
src/map/skill.cpp

@@ -4933,6 +4933,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 		break;
 
 	case SN_SHARPSHOOTING:
+		flag |= 1; // Flag for specific mob damage formula
 	case MA_SHARPSHOOTING:
 	case NJ_KAMAITACHI:
 	case NPC_DARKPIERCING:
@@ -4947,6 +4948,9 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 			if (!(map_foreachindir(skill_attack_area, src->m, src->x, src->y, bl->x, bl->y,
 			   skill_get_splash(skill_id, skill_lv), skill_get_maxcount(skill_id, skill_lv), 0, splash_target(src),
 			   skill_get_type(skill_id), src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY))) {
+			   	if (skill_id == SN_SHARPSHOOTING)
+			   		flag &= ~1; // Only targets in the splash area are affected
+
 				//These skills hit at least the target if the AoE doesn't hit
 				skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
 			}