Bläddra i källkod

Official Enchant Blade damage (fixes #975)
- Implemented the fully official damage calculation for this skill, it's now 100% accurate
** Partially reverted c3f4618
** The damage bonus is: [((SkillLv x 20) + 100) x srcBaseLevel / 150] + srcINT + srcMATK - tarMDEF - tarMDEF2
** The damage bonus from base level and INT is calculated when the status change starts
** The damage bonus from MATK and the reduction from MDEF/MDEF2 is calculated per hit

Playtester 9 år sedan
förälder
incheckning
1640b40236
2 ändrade filer med 15 tillägg och 17 borttagningar
  1. 14 16
      src/map/battle.c
  2. 1 1
      src/map/skill.c

+ 14 - 16
src/map/battle.c

@@ -4445,22 +4445,6 @@ 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);
@@ -5023,6 +5007,20 @@ 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);
 		}
+		// Only affecting non-skills
+		if (!skill_id) {
+			if (sc->data[SC_ENCHANTBLADE]) {
+				//[((Skill Lv x 20) + 100) x (casterBaseLevel / 150)] + casterInt + MATK - MDEF - MDEF2
+				int64 enchant_dmg = sc->data[SC_ENCHANTBLADE]->val2;
+				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;
+				enchant_dmg = enchant_dmg - (tstatus->mdef + tstatus->mdef2);
+				if (enchant_dmg > 0)
+					ATK_ADD(wd.damage, wd.damage2, enchant_dmg);
+			}
+		}
 		status_change_end(src,SC_CAMOUFLAGE, INVALID_TIMER);
 	}
 	switch (skill_id) {

+ 1 - 1
src/map/skill.c

@@ -8801,7 +8801,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 		break;
 	case RK_ENCHANTBLADE:
 		clif_skill_nodamage(src,bl,skill_id,skill_lv,
-			sc_start2(src,bl,type,100,skill_lv,(100+20*skill_lv)*(status_get_lv(src)/150)+sstatus->int_,skill_get_time(skill_id,skill_lv)));
+			sc_start2(src,bl,type,100,skill_lv,((100+20*skill_lv)*status_get_lv(src))/150+sstatus->int_,skill_get_time(skill_id,skill_lv)));
 		break;
 	case RK_DRAGONHOWLING:
 		if( flag&1)