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 @@ + + + + + + + + + + + + + + +