Support for RealDamage percent mode.

Thanks to nasseka.
This commit is contained in:
MobiusDevelopment
2021-06-04 11:44:12 +00:00
parent 2617f6f6b1
commit d3a9e56474
19 changed files with 418 additions and 76 deletions

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }

View File

@@ -17,6 +17,7 @@
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.StatModifierType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
@@ -30,10 +31,12 @@ import org.l2jmobius.gameserver.model.stats.Stat;
public class RealDamage extends AbstractEffect public class RealDamage extends AbstractEffect
{ {
private final double _power; private final double _power;
private final StatModifierType _mode;
public RealDamage(StatSet params) public RealDamage(StatSet params)
{ {
_power = params.getDouble("power", 0); _power = params.getDouble("power", 0);
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
} }
@Override @Override
@@ -45,8 +48,7 @@ public class RealDamage extends AbstractEffect
@Override @Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
// Check if effected is dead. if (effected.isDead() || effected.isDoor() || effected.isRaid())
if (effected.isDead())
{ {
return; return;
} }
@@ -64,13 +66,29 @@ public class RealDamage extends AbstractEffect
} }
// Calculate resistance. // 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. // Do damage.
if (damage > 0) if (damage > 0)
{ {
effected.setCurrentHp(Math.max(effected.getCurrentHp() - damage, effected.isUndying() ? 1 : 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); effected.doDie(effector);
} }