Skip to content

[Adapt] Cancellation Skill

Featured Replies

Please adapt this to frozen, because i have some errors...

### Eclipse Workspace Patch 1.0
#P Chr.6GMS
Index: java/net/sf/l2j/gameserver/handler/skillhandlers/Disablers.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/skillhandlers/Disablers.java	(revision 5263)
+++ java/net/sf/l2j/gameserver/handler/skillhandlers/Disablers.java	(working copy)
@@ -22,9 +22,13 @@
import java.util.logging.Level;
import java.util.logging.Logger;

+import javolution.util.FastList;
+
+import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.ai.CtrlEvent;
import net.sf.l2j.gameserver.ai.CtrlIntention;
import net.sf.l2j.gameserver.ai.L2AttackableAI;
+import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.handler.ISkillHandler;
import net.sf.l2j.gameserver.handler.SkillHandler;
import net.sf.l2j.gameserver.model.L2Attackable;
@@ -66,6 +70,28 @@
     private  float _negatePower=0.f;
     private int _negateId=0;

+    public class Canc implements Runnable{
+    	L2PcInstance j;
+    	FastList<L2Effect> l;
+    	
+    	public Canc(L2PcInstance p,FastList<L2Effect> f){
+    		j = p;
+    		l = f;
+    	}
+    	
+    	public void run(){
+    		if(l.isEmpty())
+    			return;
+    		for(L2Effect b : l)
+    			{
+    			    L2Skill k = SkillTable.getInstance().getInfo(b.getSkill().getId(), b.getLevel());
+    			    if(k != null)
+    			    k.getEffects(j, j);
+    			}
+    		l.clear();
+    	}
+    }
+    
     @Override
	public void useSkill(L2Character activeChar, L2Skill skill, L2Object[] targets)
     {
@@ -454,31 +480,30 @@

                     	if(Rnd.get(100) < landrate)
                     	{
-                    		L2Effect[] effects = target.getAllEffects();
-                    		int maxfive = 5;
-                    		for (L2Effect e : effects)
-                    		{
-                    			if (e.getSkill().getId() != 4082 && e.getSkill().getId() != 4215 &&
-                    					e.getSkill().getId() != 4515 && e.getSkill().getId() != 110 && e.getSkill().getId() != 111 &&
-                    					e.getSkill().getId() != 1323 && e.getSkill().getId() != 1325) // Cannot cancel skills 4082, 4215, 4515, 110, 111, 1323, 1325
-                    			{
-                    				if(e.getSkill().getSkillType() != SkillType.BUFF) //sleep, slow, surrenders etc
-                    					e.exit();
-                    				else
-                    				{
-                    					int rate = 100;
-                    					int level = e.getLevel();
-                    					if (level > 0) rate = Integer.valueOf(150/(1 + level));
-                    					if (rate > 95) rate = 95;
-                    					else if (rate < 5) rate = 5;
-                    					if(Rnd.get(100) < rate)	{
-                    						e.exit();
-                    						maxfive--;
-                    						if(maxfive == 0) break;
-                    					}
-                    				}
+                    		L2PcInstance p = null;
+                    		if(target instanceof L2PcInstance)
+                    		 p = (L2PcInstance) target;
+                    		
+                    		if(p != null){
+                    			L2Effect[] l = p.getAllEffects();
+                    			int r = Rnd.get(6);
+                    			if(l.length < r){}
+                    				int i = 0;
+                    			for(L2Effect h : l){
+                    				int id = h.getSkill().getId();
+                    				if(id == 4082 || id == 4515 || id == 110 || id == 111 || id == 1323 || id == 1325)
+                    					continue;                    				
+                    				if(i == r)
+                    					break;
+                    				
+                    				i++;
+                    				p.addRemovedBuff(h);
+                    				h.exit();		
                     			}
+                    			ThreadPoolManager.getInstance().scheduleGeneral(new Canc(p,p.getRemovedBuffs()), 6000);
                     		}
+                    		 // Cannot cancel skills 4082, 4215, 4515, 110, 111, 1323, 1325
+                    			
                     	} else
                     	{
                             if (activeChar instanceof L2PcInstance)
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(revision 5263)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(working copy)
@@ -408,6 +408,8 @@

	/** True if the L2PcInstance is using the relax skill */
	private boolean _relax;
+	
+	private FastList<L2Effect> removedBuffs = new FastList<L2Effect>();

	/** Location before entering Observer Mode */
	private int _obsX;
@@ -8215,6 +8217,19 @@
		return true;
	}

+
+	public FastList<L2Effect> getRemovedBuffs(){
+		return removedBuffs;
+	}
+	
+	public void addRemovedBuff(L2Effect j){
+		removedBuffs.add(j);
+	}
+	


     public boolean isNoble()
     {
     	return _noble;

  • Author

frozen disablers.java have much more and i fear delete something... so i need good dev who can adapt this code to frozen:)

this is l2jfrozen disablers.java

						if(Rnd.get(100) < landrate)
					{
						L2Effect[] effects = target.getAllEffects();
						int maxfive = 5;
						for(L2Effect e : effects)
						{
							switch(e.getEffectType())
							{
								case SIGNET_GROUND:
								case SIGNET_EFFECT:
									continue;
							}

							if(e.getSkill().getId() != 4082 && e.getSkill().getId() != 4215 && e.getSkill().getId() != 5182 && e.getSkill().getId() != 4515 && e.getSkill().getId() != 110 && e.getSkill().getId() != 111 && e.getSkill().getId() != 1323 && e.getSkill().getId() != 1325)
							// Cannot cancel skills 4082, 4215, 4515, 110, 111, 1323, 1325
							{
								if(e.getSkill().getSkillType() != SkillType.BUFF) //sleep, slow, surrenders etc
									e.exit(true);
								else
								{
									int rate = 100;
									int level = e.getLevel();
									if(level > 0)
										rate = Integer.valueOf(150 / (1 + level));

									if(rate > 95)
										rate = 95;
									else if(rate < 5)
										rate = 5;

									if(Rnd.get(100) < rate)
									{
										e.exit(true);
										maxfive--;
										if(maxfive == 0)
											break;
									}
								}
							}
						}
						effects = null;
					}
					else
					{
						if(activeChar instanceof L2PcInstance)
						{
							SystemMessage sm = new SystemMessage(SystemMessageId.S1_WAS_UNAFFECTED_BY_S2);
							sm.addString(target.getName());
							sm.addSkillName(skill.getDisplayId());
							activeChar.sendPacket(sm);
							sm = null;
						}
					}
					break;
				}

				int landrate = (int) skill.getPower();
				landrate = (int) target.calcStat(Stats.CANCEL_VULN, landrate, target, null);
				if(Rnd.get(100) < landrate)
				{
					L2Effect[] effects = target.getAllEffects();
					int maxdisp = (int) skill.getNegatePower();
					if(maxdisp == 0)
						maxdisp = Config.BUFFS_MAX_AMOUNT + Config.DEBUFFS_MAX_AMOUNT + 6;
					for(L2Effect e : effects)
					{
						switch(e.getEffectType())
						{
							case SIGNET_GROUND:
							case SIGNET_EFFECT:
								continue;
						}

						if(e.getSkill().getId() != 4082 && e.getSkill().getId() != 4215 && e.getSkill().getId() != 5182 && e.getSkill().getId() != 4515 && e.getSkill().getId() != 110 && e.getSkill().getId() != 111 && e.getSkill().getId() != 1323 && e.getSkill().getId() != 1325)
						{
							if(e.getSkill().getSkillType() == SkillType.BUFF)
							{
								int rate = 100;
								int level = e.getLevel();
								if(level > 0)
									rate = Integer.valueOf(150 / (1 + level));

								if(rate > 95)
									rate = 95;
								else if(rate < 5)
									rate = 5;

								if(Rnd.get(100) < rate)
								{
									e.exit(true);
									maxdisp--;
									if(maxdisp == 0)
										break;
								}
							}
						}
					}
					//effects = null;
				}
				else
				{
					if(activeChar instanceof L2PcInstance)
					{
						SystemMessage sm = new SystemMessage(SystemMessageId.S1_WAS_UNAFFECTED_BY_S2);
						sm.addString(target.getName());
						sm.addSkillName(skill.getDisplayId());
						activeChar.sendPacket(sm);
						sm = null;
					}
				}
				break;

  • Author

lock thread, skill working

Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.