From 1e93b99aecebbd4aceb95ee56ef5dcc5ea756682 Mon Sep 17 00:00:00 2001
From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Mon, 23 Dec 2019 08:10:12 +0000
Subject: [PATCH] Two handed bonus mode additions and various skill fixes.
Contributed by gamelike85.
---
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 12 +-
.../game/data/stats/skills/00200-00299.xml | 6 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../game/data/stats/skills/00800-00899.xml | 8 +-
.../game/data/stats/skills/01900-01999.xml | 2 +-
.../game/data/stats/skills/03800-03899.xml | 24 +-
.../game/data/stats/skills/10300-10399.xml | 8 +-
.../game/data/stats/skills/10600-10699.xml | 15 +-
.../game/data/stats/skills/11200-11299.xml | 67 ++--
.../game/data/stats/skills/19100-19199.xml | 4 +-
.../dist/game/data/xsd/skills.xsd | 191 +++++++++-
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 12 +-
.../game/data/stats/skills/00200-00299.xml | 6 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../game/data/stats/skills/00800-00899.xml | 8 +-
.../game/data/stats/skills/01900-01999.xml | 2 +-
.../game/data/stats/skills/03800-03899.xml | 24 +-
.../game/data/stats/skills/10300-10399.xml | 8 +-
.../game/data/stats/skills/10600-10699.xml | 15 +-
.../game/data/stats/skills/11200-11299.xml | 67 ++--
.../game/data/stats/skills/19100-19199.xml | 4 +-
.../dist/game/data/xsd/skills.xsd | 191 +++++++++-
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 12 +-
.../game/data/stats/skills/00200-00299.xml | 6 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../game/data/stats/skills/00800-00899.xml | 8 +-
.../game/data/stats/skills/01900-01999.xml | 2 +-
.../game/data/stats/skills/03800-03899.xml | 24 +-
.../game/data/stats/skills/10300-10399.xml | 8 +-
.../game/data/stats/skills/10600-10699.xml | 15 +-
.../game/data/stats/skills/11200-11299.xml | 69 ++--
.../game/data/stats/skills/19100-19199.xml | 4 +-
.../dist/game/data/xsd/skills.xsd | 191 +++++++++-
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 12 +-
.../game/data/stats/skills/00200-00299.xml | 6 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../game/data/stats/skills/00800-00899.xml | 8 +-
.../game/data/stats/skills/01900-01999.xml | 2 +-
.../game/data/stats/skills/03800-03899.xml | 24 +-
.../game/data/stats/skills/10300-10399.xml | 8 +-
.../game/data/stats/skills/10600-10699.xml | 15 +-
.../game/data/stats/skills/11200-11299.xml | 69 ++--
.../game/data/stats/skills/19100-19199.xml | 4 +-
.../dist/game/data/xsd/skills.xsd | 191 +++++++++-
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 12 +-
.../game/data/stats/skills/00200-00299.xml | 6 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../game/data/stats/skills/00800-00899.xml | 8 +-
.../game/data/stats/skills/01900-01999.xml | 2 +-
.../game/data/stats/skills/03800-03899.xml | 24 +-
.../game/data/stats/skills/10000-10099.xml | 7 +-
.../game/data/stats/skills/10300-10399.xml | 8 +-
.../game/data/stats/skills/10600-10699.xml | 15 +-
.../game/data/stats/skills/11200-11299.xml | 8 +-
.../game/data/stats/skills/19100-19199.xml | 4 +-
.../dist/game/data/xsd/skills.xsd | 193 ++++++++++-
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 12 +-
.../game/data/stats/skills/00200-00299.xml | 6 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../game/data/stats/skills/00800-00899.xml | 8 +-
.../game/data/stats/skills/01900-01999.xml | 2 +-
.../game/data/stats/skills/03800-03899.xml | 24 +-
.../game/data/stats/skills/10000-10099.xml | 7 +-
.../game/data/stats/skills/10300-10399.xml | 8 +-
.../game/data/stats/skills/10600-10699.xml | 15 +-
.../game/data/stats/skills/11200-11299.xml | 8 +-
.../game/data/stats/skills/19100-19199.xml | 4 +-
.../dist/game/data/xsd/skills.xsd | 193 ++++++++++-
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 12 +-
.../game/data/stats/skills/00200-00299.xml | 6 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../game/data/stats/skills/00800-00899.xml | 8 +-
.../game/data/stats/skills/01900-01999.xml | 2 +-
.../game/data/stats/skills/03800-03899.xml | 24 +-
.../game/data/stats/skills/10000-10099.xml | 7 +-
.../game/data/stats/skills/10300-10399.xml | 8 +-
.../game/data/stats/skills/10600-10699.xml | 15 +-
.../game/data/stats/skills/11200-11299.xml | 8 +-
.../game/data/stats/skills/19100-19199.xml | 4 +-
.../dist/game/data/xsd/skills.xsd | 193 ++++++++++-
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 12 +-
.../game/data/stats/skills/00200-00299.xml | 6 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../game/data/stats/skills/00800-00899.xml | 8 +-
.../game/data/stats/skills/01900-01999.xml | 2 +-
.../game/data/stats/skills/03800-03899.xml | 24 +-
.../game/data/stats/skills/10000-10099.xml | 7 +-
.../game/data/stats/skills/10300-10399.xml | 8 +-
.../game/data/stats/skills/10600-10699.xml | 17 +-
.../game/data/stats/skills/11200-11299.xml | 8 +-
.../game/data/stats/skills/19100-19199.xml | 4 +-
.../game/data/stats/skills/30600-30699.xml | 12 +-
.../game/data/stats/skills/30700-30799.xml | 74 +++-
.../dist/game/data/xsd/skills.xsd | 195 ++++++++++-
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 4 +-
.../game/data/stats/skills/00200-00299.xml | 4 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../dist/game/data/xsd/skills.xsd | 191 +++++++++-
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 4 +-
.../game/data/stats/skills/00200-00299.xml | 4 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../dist/game/data/xsd/skills.xsd | 191 +++++++++-
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 4 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../dist/game/data/xsd/skills.xsd | 191 +++++++++-
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 4 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../dist/game/data/xsd/skills.xsd | 191 +++++++++-
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 4 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../dist/game/data/xsd/skills.xsd | 191 +++++++++-
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 4 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../dist/game/data/xsd/skills.xsd | 191 +++++++++-
.../effecthandlers/TwoHandedBluntBonus.java | 328 +++++++++++++++++-
.../effecthandlers/TwoHandedSwordBonus.java | 328 +++++++++++++++++-
.../game/data/stats/skills/00000-00099.xml | 4 +-
.../game/data/stats/skills/00100-00199.xml | 12 +-
.../game/data/stats/skills/00200-00299.xml | 6 +-
.../game/data/stats/skills/00600-00699.xml | 8 +-
.../game/data/stats/skills/00800-00899.xml | 8 +-
.../game/data/stats/skills/01900-01999.xml | 2 +-
.../game/data/stats/skills/03800-03899.xml | 24 +-
.../game/data/stats/skills/10300-10399.xml | 8 +-
.../game/data/stats/skills/10600-10699.xml | 15 +-
.../game/data/stats/skills/11200-11299.xml | 69 ++--
.../game/data/stats/skills/19100-19199.xml | 4 +-
.../dist/game/data/xsd/skills.xsd | 191 +++++++++-
170 files changed, 12868 insertions(+), 1259 deletions(-)
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00000-00099.xml
index 955f15c64b..23827ff785 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00000-00099.xml
@@ -6700,7 +6700,7 @@
10
15
- PER
+ PER
@@ -6712,7 +6712,7 @@
10
15
- PER
+ PER
15
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00100-00199.xml
index eae7956201..8214deeab1 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00100-00199.xml
@@ -2922,15 +2922,15 @@
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00200-00299.xml
index acbedc87a7..4ec806a3e6 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00200-00299.xml
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00200-00299.xml
@@ -6449,9 +6449,9 @@
122.1
129.3
- PER
- 3
- DIFF
+ PER
+ 3
+ DIFF
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00600-00699.xml
index ef2598ed58..97b38190a3 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00600-00699.xml
@@ -910,7 +910,7 @@
7.4
8.3
- PER
+ PER
@@ -921,7 +921,7 @@
7.4
8.3
- PER
+ PER
@@ -1225,11 +1225,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00800-00899.xml
index 3656fd419a..fdc548509f 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00800-00899.xml
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00800-00899.xml
@@ -220,8 +220,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
@@ -303,8 +303,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/01900-01999.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/01900-01999.xml
index 73b11ded78..1c1df6eb0a 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/01900-01999.xml
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/01900-01999.xml
@@ -1819,7 +1819,7 @@
1
127
1
- 2
+ 4
SELF
true
ALL
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/03800-03899.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/03800-03899.xml
index 3438c349e3..fb91022ade 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/03800-03899.xml
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/03800-03899.xml
@@ -655,9 +655,9 @@
P
5
-
- 5
- PER
+
+ 5
+ PER
@@ -668,9 +668,9 @@
P
5
-
- 3.9
- DIFF
+
+ 3.9
+ DIFF
@@ -707,9 +707,9 @@
P
5
-
- 340
- DIFF
+
+ 340
+ DIFF
@@ -723,9 +723,9 @@
P
5
-
- 54.4
- DIFF
+
+ 54.4
+ DIFF
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/10300-10399.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/10300-10399.xml
index 5f6969096e..2c6d759d00 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/10300-10399.xml
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/10300-10399.xml
@@ -471,7 +471,7 @@
4
5
- PER
+ PER
@@ -480,7 +480,7 @@
4
5
- PER
+ PER
@@ -1483,11 +1483,11 @@
30
- PER
+ PER
30
- PER
+ PER
5
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/10600-10699.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/10600-10699.xml
index cbae151340..a21628cce8 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/10600-10699.xml
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/10600-10699.xml
@@ -87,14 +87,13 @@
P
-
-
- 5
- 6
- 7
- 10
-
- DIFF
+
+
+ 10
+ 11
+ 13
+ 15
+
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11200-11299.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11200-11299.xml
index 4442a30baa..43559cfe2a 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11200-11299.xml
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11200-11299.xml
@@ -359,30 +359,11 @@
INT
-
- 105
- PER
-
24
PER
-
-
-
- 822
- 953
- 1105
- 1244
- 1409
- 1495
- 1586
- 1683
- 1786
- 1894
-
- DIFF
- - DUALBLUNT
+ - BLUNT
@@ -399,26 +380,51 @@
2478
DIFF
-
-
- 4
- DIFF
- - DUALBLUNT
+ - BLUNT
23
PER
+
+ - BLUNT
+
+
+
+ 6
+ PER
+
+ - BLUNT
+
+
+
+ 120
+ PER
+
+
+
+ 822
+ 953
+ 1105
+ 1244
+ 1409
+ 1495
+ 1586
+ 1683
+ 1786
+ 1894
+
+ DIFF
+
+
+ 4
+ DIFF
2
INT
-
- 6
- DIFF
-
@@ -2478,7 +2484,6 @@
-
-100
DIFF
@@ -3409,7 +3414,7 @@
LIFE_FORCE_OTHERS
1
SUMMON
- SUMMON_EXCEPT_MASTER
+ SINGLE
FRIEND
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/19100-19199.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/19100-19199.xml
index 311b1b66df..06cfa82576 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/19100-19199.xml
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/19100-19199.xml
@@ -686,14 +686,14 @@
3
5
- PER
+ PER
3
5
- PER
+ PER
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd
index 73b983bee9..57cd89f529 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd
@@ -931,22 +931,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -962,6 +946,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1389,6 +1533,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00000-00099.xml
index b61d46d899..b6bb12ab45 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00000-00099.xml
@@ -6698,7 +6698,7 @@
10
15
- PER
+ PER
@@ -6710,7 +6710,7 @@
10
15
- PER
+ PER
15
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00100-00199.xml
index 45866a0b8b..662f3ae4b6 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00100-00199.xml
@@ -2922,15 +2922,15 @@
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00200-00299.xml
index 7efcb5b441..80ba456417 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00200-00299.xml
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00200-00299.xml
@@ -6447,9 +6447,9 @@
122.1
129.3
- PER
- 3
- DIFF
+ PER
+ 3
+ DIFF
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00600-00699.xml
index 5a00734d12..3c4801db42 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00600-00699.xml
@@ -910,7 +910,7 @@
7.4
8.3
- PER
+ PER
@@ -921,7 +921,7 @@
7.4
8.3
- PER
+ PER
@@ -1225,11 +1225,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00800-00899.xml
index 41f38fb24a..65db9bfd17 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00800-00899.xml
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00800-00899.xml
@@ -220,8 +220,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
@@ -303,8 +303,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/01900-01999.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/01900-01999.xml
index 83628a6476..95e267ac5e 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/01900-01999.xml
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/01900-01999.xml
@@ -1819,7 +1819,7 @@
1
127
1
- 2
+ 4
SELF
true
ALL
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/03800-03899.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/03800-03899.xml
index ddf0b7de91..548943353a 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/03800-03899.xml
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/03800-03899.xml
@@ -655,9 +655,9 @@
P
5
-
- 5
- PER
+
+ 5
+ PER
@@ -668,9 +668,9 @@
P
5
-
- 3.9
- DIFF
+
+ 3.9
+ DIFF
@@ -707,9 +707,9 @@
P
5
-
- 340
- DIFF
+
+ 340
+ DIFF
@@ -723,9 +723,9 @@
P
5
-
- 54.4
- DIFF
+
+ 54.4
+ DIFF
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/10300-10399.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/10300-10399.xml
index da81098ae8..ea3e6e55d6 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/10300-10399.xml
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/10300-10399.xml
@@ -478,7 +478,7 @@
4
5
- PER
+ PER
@@ -487,7 +487,7 @@
4
5
- PER
+ PER
@@ -1520,11 +1520,11 @@
30
- PER
+ PER
30
- PER
+ PER
5
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/10600-10699.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/10600-10699.xml
index 68281c30c5..0d474333d6 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/10600-10699.xml
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/10600-10699.xml
@@ -87,14 +87,13 @@
P
-
-
- 5
- 6
- 7
- 10
-
- DIFF
+
+
+ 10
+ 11
+ 13
+ 15
+
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11200-11299.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11200-11299.xml
index ee9f64873f..d5af388015 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11200-11299.xml
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11200-11299.xml
@@ -366,30 +366,11 @@
INT
-
- 105
- PER
-
24
PER
-
-
-
- 822
- 953
- 1105
- 1244
- 1409
- 1495
- 1586
- 1683
- 1786
- 1894
-
- DIFF
- - DUALBLUNT
+ - BLUNT
@@ -406,26 +387,51 @@
2478
DIFF
-
-
- 4
- DIFF
- - DUALBLUNT
+ - BLUNT
23
PER
+
+ - BLUNT
+
+
+
+ 6
+ PER
+
+ - BLUNT
+
+
+
+ 120
+ PER
+
+
+
+ 822
+ 953
+ 1105
+ 1244
+ 1409
+ 1495
+ 1586
+ 1683
+ 1786
+ 1894
+
+ DIFF
+
+
+ 4
+ DIFF
2
INT
-
- 6
- DIFF
-
@@ -2490,7 +2496,6 @@
-
-100
DIFF
@@ -3421,7 +3426,7 @@
LIFE_FORCE_OTHERS
1
SUMMON
- SUMMON_EXCEPT_MASTER
+ SINGLE
FRIEND
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/19100-19199.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/19100-19199.xml
index ed0d8a3e0d..1c9c6da915 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/19100-19199.xml
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/19100-19199.xml
@@ -686,14 +686,14 @@
3
5
- PER
+ PER
3
5
- PER
+ PER
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd
index dae9a65dfa..05ef32a51d 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd
@@ -935,22 +935,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -966,6 +950,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1393,6 +1537,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00000-00099.xml
index b61d46d899..b6bb12ab45 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00000-00099.xml
@@ -6698,7 +6698,7 @@
10
15
- PER
+ PER
@@ -6710,7 +6710,7 @@
10
15
- PER
+ PER
15
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00100-00199.xml
index 45866a0b8b..662f3ae4b6 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00100-00199.xml
@@ -2922,15 +2922,15 @@
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00200-00299.xml
index 6363ff91c8..cbff89d85f 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00200-00299.xml
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00200-00299.xml
@@ -6447,9 +6447,9 @@
122.1
129.3
- PER
- 3
- DIFF
+ PER
+ 3
+ DIFF
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00600-00699.xml
index 5a00734d12..3c4801db42 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00600-00699.xml
@@ -910,7 +910,7 @@
7.4
8.3
- PER
+ PER
@@ -921,7 +921,7 @@
7.4
8.3
- PER
+ PER
@@ -1225,11 +1225,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00800-00899.xml
index 41f38fb24a..65db9bfd17 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00800-00899.xml
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00800-00899.xml
@@ -220,8 +220,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
@@ -303,8 +303,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/01900-01999.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/01900-01999.xml
index ef2bcada93..5b4b3a618e 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/01900-01999.xml
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/01900-01999.xml
@@ -1819,7 +1819,7 @@
1
127
1
- 2
+ 4
SELF
true
ALL
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/03800-03899.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/03800-03899.xml
index ddf0b7de91..548943353a 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/03800-03899.xml
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/03800-03899.xml
@@ -655,9 +655,9 @@
P
5
-
- 5
- PER
+
+ 5
+ PER
@@ -668,9 +668,9 @@
P
5
-
- 3.9
- DIFF
+
+ 3.9
+ DIFF
@@ -707,9 +707,9 @@
P
5
-
- 340
- DIFF
+
+ 340
+ DIFF
@@ -723,9 +723,9 @@
P
5
-
- 54.4
- DIFF
+
+ 54.4
+ DIFF
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/10300-10399.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/10300-10399.xml
index 0b72e25703..192b98c4bf 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/10300-10399.xml
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/10300-10399.xml
@@ -479,7 +479,7 @@
4
5
- PER
+ PER
@@ -488,7 +488,7 @@
4
5
- PER
+ PER
@@ -1521,11 +1521,11 @@
30
- PER
+ PER
30
- PER
+ PER
5
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/10600-10699.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/10600-10699.xml
index 68281c30c5..0d474333d6 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/10600-10699.xml
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/10600-10699.xml
@@ -87,14 +87,13 @@
P
-
-
- 5
- 6
- 7
- 10
-
- DIFF
+
+
+ 10
+ 11
+ 13
+ 15
+
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11200-11299.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11200-11299.xml
index dfa6139e92..6624f74083 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11200-11299.xml
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11200-11299.xml
@@ -101,7 +101,7 @@
PER
- 25
+ -25
PER
@@ -390,30 +390,11 @@
INT
-
- 105
- PER
-
24
PER
-
-
-
- 822
- 953
- 1105
- 1244
- 1409
- 1495
- 1586
- 1683
- 1786
- 1894
-
- DIFF
- - DUALBLUNT
+ - BLUNT
@@ -430,26 +411,51 @@
2478
DIFF
-
-
- 4
- DIFF
- - DUALBLUNT
+ - BLUNT
23
PER
+
+ - BLUNT
+
+
+
+ 6
+ PER
+
+ - BLUNT
+
+
+
+ 120
+ PER
+
+
+
+ 822
+ 953
+ 1105
+ 1244
+ 1409
+ 1495
+ 1586
+ 1683
+ 1786
+ 1894
+
+ DIFF
+
+
+ 4
+ DIFF
2
INT
-
- 6
- DIFF
-
@@ -2515,7 +2521,6 @@
-
-100
DIFF
@@ -3446,7 +3451,7 @@
LIFE_FORCE_OTHERS
1
SUMMON
- SUMMON_EXCEPT_MASTER
+ SINGLE
FRIEND
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/19100-19199.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/19100-19199.xml
index ba25f64292..32e37b2fb9 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/19100-19199.xml
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/19100-19199.xml
@@ -686,14 +686,14 @@
3
5
- PER
+ PER
3
5
- PER
+ PER
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd
index 367c6e181d..4e660dd344 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd
@@ -967,22 +967,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -998,6 +982,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1425,6 +1569,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00000-00099.xml
index aae3f26e20..1703c2cdaa 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00000-00099.xml
@@ -6698,7 +6698,7 @@
10
15
- PER
+ PER
@@ -6710,7 +6710,7 @@
10
15
- PER
+ PER
15
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00100-00199.xml
index 46de679299..644de082fa 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00100-00199.xml
@@ -2933,15 +2933,15 @@
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00200-00299.xml
index 22115f3171..5f6d3069ea 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00200-00299.xml
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00200-00299.xml
@@ -6475,9 +6475,9 @@
122.1
129.3
- PER
- 3
- DIFF
+ PER
+ 3
+ DIFF
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00600-00699.xml
index 01513f081b..8b74287c0f 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00600-00699.xml
@@ -910,7 +910,7 @@
7.4
8.3
- PER
+ PER
@@ -921,7 +921,7 @@
7.4
8.3
- PER
+ PER
@@ -1225,11 +1225,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00800-00899.xml
index ef7eef73be..842d01d71a 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00800-00899.xml
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00800-00899.xml
@@ -220,8 +220,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
@@ -303,8 +303,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/01900-01999.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/01900-01999.xml
index 83628a6476..95e267ac5e 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/01900-01999.xml
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/01900-01999.xml
@@ -1819,7 +1819,7 @@
1
127
1
- 2
+ 4
SELF
true
ALL
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/03800-03899.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/03800-03899.xml
index bd90b4760e..83fdfdf330 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/03800-03899.xml
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/03800-03899.xml
@@ -655,9 +655,9 @@
P
5
-
- 5
- PER
+
+ 5
+ PER
@@ -668,9 +668,9 @@
P
5
-
- 3.9
- DIFF
+
+ 3.9
+ DIFF
@@ -707,9 +707,9 @@
P
5
-
- 340
- DIFF
+
+ 340
+ DIFF
@@ -723,9 +723,9 @@
P
5
-
- 54.4
- DIFF
+
+ 54.4
+ DIFF
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/10300-10399.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/10300-10399.xml
index 6b18fc220d..0785d4d881 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/10300-10399.xml
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/10300-10399.xml
@@ -476,7 +476,7 @@
4
5
- PER
+ PER
@@ -485,7 +485,7 @@
4
5
- PER
+ PER
@@ -1534,11 +1534,11 @@
30
- PER
+ PER
30
- PER
+ PER
5
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/10600-10699.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/10600-10699.xml
index a82c0bdfa0..444741f50f 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/10600-10699.xml
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/10600-10699.xml
@@ -87,14 +87,13 @@
P
-
-
- 5
- 6
- 7
- 10
-
- DIFF
+
+
+ 10
+ 11
+ 13
+ 15
+
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11200-11299.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11200-11299.xml
index a50bfcf536..0e5db6df89 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11200-11299.xml
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11200-11299.xml
@@ -101,7 +101,7 @@
PER
- 25
+ -25
PER
@@ -381,30 +381,11 @@
INT
-
- 105
- PER
-
24
PER
-
-
-
- 822
- 953
- 1105
- 1244
- 1409
- 1495
- 1586
- 1683
- 1786
- 1894
-
- DIFF
- - DUALBLUNT
+ - BLUNT
@@ -421,26 +402,51 @@
2478
DIFF
-
-
- 4
- DIFF
- - DUALBLUNT
+ - BLUNT
23
PER
+
+ - BLUNT
+
+
+
+ 6
+ PER
+
+ - BLUNT
+
+
+
+ 120
+ PER
+
+
+
+ 822
+ 953
+ 1105
+ 1244
+ 1409
+ 1495
+ 1586
+ 1683
+ 1786
+ 1894
+
+ DIFF
+
+
+ 4
+ DIFF
2
INT
-
- 6
- DIFF
-
@@ -1320,7 +1326,6 @@
icon.skill11266
A1
- -676
99
101
@@ -3357,7 +3362,7 @@
LIFE_FORCE_OTHERS
1
SUMMON
- SUMMON_EXCEPT_MASTER
+ SINGLE
FRIEND
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/19100-19199.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/19100-19199.xml
index 017641160d..a97f8c24e2 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/19100-19199.xml
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/19100-19199.xml
@@ -686,14 +686,14 @@
3
5
- PER
+ PER
3
5
- PER
+ PER
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd
index 765c7b1775..6c81fcb945 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd
@@ -969,22 +969,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1000,6 +984,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1441,6 +1585,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00000-00099.xml
index a71883809e..b0dcf3c42a 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00000-00099.xml
@@ -6698,7 +6698,7 @@
10
15
- PER
+ PER
@@ -6710,7 +6710,7 @@
10
15
- PER
+ PER
15
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00100-00199.xml
index 30fac4c141..546e2740b8 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00100-00199.xml
@@ -2933,15 +2933,15 @@
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00200-00299.xml
index f07c2b13e6..a9e72b2bbd 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00200-00299.xml
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00200-00299.xml
@@ -6475,9 +6475,9 @@
122.1
129.3
- PER
- 3
- DIFF
+ PER
+ 3
+ DIFF
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00600-00699.xml
index a85090ac8b..9fce437c90 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00600-00699.xml
@@ -910,7 +910,7 @@
7.4
8.3
- PER
+ PER
@@ -921,7 +921,7 @@
7.4
8.3
- PER
+ PER
@@ -1225,11 +1225,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00800-00899.xml
index 3d5dd43407..15832f63fa 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00800-00899.xml
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/00800-00899.xml
@@ -220,8 +220,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
@@ -303,8 +303,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/01900-01999.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/01900-01999.xml
index 603d8ea5ff..7d3f780d90 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/01900-01999.xml
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/01900-01999.xml
@@ -1819,7 +1819,7 @@
1
127
1
- 2
+ 4
SELF
true
ALL
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/03800-03899.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/03800-03899.xml
index 8e3cc1f20a..6a747944a3 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/03800-03899.xml
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/03800-03899.xml
@@ -655,9 +655,9 @@
P
5
-
- 5
- PER
+
+ 5
+ PER
@@ -668,9 +668,9 @@
P
5
-
- 3.9
- DIFF
+
+ 3.9
+ DIFF
@@ -707,9 +707,9 @@
P
5
-
- 340
- DIFF
+
+ 340
+ DIFF
@@ -723,9 +723,9 @@
P
5
-
- 54.4
- DIFF
+
+ 54.4
+ DIFF
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/10000-10099.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/10000-10099.xml
index e1aaa7efc0..04360f487c 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/10000-10099.xml
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/10000-10099.xml
@@ -1428,14 +1428,9 @@
NONE
0
300000
- OTHERS
+ SELF
PARTY
FRIEND_PC
-
-
- false
-
-
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/10300-10399.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/10300-10399.xml
index ba9e7a8eb4..c0df915da8 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/10300-10399.xml
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/10300-10399.xml
@@ -476,7 +476,7 @@
4
5
- PER
+ PER
@@ -485,7 +485,7 @@
4
5
- PER
+ PER
@@ -1547,11 +1547,11 @@
30
- PER
+ PER
30
- PER
+ PER
5
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/10600-10699.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/10600-10699.xml
index a65e42444b..58525dcf3d 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/10600-10699.xml
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/10600-10699.xml
@@ -87,14 +87,13 @@
P
-
-
- 5
- 6
- 7
- 10
-
- DIFF
+
+
+ 10
+ 11
+ 13
+ 15
+
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/11200-11299.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/11200-11299.xml
index 5516157982..483232f273 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/11200-11299.xml
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/11200-11299.xml
@@ -429,7 +429,7 @@
120
- PER
+ PER
@@ -444,11 +444,11 @@
1786
1894
- DIFF
+ DIFF
- 4
- DIFF
+ 4
+ DIFF
2
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/19100-19199.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/19100-19199.xml
index d9f52a7811..e02929dd2f 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/19100-19199.xml
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/19100-19199.xml
@@ -686,14 +686,14 @@
3
5
- PER
+ PER
3
5
- PER
+ PER
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/skills.xsd b/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/skills.xsd
index 2b1f3f3c03..bdb51310ff 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/skills.xsd
@@ -872,22 +872,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -903,6 +887,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1006,8 +1150,6 @@
-
-
@@ -1345,6 +1487,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00000-00099.xml
index 4a3b9b8200..de3fc48819 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00000-00099.xml
@@ -6699,7 +6699,7 @@
10
15
- PER
+ PER
@@ -6711,7 +6711,7 @@
10
15
- PER
+ PER
15
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00100-00199.xml
index b2b31a19b9..0cbbc399f3 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00100-00199.xml
@@ -2933,15 +2933,15 @@
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00200-00299.xml
index 3e7b474ee1..7f4e6dd819 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00200-00299.xml
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00200-00299.xml
@@ -6475,9 +6475,9 @@
122.1
129.3
- PER
- 3
- DIFF
+ PER
+ 3
+ DIFF
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00600-00699.xml
index 5d04473612..9857c7a8eb 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00600-00699.xml
@@ -910,7 +910,7 @@
7.4
8.3
- PER
+ PER
@@ -921,7 +921,7 @@
7.4
8.3
- PER
+ PER
@@ -1225,11 +1225,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00800-00899.xml
index 7b60ff7248..b410f4e42a 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00800-00899.xml
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/00800-00899.xml
@@ -220,8 +220,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
@@ -303,8 +303,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/01900-01999.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/01900-01999.xml
index f96c90e749..58346e0407 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/01900-01999.xml
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/01900-01999.xml
@@ -1837,7 +1837,7 @@
1
127
1
- 2
+ 4
SELF
true
ALL
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/03800-03899.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/03800-03899.xml
index 36d8a03686..c4a61c2ff3 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/03800-03899.xml
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/03800-03899.xml
@@ -655,9 +655,9 @@
P
5
-
- 5
- PER
+
+ 5
+ PER
@@ -668,9 +668,9 @@
P
5
-
- 3.9
- DIFF
+
+ 3.9
+ DIFF
@@ -707,9 +707,9 @@
P
5
-
- 340
- DIFF
+
+ 340
+ DIFF
@@ -723,9 +723,9 @@
P
5
-
- 54.4
- DIFF
+
+ 54.4
+ DIFF
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/10000-10099.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/10000-10099.xml
index d2221bd36e..2d1bbb27ff 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/10000-10099.xml
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/10000-10099.xml
@@ -1428,14 +1428,9 @@
NONE
0
300000
- OTHERS
+ SELF
PARTY
FRIEND_PC
-
-
- false
-
-
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/10300-10399.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/10300-10399.xml
index 6bbf18e002..d42dc81229 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/10300-10399.xml
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/10300-10399.xml
@@ -476,7 +476,7 @@
4
5
- PER
+ PER
@@ -485,7 +485,7 @@
4
5
- PER
+ PER
@@ -1547,11 +1547,11 @@
30
- PER
+ PER
30
- PER
+ PER
5
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/10600-10699.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/10600-10699.xml
index dd8ce5d003..0a9783b993 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/10600-10699.xml
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/10600-10699.xml
@@ -87,14 +87,13 @@
P
-
-
- 5
- 6
- 7
- 10
-
- DIFF
+
+
+ 10
+ 11
+ 13
+ 15
+
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/11200-11299.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/11200-11299.xml
index 2a20901a5f..11bd2c2145 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/11200-11299.xml
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/11200-11299.xml
@@ -429,7 +429,7 @@
120
- PER
+ PER
@@ -444,11 +444,11 @@
1786
1894
- DIFF
+ DIFF
- 4
- DIFF
+ 4
+ DIFF
2
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/19100-19199.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/19100-19199.xml
index 62b2ff09aa..e8ab2917bf 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/19100-19199.xml
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/19100-19199.xml
@@ -686,14 +686,14 @@
3
5
- PER
+ PER
3
5
- PER
+ PER
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/skills.xsd b/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/skills.xsd
index 2b1f3f3c03..bdb51310ff 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/skills.xsd
@@ -872,22 +872,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -903,6 +887,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1006,8 +1150,6 @@
-
-
@@ -1345,6 +1487,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00000-00099.xml
index 6553c256a9..e086233e30 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00000-00099.xml
@@ -6727,7 +6727,7 @@
15
20
- PER
+ PER
@@ -6740,7 +6740,7 @@
15
20
- PER
+ PER
15
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00100-00199.xml
index b3752813a9..ab5493ea88 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00100-00199.xml
@@ -2948,15 +2948,15 @@
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00200-00299.xml
index d00f207522..410bb013a2 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00200-00299.xml
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00200-00299.xml
@@ -6498,9 +6498,9 @@
122.1
129.3
- PER
- 3
- DIFF
+ PER
+ 3
+ DIFF
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00600-00699.xml
index 8b1758760d..aa7335d25b 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00600-00699.xml
@@ -910,7 +910,7 @@
7.4
8.3
- PER
+ PER
@@ -921,7 +921,7 @@
7.4
8.3
- PER
+ PER
@@ -1225,11 +1225,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00800-00899.xml
index 0745eba62b..c51b299a84 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00800-00899.xml
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/00800-00899.xml
@@ -218,8 +218,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
@@ -301,8 +301,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/01900-01999.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/01900-01999.xml
index 4df6a161c0..d442a80d8f 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/01900-01999.xml
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/01900-01999.xml
@@ -1832,7 +1832,7 @@
1
127
1
- 2
+ 4
SELF
true
ALL
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/03800-03899.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/03800-03899.xml
index d009492b0b..82f964c24c 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/03800-03899.xml
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/03800-03899.xml
@@ -655,9 +655,9 @@
P
5
-
- 5
- PER
+
+ 5
+ PER
@@ -668,9 +668,9 @@
P
5
-
- 3.9
- DIFF
+
+ 3.9
+ DIFF
@@ -707,9 +707,9 @@
P
5
-
- 340
- DIFF
+
+ 340
+ DIFF
@@ -723,9 +723,9 @@
P
5
-
- 54.4
- DIFF
+
+ 54.4
+ DIFF
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/10000-10099.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/10000-10099.xml
index ee5f98a4bc..5d6a7dc836 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/10000-10099.xml
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/10000-10099.xml
@@ -1492,14 +1492,9 @@
NONE
0
300000
- OTHERS
+ SELF
PARTY
FRIEND_PC
-
-
- false
-
-
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/10300-10399.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/10300-10399.xml
index efa18bd3fc..29ec805544 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/10300-10399.xml
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/10300-10399.xml
@@ -484,7 +484,7 @@
4
5
- PER
+ PER
@@ -493,7 +493,7 @@
4
5
- PER
+ PER
@@ -1590,11 +1590,11 @@
30
- PER
+ PER
30
- PER
+ PER
5
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/10600-10699.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/10600-10699.xml
index 42062edc31..4c42a1546a 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/10600-10699.xml
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/10600-10699.xml
@@ -87,14 +87,13 @@
P
-
-
- 5
- 6
- 7
- 10
-
- DIFF
+
+
+ 10
+ 11
+ 13
+ 15
+
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/11200-11299.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/11200-11299.xml
index 4b2c089588..284ff1e770 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/11200-11299.xml
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/11200-11299.xml
@@ -433,7 +433,7 @@
120
- PER
+ PER
@@ -448,11 +448,11 @@
1786
1894
- DIFF
+ DIFF
- 4
- DIFF
+ 4
+ DIFF
2
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/19100-19199.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/19100-19199.xml
index 4770fef7b3..2ef3f10d04 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/19100-19199.xml
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/19100-19199.xml
@@ -686,14 +686,14 @@
3
5
- PER
+ PER
3
5
- PER
+ PER
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/skills.xsd b/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/skills.xsd
index 8342f6e64f..8ae89bb560 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/skills.xsd
@@ -872,22 +872,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -903,6 +887,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1006,8 +1150,6 @@
-
-
@@ -1345,6 +1487,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00000-00099.xml
index c3c0777a6f..6caf3c8d9b 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00000-00099.xml
@@ -6727,7 +6727,7 @@
15
20
- PER
+ PER
@@ -6740,7 +6740,7 @@
15
20
- PER
+ PER
15
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00100-00199.xml
index 002f8e1a70..58cafa4f55 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00100-00199.xml
@@ -2948,15 +2948,15 @@
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00200-00299.xml
index ba1f5baa53..e5045269d0 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00200-00299.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00200-00299.xml
@@ -6481,9 +6481,9 @@
122.1
129.3
- PER
- 3
- DIFF
+ PER
+ 3
+ DIFF
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00600-00699.xml
index fbf4bb5199..218c906406 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00600-00699.xml
@@ -910,7 +910,7 @@
7.4
8.3
- PER
+ PER
@@ -921,7 +921,7 @@
7.4
8.3
- PER
+ PER
@@ -1225,11 +1225,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00800-00899.xml
index d44a1f534c..084be71518 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00800-00899.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/00800-00899.xml
@@ -218,8 +218,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
@@ -301,8 +301,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/01900-01999.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/01900-01999.xml
index aa0f8a931e..5f64849d88 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/01900-01999.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/01900-01999.xml
@@ -1803,7 +1803,7 @@
1
127
1
- 2
+ 4
SELF
true
ALL
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/03800-03899.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/03800-03899.xml
index 3e1d5b42e8..0651997c19 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/03800-03899.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/03800-03899.xml
@@ -655,9 +655,9 @@
P
5
-
- 5
- PER
+
+ 5
+ PER
@@ -668,9 +668,9 @@
P
5
-
- 3.9
- DIFF
+
+ 3.9
+ DIFF
@@ -707,9 +707,9 @@
P
5
-
- 340
- DIFF
+
+ 340
+ DIFF
@@ -723,9 +723,9 @@
P
5
-
- 54.4
- DIFF
+
+ 54.4
+ DIFF
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/10000-10099.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/10000-10099.xml
index 200e711bad..f4b65b232f 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/10000-10099.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/10000-10099.xml
@@ -1492,14 +1492,9 @@
NONE
0
300000
- OTHERS
+ SELF
PARTY
FRIEND_PC
-
-
- false
-
-
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/10300-10399.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/10300-10399.xml
index 2133ff3fd1..66100de852 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/10300-10399.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/10300-10399.xml
@@ -484,7 +484,7 @@
4
5
- PER
+ PER
@@ -493,7 +493,7 @@
4
5
- PER
+ PER
@@ -1590,11 +1590,11 @@
30
- PER
+ PER
30
- PER
+ PER
5
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/10600-10699.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/10600-10699.xml
index 8d809c7c08..9e88ffe3d2 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/10600-10699.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/10600-10699.xml
@@ -77,7 +77,7 @@
-
+
icon.skill10608
85
@@ -87,14 +87,13 @@
P
-
-
- 5
- 6
- 7
- 10
-
- DIFF
+
+
+ 10
+ 11
+ 13
+ 15
+
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/11200-11299.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/11200-11299.xml
index 19cc93e666..0ca121d93f 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/11200-11299.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/11200-11299.xml
@@ -433,7 +433,7 @@
120
- PER
+ PER
@@ -448,11 +448,11 @@
1786
1894
- DIFF
+ DIFF
- 4
- DIFF
+ 4
+ DIFF
2
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/19100-19199.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/19100-19199.xml
index b75cddc187..bd85d18012 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/19100-19199.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/19100-19199.xml
@@ -686,14 +686,14 @@
3
5
- PER
+ PER
3
5
- PER
+ PER
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/30600-30699.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/30600-30699.xml
index eb40ed9edf..922c58b5e8 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/30600-30699.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/30600-30699.xml
@@ -3511,15 +3511,15 @@
5
- PER
- 4
- DIFF
+ PER
+ 4
+ DIFF
5
- PER
- 4
- DIFF
+ PER
+ 4
+ DIFF
5
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/30700-30799.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/30700-30799.xml
index 87a7dc86c9..52240c7ab9 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/30700-30799.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/30700-30799.xml
@@ -239,16 +239,27 @@
76
+
+ 1
+ PER
+
+
+
+ 51
+ 102
+
+ DIFF
+
1
- PER
+ PER
51
102
- DIFF
+ DIFF
@@ -1514,6 +1525,47 @@
1
INT
+
+
+ 51
+ 112
+
+ DIFF
+
+ 70
+ 140
+
+ DIFF
+
+ 1
+ 2
+
+ DIFF
+
+
+
+ 80
+ 100
+
+ PER
+
+ 8
+ 12
+
+ PER
+
+
+
+ 12
+ 15
+
+ PER
+
+ 3
+ 4
+
+ PER
+
@@ -3221,7 +3273,7 @@
15
20
- PER
+ PER
@@ -3230,7 +3282,7 @@
15
20
- PER
+ PER
@@ -3473,15 +3525,15 @@
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
@@ -4863,6 +4915,7 @@
-5
-5
-5
+ -5
@@ -4896,6 +4949,7 @@
-5
-5
-5
+ -5
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/skills.xsd b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/skills.xsd
index 070bc7f06d..f624a1fe09 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/skills.xsd
@@ -872,22 +872,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -903,6 +887,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1006,8 +1150,6 @@
-
-
@@ -1345,6 +1487,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2590,6 +2747,7 @@
+
@@ -2759,6 +2917,7 @@
+
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00000-00099.xml
index c307f95e35..bde089fafa 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00000-00099.xml
@@ -6779,7 +6779,7 @@
10
15
- PER
+ PER
@@ -6791,7 +6791,7 @@
10
15
- PER
+ PER
15
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00100-00199.xml
index 0a1ec9aad5..e5ada22d75 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00100-00199.xml
@@ -3007,13 +3007,13 @@
10
- PER
+ PER
8
DIFF
10
- PER
+ PER
8
DIFF
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00200-00299.xml
index 3856253003..5cd994700b 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00200-00299.xml
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00200-00299.xml
@@ -6595,7 +6595,7 @@
140
143
- PER
+ PER
3
DIFF
@@ -6625,7 +6625,7 @@
140
143
- PER
+ PER
3
DIFF
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00600-00699.xml
index c0ef751599..32d1cc6b19 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00600-00699.xml
@@ -702,7 +702,7 @@
7.4
8.3
- PER
+ PER
@@ -713,7 +713,7 @@
7.4
8.3
- PER
+ PER
@@ -1017,11 +1017,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd
index ebbef6df21..68224eca95 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd
@@ -719,22 +719,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -750,6 +734,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1327,6 +1471,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00000-00099.xml
index 67b867de02..94ebfbf12d 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00000-00099.xml
@@ -6795,7 +6795,7 @@
10
15
- PER
+ PER
@@ -6807,7 +6807,7 @@
10
15
- PER
+ PER
15
diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00100-00199.xml
index 0a1ec9aad5..e5ada22d75 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00100-00199.xml
@@ -3007,13 +3007,13 @@
10
- PER
+ PER
8
DIFF
10
- PER
+ PER
8
DIFF
diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00200-00299.xml
index e9c98ace73..e100191628 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00200-00299.xml
+++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00200-00299.xml
@@ -6593,7 +6593,7 @@
140
143
- PER
+ PER
3
DIFF
@@ -6623,7 +6623,7 @@
140
143
- PER
+ PER
3
DIFF
diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00600-00699.xml
index 939fddbd6c..d2fe3c4558 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00600-00699.xml
@@ -702,7 +702,7 @@
7.4
8.3
- PER
+ PER
@@ -713,7 +713,7 @@
7.4
8.3
- PER
+ PER
@@ -1017,11 +1017,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/skills.xsd
index ebbef6df21..68224eca95 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/skills.xsd
@@ -719,22 +719,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -750,6 +734,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1327,6 +1471,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00000-00099.xml
index e1accb86eb..3dfe7a94ad 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00000-00099.xml
@@ -7001,7 +7001,7 @@
10
15
- PER
+ PER
@@ -7013,7 +7013,7 @@
10
15
- PER
+ PER
15
diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00100-00199.xml
index 5485ba732f..d42c5838a1 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00100-00199.xml
@@ -3067,13 +3067,13 @@
10
- PER
+ PER
8
DIFF
10
- PER
+ PER
8
DIFF
diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00600-00699.xml
index 96b8adf6b6..6fd141cdb5 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00600-00699.xml
@@ -702,7 +702,7 @@
7.4
8.3
- PER
+ PER
@@ -713,7 +713,7 @@
7.4
8.3
- PER
+ PER
@@ -1017,11 +1017,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/skills.xsd
index ebbef6df21..68224eca95 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/skills.xsd
@@ -719,22 +719,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -750,6 +734,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1327,6 +1471,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00000-00099.xml
index 03696d1031..20b2c1cf41 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00000-00099.xml
@@ -7034,7 +7034,7 @@
10
15
- PER
+ PER
@@ -7046,7 +7046,7 @@
10
15
- PER
+ PER
15
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00100-00199.xml
index f01a3ff37f..e878769283 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00100-00199.xml
@@ -3077,13 +3077,13 @@
10
- PER
+ PER
8
DIFF
10
- PER
+ PER
8
DIFF
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00600-00699.xml
index b1e43a9f66..c2b89c27a4 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00600-00699.xml
@@ -702,7 +702,7 @@
7.4
8.3
- PER
+ PER
@@ -713,7 +713,7 @@
7.4
8.3
- PER
+ PER
@@ -1017,11 +1017,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/xsd/skills.xsd
index ebbef6df21..68224eca95 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/xsd/skills.xsd
@@ -719,22 +719,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -750,6 +734,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1327,6 +1471,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00000-00099.xml
index 3a729d37cb..2519c5ffd4 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00000-00099.xml
@@ -7169,7 +7169,7 @@
10
15
- PER
+ PER
@@ -7181,7 +7181,7 @@
10
15
- PER
+ PER
15
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00100-00199.xml
index 8e64a8baa8..3689846842 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00100-00199.xml
@@ -3125,13 +3125,13 @@
10
- PER
+ PER
8
DIFF
10
- PER
+ PER
8
DIFF
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00600-00699.xml
index f92ade0210..bab69005dc 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00600-00699.xml
@@ -702,7 +702,7 @@
7.4
8.3
- PER
+ PER
@@ -713,7 +713,7 @@
7.4
8.3
- PER
+ PER
@@ -1017,11 +1017,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/xsd/skills.xsd
index edca38498b..966d27454b 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/xsd/skills.xsd
@@ -701,22 +701,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -732,6 +716,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1309,6 +1453,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00000-00099.xml
index 8a312867ce..0a7b5d0bd3 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00000-00099.xml
@@ -7169,7 +7169,7 @@
10
15
- PER
+ PER
@@ -7181,7 +7181,7 @@
10
15
- PER
+ PER
15
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00100-00199.xml
index 78c5041adc..0d1fb059ec 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00100-00199.xml
@@ -3128,13 +3128,13 @@
10
- PER
+ PER
8
DIFF
10
- PER
+ PER
8
DIFF
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00600-00699.xml
index 695cedd070..1f26482622 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00600-00699.xml
@@ -547,7 +547,7 @@
7.4
8.3
- PER
+ PER
@@ -558,7 +558,7 @@
7.4
8.3
- PER
+ PER
@@ -862,11 +862,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/skills.xsd
index edca38498b..966d27454b 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/skills.xsd
@@ -701,22 +701,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -732,6 +716,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1309,6 +1453,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
index e4a5111911..3cbc8467da 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/TwoHandedBluntBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedBluntBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedBluntBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mAccuracyAmount;
+ private final StatModifierType _mAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedBluntBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAccuracyAmount = params.getDouble("mAccuracyAmount", 0);
+ _mAccuracyMode = params.getEnum("mAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedBluntBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedBluntBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
index c498a5b483..8c4ff44b78 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/TwoHandedSwordBonus.java
@@ -29,7 +29,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
/**
- * @author Sdw
+ * @author Sdw, Mobius
*/
public class TwoHandedSwordBonus extends AbstractEffect
{
@@ -37,18 +37,72 @@ public class TwoHandedSwordBonus extends AbstractEffect
private static final Condition _slotCondition = new ConditionUsingSlotType(Item.SLOT_LR_HAND);
private final double _pAtkAmount;
- private final StatModifierType _pAtkmode;
+ private final StatModifierType _pAtkMode;
- private final double _accuracyAmount;
- private final StatModifierType _accuracyMode;
+ private final double _mAtkAmount;
+ private final StatModifierType _mAtkMode;
+
+ private final double _pAtkSpeedAmount;
+ private final StatModifierType _pAtkSpeedMode;
+
+ private final double _mAtkSpeedAmount;
+ private final StatModifierType _mAtkSpeedMode;
+
+ private final double _pAccuracyAmount;
+ private final StatModifierType _pAccuracyMode;
+
+ private final double _mpAccuracyAmount;
+ private final StatModifierType _mpAccuracyMode;
+
+ private final double _pCritRateAmount;
+ private final StatModifierType _pCritRateMode;
+
+ private final double _mCritRateAmount;
+ private final StatModifierType _mCritRateMode;
+
+ private final double _pCritDamageAmount;
+ private final StatModifierType _pCritDamageMode;
+
+ private final double _mCritDamageAmount;
+ private final StatModifierType _mCritDamageMode;
+
+ private final double _speedAmount;
+ private final StatModifierType _speedMode;
public TwoHandedSwordBonus(StatsSet params)
{
_pAtkAmount = params.getDouble("pAtkAmount", 0);
- _pAtkmode = params.getEnum("pAtkmode", StatModifierType.class, StatModifierType.DIFF);
+ _pAtkMode = params.getEnum("pAtkMode", StatModifierType.class, StatModifierType.DIFF);
- _accuracyAmount = params.getDouble("accuracyAmount", 0);
- _accuracyMode = params.getEnum("accuracyMode", StatModifierType.class, StatModifierType.DIFF);
+ _mAtkAmount = params.getDouble("mAtkAmount", 0);
+ _mAtkMode = params.getEnum("mAtkMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAtkSpeedAmount = params.getDouble("pAtkSpeedAmount", 0);
+ _pAtkSpeedMode = params.getEnum("pAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mAtkSpeedAmount = params.getDouble("mAtkSpeedAmount", 0);
+ _mAtkSpeedMode = params.getEnum("mAtkSpeedMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pAccuracyAmount = params.getDouble("pAccuracyAmount", 0);
+ _pAccuracyMode = params.getEnum("pAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mpAccuracyAmount = params.getDouble("mpAccuracyAmount", 0);
+ _mpAccuracyMode = params.getEnum("mpAccuracyMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritRateAmount = params.getDouble("pCritRateAmount", 0);
+ _pCritRateMode = params.getEnum("pCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritRateAmount = params.getDouble("mCritRateAmount", 0);
+ _mCritRateMode = params.getEnum("mCritRateMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _pCritDamageAmount = params.getDouble("pCritDamageAmount", 0);
+ _pCritDamageMode = params.getEnum("pCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _mCritDamageAmount = params.getDouble("mCritDamageAmount", 0);
+ _mCritDamageMode = params.getEnum("mCritDamageMode", StatModifierType.class, StatModifierType.DIFF);
+
+ _speedAmount = params.getDouble("speedAmount", 0);
+ _speedMode = params.getEnum("speedMode", StatModifierType.class, StatModifierType.DIFF);
}
@Override
@@ -56,7 +110,7 @@ public class TwoHandedSwordBonus extends AbstractEffect
{
if (_weaponTypeCondition.test(effected, effected, skill) && _slotCondition.test(effected, effected, skill))
{
- switch (_pAtkmode)
+ switch (_pAtkMode)
{
case DIFF:
{
@@ -70,16 +124,268 @@ public class TwoHandedSwordBonus extends AbstractEffect
}
}
- switch (_accuracyMode)
+ switch (_mAtkMode)
{
case DIFF:
{
- effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _accuracyAmount);
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
break;
}
case PER:
{
- effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_accuracyAmount / 100) + 1);
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK, _mAtkAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK, (_mAtkAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.PHYSICAL_ATTACK_SPEED, _pAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.PHYSICAL_ATTACK_SPEED, (_pAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mAtkSpeedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_ATTACK_SPEED, _mAtkSpeedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_ATTACK_SPEED, (_mAtkSpeedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_COMBAT, _pAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_COMBAT, (_pAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mpAccuracyMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.ACCURACY_MAGIC, _mpAccuracyAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.ACCURACY_MAGIC, (_mpAccuracyAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_RATE, _pCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_RATE, (_pCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritRateMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_RATE, _mCritRateAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_RATE, (_mCritRateAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_pCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.CRITICAL_DAMAGE_ADD, _pCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.CRITICAL_DAMAGE, (_pCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_mCritDamageMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MAGIC_CRITICAL_DAMAGE_ADD, _mCritDamageAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MAGIC_CRITICAL_DAMAGE, (_mCritDamageAmount / 100) + 1);
+ break;
+ }
+ }
+
+ switch (_speedMode)
+ {
+ case DIFF:
+ {
+ effected.getStat().mergeAdd(Stats.MOVE_SPEED, _speedAmount);
+ break;
+ }
+ case PER:
+ {
+ effected.getStat().mergeMul(Stats.MOVE_SPEED, (_speedAmount / 100) + 1);
break;
}
}
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00000-00099.xml
index aae3f26e20..1703c2cdaa 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00000-00099.xml
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00000-00099.xml
@@ -6698,7 +6698,7 @@
10
15
- PER
+ PER
@@ -6710,7 +6710,7 @@
10
15
- PER
+ PER
15
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00100-00199.xml
index 560a87fce6..c22b56122f 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00100-00199.xml
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00100-00199.xml
@@ -2912,15 +2912,15 @@
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
- PER
- 8
- DIFF
+ PER
+ 8
+ DIFF
10
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00200-00299.xml
index c5dc9253f1..7df472a3f9 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00200-00299.xml
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00200-00299.xml
@@ -6447,9 +6447,9 @@
122.1
129.3
- PER
- 3
- DIFF
+ PER
+ 3
+ DIFF
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00600-00699.xml
index 01513f081b..8b74287c0f 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00600-00699.xml
@@ -910,7 +910,7 @@
7.4
8.3
- PER
+ PER
@@ -921,7 +921,7 @@
7.4
8.3
- PER
+ PER
@@ -1225,11 +1225,11 @@
5
- DIFF
+ DIFF
5
- DIFF
+ DIFF
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00800-00899.xml
index ef7eef73be..842d01d71a 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00800-00899.xml
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00800-00899.xml
@@ -220,8 +220,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
@@ -303,8 +303,8 @@
PER
- 1
- DIFF
+ 1
+ DIFF
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/01900-01999.xml b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/01900-01999.xml
index 83628a6476..95e267ac5e 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/01900-01999.xml
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/01900-01999.xml
@@ -1819,7 +1819,7 @@
1
127
1
- 2
+ 4
SELF
true
ALL
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/03800-03899.xml b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/03800-03899.xml
index bd90b4760e..83fdfdf330 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/03800-03899.xml
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/03800-03899.xml
@@ -655,9 +655,9 @@
P
5
-
- 5
- PER
+
+ 5
+ PER
@@ -668,9 +668,9 @@
P
5
-
- 3.9
- DIFF
+
+ 3.9
+ DIFF
@@ -707,9 +707,9 @@
P
5
-
- 340
- DIFF
+
+ 340
+ DIFF
@@ -723,9 +723,9 @@
P
5
-
- 54.4
- DIFF
+
+ 54.4
+ DIFF
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/10300-10399.xml b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/10300-10399.xml
index fe7baa6188..4dc1a21bbb 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/10300-10399.xml
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/10300-10399.xml
@@ -476,7 +476,7 @@
4
5
- PER
+ PER
@@ -485,7 +485,7 @@
4
5
- PER
+ PER
@@ -1524,11 +1524,11 @@
30
- PER
+ PER
30
- PER
+ PER
5
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/10600-10699.xml b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/10600-10699.xml
index a82c0bdfa0..444741f50f 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/10600-10699.xml
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/10600-10699.xml
@@ -87,14 +87,13 @@
P
-
-
- 5
- 6
- 7
- 10
-
- DIFF
+
+
+ 10
+ 11
+ 13
+ 15
+
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/11200-11299.xml b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/11200-11299.xml
index a50bfcf536..0e5db6df89 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/11200-11299.xml
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/11200-11299.xml
@@ -101,7 +101,7 @@
PER
- 25
+ -25
PER
@@ -381,30 +381,11 @@
INT
-
- 105
- PER
-
24
PER
-
-
-
- 822
- 953
- 1105
- 1244
- 1409
- 1495
- 1586
- 1683
- 1786
- 1894
-
- DIFF
- - DUALBLUNT
+ - BLUNT
@@ -421,26 +402,51 @@
2478
DIFF
-
-
- 4
- DIFF
- - DUALBLUNT
+ - BLUNT
23
PER
+
+ - BLUNT
+
+
+
+ 6
+ PER
+
+ - BLUNT
+
+
+
+ 120
+ PER
+
+
+
+ 822
+ 953
+ 1105
+ 1244
+ 1409
+ 1495
+ 1586
+ 1683
+ 1786
+ 1894
+
+ DIFF
+
+
+ 4
+ DIFF
2
INT
-
- 6
- DIFF
-
@@ -1320,7 +1326,6 @@
icon.skill11266
A1
- -676
99
101
@@ -3357,7 +3362,7 @@
LIFE_FORCE_OTHERS
1
SUMMON
- SUMMON_EXCEPT_MASTER
+ SINGLE
FRIEND
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/19100-19199.xml b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/19100-19199.xml
index 017641160d..a97f8c24e2 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/19100-19199.xml
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/19100-19199.xml
@@ -686,14 +686,14 @@
3
5
- PER
+ PER
3
5
- PER
+ PER
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/skills.xsd
index 41c576d5cf..ef0da7b623 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/skills.xsd
@@ -969,22 +969,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1000,6 +984,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1426,6 +1570,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+