Removed AttackDamagePosition effect.

This commit is contained in:
MobiusDev
2017-12-09 02:48:40 +00:00
parent 10780eaa7c
commit a081a47f16
130 changed files with 122 additions and 1735 deletions

View File

@@ -44,7 +44,6 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("AttackAttribute", AttackAttribute::new); EffectHandler.getInstance().registerHandler("AttackAttribute", AttackAttribute::new);
EffectHandler.getInstance().registerHandler("AttackAttributeAdd", AttackAttributeAdd::new); EffectHandler.getInstance().registerHandler("AttackAttributeAdd", AttackAttributeAdd::new);
EffectHandler.getInstance().registerHandler("AttackBehind", AttackBehind::new); EffectHandler.getInstance().registerHandler("AttackBehind", AttackBehind::new);
EffectHandler.getInstance().registerHandler("AttackDamagePosition", AttackDamagePosition::new);
EffectHandler.getInstance().registerHandler("AttackTrait", AttackTrait::new); EffectHandler.getInstance().registerHandler("AttackTrait", AttackTrait::new);
EffectHandler.getInstance().registerHandler("Backstab", Backstab::new); EffectHandler.getInstance().registerHandler("Backstab", Backstab::new);
EffectHandler.getInstance().registerHandler("Betray", Betray::new); EffectHandler.getInstance().registerHandler("Betray", Betray::new);

View File

@@ -1,53 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package handlers.effecthandlers;
import com.l2jmobius.commons.util.MathUtil;
import com.l2jmobius.gameserver.enums.Position;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Stats;
/**
* @author Nik
*/
public class AttackDamagePosition extends AbstractEffect
{
protected final double _amount;
protected final Position _position;
public AttackDamagePosition(StatsSet params)
{
_amount = params.getDouble("amount");
_position = params.getEnum("position", Position.class);
}
@Override
public void pump(L2Character effected, Skill skill)
{
effected.getStat().mergePositionTypeValue(Stats.ATTACK_DAMAGE, _position, (_amount / 100) + 1, MathUtil::mul);
}
@Override
public void onExit(BuffInfo info)
{
info.getEffected().getStat().mergePositionTypeValue(Stats.ATTACK_DAMAGE, _position, (_amount / 100) + 1, MathUtil::div);
}
}

View File

@@ -85,21 +85,6 @@ public final class Backstab extends AbstractEffect
damage *= 2; damage *= 2;
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, true, true, false);
Formulas.calcCounterAttack(effector, effected, skill, true);
effected.reduceCurrentHp(damage, effector, skill, false, true, true, false);
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// if (effector.isPlayer())
// {
// final L2PcInstance activePlayer = effector.getActingPlayer();
// activePlayer.sendDamageMessage(effected, skill, (int) damage, true, false);
// }
} }
} }

View File

@@ -94,7 +94,7 @@ public final class DamOverTime extends AbstractEffect
} }
} }
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
return info.getSkill().isToggle(); return info.getSkill().isToggle();
} }
} }

View File

@@ -74,7 +74,7 @@ public final class DamOverTimePercent extends AbstractEffect
} }
} }
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
return info.getSkill().isToggle(); return info.getSkill().isToggle();
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Death Link effect implementation. * Death Link effect implementation.
@@ -70,26 +68,6 @@ public final class DeathLink extends AbstractEffect
final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill); final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill);
final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power * (-((effector.getCurrentHp() * 2) / effector.getMaxHp()) + 2), effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power * (-((effector.getCurrentHp() * 2) / effector.getMaxHp()) + 2), effected.getMDef(), sps, bss, mcrit);
effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (damage > 0)
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
}
} }
} }

View File

@@ -162,10 +162,6 @@ public final class EnergyAttack extends AbstractEffect
damage = Math.max(0, damage); damage = Math.max(0, damage);
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(attacker, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// attacker.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -117,18 +117,6 @@ public final class FatalBlow extends AbstractEffect
damage *= 2; damage *= 2;
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, true, false);
Formulas.calcCounterAttack(effector, effected, skill, true);
effected.reduceCurrentHp(damage, effector, skill, false, false, true, false);
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// effector.sendDamageMessage(effected, skill, (int) damage, true, false);
} }
} }

View File

@@ -87,16 +87,6 @@ public final class HpDrain extends AbstractEffect
final double hpFinal = ((effector.getCurrentHp() + hpAdd) > effector.getMaxHp() ? effector.getMaxHp() : (effector.getCurrentHp() + hpAdd)); final double hpFinal = ((effector.getCurrentHp() + hpAdd) > effector.getMaxHp() ? effector.getMaxHp() : (effector.getCurrentHp() + hpAdd));
effector.setCurrentHp(hpFinal); effector.setCurrentHp(hpFinal);
if (damage > 0) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
} }
} }

View File

