diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Cancel.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Cancel.java index cbdd0a8e06cd044bbcd99a00a0e8fe6c70ae7bdd..4e8a2cb52a7d92a76b28f4051b37c037357af8b3 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Cancel.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Cancel.java @@ -65,7 +65,7 @@ public class Cancel extends L2Effect return false; } - final List<L2Effect> canceled = Formulas.calcCancel(activeChar, target, effect.getSkill(), effect.getEffectPower()); + final List<L2Effect> canceled = Formulas.calcCancelStealEffects(activeChar, target, effect.getSkill(), effect.getEffectPower()); for (L2Effect eff : canceled) { eff.exit(); diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/CancelDebuff.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/CancelDebuff.java index 3b555c3b55721d856792a33048adc4157e2813bd..02b2d97d96c4d043779c79e43a2953fe5e528d8d 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/CancelDebuff.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/CancelDebuff.java @@ -24,7 +24,7 @@ import com.l2jserver.gameserver.model.effects.L2Effect; import com.l2jserver.gameserver.model.effects.L2EffectType; import com.l2jserver.gameserver.model.skills.L2Skill; import com.l2jserver.gameserver.model.stats.Env; -import com.l2jserver.util.Rnd; +import com.l2jserver.gameserver.model.stats.Formulas; /** * @author UnAfraid @@ -61,65 +61,40 @@ public class CancelDebuff extends L2Effect return false; } - final int cancelLvl = skill.getMagicLevel(); - int count = skill.getMaxNegatedEffects(); - - L2Effect effect; - int lastCanceledSkillId = 0; + int count = 0; final L2Effect[] effects = target.getAllEffects(); - for (int i = effects.length; --i >= 0;) + + if ((effects == null) || (effects.length == 0)) { - effect = effects[i]; - if (effect == null) - { - continue; - } - - if (!effect.getSkill().isDebuff() || !effect.getSkill().canBeDispeled()) + return false; + } + + for (L2Effect e : effects) + { + if ((e == null) || !e.getSkill().isDebuff() || !e.getSkill().canBeDispeled()) { - effects[i] = null; continue; } - if (effect.getSkill().getId() == lastCanceledSkillId) + // TODO: Unhardcode Poison of Death skill + if (e.getSkill().getId() == 4082) { - effect.exit(); // this skill already canceled continue; } - if (!calcCancelSuccess(effect, cancelLvl, (int) baseRate)) + if (!Formulas.calcCancelSuccess(e, skill.getMagicLevel(), (int) baseRate, skill)) { continue; } - lastCanceledSkillId = effect.getSkill().getId(); - effect.exit(); - count--; + e.exit(); - if (count == 0) + count++; + if (count >= skill.getMaxNegatedEffects()) { break; } } - return true; } - - private static boolean calcCancelSuccess(L2Effect effect, int cancelLvl, int baseRate) - { - int rate = 2 * (cancelLvl - effect.getSkill().getMagicLevel()); - rate += (effect.getAbnormalTime() - effect.getTime()) / 1200; - rate += baseRate; - - if (rate < effect.getSkill().getMinChance()) - { - rate = effect.getSkill().getMinChance(); - } - else if (rate > effect.getSkill().getMaxChance()) - { - rate = effect.getSkill().getMaxChance(); - } - - return Rnd.get(100) < rate; - } } \ No newline at end of file diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/StealBuffs.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/StealBuffs.java index 9b36704dd39ee974dc1837a24161843db42ff1bb..8c98d6b37ff9c6c64c36e4b485807f4262553515 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/StealBuffs.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/StealBuffs.java @@ -64,7 +64,7 @@ public class StealBuffs implements ISkillHandler } Env env; - final List<L2Effect> toSteal = Formulas.calcCancel(activeChar, target, skill, skill.getPower()); + final List<L2Effect> toSteal = Formulas.calcCancelStealEffects(activeChar, target, skill, skill.getPower()); if (toSteal.size() == 0) { diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/00700-00799.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/00700-00799.xml index 70722e35be0e540b498d7c4afe9567122985a735..6c5b7e67bee1563a5e71aeb4b83d9efebb0eee4b 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/00700-00799.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/00700-00799.xml @@ -39,6 +39,7 @@ <set name="operateType" val="A1" /> <set name="reuseDelay" val="8000" /> <set name="target" val="TARGET_ONE" /> + <set name="maxNegated" val="10" /> <for> <effect name="CancelDebuff" noicon="1" val="0" effectPower="100" /> </for> @@ -547,6 +548,7 @@ <set name="operateType" val="A1" /> <set name="isMagic" val="1" /> <!-- Magic Skill --> <set name="aggroPoints" val="624" /> + <set name="maxNegated" val="10" /> <for> <effect name="CancelDebuff" noicon="1" val="0" effectPower="100" /> </for> @@ -974,6 +976,7 @@ <set name="castRange" val="600" /> <set name="effectRange" val="1100" /> <set name="aggroPoints" val="624" /> + <set name="maxNegated" val="10" /> <for> <effect name="CancelDebuff" noicon="1" val="0" effectPower="100" /> </for> diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml index dfc1555e102c363bfc70afd8d52c33ce4558edd6..fccc61433d37e6c1ca5356e33eef4c29f6122967 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml @@ -282,6 +282,7 @@ <skill id="1409" levels="1" name="Cleanse"> <set name="itemConsumeId" val="8874" /> <set name="itemConsumeCount" val="1" /> + <set name="magicLvl" val="78" /> <set name="mpInitialConsume" val="12" /> <set name="mpConsume" val="46" /> <set name="target" val="TARGET_ONE" /> @@ -291,6 +292,7 @@ <set name="operateType" val="A1" /> <set name="castRange" val="600" /> <set name="effectRange" val="1100" /> + <set name="maxNegated" val="10" /> <for> <effect name="CancelDebuff" noicon="1" val="0" effectPower="100" /> </for> @@ -780,6 +782,7 @@ <set name="itemConsumeCount" val="1" /> <set name="mpInitialConsume" val="70" /> <set name="mpConsume" val="70" /> + <set name="maxNegated" val="10" /> <cond msgId="1509"> <player olympiad="false" /> </cond> diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/05500-05599.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/05500-05599.xml index a8e7dfae4daf49bc832477deafdd408fbdb5bf70..36d392795928f0ea3613df2b35205c6719a296dd 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/05500-05599.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/05500-05599.xml @@ -1230,6 +1230,7 @@ <set name="magicLvl" val="80" /> <set name="operateType" val="A1" /> <set name="target" val="TARGET_SELF" /> + <set name="maxNegated" val="10" /> <for> <effect name="CancelDebuff" noicon="1" val="0" effectPower="100" /> </for> diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/07000-07099.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/07000-07099.xml index 608eb65e335899d1e254950f75170539f677f6c4..6139aa5bd23e65084a3a2362efafa0a1fee001a3 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/07000-07099.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/07000-07099.xml @@ -25,6 +25,7 @@ <set name="castRange" val="400" /> <set name="effectRange" val="900" /> <set name="aggroPoints" val="100" /> + <set name="maxNegated" val="20" /> <for> <effect name="CancelDebuff" noicon="1" val="0" effectPower="100" /> </for>