Explorar o código

Corrected Enchant Blade damage formula (fixes #975)
* Enchant Blade now factors in target's DEF/MDEF and source's MATK.

aleos89 %!s(int64=9) %!d(string=hai) anos
pai
achega
44cf0d0e93
Modificáronse 1 ficheiros con 16 adicións e 7 borrados
  1. 16 7
      src/map/battle.c

+ 16 - 7
src/map/battle.c

@@ -4433,6 +4433,22 @@ 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);
@@ -4995,13 +5011,6 @@ 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);
 		}
-		// affecting non-skills
-		if( !skill_id ) {
-			if( sc->data[SC_ENCHANTBLADE] && sd && ( (is_attack_right_handed(src, skill_id) && sd->weapontype1) || (is_attack_left_handed(src, skill_id) && sd->weapontype2) ) ) {
-				//[( ( Skill Lv x 20 ) + 100 ) x ( casterBaseLevel / 150 )] + casterInt
-				ATK_ADD(wd.damage, wd.damage2, ( sc->data[SC_ENCHANTBLADE]->val1*20+100 ) * status_get_lv(src) / 150 + status_get_int(src) );
-			}
-		}
 		status_change_end(src,SC_CAMOUFLAGE, INVALID_TIMER);
 	}
 	switch (skill_id) {