@@ -69,7 +69,7 @@ public final class HpToOwner extends AbstractEffect
final double damage = _power * getTicksMultiplier(); final double damage = _power * getTicksMultiplier();
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
if (_stealAmount > 0) if (_stealAmount > 0)
{ {
final double amount = (damage * _stealAmount) / 100; final double amount = (damage * _stealAmount) / 100;

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -26,7 +25,6 @@ import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.AbnormalType; import com.l2jmobius.gameserver.model.skills.AbnormalType;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Abnormal-depending dispel Attack effect implementation. * Magical Abnormal-depending dispel Attack effect implementation.
@@ -74,25 +72,6 @@ public final class MagicalAbnormalDispelAttack extends AbstractEffect
final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill); final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill);
final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit);
if (damage > 0) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
}
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Attackable; import com.l2jmobius.gameserver.model.actor.L2Attackable;
@@ -26,7 +25,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack effect implementation. * Magical Attack effect implementation.
@@ -86,34 +84,6 @@ public final class MagicalAttack extends AbstractEffect
damage *= _debuffModifier; damage *= _debuffModifier;
} }
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack By Abnormal effect implementation. * Magical Attack By Abnormal effect implementation.
@@ -73,34 +71,6 @@ public final class MagicalAttackByAbnormal extends AbstractEffect
// each buff increase +30% // each buff increase +30%
damage *= (((effected.getBuffCount() * 0.3) + 1.3) / 4); damage *= (((effected.getBuffCount() * 0.3) + 1.3) / 4);
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -20,7 +20,6 @@ import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -30,7 +29,6 @@ import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.AbnormalType; import com.l2jmobius.gameserver.model.skills.AbnormalType;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack By Abnormal Slot effect implementation. * Magical Attack By Abnormal Slot effect implementation.
@@ -90,34 +88,6 @@ public final class MagicalAttackByAbnormalSlot extends AbstractEffect
final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill); final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill);
final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit);
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack effect implementation. * Magical Attack effect implementation.
@@ -88,34 +86,6 @@ public final class MagicalAttackRange extends AbstractEffect
damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, mDef, sps, bss, mcrit); damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, mDef, sps, bss, mcrit);
} }
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -80,7 +80,7 @@ public final class MagicalDamOverTime extends AbstractEffect
} }
} }
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
return info.getSkill().isToggle(); return info.getSkill().isToggle();
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
@@ -82,25 +80,6 @@ public final class MagicalSoulAttack extends AbstractEffect
final double mAtk = effector.getMAtk() * (chargedSouls > 0 ? (1.3 + (chargedSouls * 0.05)) : 1); final double mAtk = effector.getMAtk() * (chargedSouls > 0 ? (1.3 + (chargedSouls * 0.05)) : 1);
final double damage = Formulas.calcMagicDam(effector, effected, skill, mAtk, _power, effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, mAtk, _power, effected.getMDef(), sps, bss, mcrit);
if (damage > 0) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
}
} }
} }

View File

@@ -172,10 +172,6 @@ public final class PhysicalAttack extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -134,10 +134,6 @@ public final class PhysicalAttackHpLink extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected. effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -144,9 +144,6 @@ public final class PhysicalAttackSaveHp extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected
Formulas.calcCounterAttack(effector, effected, skill, critical);
final double minHp = (effected.getMaxHp() * _saveHp) / 100; final double minHp = (effected.getMaxHp() * _saveHp) / 100;
if ((effected.getCurrentHp() - damage) < minHp) if ((effected.getCurrentHp() - damage) < minHp)
@@ -154,7 +151,6 @@ public final class PhysicalAttackSaveHp extends AbstractEffect
damage = effected.getCurrentHp() - minHp; damage = effected.getCurrentHp() - minHp;
} }
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false); effector.doAttack(damage, effected, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -165,10 +165,6 @@ public final class PhysicalAttackWeaponBonus extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -159,10 +159,6 @@ public final class PhysicalSoulAttack extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -90,22 +90,6 @@ public final class SoulBlow extends AbstractEffect
damage *= 1 + (chargedSouls * 0.04); damage *= 1 + (chargedSouls * 0.04);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, true, false);
Formulas.calcCounterAttack(effector, effected, skill, true);
effected.reduceCurrentHp(damage, effector, skill, false, false, true, false);
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// if (effector.isPlayer())
// {
// final L2PcInstance activePlayer = effector.getActingPlayer();
// activePlayer.sendDamageMessage(effected, skill, (int) damage, true, false);
// }
} }
} }

View File

@@ -890,15 +890,7 @@
<!-- Rear Damage + 3%. --> <!-- Rear Damage + 3%. -->
<operateType>P</operateType> <operateType>P</operateType>
<icon>icon.skill0030</icon> <icon>icon.skill0030</icon>
<effects> <!-- TODO: Handle rear damage stat -->
<effect name="AttackDamagePosition">
<amount>
<value level="1">3</value>
<value level="2">6</value>
</amount>
<position>BACK</position>
</effect>
</effects>
</skill> </skill>
<skill id="19145" toLevel="2" name="Noble Death Whisper"> <skill id="19145" toLevel="2" name="Noble Death Whisper">
<!-- Physical Critical Damage + 3%. --> <!-- Physical Critical Damage + 3%. -->

View File

@@ -13,7 +13,6 @@ AreaDamage: Topography (Danger Zone) resistance stat.
AttackAttribute: Stat that increases specific attack attribute. AttackAttribute: Stat that increases specific attack attribute.
AttackAttributeAdd: Stat that increases all attack attribute. AttackAttributeAdd: Stat that increases all attack attribute.
AttackBehind: Enables all attacks regardless of position to land towards the back. AttackBehind: Enables all attacks regardless of position to land towards the back.
AttackDamagePosition: Bonus damage depending on player position towards the target.
AttackTrait: Stat that manages all attack traits. AttackTrait: Stat that manages all attack traits.
Backstab: Inflicts physical damage according to the backstab formula. Backstab: Inflicts physical damage according to the backstab formula.
Betray: Causes the target summon to attack its owner. Betray: Causes the target summon to attack its owner.

View File

