Support for RealDamage percent mode.
Thanks to nasseka.
This commit is contained in:
		| @@ -17,6 +17,7 @@ | ||||
| package handlers.effecthandlers; | ||||
|  | ||||
| import org.l2jmobius.Config; | ||||
| import org.l2jmobius.gameserver.enums.StatModifierType; | ||||
| import org.l2jmobius.gameserver.model.StatSet; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.effects.AbstractEffect; | ||||
| @@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat; | ||||
| public class RealDamage extends AbstractEffect | ||||
| { | ||||
| 	private final double _power; | ||||
| 	private final StatModifierType _mode; | ||||
| 	 | ||||
| 	public RealDamage(StatSet params) | ||||
| 	{ | ||||
| 		_power = params.getDouble("power", 0); | ||||
| 		_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| @@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect | ||||
| 	@Override | ||||
| 	public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) | ||||
| 	{ | ||||
| 		// Check if effected is dead. | ||||
| 		if (effected.isDead()) | ||||
| 		if (effected.isDead() || effected.isDoor() || effected.isRaid()) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
| @@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect | ||||
| 		} | ||||
| 		 | ||||
| 		// Calculate resistance. | ||||
| 		final double damage = _power - (_power * (Math.min(effected.getStat().getMul(Stat.REAL_DAMAGE_RESIST, 1), 1.8) - 1)); | ||||
| 		final double damage; | ||||
| 		if (_mode == StatModifierType.DIFF) | ||||
| 		{ | ||||
| 			damage = _power - (_power * (Math.min(effected.getStat().getMul(Stat.REAL_DAMAGE_RESIST, 1), 1.8) - 1)); | ||||
| 		} | ||||
| 		else // PER | ||||
| 		{ | ||||
| 			// Percent does not ignore HP block. | ||||
| 			if (effected.isHpBlocked()) | ||||
| 			{ | ||||
| 				return; | ||||
| 			} | ||||
| 			 | ||||
| 			damage = (effected.getCurrentHp() * _power) / 100; | ||||
| 		} | ||||
| 		 | ||||
| 		// Do damage. | ||||
| 		if (damage > 0) | ||||
| 		{ | ||||
| 			effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 0)); | ||||
| 			if ((effected.getCurrentHp() < 0.5)) // Die. | ||||
| 			 | ||||
| 			// Die. | ||||
| 			if (effected.getCurrentHp() < 0.5) | ||||
| 			{ | ||||
| 				effected.doDie(effector); | ||||
| 			} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment