Hello,
With this code you can return all the buffs that were removed from a player using the Cancellation skill.
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/skillhandlers/Disablers.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/skillhandlers/Disablers.java
index a1fffe9..3b0f603 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/skillhandlers/Disablers.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/skillhandlers/Disablers.java
@@ -17,9 +17,11 @@
package org.l2jmobius.gameserver.handler.skillhandlers;
import java.io.IOException;
+import java.util.Vector;
import java.util.logging.Logger;
import org.l2jmobius.Config;
+import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.ai.AttackableAI;
import org.l2jmobius.gameserver.ai.CtrlEvent;
@@ -27,6 +29,7 @@
import org.l2jmobius.gameserver.datatables.xml.ExperienceData;
import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.handler.SkillHandler;
+import org.l2jmobius.gameserver.model.CustomCancelTask;
import org.l2jmobius.gameserver.model.Effect;
import org.l2jmobius.gameserver.model.Effect.EffectType;
import org.l2jmobius.gameserver.model.Skill;
@@ -427,6 +430,7 @@
}
break;
}
+ Vector<Skill> cancelledBuffs = new Vector<>();
int lvlmodifier = 52 + (skill.getLevel() * 2);
if (skill.getLevel() == 12)
{
@@ -480,6 +484,12 @@
if (Rnd.get(100) < rate)
{
+ // store them
+ if (!cancelledBuffs.contains(e.getSkill()))
+ {
+ cancelledBuffs.add(e.getSkill());
+ }
+ // cancel them
e.exit(true);
maxfive--;
if (maxfive == 0)
@@ -490,6 +500,10 @@
}
}
}
+ if (cancelledBuffs.size() > 0)
+ {
+ ThreadPool.schedule(new CustomCancelTask((PlayerInstance) target, cancelledBuffs), 20 * 1000);
+ }
}
else if (creature instanceof PlayerInstance)
{
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/CustomCancelTask.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/CustomCancelTask.java
new file mode 100644
index 0000000..4059087
--- /dev/null
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/CustomCancelTask.java
@@ -0,0 +1,35 @@
+package org.l2jmobius.gameserver.model;
+
+import java.util.Vector;
+
+import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+
+public class CustomCancelTask implements Runnable
+{
+ private PlayerInstance _player = null;
+ private Vector<Skill> _buffs = null;
+
+ public CustomCancelTask(PlayerInstance _player, Vector<Skill> _buffs)
+ {
+ this._player = _player;
+ this._buffs = _buffs;
+ }
+
+ @Override
+ public void run()
+ {
+ if ((_player == null) || !_player.isOnline())
+ {
+ return;
+ }
+ for (Skill s : _buffs)
+ {
+ if (s == null)
+ {
+ continue;
+ }
+
+ s.getEffects(_player, _player);
+ }
+ }
+}
\ No newline at end of file
Buffs are returned in 20 seconds, but you can change it by editing this line: ThreadPool.schedule(new CustomCancelTask((PlayerInstance) target, cancelledBuffs), 20 * 1000);