@@ -55,7 +55,6 @@ import com.l2jmobius.gameserver.enums.BasicProperty;
import com.l2jmobius.gameserver.enums.CategoryType; import com.l2jmobius.gameserver.enums.CategoryType;
import com.l2jmobius.gameserver.enums.InstanceType; import com.l2jmobius.gameserver.enums.InstanceType;
import com.l2jmobius.gameserver.enums.ItemSkillType; import com.l2jmobius.gameserver.enums.ItemSkillType;
import com.l2jmobius.gameserver.enums.Position;
import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.enums.Race;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.enums.StatusUpdateType; import com.l2jmobius.gameserver.enums.StatusUpdateType;
@@ -4397,7 +4396,8 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
if (!reflect && !isDOT) if (!reflect && !isDOT)
{ {
damage *= getStat().getPositionTypeValue(Stats.ATTACK_DAMAGE, Position.getPosition(this, target)); // TODO: Implement AttackDamagePosition effect
// damage *= getStat().getPositionTypeValue(Stats.ATTACK_DAMAGE, Position.getPosition(this, target));
// Counterattacks happen before damage received. // Counterattacks happen before damage received.
if (!target.isDead() && (skill != null)) if (!target.isDead() && (skill != null))

View File

@@ -44,7 +44,6 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("AttackAttribute", AttackAttribute::new); EffectHandler.getInstance().registerHandler("AttackAttribute", AttackAttribute::new);
EffectHandler.getInstance().registerHandler("AttackAttributeAdd", AttackAttributeAdd::new); EffectHandler.getInstance().registerHandler("AttackAttributeAdd", AttackAttributeAdd::new);
EffectHandler.getInstance().registerHandler("AttackBehind", AttackBehind::new); EffectHandler.getInstance().registerHandler("AttackBehind", AttackBehind::new);
EffectHandler.getInstance().registerHandler("AttackDamagePosition", AttackDamagePosition::new);
EffectHandler.getInstance().registerHandler("AttackTrait", AttackTrait::new); EffectHandler.getInstance().registerHandler("AttackTrait", AttackTrait::new);
EffectHandler.getInstance().registerHandler("Backstab", Backstab::new); EffectHandler.getInstance().registerHandler("Backstab", Backstab::new);
EffectHandler.getInstance().registerHandler("Betray", Betray::new); EffectHandler.getInstance().registerHandler("Betray", Betray::new);

View File

@@ -1,53 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package handlers.effecthandlers;
import com.l2jmobius.commons.util.MathUtil;
import com.l2jmobius.gameserver.enums.Position;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Stats;
/**
* @author Nik
*/
public class AttackDamagePosition extends AbstractEffect
{
protected final double _amount;
protected final Position _position;
public AttackDamagePosition(StatsSet params)
{
_amount = params.getDouble("amount");
_position = params.getEnum("position", Position.class);
}
@Override
public void pump(L2Character effected, Skill skill)
{
effected.getStat().mergePositionTypeValue(Stats.ATTACK_DAMAGE, _position, (_amount / 100) + 1, MathUtil::mul);
}
@Override
public void onExit(BuffInfo info)
{
info.getEffected().getStat().mergePositionTypeValue(Stats.ATTACK_DAMAGE, _position, (_amount / 100) + 1, MathUtil::div);
}
}

View File

@@ -85,21 +85,6 @@ public final class Backstab extends AbstractEffect
damage *= 2; damage *= 2;
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, true, true, false);
Formulas.calcCounterAttack(effector, effected, skill, true);
effected.reduceCurrentHp(damage, effector, skill, false, true, true, false);
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// if (effector.isPlayer())
// {
// final L2PcInstance activePlayer = effector.getActingPlayer();
// activePlayer.sendDamageMessage(effected, skill, (int) damage, true, false);
// }
} }
} }

View File

@@ -94,7 +94,7 @@ public final class DamOverTime extends AbstractEffect
} }
} }
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
return info.getSkill().isToggle(); return info.getSkill().isToggle();
} }
} }

View File

@@ -74,7 +74,7 @@ public final class DamOverTimePercent extends AbstractEffect
} }
} }
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
return info.getSkill().isToggle(); return info.getSkill().isToggle();
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Death Link effect implementation. * Death Link effect implementation.
@@ -70,26 +68,6 @@ public final class DeathLink extends AbstractEffect
final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill); final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill);
final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power * (-((effector.getCurrentHp() * 2) / effector.getMaxHp()) + 2), effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power * (-((effector.getCurrentHp() * 2) / effector.getMaxHp()) + 2), effected.getMDef(), sps, bss, mcrit);
effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (damage > 0)
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
}
} }
} }

View File

@@ -162,10 +162,6 @@ public final class EnergyAttack extends AbstractEffect
damage = Math.max(0, damage); damage = Math.max(0, damage);
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(attacker, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// attacker.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -117,18 +117,6 @@ public final class FatalBlow extends AbstractEffect
damage *= 2; damage *= 2;
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, true, false);
Formulas.calcCounterAttack(effector, effected, skill, true);
effected.reduceCurrentHp(damage, effector, skill, false, false, true, false);
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// effector.sendDamageMessage(effected, skill, (int) damage, true, false);
} }
} }

View File

@@ -87,16 +87,6 @@ public final class HpDrain extends AbstractEffect
final double hpFinal = ((effector.getCurrentHp() + hpAdd) > effector.getMaxHp() ? effector.getMaxHp() : (effector.getCurrentHp() + hpAdd)); final double hpFinal = ((effector.getCurrentHp() + hpAdd) > effector.getMaxHp() ? effector.getMaxHp() : (effector.getCurrentHp() + hpAdd));
effector.setCurrentHp(hpFinal); effector.setCurrentHp(hpFinal);
if (damage > 0) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
} }
} }

View File

