Balance mod for critical chance and damage.
This commit is contained in:
		| @@ -1118,14 +1118,26 @@ public final class Config | ||||
| 	public static Map<ClassId, Float> PVP_MAGICAL_SKILL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVE_MAGICAL_SKILL_DEFENCE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVP_MAGICAL_SKILL_DEFENCE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVE_MAGICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVP_MAGICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVE_MAGICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVP_MAGICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVE_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVP_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVE_PHYSICAL_SKILL_DEFENCE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVP_PHYSICAL_SKILL_DEFENCE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVE_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVP_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVE_PHYSICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVP_PHYSICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVE_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVP_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVE_PHYSICAL_ATTACK_DEFENCE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVP_PHYSICAL_ATTACK_DEFENCE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVE_PHYSICAL_ATTACK_CRITICAL_CHANCE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVP_PHYSICAL_ATTACK_CRITICAL_CHANCE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVE_PHYSICAL_ATTACK_CRITICAL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVP_PHYSICAL_ATTACK_CRITICAL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVE_BLOW_SKILL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVP_BLOW_SKILL_DAMAGE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| 	public static Map<ClassId, Float> PVE_BLOW_SKILL_DEFENCE_MULTIPLIERS = new ConcurrentHashMap<>(); | ||||
| @@ -2589,6 +2601,62 @@ public final class Config | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pveMagicalSkillCriticalChanceMultipliers = ClassBalance.getString("PveMagicalSkillCriticalChanceMultipliers", "").trim().split(";"); | ||||
| 			PVE_MAGICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS.clear(); | ||||
| 			if (pveMagicalSkillCriticalChanceMultipliers.length > 0) | ||||
| 			{ | ||||
| 				for (String info : pveMagicalSkillCriticalChanceMultipliers) | ||||
| 				{ | ||||
| 					final String[] classInfo = info.trim().split("[*]"); | ||||
| 					if (classInfo.length == 2) | ||||
| 					{ | ||||
| 						final String id = classInfo[0].trim(); | ||||
| 						PVE_MAGICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS.put(Util.isDigit(id) ? ClassId.getClassId(Integer.parseInt(id)) : Enum.valueOf(ClassId.class, id), Float.parseFloat(classInfo[1].trim())); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pvpMagicalSkillCriticalChanceMultipliers = ClassBalance.getString("PvpMagicalSkillCriticalChanceMultipliers", "").trim().split(";"); | ||||
| 			PVP_MAGICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS.clear(); | ||||
| 			if (pvpMagicalSkillCriticalChanceMultipliers.length > 0) | ||||
| 			{ | ||||
| 				for (String info : pvpMagicalSkillCriticalChanceMultipliers) | ||||
| 				{ | ||||
| 					final String[] classInfo = info.trim().split("[*]"); | ||||
| 					if (classInfo.length == 2) | ||||
| 					{ | ||||
| 						final String id = classInfo[0].trim(); | ||||
| 						PVP_MAGICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS.put(Util.isDigit(id) ? ClassId.getClassId(Integer.parseInt(id)) : Enum.valueOf(ClassId.class, id), Float.parseFloat(classInfo[1].trim())); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pveMagicalSkillCriticalDamageMultipliers = ClassBalance.getString("PveMagicalSkillCriticalDamageMultipliers", "").trim().split(";"); | ||||
| 			PVE_MAGICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS.clear(); | ||||
| 			if (pveMagicalSkillCriticalDamageMultipliers.length > 0) | ||||
| 			{ | ||||
| 				for (String info : pveMagicalSkillCriticalDamageMultipliers) | ||||
| 				{ | ||||
| 					final String[] classInfo = info.trim().split("[*]"); | ||||
| 					if (classInfo.length == 2) | ||||
| 					{ | ||||
| 						final String id = classInfo[0].trim(); | ||||
| 						PVE_MAGICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS.put(Util.isDigit(id) ? ClassId.getClassId(Integer.parseInt(id)) : Enum.valueOf(ClassId.class, id), Float.parseFloat(classInfo[1].trim())); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pvpMagicalSkillCriticalDamageMultipliers = ClassBalance.getString("PvpMagicalSkillCriticalDamageMultipliers", "").trim().split(";"); | ||||
| 			PVP_MAGICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS.clear(); | ||||
| 			if (pvpMagicalSkillCriticalDamageMultipliers.length > 0) | ||||
| 			{ | ||||
| 				for (String info : pvpMagicalSkillCriticalDamageMultipliers) | ||||
| 				{ | ||||
| 					final String[] classInfo = info.trim().split("[*]"); | ||||
| 					if (classInfo.length == 2) | ||||
| 					{ | ||||
| 						final String id = classInfo[0].trim(); | ||||
| 						PVP_MAGICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS.put(Util.isDigit(id) ? ClassId.getClassId(Integer.parseInt(id)) : Enum.valueOf(ClassId.class, id), Float.parseFloat(classInfo[1].trim())); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pvePhysicalSkillDamageMultipliers = ClassBalance.getString("PvePhysicalSkillDamageMultipliers", "").trim().split(";"); | ||||
| 			PVE_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS.clear(); | ||||
| 			if (pvePhysicalSkillDamageMultipliers.length > 0) | ||||
| @@ -2645,6 +2713,62 @@ public final class Config | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pvePhysicalSkillCriticalChanceMultipliers = ClassBalance.getString("PvePhysicalSkillCriticalChanceMultipliers", "").trim().split(";"); | ||||
| 			PVE_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS.clear(); | ||||
| 			if (pvePhysicalSkillCriticalChanceMultipliers.length > 0) | ||||
| 			{ | ||||
| 				for (String info : pvePhysicalSkillCriticalChanceMultipliers) | ||||
| 				{ | ||||
| 					final String[] classInfo = info.trim().split("[*]"); | ||||
| 					if (classInfo.length == 2) | ||||
| 					{ | ||||
| 						final String id = classInfo[0].trim(); | ||||
| 						PVE_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS.put(Util.isDigit(id) ? ClassId.getClassId(Integer.parseInt(id)) : Enum.valueOf(ClassId.class, id), Float.parseFloat(classInfo[1].trim())); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pvpPhysicalSkillCriticalChanceMultipliers = ClassBalance.getString("PvpPhysicalSkillCriticalChanceMultipliers", "").trim().split(";"); | ||||
| 			PVP_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS.clear(); | ||||
| 			if (pvpPhysicalSkillCriticalChanceMultipliers.length > 0) | ||||
| 			{ | ||||
| 				for (String info : pvpPhysicalSkillCriticalChanceMultipliers) | ||||
| 				{ | ||||
| 					final String[] classInfo = info.trim().split("[*]"); | ||||
| 					if (classInfo.length == 2) | ||||
| 					{ | ||||
| 						final String id = classInfo[0].trim(); | ||||
| 						PVP_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS.put(Util.isDigit(id) ? ClassId.getClassId(Integer.parseInt(id)) : Enum.valueOf(ClassId.class, id), Float.parseFloat(classInfo[1].trim())); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pvePhysicalSkillCriticalDamageMultipliers = ClassBalance.getString("PvePhysicalSkillCriticalDamageMultipliers", "").trim().split(";"); | ||||
| 			PVE_PHYSICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS.clear(); | ||||
| 			if (pvePhysicalSkillCriticalDamageMultipliers.length > 0) | ||||
| 			{ | ||||
| 				for (String info : pvePhysicalSkillCriticalDamageMultipliers) | ||||
| 				{ | ||||
| 					final String[] classInfo = info.trim().split("[*]"); | ||||
| 					if (classInfo.length == 2) | ||||
| 					{ | ||||
| 						final String id = classInfo[0].trim(); | ||||
| 						PVE_PHYSICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS.put(Util.isDigit(id) ? ClassId.getClassId(Integer.parseInt(id)) : Enum.valueOf(ClassId.class, id), Float.parseFloat(classInfo[1].trim())); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pvpPhysicalSkillCriticalDamageMultipliers = ClassBalance.getString("PvpPhysicalSkillCriticalDamageMultipliers", "").trim().split(";"); | ||||
| 			PVP_PHYSICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS.clear(); | ||||
| 			if (pvpPhysicalSkillCriticalDamageMultipliers.length > 0) | ||||
| 			{ | ||||
| 				for (String info : pvpPhysicalSkillCriticalDamageMultipliers) | ||||
| 				{ | ||||
| 					final String[] classInfo = info.trim().split("[*]"); | ||||
| 					if (classInfo.length == 2) | ||||
| 					{ | ||||
| 						final String id = classInfo[0].trim(); | ||||
| 						PVP_PHYSICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS.put(Util.isDigit(id) ? ClassId.getClassId(Integer.parseInt(id)) : Enum.valueOf(ClassId.class, id), Float.parseFloat(classInfo[1].trim())); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pvePhysicalAttackDamageMultipliers = ClassBalance.getString("PvePhysicalAttackDamageMultipliers", "").trim().split(";"); | ||||
| 			PVE_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS.clear(); | ||||
| 			if (pvePhysicalAttackDamageMultipliers.length > 0) | ||||
| @@ -2701,6 +2825,62 @@ public final class Config | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pvePhysicalAttackCriticalChanceMultipliers = ClassBalance.getString("PvePhysicalAttackCriticalChanceMultipliers", "").trim().split(";"); | ||||
| 			PVE_PHYSICAL_ATTACK_CRITICAL_CHANCE_MULTIPLIERS.clear(); | ||||
| 			if (pvePhysicalAttackCriticalChanceMultipliers.length > 0) | ||||
| 			{ | ||||
| 				for (String info : pvePhysicalAttackCriticalChanceMultipliers) | ||||
| 				{ | ||||
| 					final String[] classInfo = info.trim().split("[*]"); | ||||
| 					if (classInfo.length == 2) | ||||
| 					{ | ||||
| 						final String id = classInfo[0].trim(); | ||||
| 						PVE_PHYSICAL_ATTACK_CRITICAL_CHANCE_MULTIPLIERS.put(Util.isDigit(id) ? ClassId.getClassId(Integer.parseInt(id)) : Enum.valueOf(ClassId.class, id), Float.parseFloat(classInfo[1].trim())); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pvpPhysicalAttackCriticalChanceMultipliers = ClassBalance.getString("PvpPhysicalAttackCriticalChanceMultipliers", "").trim().split(";"); | ||||
| 			PVP_PHYSICAL_ATTACK_CRITICAL_CHANCE_MULTIPLIERS.clear(); | ||||
| 			if (pvpPhysicalAttackCriticalChanceMultipliers.length > 0) | ||||
| 			{ | ||||
| 				for (String info : pvpPhysicalAttackCriticalChanceMultipliers) | ||||
| 				{ | ||||
| 					final String[] classInfo = info.trim().split("[*]"); | ||||
| 					if (classInfo.length == 2) | ||||
| 					{ | ||||
| 						final String id = classInfo[0].trim(); | ||||
| 						PVP_PHYSICAL_ATTACK_CRITICAL_CHANCE_MULTIPLIERS.put(Util.isDigit(id) ? ClassId.getClassId(Integer.parseInt(id)) : Enum.valueOf(ClassId.class, id), Float.parseFloat(classInfo[1].trim())); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pvePhysicalAttackCriticalDamageMultipliers = ClassBalance.getString("PvePhysicalAttackCriticalDamageMultipliers", "").trim().split(";"); | ||||
| 			PVE_PHYSICAL_ATTACK_CRITICAL_DAMAGE_MULTIPLIERS.clear(); | ||||
| 			if (pvePhysicalAttackCriticalDamageMultipliers.length > 0) | ||||
| 			{ | ||||
| 				for (String info : pvePhysicalAttackCriticalDamageMultipliers) | ||||
| 				{ | ||||
| 					final String[] classInfo = info.trim().split("[*]"); | ||||
| 					if (classInfo.length == 2) | ||||
| 					{ | ||||
| 						final String id = classInfo[0].trim(); | ||||
| 						PVE_PHYSICAL_ATTACK_CRITICAL_DAMAGE_MULTIPLIERS.put(Util.isDigit(id) ? ClassId.getClassId(Integer.parseInt(id)) : Enum.valueOf(ClassId.class, id), Float.parseFloat(classInfo[1].trim())); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pvpPhysicalAttackCriticalDamageMultipliers = ClassBalance.getString("PvpPhysicalAttackCriticalDamageMultipliers", "").trim().split(";"); | ||||
| 			PVP_PHYSICAL_ATTACK_CRITICAL_DAMAGE_MULTIPLIERS.clear(); | ||||
| 			if (pvpPhysicalAttackCriticalDamageMultipliers.length > 0) | ||||
| 			{ | ||||
| 				for (String info : pvpPhysicalAttackCriticalDamageMultipliers) | ||||
| 				{ | ||||
| 					final String[] classInfo = info.trim().split("[*]"); | ||||
| 					if (classInfo.length == 2) | ||||
| 					{ | ||||
| 						final String id = classInfo[0].trim(); | ||||
| 						PVP_PHYSICAL_ATTACK_CRITICAL_DAMAGE_MULTIPLIERS.put(Util.isDigit(id) ? ClassId.getClassId(Integer.parseInt(id)) : Enum.valueOf(ClassId.class, id), Float.parseFloat(classInfo[1].trim())); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			final String[] pveBlowSkillDamageMultipliers = ClassBalance.getString("PveBlowSkillDamageMultipliers", "").trim().split(";"); | ||||
| 			PVE_BLOW_SKILL_DAMAGE_MULTIPLIERS.clear(); | ||||
| 			if (pveBlowSkillDamageMultipliers.length > 0) | ||||
|   | ||||
| @@ -230,7 +230,13 @@ public final class Formulas | ||||
| 					return Math.min(finalRate, 32) > Rnd.get(100); | ||||
| 				} | ||||
| 				 | ||||
| 				return Math.min(finalRate, 20) > Rnd.get(100); | ||||
| 				double balanceMod = 1; | ||||
| 				if (creature.isPlayable()) | ||||
| 				{ | ||||
| 					balanceMod = target.isPlayable() ? Config.PVP_MAGICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS.getOrDefault(creature.getActingPlayer().getClassId(), 1f) : Config.PVE_MAGICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS.getOrDefault(creature.getActingPlayer().getClassId(), 1f); | ||||
| 				} | ||||
| 				 | ||||
| 				return (Math.min(finalRate, 20) * balanceMod) > Rnd.get(100); | ||||
| 			} | ||||
| 			 | ||||
| 			// Physical skill critical rate. | ||||
| @@ -250,8 +256,14 @@ public final class Formulas | ||||
| 			} | ||||
| 			 | ||||
| 			final double rateBonus = creature.getStat().getValue(Stats.CRITICAL_RATE_SKILL, 1); | ||||
| 			double finalRate = rate * statBonus * rateBonus; | ||||
| 			return finalRate > Rnd.get(100); | ||||
| 			 | ||||
| 			double balanceMod = 1; | ||||
| 			if (creature.isPlayable()) | ||||
| 			{ | ||||
| 				balanceMod = target.isPlayable() ? Config.PVP_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS.getOrDefault(creature.getActingPlayer().getClassId(), 1f) : Config.PVE_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS.getOrDefault(creature.getActingPlayer().getClassId(), 1f); | ||||
| 			} | ||||
| 			 | ||||
| 			return (rate * statBonus * rateBonus * balanceMod) > Rnd.get(100); | ||||
| 		} | ||||
| 		 | ||||
| 		// Autoattack critical rate. | ||||
| @@ -271,7 +283,13 @@ public final class Formulas | ||||
| 		// Autoattack critical rate is limited between 3%-97%. | ||||
| 		rate = CommonUtil.constrain(rate, 3, 97); | ||||
| 		 | ||||
| 		return rate > Rnd.get(100); | ||||
| 		double balanceMod = 1; | ||||
| 		if (creature.isPlayable()) | ||||
| 		{ | ||||
| 			balanceMod = target.isPlayable() ? Config.PVP_PHYSICAL_ATTACK_CRITICAL_CHANCE_MULTIPLIERS.getOrDefault(creature.getActingPlayer().getClassId(), 1f) : Config.PVE_PHYSICAL_ATTACK_CRITICAL_CHANCE_MULTIPLIERS.getOrDefault(creature.getActingPlayer().getClassId(), 1f); | ||||
| 		} | ||||
| 		 | ||||
| 		return (rate * balanceMod) > Rnd.get(100); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| @@ -315,6 +333,7 @@ public final class Formulas | ||||
| 	{ | ||||
| 		final double criticalDamage; | ||||
| 		final double defenceCriticalDamage; | ||||
| 		double balanceMod = 1; | ||||
| 		 | ||||
| 		if (skill != null) | ||||
| 		{ | ||||
| @@ -323,11 +342,19 @@ public final class Formulas | ||||
| 				// Magic critical damage. | ||||
| 				criticalDamage = attacker.getStat().getValue(Stats.MAGIC_CRITICAL_DAMAGE, 1); | ||||
| 				defenceCriticalDamage = target.getStat().getValue(Stats.DEFENCE_MAGIC_CRITICAL_DAMAGE, 1); | ||||
| 				if (attacker.isPlayable()) | ||||
| 				{ | ||||
| 					balanceMod = target.isPlayable() ? Config.PVP_MAGICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS.getOrDefault(attacker.getActingPlayer().getClassId(), 1f) : Config.PVE_MAGICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS.getOrDefault(attacker.getActingPlayer().getClassId(), 1f); | ||||
| 				} | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				criticalDamage = attacker.getStat().getValue(Stats.CRITICAL_DAMAGE_SKILL, 1); | ||||
| 				defenceCriticalDamage = target.getStat().getValue(Stats.DEFENCE_CRITICAL_DAMAGE_SKILL, 1); | ||||
| 				if (attacker.isPlayable()) | ||||
| 				{ | ||||
| 					balanceMod = target.isPlayable() ? Config.PVP_PHYSICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS.getOrDefault(attacker.getActingPlayer().getClassId(), 1f) : Config.PVE_PHYSICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS.getOrDefault(attacker.getActingPlayer().getClassId(), 1f); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		else | ||||
| @@ -335,9 +362,13 @@ public final class Formulas | ||||
| 			// Autoattack critical damage. | ||||
| 			criticalDamage = attacker.getStat().getValue(Stats.CRITICAL_DAMAGE, 1) * attacker.getStat().getPositionTypeValue(Stats.CRITICAL_DAMAGE, Position.getPosition(attacker, target)); | ||||
| 			defenceCriticalDamage = target.getStat().getValue(Stats.DEFENCE_CRITICAL_DAMAGE, 1); | ||||
| 			if (attacker.isPlayable()) | ||||
| 			{ | ||||
| 				balanceMod = target.isPlayable() ? Config.PVP_PHYSICAL_ATTACK_CRITICAL_DAMAGE_MULTIPLIERS.getOrDefault(attacker.getActingPlayer().getClassId(), 1f) : Config.PVE_PHYSICAL_ATTACK_CRITICAL_DAMAGE_MULTIPLIERS.getOrDefault(attacker.getActingPlayer().getClassId(), 1f); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		return 2 * criticalDamage * defenceCriticalDamage; | ||||
| 		return 2 * criticalDamage * defenceCriticalDamage * balanceMod; | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment