diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/effecthandlers/DispelByCategory.java b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/effecthandlers/DispelByCategory.java index 6a95fe5544..50813edbca 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/effecthandlers/DispelByCategory.java +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/effecthandlers/DispelByCategory.java @@ -64,7 +64,7 @@ public class DispelByCategory extends AbstractEffect return; } - final List canceled = Formulas.calcCancelStealEffects(info.getEffector(), info.getEffected(), info.getSkill(), _slot, _rate, _max); + final List canceled = Formulas.calcCancelEffects(info.getEffector(), info.getEffected(), info.getSkill(), _slot, _rate, _max); for (BuffInfo can : canceled) { info.getEffected().getEffectList().stopSkillEffects(true, can.getSkill()); diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/effecthandlers/StealAbnormal.java b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/effecthandlers/StealAbnormal.java index 2f06b0aae8..5e617e0f6f 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/effecthandlers/StealAbnormal.java +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/effecthandlers/StealAbnormal.java @@ -32,17 +32,12 @@ import org.l2jmobius.gameserver.model.stats.Formulas; */ public class StealAbnormal extends AbstractEffect { - private final String _slot; - private final int _rate; - private final int _max; + private final int _amount; public StealAbnormal(Condition attachCond, Condition applyCond, StatSet set, StatSet params) { super(attachCond, applyCond, set, params); - - _slot = params.getString("slot", null); - _rate = params.getInt("rate", 0); - _max = params.getInt("max", 0); + _amount = params.getInt("amount", 0); } @Override @@ -62,7 +57,7 @@ public class StealAbnormal extends AbstractEffect { if ((info.getEffected() != null) && info.getEffected().isPlayer() && (info.getEffector() != info.getEffected())) { - final List toSteal = Formulas.calcCancelStealEffects(info.getEffector(), info.getEffected(), info.getSkill(), _slot, _rate, _max); + final List toSteal = Formulas.calcStealEffects(info.getEffected(), _amount); if (toSteal.isEmpty()) { return; diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/stats/skills/01400-01499.xml b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/stats/skills/01400-01499.xml index f60df248d6..ca1276a64b 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/stats/skills/01400-01499.xml +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/stats/skills/01400-01499.xml @@ -1369,7 +1369,7 @@ - + diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/stats/skills/08300-08399.xml b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/stats/skills/08300-08399.xml index 95aa43c46e..6a530b65ff 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/stats/skills/08300-08399.xml +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/stats/skills/08300-08399.xml @@ -570,7 +570,7 @@ - + diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/xsd/skills.xsd b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/xsd/skills.xsd index fdd14351ff..68128be4e6 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/xsd/skills.xsd @@ -1,745 +1,1226 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/stats/Formulas.java index f582ba1153..ad942ee7cf 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/stats/Formulas.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/stats/Formulas.java @@ -1858,7 +1858,34 @@ public class Formulas return Rnd.get(100) < rate; } - public static List calcCancelStealEffects(Creature creature, Creature target, Skill skill, String slot, int rate, int max) + public static List calcStealEffects(Creature target, int amount) + { + final List canceled = new ArrayList<>(amount); + + // Prevent initialization. + final List buffs = target.getEffectList().hasBuffs() ? new ArrayList<>(target.getEffectList().getBuffs()) : new ArrayList<>(1); + if (target.getEffectList().hasTriggered()) + { + buffs.addAll(target.getEffectList().getTriggered()); + } + if (target.getEffectList().hasDances()) + { + buffs.addAll(target.getEffectList().getDances()); + } + + for (int i = buffs.size() - 1; i >= 0 && canceled.size() < amount; i--) // reverse order + { + final BuffInfo info = buffs.get(i); + if (!info.getSkill().canBeStolen()) + { + continue; + } + canceled.add(info); + } + return canceled; + } + + public static List calcCancelEffects(Creature creature, Creature target, Skill skill, String slot, int rate, int max) { final List canceled = new ArrayList<>(max); switch (slot)