@@ -69,7 +69,7 @@ public final class HpToOwner extends AbstractEffect
final double damage = _power * getTicksMultiplier(); final double damage = _power * getTicksMultiplier();
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
if (_stealAmount > 0) if (_stealAmount > 0)
{ {
final double amount = (damage * _stealAmount) / 100; final double amount = (damage * _stealAmount) / 100;

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -26,7 +25,6 @@ import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.AbnormalType; import com.l2jmobius.gameserver.model.skills.AbnormalType;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Abnormal-depending dispel Attack effect implementation. * Magical Abnormal-depending dispel Attack effect implementation.
@@ -74,25 +72,6 @@ public final class MagicalAbnormalDispelAttack extends AbstractEffect
final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill); final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill);
final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit);
if (damage > 0) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
}
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Attackable; import com.l2jmobius.gameserver.model.actor.L2Attackable;
@@ -26,7 +25,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack effect implementation. * Magical Attack effect implementation.
@@ -86,34 +84,6 @@ public final class MagicalAttack extends AbstractEffect
damage *= _debuffModifier; damage *= _debuffModifier;
} }
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack By Abnormal effect implementation. * Magical Attack By Abnormal effect implementation.
@@ -73,34 +71,6 @@ public final class MagicalAttackByAbnormal extends AbstractEffect
// each buff increase +30% // each buff increase +30%
damage *= (((effected.getBuffCount() * 0.3) + 1.3) / 4); damage *= (((effected.getBuffCount() * 0.3) + 1.3) / 4);
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -20,7 +20,6 @@ import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -30,7 +29,6 @@ import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.AbnormalType; import com.l2jmobius.gameserver.model.skills.AbnormalType;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack By Abnormal Slot effect implementation. * Magical Attack By Abnormal Slot effect implementation.
@@ -90,34 +88,6 @@ public final class MagicalAttackByAbnormalSlot extends AbstractEffect
final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill); final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill);
final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit);
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack effect implementation. * Magical Attack effect implementation.
@@ -88,34 +86,6 @@ public final class MagicalAttackRange extends AbstractEffect
damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, mDef, sps, bss, mcrit); damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, mDef, sps, bss, mcrit);
} }
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -80,7 +80,7 @@ public final class MagicalDamOverTime extends AbstractEffect
} }
} }
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
return info.getSkill().isToggle(); return info.getSkill().isToggle();
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
@@ -82,25 +80,6 @@ public final class MagicalSoulAttack extends AbstractEffect
final double mAtk = effector.getMAtk() * (chargedSouls > 0 ? (1.3 + (chargedSouls * 0.05)) : 1); final double mAtk = effector.getMAtk() * (chargedSouls > 0 ? (1.3 + (chargedSouls * 0.05)) : 1);
final double damage = Formulas.calcMagicDam(effector, effected, skill, mAtk, _power, effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, mAtk, _power, effected.getMDef(), sps, bss, mcrit);
if (damage > 0) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
}
} }
} }

View File

@@ -172,10 +172,6 @@ public final class PhysicalAttack extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -134,10 +134,6 @@ public final class PhysicalAttackHpLink extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected. effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -144,9 +144,6 @@ public final class PhysicalAttackSaveHp extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected
Formulas.calcCounterAttack(effector, effected, skill, critical);
final double minHp = (effected.getMaxHp() * _saveHp) / 100; final double minHp = (effected.getMaxHp() * _saveHp) / 100;
if ((effected.getCurrentHp() - damage) < minHp) if ((effected.getCurrentHp() - damage) < minHp)
@@ -154,7 +151,6 @@ public final class PhysicalAttackSaveHp extends AbstractEffect
damage = effected.getCurrentHp() - minHp; damage = effected.getCurrentHp() - minHp;
} }
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false); effector.doAttack(damage, effected, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -165,10 +165,6 @@ public final class PhysicalAttackWeaponBonus extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -159,10 +159,6 @@ public final class PhysicalSoulAttack extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -90,22 +90,6 @@ public final class SoulBlow extends AbstractEffect
damage *= 1 + (chargedSouls * 0.04); damage *= 1 + (chargedSouls * 0.04);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, true, false);
Formulas.calcCounterAttack(effector, effected, skill, true);
effected.reduceCurrentHp(damage, effector, skill, false, false, true, false);
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// if (effector.isPlayer())
// {
// final L2PcInstance activePlayer = effector.getActingPlayer();
// activePlayer.sendDamageMessage(effected, skill, (int) damage, true, false);
// }
} }
} }

View File

@@ -890,15 +890,7 @@
<!-- Rear Damage + 3%. --> <!-- Rear Damage + 3%. -->
<operateType>P</operateType> <operateType>P</operateType>
<icon>icon.skill0030</icon> <icon>icon.skill0030</icon>
<effects> <!-- TODO: Handle rear damage stat -->
<effect name="AttackDamagePosition">
<amount>
<value level="1">3</value>
<value level="2">6</value>
</amount>
<position>BACK</position>
</effect>
</effects>
</skill> </skill>
<skill id="19145" toLevel="2" name="Noble Death Whisper"> <skill id="19145" toLevel="2" name="Noble Death Whisper">
<!-- Physical Critical Damage + 3%. --> <!-- Physical Critical Damage + 3%. -->

View File

@@ -13,7 +13,6 @@ AreaDamage: Topography (Danger Zone) resistance stat.
AttackAttribute: Stat that increases specific attack attribute. AttackAttribute: Stat that increases specific attack attribute.
AttackAttributeAdd: Stat that increases all attack attribute. AttackAttributeAdd: Stat that increases all attack attribute.
AttackBehind: Enables all attacks regardless of position to land towards the back. AttackBehind: Enables all attacks regardless of position to land towards the back.
AttackDamagePosition: Bonus damage depending on player position towards the target.
AttackTrait: Stat that manages all attack traits. AttackTrait: Stat that manages all attack traits.
Backstab: Inflicts physical damage according to the backstab formula. Backstab: Inflicts physical damage according to the backstab formula.
Betray: Causes the target summon to attack its owner. Betray: Causes the target summon to attack its owner.

View File

