Fixed Spheric Barrier effect.
This commit is contained in:
@@ -28,7 +28,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
public class AbstractStatAddEffect extends AbstractEffect
|
public class AbstractStatAddEffect extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final Stats _stat;
|
private final Stats _stat;
|
||||||
private final double _amount;
|
protected final double _amount;
|
||||||
|
|
||||||
public AbstractStatAddEffect(StatsSet params, Stats stat)
|
public AbstractStatAddEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
|
@@ -92,12 +92,6 @@ public final class EnergyAttack extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final double distance = attacker.calculateDistance(effected, true, false);
|
|
||||||
if (distance > effected.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Integer.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_overHit && effected.isAttackable())
|
if (_overHit && effected.isAttackable())
|
||||||
{
|
{
|
||||||
((L2Attackable) effected).overhitEnabled(true);
|
((L2Attackable) effected).overhitEnabled(true);
|
||||||
|
@@ -17,6 +17,12 @@
|
|||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
|
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||||
|
import com.l2jmobius.gameserver.model.events.EventType;
|
||||||
|
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived;
|
||||||
|
import com.l2jmobius.gameserver.model.events.listeners.FunctionEventListener;
|
||||||
|
import com.l2jmobius.gameserver.model.events.returns.DamageReturn;
|
||||||
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.gameserver.model.stats.Stats;
|
import com.l2jmobius.gameserver.model.stats.Stats;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -28,4 +34,25 @@ public class SphericBarrier extends AbstractStatAddEffect
|
|||||||
{
|
{
|
||||||
super(params, Stats.SPHERIC_BARRIER_RANGE);
|
super(params, Stats.SPHERIC_BARRIER_RANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart(L2Character effector, L2Character effected, Skill skill)
|
||||||
|
{
|
||||||
|
effected.addListener(new FunctionEventListener(effected, EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExit(L2Character effector, L2Character effected, Skill skill)
|
||||||
|
{
|
||||||
|
effected.removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DamageReturn onDamageReceivedEvent(OnCreatureDamageReceived event)
|
||||||
|
{
|
||||||
|
if (event.getAttacker().calculateDistance(event.getTarget(), true, false) > _amount)
|
||||||
|
{
|
||||||
|
return new DamageReturn(false, true, false, 0);
|
||||||
|
}
|
||||||
|
return new DamageReturn(false, false, false, event.getDamage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -78,11 +78,6 @@ public final class Formulas
|
|||||||
|
|
||||||
public static double calcBlowDamage(L2Character attacker, L2Character target, Skill skill, boolean backstab, double power, byte shld, boolean ss)
|
public static double calcBlowDamage(L2Character attacker, L2Character target, Skill skill, boolean backstab, double power, byte shld, boolean ss)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
double defence = target.getPDef();
|
double defence = target.getPDef();
|
||||||
|
|
||||||
switch (shld)
|
switch (shld)
|
||||||
@@ -137,11 +132,6 @@ public final class Formulas
|
|||||||
|
|
||||||
public static double calcMagicDam(L2Character attacker, L2Character target, Skill skill, double mAtk, double power, double mDef, boolean sps, boolean bss, boolean mcrit)
|
public static double calcMagicDam(L2Character attacker, L2Character target, Skill skill, double mAtk, double power, double mDef, boolean sps, boolean bss, boolean mcrit)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bonus Spirit shot
|
// Bonus Spirit shot
|
||||||
final double shotsBonus = bss ? (4 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : sps ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1;
|
final double shotsBonus = bss ? (4 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : sps ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1;
|
||||||
final double critMod = mcrit ? (2 * calcCritDamage(attacker, target, skill)) : 1; // TODO not really a proper way... find how it works then implement. // damage += attacker.getStat().getValue(Stats.MAGIC_CRIT_DMG_ADD, 0);
|
final double critMod = mcrit ? (2 * calcCritDamage(attacker, target, skill)) : 1; // TODO not really a proper way... find how it works then implement. // damage += attacker.getStat().getValue(Stats.MAGIC_CRIT_DMG_ADD, 0);
|
||||||
@@ -663,12 +653,10 @@ public final class Formulas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!resisted)
|
final double sphericBarrierRange = target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, 0);
|
||||||
|
if (!resisted && (sphericBarrierRange > 0))
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
resisted = attacker.calculateDistance(target, true, false) > sphericBarrierRange;
|
||||||
{
|
|
||||||
resisted = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resisted)
|
if (resisted)
|
||||||
@@ -1326,11 +1314,6 @@ public final class Formulas
|
|||||||
*/
|
*/
|
||||||
public static double calcAutoAttackDamage(L2Character attacker, L2Character target, byte shld, boolean crit, boolean ss)
|
public static double calcAutoAttackDamage(L2Character attacker, L2Character target, byte shld, boolean crit, boolean ss)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// DEFENCE CALCULATION (pDef + sDef)
|
// DEFENCE CALCULATION (pDef + sDef)
|
||||||
double defence = target.getPDef();
|
double defence = target.getPDef();
|
||||||
|
|
||||||
|
@@ -28,7 +28,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
public class AbstractStatAddEffect extends AbstractEffect
|
public class AbstractStatAddEffect extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final Stats _stat;
|
private final Stats _stat;
|
||||||
private final double _amount;
|
protected final double _amount;
|
||||||
|
|
||||||
public AbstractStatAddEffect(StatsSet params, Stats stat)
|
public AbstractStatAddEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
|
@@ -92,12 +92,6 @@ public final class EnergyAttack extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final double distance = attacker.calculateDistance(effected, true, false);
|
|
||||||
if (distance > effected.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Integer.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_overHit && effected.isAttackable())
|
if (_overHit && effected.isAttackable())
|
||||||
{
|
{
|
||||||
((L2Attackable) effected).overhitEnabled(true);
|
((L2Attackable) effected).overhitEnabled(true);
|
||||||
|
@@ -17,6 +17,12 @@
|
|||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
|
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||||
|
import com.l2jmobius.gameserver.model.events.EventType;
|
||||||
|
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived;
|
||||||
|
import com.l2jmobius.gameserver.model.events.listeners.FunctionEventListener;
|
||||||
|
import com.l2jmobius.gameserver.model.events.returns.DamageReturn;
|
||||||
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.gameserver.model.stats.Stats;
|
import com.l2jmobius.gameserver.model.stats.Stats;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -28,4 +34,25 @@ public class SphericBarrier extends AbstractStatAddEffect
|
|||||||
{
|
{
|
||||||
super(params, Stats.SPHERIC_BARRIER_RANGE);
|
super(params, Stats.SPHERIC_BARRIER_RANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart(L2Character effector, L2Character effected, Skill skill)
|
||||||
|
{
|
||||||
|
effected.addListener(new FunctionEventListener(effected, EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExit(L2Character effector, L2Character effected, Skill skill)
|
||||||
|
{
|
||||||
|
effected.removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DamageReturn onDamageReceivedEvent(OnCreatureDamageReceived event)
|
||||||
|
{
|
||||||
|
if (event.getAttacker().calculateDistance(event.getTarget(), true, false) > _amount)
|
||||||
|
{
|
||||||
|
return new DamageReturn(false, true, false, 0);
|
||||||
|
}
|
||||||
|
return new DamageReturn(false, false, false, event.getDamage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -78,11 +78,6 @@ public final class Formulas
|
|||||||
|
|
||||||
public static double calcBlowDamage(L2Character attacker, L2Character target, Skill skill, boolean backstab, double power, byte shld, boolean ss)
|
public static double calcBlowDamage(L2Character attacker, L2Character target, Skill skill, boolean backstab, double power, byte shld, boolean ss)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
double defence = target.getPDef();
|
double defence = target.getPDef();
|
||||||
|
|
||||||
switch (shld)
|
switch (shld)
|
||||||
@@ -137,11 +132,6 @@ public final class Formulas
|
|||||||
|
|
||||||
public static double calcMagicDam(L2Character attacker, L2Character target, Skill skill, double mAtk, double power, double mDef, boolean sps, boolean bss, boolean mcrit)
|
public static double calcMagicDam(L2Character attacker, L2Character target, Skill skill, double mAtk, double power, double mDef, boolean sps, boolean bss, boolean mcrit)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bonus Spirit shot
|
// Bonus Spirit shot
|
||||||
final double shotsBonus = bss ? (4 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : sps ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1;
|
final double shotsBonus = bss ? (4 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : sps ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1;
|
||||||
final double critMod = mcrit ? (2 * calcCritDamage(attacker, target, skill)) : 1; // TODO not really a proper way... find how it works then implement. // damage += attacker.getStat().getValue(Stats.MAGIC_CRIT_DMG_ADD, 0);
|
final double critMod = mcrit ? (2 * calcCritDamage(attacker, target, skill)) : 1; // TODO not really a proper way... find how it works then implement. // damage += attacker.getStat().getValue(Stats.MAGIC_CRIT_DMG_ADD, 0);
|
||||||
@@ -663,12 +653,10 @@ public final class Formulas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!resisted)
|
final double sphericBarrierRange = target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, 0);
|
||||||
|
if (!resisted && (sphericBarrierRange > 0))
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
resisted = attacker.calculateDistance(target, true, false) > sphericBarrierRange;
|
||||||
{
|
|
||||||
resisted = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resisted)
|
if (resisted)
|
||||||
@@ -1326,11 +1314,6 @@ public final class Formulas
|
|||||||
*/
|
*/
|
||||||
public static double calcAutoAttackDamage(L2Character attacker, L2Character target, byte shld, boolean crit, boolean ss)
|
public static double calcAutoAttackDamage(L2Character attacker, L2Character target, byte shld, boolean crit, boolean ss)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// DEFENCE CALCULATION (pDef + sDef)
|
// DEFENCE CALCULATION (pDef + sDef)
|
||||||
double defence = target.getPDef();
|
double defence = target.getPDef();
|
||||||
|
|
||||||
|
@@ -28,7 +28,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
public class AbstractStatAddEffect extends AbstractEffect
|
public class AbstractStatAddEffect extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final Stats _stat;
|
private final Stats _stat;
|
||||||
private final double _amount;
|
protected final double _amount;
|
||||||
|
|
||||||
public AbstractStatAddEffect(StatsSet params, Stats stat)
|
public AbstractStatAddEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
|
@@ -92,12 +92,6 @@ public final class EnergyAttack extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final double distance = attacker.calculateDistance(effected, true, false);
|
|
||||||
if (distance > effected.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Integer.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_overHit && effected.isAttackable())
|
if (_overHit && effected.isAttackable())
|
||||||
{
|
{
|
||||||
((L2Attackable) effected).overhitEnabled(true);
|
((L2Attackable) effected).overhitEnabled(true);
|
||||||
|
@@ -17,6 +17,12 @@
|
|||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
|
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||||
|
import com.l2jmobius.gameserver.model.events.EventType;
|
||||||
|
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived;
|
||||||
|
import com.l2jmobius.gameserver.model.events.listeners.FunctionEventListener;
|
||||||
|
import com.l2jmobius.gameserver.model.events.returns.DamageReturn;
|
||||||
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.gameserver.model.stats.Stats;
|
import com.l2jmobius.gameserver.model.stats.Stats;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -28,4 +34,25 @@ public class SphericBarrier extends AbstractStatAddEffect
|
|||||||
{
|
{
|
||||||
super(params, Stats.SPHERIC_BARRIER_RANGE);
|
super(params, Stats.SPHERIC_BARRIER_RANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart(L2Character effector, L2Character effected, Skill skill)
|
||||||
|
{
|
||||||
|
effected.addListener(new FunctionEventListener(effected, EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExit(L2Character effector, L2Character effected, Skill skill)
|
||||||
|
{
|
||||||
|
effected.removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DamageReturn onDamageReceivedEvent(OnCreatureDamageReceived event)
|
||||||
|
{
|
||||||
|
if (event.getAttacker().calculateDistance(event.getTarget(), true, false) > _amount)
|
||||||
|
{
|
||||||
|
return new DamageReturn(false, true, false, 0);
|
||||||
|
}
|
||||||
|
return new DamageReturn(false, false, false, event.getDamage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -78,11 +78,6 @@ public final class Formulas
|
|||||||
|
|
||||||
public static double calcBlowDamage(L2Character attacker, L2Character target, Skill skill, boolean backstab, double power, byte shld, boolean ss)
|
public static double calcBlowDamage(L2Character attacker, L2Character target, Skill skill, boolean backstab, double power, byte shld, boolean ss)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
double defence = target.getPDef();
|
double defence = target.getPDef();
|
||||||
|
|
||||||
switch (shld)
|
switch (shld)
|
||||||
@@ -137,11 +132,6 @@ public final class Formulas
|
|||||||
|
|
||||||
public static double calcMagicDam(L2Character attacker, L2Character target, Skill skill, double mAtk, double power, double mDef, boolean sps, boolean bss, boolean mcrit)
|
public static double calcMagicDam(L2Character attacker, L2Character target, Skill skill, double mAtk, double power, double mDef, boolean sps, boolean bss, boolean mcrit)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bonus Spirit shot
|
// Bonus Spirit shot
|
||||||
final double shotsBonus = bss ? (4 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : sps ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1;
|
final double shotsBonus = bss ? (4 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : sps ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1;
|
||||||
final double critMod = mcrit ? (2 * calcCritDamage(attacker, target, skill)) : 1; // TODO not really a proper way... find how it works then implement. // damage += attacker.getStat().getValue(Stats.MAGIC_CRIT_DMG_ADD, 0);
|
final double critMod = mcrit ? (2 * calcCritDamage(attacker, target, skill)) : 1; // TODO not really a proper way... find how it works then implement. // damage += attacker.getStat().getValue(Stats.MAGIC_CRIT_DMG_ADD, 0);
|
||||||
@@ -663,12 +653,10 @@ public final class Formulas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!resisted)
|
final double sphericBarrierRange = target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, 0);
|
||||||
|
if (!resisted && (sphericBarrierRange > 0))
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
resisted = attacker.calculateDistance(target, true, false) > sphericBarrierRange;
|
||||||
{
|
|
||||||
resisted = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resisted)
|
if (resisted)
|
||||||
@@ -1326,11 +1314,6 @@ public final class Formulas
|
|||||||
*/
|
*/
|
||||||
public static double calcAutoAttackDamage(L2Character attacker, L2Character target, byte shld, boolean crit, boolean ss)
|
public static double calcAutoAttackDamage(L2Character attacker, L2Character target, byte shld, boolean crit, boolean ss)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// DEFENCE CALCULATION (pDef + sDef)
|
// DEFENCE CALCULATION (pDef + sDef)
|
||||||
double defence = target.getPDef();
|
double defence = target.getPDef();
|
||||||
|
|
||||||
|
@@ -28,7 +28,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
public class AbstractStatAddEffect extends AbstractEffect
|
public class AbstractStatAddEffect extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final Stats _stat;
|
private final Stats _stat;
|
||||||
private final double _amount;
|
protected final double _amount;
|
||||||
|
|
||||||
public AbstractStatAddEffect(StatsSet params, Stats stat)
|
public AbstractStatAddEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
|
@@ -92,12 +92,6 @@ public final class EnergyAttack extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final double distance = attacker.calculateDistance(effected, true, false);
|
|
||||||
if (distance > effected.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Integer.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_overHit && effected.isAttackable())
|
if (_overHit && effected.isAttackable())
|
||||||
{
|
{
|
||||||
((L2Attackable) effected).overhitEnabled(true);
|
((L2Attackable) effected).overhitEnabled(true);
|
||||||
|
@@ -17,6 +17,12 @@
|
|||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
|
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||||
|
import com.l2jmobius.gameserver.model.events.EventType;
|
||||||
|
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived;
|
||||||
|
import com.l2jmobius.gameserver.model.events.listeners.FunctionEventListener;
|
||||||
|
import com.l2jmobius.gameserver.model.events.returns.DamageReturn;
|
||||||
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.gameserver.model.stats.Stats;
|
import com.l2jmobius.gameserver.model.stats.Stats;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -28,4 +34,25 @@ public class SphericBarrier extends AbstractStatAddEffect
|
|||||||
{
|
{
|
||||||
super(params, Stats.SPHERIC_BARRIER_RANGE);
|
super(params, Stats.SPHERIC_BARRIER_RANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart(L2Character effector, L2Character effected, Skill skill)
|
||||||
|
{
|
||||||
|
effected.addListener(new FunctionEventListener(effected, EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExit(L2Character effector, L2Character effected, Skill skill)
|
||||||
|
{
|
||||||
|
effected.removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DamageReturn onDamageReceivedEvent(OnCreatureDamageReceived event)
|
||||||
|
{
|
||||||
|
if (event.getAttacker().calculateDistance(event.getTarget(), true, false) > _amount)
|
||||||
|
{
|
||||||
|
return new DamageReturn(false, true, false, 0);
|
||||||
|
}
|
||||||
|
return new DamageReturn(false, false, false, event.getDamage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -78,11 +78,6 @@ public final class Formulas
|
|||||||
|
|
||||||
public static double calcBlowDamage(L2Character attacker, L2Character target, Skill skill, boolean backstab, double power, byte shld, boolean ss)
|
public static double calcBlowDamage(L2Character attacker, L2Character target, Skill skill, boolean backstab, double power, byte shld, boolean ss)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
double defence = target.getPDef();
|
double defence = target.getPDef();
|
||||||
|
|
||||||
switch (shld)
|
switch (shld)
|
||||||
@@ -137,11 +132,6 @@ public final class Formulas
|
|||||||
|
|
||||||
public static double calcMagicDam(L2Character attacker, L2Character target, Skill skill, double mAtk, double power, double mDef, boolean sps, boolean bss, boolean mcrit)
|
public static double calcMagicDam(L2Character attacker, L2Character target, Skill skill, double mAtk, double power, double mDef, boolean sps, boolean bss, boolean mcrit)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bonus Spirit shot
|
// Bonus Spirit shot
|
||||||
final double shotsBonus = bss ? (4 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : sps ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1;
|
final double shotsBonus = bss ? (4 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : sps ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1;
|
||||||
final double critMod = mcrit ? (2 * calcCritDamage(attacker, target, skill)) : 1; // TODO not really a proper way... find how it works then implement. // damage += attacker.getStat().getValue(Stats.MAGIC_CRIT_DMG_ADD, 0);
|
final double critMod = mcrit ? (2 * calcCritDamage(attacker, target, skill)) : 1; // TODO not really a proper way... find how it works then implement. // damage += attacker.getStat().getValue(Stats.MAGIC_CRIT_DMG_ADD, 0);
|
||||||
@@ -663,12 +653,10 @@ public final class Formulas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!resisted)
|
final double sphericBarrierRange = target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, 0);
|
||||||
|
if (!resisted && (sphericBarrierRange > 0))
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
resisted = attacker.calculateDistance(target, true, false) > sphericBarrierRange;
|
||||||
{
|
|
||||||
resisted = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resisted)
|
if (resisted)
|
||||||
@@ -1326,11 +1314,6 @@ public final class Formulas
|
|||||||
*/
|
*/
|
||||||
public static double calcAutoAttackDamage(L2Character attacker, L2Character target, byte shld, boolean crit, boolean ss)
|
public static double calcAutoAttackDamage(L2Character attacker, L2Character target, byte shld, boolean crit, boolean ss)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// DEFENCE CALCULATION (pDef + sDef)
|
// DEFENCE CALCULATION (pDef + sDef)
|
||||||
double defence = target.getPDef();
|
double defence = target.getPDef();
|
||||||
|
|
||||||
|
@@ -28,7 +28,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
public class AbstractStatAddEffect extends AbstractEffect
|
public class AbstractStatAddEffect extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final Stats _stat;
|
private final Stats _stat;
|
||||||
private final double _amount;
|
protected final double _amount;
|
||||||
|
|
||||||
public AbstractStatAddEffect(StatsSet params, Stats stat)
|
public AbstractStatAddEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
|
@@ -92,12 +92,6 @@ public final class EnergyAttack extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final double distance = attacker.calculateDistance(effected, true, false);
|
|
||||||
if (distance > effected.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Integer.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_overHit && effected.isAttackable())
|
if (_overHit && effected.isAttackable())
|
||||||
{
|
{
|
||||||
((L2Attackable) effected).overhitEnabled(true);
|
((L2Attackable) effected).overhitEnabled(true);
|
||||||
|
@@ -17,6 +17,12 @@
|
|||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
|
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||||
|
import com.l2jmobius.gameserver.model.events.EventType;
|
||||||
|
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived;
|
||||||
|
import com.l2jmobius.gameserver.model.events.listeners.FunctionEventListener;
|
||||||
|
import com.l2jmobius.gameserver.model.events.returns.DamageReturn;
|
||||||
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.gameserver.model.stats.Stats;
|
import com.l2jmobius.gameserver.model.stats.Stats;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -28,4 +34,25 @@ public class SphericBarrier extends AbstractStatAddEffect
|
|||||||
{
|
{
|
||||||
super(params, Stats.SPHERIC_BARRIER_RANGE);
|
super(params, Stats.SPHERIC_BARRIER_RANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart(L2Character effector, L2Character effected, Skill skill)
|
||||||
|
{
|
||||||
|
effected.addListener(new FunctionEventListener(effected, EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExit(L2Character effector, L2Character effected, Skill skill)
|
||||||
|
{
|
||||||
|
effected.removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DamageReturn onDamageReceivedEvent(OnCreatureDamageReceived event)
|
||||||
|
{
|
||||||
|
if (event.getAttacker().calculateDistance(event.getTarget(), true, false) > _amount)
|
||||||
|
{
|
||||||
|
return new DamageReturn(false, true, false, 0);
|
||||||
|
}
|
||||||
|
return new DamageReturn(false, false, false, event.getDamage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -78,11 +78,6 @@ public final class Formulas
|
|||||||
|
|
||||||
public static double calcBlowDamage(L2Character attacker, L2Character target, Skill skill, boolean backstab, double power, byte shld, boolean ss)
|
public static double calcBlowDamage(L2Character attacker, L2Character target, Skill skill, boolean backstab, double power, byte shld, boolean ss)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
double defence = target.getPDef();
|
double defence = target.getPDef();
|
||||||
|
|
||||||
switch (shld)
|
switch (shld)
|
||||||
@@ -137,11 +132,6 @@ public final class Formulas
|
|||||||
|
|
||||||
public static double calcMagicDam(L2Character attacker, L2Character target, Skill skill, double mAtk, double power, double mDef, boolean sps, boolean bss, boolean mcrit)
|
public static double calcMagicDam(L2Character attacker, L2Character target, Skill skill, double mAtk, double power, double mDef, boolean sps, boolean bss, boolean mcrit)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bonus Spirit shot
|
// Bonus Spirit shot
|
||||||
final double shotsBonus = bss ? (4 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : sps ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1;
|
final double shotsBonus = bss ? (4 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : sps ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1;
|
||||||
final double critMod = mcrit ? (2 * calcCritDamage(attacker, target, skill)) : 1; // TODO not really a proper way... find how it works then implement. // damage += attacker.getStat().getValue(Stats.MAGIC_CRIT_DMG_ADD, 0);
|
final double critMod = mcrit ? (2 * calcCritDamage(attacker, target, skill)) : 1; // TODO not really a proper way... find how it works then implement. // damage += attacker.getStat().getValue(Stats.MAGIC_CRIT_DMG_ADD, 0);
|
||||||
@@ -663,12 +653,10 @@ public final class Formulas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!resisted)
|
final double sphericBarrierRange = target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, 0);
|
||||||
|
if (!resisted && (sphericBarrierRange > 0))
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
resisted = attacker.calculateDistance(target, true, false) > sphericBarrierRange;
|
||||||
{
|
|
||||||
resisted = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resisted)
|
if (resisted)
|
||||||
@@ -1326,11 +1314,6 @@ public final class Formulas
|
|||||||
*/
|
*/
|
||||||
public static double calcAutoAttackDamage(L2Character attacker, L2Character target, byte shld, boolean crit, boolean ss)
|
public static double calcAutoAttackDamage(L2Character attacker, L2Character target, byte shld, boolean crit, boolean ss)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// DEFENCE CALCULATION (pDef + sDef)
|
// DEFENCE CALCULATION (pDef + sDef)
|
||||||
double defence = target.getPDef();
|
double defence = target.getPDef();
|
||||||
|
|
||||||
|
@@ -28,7 +28,7 @@ import com.l2jmobius.gameserver.model.stats.Stats;
|
|||||||
public class AbstractStatAddEffect extends AbstractEffect
|
public class AbstractStatAddEffect extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final Stats _stat;
|
private final Stats _stat;
|
||||||
private final double _amount;
|
protected final double _amount;
|
||||||
|
|
||||||
public AbstractStatAddEffect(StatsSet params, Stats stat)
|
public AbstractStatAddEffect(StatsSet params, Stats stat)
|
||||||
{
|
{
|
||||||
|
@@ -92,12 +92,6 @@ public final class EnergyAttack extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final double distance = attacker.calculateDistance(effected, true, false);
|
|
||||||
if (distance > effected.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Integer.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_overHit && effected.isAttackable())
|
if (_overHit && effected.isAttackable())
|
||||||
{
|
{
|
||||||
((L2Attackable) effected).overhitEnabled(true);
|
((L2Attackable) effected).overhitEnabled(true);
|
||||||
|
@@ -17,6 +17,12 @@
|
|||||||
package handlers.effecthandlers;
|
package handlers.effecthandlers;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
|
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||||
|
import com.l2jmobius.gameserver.model.events.EventType;
|
||||||
|
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived;
|
||||||
|
import com.l2jmobius.gameserver.model.events.listeners.FunctionEventListener;
|
||||||
|
import com.l2jmobius.gameserver.model.events.returns.DamageReturn;
|
||||||
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.gameserver.model.stats.Stats;
|
import com.l2jmobius.gameserver.model.stats.Stats;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -28,4 +34,25 @@ public class SphericBarrier extends AbstractStatAddEffect
|
|||||||
{
|
{
|
||||||
super(params, Stats.SPHERIC_BARRIER_RANGE);
|
super(params, Stats.SPHERIC_BARRIER_RANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart(L2Character effector, L2Character effected, Skill skill)
|
||||||
|
{
|
||||||
|
effected.addListener(new FunctionEventListener(effected, EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExit(L2Character effector, L2Character effected, Skill skill)
|
||||||
|
{
|
||||||
|
effected.removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DamageReturn onDamageReceivedEvent(OnCreatureDamageReceived event)
|
||||||
|
{
|
||||||
|
if (event.getAttacker().calculateDistance(event.getTarget(), true, false) > _amount)
|
||||||
|
{
|
||||||
|
return new DamageReturn(false, true, false, 0);
|
||||||
|
}
|
||||||
|
return new DamageReturn(false, false, false, event.getDamage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -78,11 +78,6 @@ public final class Formulas
|
|||||||
|
|
||||||
public static double calcBlowDamage(L2Character attacker, L2Character target, Skill skill, boolean backstab, double power, byte shld, boolean ss)
|
public static double calcBlowDamage(L2Character attacker, L2Character target, Skill skill, boolean backstab, double power, byte shld, boolean ss)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
double defence = target.getPDef();
|
double defence = target.getPDef();
|
||||||
|
|
||||||
switch (shld)
|
switch (shld)
|
||||||
@@ -137,11 +132,6 @@ public final class Formulas
|
|||||||
|
|
||||||
public static double calcMagicDam(L2Character attacker, L2Character target, Skill skill, double mAtk, double power, double mDef, boolean sps, boolean bss, boolean mcrit)
|
public static double calcMagicDam(L2Character attacker, L2Character target, Skill skill, double mAtk, double power, double mDef, boolean sps, boolean bss, boolean mcrit)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bonus Spirit shot
|
// Bonus Spirit shot
|
||||||
final double shotsBonus = bss ? (4 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : sps ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1;
|
final double shotsBonus = bss ? (4 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : sps ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1;
|
||||||
final double critMod = mcrit ? (2 * calcCritDamage(attacker, target, skill)) : 1; // TODO not really a proper way... find how it works then implement. // damage += attacker.getStat().getValue(Stats.MAGIC_CRIT_DMG_ADD, 0);
|
final double critMod = mcrit ? (2 * calcCritDamage(attacker, target, skill)) : 1; // TODO not really a proper way... find how it works then implement. // damage += attacker.getStat().getValue(Stats.MAGIC_CRIT_DMG_ADD, 0);
|
||||||
@@ -663,12 +653,10 @@ public final class Formulas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!resisted)
|
final double sphericBarrierRange = target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, 0);
|
||||||
|
if (!resisted && (sphericBarrierRange > 0))
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
resisted = attacker.calculateDistance(target, true, false) > sphericBarrierRange;
|
||||||
{
|
|
||||||
resisted = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resisted)
|
if (resisted)
|
||||||
@@ -1326,11 +1314,6 @@ public final class Formulas
|
|||||||
*/
|
*/
|
||||||
public static double calcAutoAttackDamage(L2Character attacker, L2Character target, byte shld, boolean crit, boolean ss)
|
public static double calcAutoAttackDamage(L2Character attacker, L2Character target, byte shld, boolean crit, boolean ss)
|
||||||
{
|
{
|
||||||
if (attacker.calculateDistance(target, true, false) > target.getStat().getValue(Stats.SPHERIC_BARRIER_RANGE, Double.MAX_VALUE))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// DEFENCE CALCULATION (pDef + sDef)
|
// DEFENCE CALCULATION (pDef + sDef)
|
||||||
double defence = target.getPDef();
|
double defence = target.getPDef();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user