@@ -55,7 +55,6 @@ import com.l2jmobius.gameserver.enums.BasicProperty;
import com.l2jmobius.gameserver.enums.CategoryType; import com.l2jmobius.gameserver.enums.CategoryType;
import com.l2jmobius.gameserver.enums.InstanceType; import com.l2jmobius.gameserver.enums.InstanceType;
import com.l2jmobius.gameserver.enums.ItemSkillType; import com.l2jmobius.gameserver.enums.ItemSkillType;
import com.l2jmobius.gameserver.enums.Position;
import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.enums.Race;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.enums.StatusUpdateType; import com.l2jmobius.gameserver.enums.StatusUpdateType;
@@ -4397,7 +4396,8 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
if (!reflect && !isDOT) if (!reflect && !isDOT)
{ {
damage *= getStat().getPositionTypeValue(Stats.ATTACK_DAMAGE, Position.getPosition(this, target)); // TODO: Implement AttackDamagePosition effect
// damage *= getStat().getPositionTypeValue(Stats.ATTACK_DAMAGE, Position.getPosition(this, target));
// Counterattacks happen before damage received. // Counterattacks happen before damage received.
if (!target.isDead() && (skill != null)) if (!target.isDead() && (skill != null))

View File

@@ -44,7 +44,6 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("AttackAttribute", AttackAttribute::new); EffectHandler.getInstance().registerHandler("AttackAttribute", AttackAttribute::new);
EffectHandler.getInstance().registerHandler("AttackAttributeAdd", AttackAttributeAdd::new); EffectHandler.getInstance().registerHandler("AttackAttributeAdd", AttackAttributeAdd::new);
EffectHandler.getInstance().registerHandler("AttackBehind", AttackBehind::new); EffectHandler.getInstance().registerHandler("AttackBehind", AttackBehind::new);
EffectHandler.getInstance().registerHandler("AttackDamagePosition", AttackDamagePosition::new);
EffectHandler.getInstance().registerHandler("AttackTrait", AttackTrait::new); EffectHandler.getInstance().registerHandler("AttackTrait", AttackTrait::new);
EffectHandler.getInstance().registerHandler("Backstab", Backstab::new); EffectHandler.getInstance().registerHandler("Backstab", Backstab::new);
EffectHandler.getInstance().registerHandler("Betray", Betray::new); EffectHandler.getInstance().registerHandler("Betray", Betray::new);

View File

@@ -1,53 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package handlers.effecthandlers;
import com.l2jmobius.commons.util.MathUtil;
import com.l2jmobius.gameserver.enums.Position;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Stats;
/**
* @author Nik
*/
public class AttackDamagePosition extends AbstractEffect
{
protected final double _amount;
protected final Position _position;
public AttackDamagePosition(StatsSet params)
{
_amount = params.getDouble("amount");
_position = params.getEnum("position", Position.class);
}
@Override
public void pump(L2Character effected, Skill skill)
{
effected.getStat().mergePositionTypeValue(Stats.ATTACK_DAMAGE, _position, (_amount / 100) + 1, MathUtil::mul);
}
@Override
public void onExit(BuffInfo info)
{
info.getEffected().getStat().mergePositionTypeValue(Stats.ATTACK_DAMAGE, _position, (_amount / 100) + 1, MathUtil::div);
}
}

View File

@@ -85,21 +85,6 @@ public final class Backstab extends AbstractEffect
damage *= 2; damage *= 2;
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, true, true, false);
Formulas.calcCounterAttack(effector, effected, skill, true);
effected.reduceCurrentHp(damage, effector, skill, false, true, true, false);
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// if (effector.isPlayer())
// {
// final L2PcInstance activePlayer = effector.getActingPlayer();
// activePlayer.sendDamageMessage(effected, skill, (int) damage, true, false);
// }
} }
} }

View File

@@ -94,7 +94,7 @@ public final class DamOverTime extends AbstractEffect
} }
} }
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
return info.getSkill().isToggle(); return info.getSkill().isToggle();
} }
} }

View File

@@ -74,7 +74,7 @@ public final class DamOverTimePercent extends AbstractEffect
} }
} }
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
return info.getSkill().isToggle(); return info.getSkill().isToggle();
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Death Link effect implementation. * Death Link effect implementation.
@@ -70,26 +68,6 @@ public final class DeathLink extends AbstractEffect
final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill); final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill);
final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power * (-((effector.getCurrentHp() * 2) / effector.getMaxHp()) + 2), effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power * (-((effector.getCurrentHp() * 2) / effector.getMaxHp()) + 2), effected.getMDef(), sps, bss, mcrit);
effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (damage > 0)
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
}
} }
} }

View File

@@ -162,10 +162,6 @@ public final class EnergyAttack extends AbstractEffect
damage = Math.max(0, damage); damage = Math.max(0, damage);
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(attacker, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// attacker.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -117,18 +117,6 @@ public final class FatalBlow extends AbstractEffect
damage *= 2; damage *= 2;
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, true, false);
Formulas.calcCounterAttack(effector, effected, skill, true);
effected.reduceCurrentHp(damage, effector, skill, false, false, true, false);
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// effector.sendDamageMessage(effected, skill, (int) damage, true, false);
} }
} }

View File

@@ -87,16 +87,6 @@ public final class HpDrain extends AbstractEffect
final double hpFinal = ((effector.getCurrentHp() + hpAdd) > effector.getMaxHp() ? effector.getMaxHp() : (effector.getCurrentHp() + hpAdd)); final double hpFinal = ((effector.getCurrentHp() + hpAdd) > effector.getMaxHp() ? effector.getMaxHp() : (effector.getCurrentHp() + hpAdd));
effector.setCurrentHp(hpFinal); effector.setCurrentHp(hpFinal);
if (damage > 0) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
} }
} }

View File

@@ -69,7 +69,7 @@ public final class HpToOwner extends AbstractEffect
final double damage = _power * getTicksMultiplier(); final double damage = _power * getTicksMultiplier();
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
if (_stealAmount > 0) if (_stealAmount > 0)
{ {
final double amount = (damage * _stealAmount) / 100; final double amount = (damage * _stealAmount) / 100;

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -26,7 +25,6 @@ import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.AbnormalType; import com.l2jmobius.gameserver.model.skills.AbnormalType;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Abnormal-depending dispel Attack effect implementation. * Magical Abnormal-depending dispel Attack effect implementation.
@@ -74,25 +72,6 @@ public final class MagicalAbnormalDispelAttack extends AbstractEffect
final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill); final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill);
final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit);
if (damage > 0) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
}
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Attackable; import com.l2jmobius.gameserver.model.actor.L2Attackable;
@@ -26,7 +25,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack effect implementation. * Magical Attack effect implementation.
@@ -86,34 +84,6 @@ public final class MagicalAttack extends AbstractEffect
damage *= _debuffModifier; damage *= _debuffModifier;
} }
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack By Abnormal effect implementation. * Magical Attack By Abnormal effect implementation.
@@ -73,34 +71,6 @@ public final class MagicalAttackByAbnormal extends AbstractEffect
// each buff increase +30% // each buff increase +30%
damage *= (((effected.getBuffCount() * 0.3) + 1.3) / 4); damage *= (((effected.getBuffCount() * 0.3) + 1.3) / 4);
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -20,7 +20,6 @@ import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -30,7 +29,6 @@ import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.AbnormalType; import com.l2jmobius.gameserver.model.skills.AbnormalType;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack By Abnormal Slot effect implementation. * Magical Attack By Abnormal Slot effect implementation.
@@ -90,34 +88,6 @@ public final class MagicalAttackByAbnormalSlot extends AbstractEffect
final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill); final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill);
final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit);
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack effect implementation. * Magical Attack effect implementation.
@@ -88,34 +86,6 @@ public final class MagicalAttackRange extends AbstractEffect
damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, mDef, sps, bss, mcrit); damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, mDef, sps, bss, mcrit);
} }
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -80,7 +80,7 @@ public final class MagicalDamOverTime extends AbstractEffect
} }
} }
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
return info.getSkill().isToggle(); return info.getSkill().isToggle();
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
@@ -82,25 +80,6 @@ public final class MagicalSoulAttack extends AbstractEffect
final double mAtk = effector.getMAtk() * (chargedSouls > 0 ? (1.3 + (chargedSouls * 0.05)) : 1); final double mAtk = effector.getMAtk() * (chargedSouls > 0 ? (1.3 + (chargedSouls * 0.05)) : 1);
final double damage = Formulas.calcMagicDam(effector, effected, skill, mAtk, _power, effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, mAtk, _power, effected.getMDef(), sps, bss, mcrit);
if (damage > 0) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
}
} }
} }

View File

@@ -172,10 +172,6 @@ public final class PhysicalAttack extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -134,10 +134,6 @@ public final class PhysicalAttackHpLink extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected. effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -144,9 +144,6 @@ public final class PhysicalAttackSaveHp extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected
Formulas.calcCounterAttack(effector, effected, skill, critical);
final double minHp = (effected.getMaxHp() * _saveHp) / 100; final double minHp = (effected.getMaxHp() * _saveHp) / 100;
if ((effected.getCurrentHp() - damage) < minHp) if ((effected.getCurrentHp() - damage) < minHp)
@@ -154,7 +151,6 @@ public final class PhysicalAttackSaveHp extends AbstractEffect
damage = effected.getCurrentHp() - minHp; damage = effected.getCurrentHp() - minHp;
} }
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false); effector.doAttack(damage, effected, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -165,10 +165,6 @@ public final class PhysicalAttackWeaponBonus extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -159,10 +159,6 @@ public final class PhysicalSoulAttack extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -90,22 +90,6 @@ public final class SoulBlow extends AbstractEffect
damage *= 1 + (chargedSouls * 0.04); damage *= 1 + (chargedSouls * 0.04);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, true, false);
Formulas.calcCounterAttack(effector, effected, skill, true);
effected.reduceCurrentHp(damage, effector, skill, false, false, true, false);
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// if (effector.isPlayer())
// {
// final L2PcInstance activePlayer = effector.getActingPlayer();
// activePlayer.sendDamageMessage(effected, skill, (int) damage, true, false);
// }
} }
} }

View File

@@ -890,15 +890,7 @@
<!-- Rear Damage + 3%. --> <!-- Rear Damage + 3%. -->
<operateType>P</operateType> <operateType>P</operateType>
<icon>icon.skill0030</icon> <icon>icon.skill0030</icon>
<effects> <!-- TODO: Handle rear damage stat -->
<effect name="AttackDamagePosition">
<amount>
<value level="1">3</value>
<value level="2">6</value>
</amount>
<position>BACK</position>
</effect>
</effects>
</skill> </skill>
<skill id="19145" toLevel="2" name="Noble Death Whisper"> <skill id="19145" toLevel="2" name="Noble Death Whisper">
<!-- Physical Critical Damage + 3%. --> <!-- Physical Critical Damage + 3%. -->

View File

@@ -13,7 +13,6 @@ AreaDamage: Topography (Danger Zone) resistance stat.
AttackAttribute: Stat that increases specific attack attribute. AttackAttribute: Stat that increases specific attack attribute.
AttackAttributeAdd: Stat that increases all attack attribute. AttackAttributeAdd: Stat that increases all attack attribute.
AttackBehind: Enables all attacks regardless of position to land towards the back. AttackBehind: Enables all attacks regardless of position to land towards the back.
AttackDamagePosition: Bonus damage depending on player position towards the target.
AttackTrait: Stat that manages all attack traits. AttackTrait: Stat that manages all attack traits.
Backstab: Inflicts physical damage according to the backstab formula. Backstab: Inflicts physical damage according to the backstab formula.
Betray: Causes the target summon to attack its owner. Betray: Causes the target summon to attack its owner.

View File

@@ -55,7 +55,6 @@ import com.l2jmobius.gameserver.enums.BasicProperty;
import com.l2jmobius.gameserver.enums.CategoryType; import com.l2jmobius.gameserver.enums.CategoryType;
import com.l2jmobius.gameserver.enums.InstanceType; import com.l2jmobius.gameserver.enums.InstanceType;
import com.l2jmobius.gameserver.enums.ItemSkillType; import com.l2jmobius.gameserver.enums.ItemSkillType;
import com.l2jmobius.gameserver.enums.Position;
import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.enums.Race;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.enums.StatusUpdateType; import com.l2jmobius.gameserver.enums.StatusUpdateType;
@@ -4397,7 +4396,8 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
if (!reflect && !isDOT) if (!reflect && !isDOT)
{ {
damage *= getStat().getPositionTypeValue(Stats.ATTACK_DAMAGE, Position.getPosition(this, target)); // TODO: Implement AttackDamagePosition effect
// damage *= getStat().getPositionTypeValue(Stats.ATTACK_DAMAGE, Position.getPosition(this, target));
// Counterattacks happen before damage received. // Counterattacks happen before damage received.
if (!target.isDead() && (skill != null)) if (!target.isDead() && (skill != null))

View File

@@ -44,7 +44,6 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("AttackAttribute", AttackAttribute::new); EffectHandler.getInstance().registerHandler("AttackAttribute", AttackAttribute::new);
EffectHandler.getInstance().registerHandler("AttackAttributeAdd", AttackAttributeAdd::new); EffectHandler.getInstance().registerHandler("AttackAttributeAdd", AttackAttributeAdd::new);
EffectHandler.getInstance().registerHandler("AttackBehind", AttackBehind::new); EffectHandler.getInstance().registerHandler("AttackBehind", AttackBehind::new);
EffectHandler.getInstance().registerHandler("AttackDamagePosition", AttackDamagePosition::new);
EffectHandler.getInstance().registerHandler("AttackTrait", AttackTrait::new); EffectHandler.getInstance().registerHandler("AttackTrait", AttackTrait::new);
EffectHandler.getInstance().registerHandler("Backstab", Backstab::new); EffectHandler.getInstance().registerHandler("Backstab", Backstab::new);
EffectHandler.getInstance().registerHandler("Betray", Betray::new); EffectHandler.getInstance().registerHandler("Betray", Betray::new);

View File

@@ -1,53 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package handlers.effecthandlers;
import com.l2jmobius.commons.util.MathUtil;
import com.l2jmobius.gameserver.enums.Position;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Stats;
/**
* @author Nik
*/
public class AttackDamagePosition extends AbstractEffect
{
protected final double _amount;
protected final Position _position;
public AttackDamagePosition(StatsSet params)
{
_amount = params.getDouble("amount");
_position = params.getEnum("position", Position.class);
}
@Override
public void pump(L2Character effected, Skill skill)
{
effected.getStat().mergePositionTypeValue(Stats.ATTACK_DAMAGE, _position, (_amount / 100) + 1, MathUtil::mul);
}
@Override
public void onExit(BuffInfo info)
{
info.getEffected().getStat().mergePositionTypeValue(Stats.ATTACK_DAMAGE, _position, (_amount / 100) + 1, MathUtil::div);
}
}

View File

@@ -85,21 +85,6 @@ public final class Backstab extends AbstractEffect
damage *= 2; damage *= 2;
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, true, true, false);
Formulas.calcCounterAttack(effector, effected, skill, true);
effected.reduceCurrentHp(damage, effector, skill, false, true, true, false);
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// if (effector.isPlayer())
// {
// final L2PcInstance activePlayer = effector.getActingPlayer();
// activePlayer.sendDamageMessage(effected, skill, (int) damage, true, false);
// }
} }
} }

View File

@@ -94,7 +94,7 @@ public final class DamOverTime extends AbstractEffect
} }
} }
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
return info.getSkill().isToggle(); return info.getSkill().isToggle();
} }
} }

View File

@@ -74,7 +74,7 @@ public final class DamOverTimePercent extends AbstractEffect
} }
} }
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
return info.getSkill().isToggle(); return info.getSkill().isToggle();
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Death Link effect implementation. * Death Link effect implementation.
@@ -70,26 +68,6 @@ public final class DeathLink extends AbstractEffect
final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill); final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill);
final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power * (-((effector.getCurrentHp() * 2) / effector.getMaxHp()) + 2), effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power * (-((effector.getCurrentHp() * 2) / effector.getMaxHp()) + 2), effected.getMDef(), sps, bss, mcrit);
effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (damage > 0)
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
}
} }
} }

View File

@@ -162,10 +162,6 @@ public final class EnergyAttack extends AbstractEffect
damage = Math.max(0, damage); damage = Math.max(0, damage);
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(attacker, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// attacker.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -117,18 +117,6 @@ public final class FatalBlow extends AbstractEffect
damage *= 2; damage *= 2;
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, true, false);
Formulas.calcCounterAttack(effector, effected, skill, true);
effected.reduceCurrentHp(damage, effector, skill, false, false, true, false);
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// effector.sendDamageMessage(effected, skill, (int) damage, true, false);
} }
} }

View File

@@ -87,16 +87,6 @@ public final class HpDrain extends AbstractEffect
final double hpFinal = ((effector.getCurrentHp() + hpAdd) > effector.getMaxHp() ? effector.getMaxHp() : (effector.getCurrentHp() + hpAdd)); final double hpFinal = ((effector.getCurrentHp() + hpAdd) > effector.getMaxHp() ? effector.getMaxHp() : (effector.getCurrentHp() + hpAdd));
effector.setCurrentHp(hpFinal); effector.setCurrentHp(hpFinal);
if (damage > 0) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
} }
} }

View File

@@ -69,7 +69,7 @@ public final class HpToOwner extends AbstractEffect
final double damage = _power * getTicksMultiplier(); final double damage = _power * getTicksMultiplier();
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
if (_stealAmount > 0) if (_stealAmount > 0)
{ {
final double amount = (damage * _stealAmount) / 100; final double amount = (damage * _stealAmount) / 100;

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -26,7 +25,6 @@ import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.AbnormalType; import com.l2jmobius.gameserver.model.skills.AbnormalType;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Abnormal-depending dispel Attack effect implementation. * Magical Abnormal-depending dispel Attack effect implementation.
@@ -74,25 +72,6 @@ public final class MagicalAbnormalDispelAttack extends AbstractEffect
final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill); final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill);
final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit);
if (damage > 0) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
}
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Attackable; import com.l2jmobius.gameserver.model.actor.L2Attackable;
@@ -26,7 +25,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack effect implementation. * Magical Attack effect implementation.
@@ -86,34 +84,6 @@ public final class MagicalAttack extends AbstractEffect
damage *= _debuffModifier; damage *= _debuffModifier;
} }
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack By Abnormal effect implementation. * Magical Attack By Abnormal effect implementation.
@@ -73,34 +71,6 @@ public final class MagicalAttackByAbnormal extends AbstractEffect
// each buff increase +30% // each buff increase +30%
damage *= (((effected.getBuffCount() * 0.3) + 1.3) / 4); damage *= (((effected.getBuffCount() * 0.3) + 1.3) / 4);
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -20,7 +20,6 @@ import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -30,7 +29,6 @@ import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.AbnormalType; import com.l2jmobius.gameserver.model.skills.AbnormalType;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack By Abnormal Slot effect implementation. * Magical Attack By Abnormal Slot effect implementation.
@@ -90,34 +88,6 @@ public final class MagicalAttackByAbnormalSlot extends AbstractEffect
final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill); final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill);
final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, effected.getMDef(), sps, bss, mcrit);
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
/** /**
* Magical Attack effect implementation. * Magical Attack effect implementation.
@@ -88,34 +86,6 @@ public final class MagicalAttackRange extends AbstractEffect
damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, mDef, sps, bss, mcrit); damage = Formulas.calcMagicDam(effector, effected, skill, effector.getMAtk(), _power, mDef, sps, bss, mcrit);
} }
// Manage attack or cast break of the target (calculating rate, sending message...) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
// Absorb HP from the damage inflicted
double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE)))
{
int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp());
absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp());
if (absorbDamage > 0)
{
effector.setCurrentHp(effector.getCurrentHp() + absorbDamage);
}
}
}
} }
} }

View File

@@ -80,7 +80,7 @@ public final class MagicalDamOverTime extends AbstractEffect
} }
} }
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, false, false); info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
return info.getSkill().isToggle(); return info.getSkill().isToggle();
} }
} }

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.enums.ShotType;
import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -25,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.model.stats.Stats;
import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
@@ -82,25 +80,6 @@ public final class MagicalSoulAttack extends AbstractEffect
final double mAtk = effector.getMAtk() * (chargedSouls > 0 ? (1.3 + (chargedSouls * 0.05)) : 1); final double mAtk = effector.getMAtk() * (chargedSouls > 0 ? (1.3 + (chargedSouls * 0.05)) : 1);
final double damage = Formulas.calcMagicDam(effector, effected, skill, mAtk, _power, effected.getMDef(), sps, bss, mcrit); final double damage = Formulas.calcMagicDam(effector, effected, skill, mAtk, _power, effected.getMDef(), sps, bss, mcrit);
if (damage > 0) effector.doAttack(damage, effected, skill, false, false, mcrit, false);
{
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
{
effected.breakAttack();
effected.breakCast();
}
// Shield Deflect Magic: Reflect all damage on caster.
if (effected.getStat().getValue(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0) > Rnd.get(100))
{
effector.reduceCurrentHp(damage, effected, skill, false, false, mcrit, true);
}
else
{
effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false);
// effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false);
}
}
} }
} }

View File

@@ -172,10 +172,6 @@ public final class PhysicalAttack extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -134,10 +134,6 @@ public final class PhysicalAttackHpLink extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected. effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -144,9 +144,6 @@ public final class PhysicalAttackSaveHp extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected
Formulas.calcCounterAttack(effector, effected, skill, critical);
final double minHp = (effected.getMaxHp() * _saveHp) / 100; final double minHp = (effected.getMaxHp() * _saveHp) / 100;
if ((effected.getCurrentHp() - damage) < minHp) if ((effected.getCurrentHp() - damage) < minHp)
@@ -154,7 +151,6 @@ public final class PhysicalAttackSaveHp extends AbstractEffect
damage = effected.getCurrentHp() - minHp; damage = effected.getCurrentHp() - minHp;
} }
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false); effector.doAttack(damage, effected, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -165,10 +165,6 @@ public final class PhysicalAttackWeaponBonus extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

View File

@@ -159,10 +159,6 @@ public final class PhysicalSoulAttack extends AbstractEffect
damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage); damage = effector.getStat().getValue(Stats.PHYSICAL_SKILL_POWER, damage);
} }
// Check if damage should be reflected effector.doAttack(damage, effected, skill, false, false, critical, false);
Formulas.calcCounterAttack(effector, effected, skill, critical);
effected.reduceCurrentHp(damage, effector, skill, false, false, critical, false);
// effector.sendDamageMessage(effected, skill, (int) damage, critical, false);
} }
} }

Some files were not shown because too many files have changed in this diff Show More