Jump to content
  • 0

Battle force bug fix


Gxz

Question

hello guys, there is a bug when you battle force another player and he make subclass and then he go back to the class the other player made battle force, battle force stays there.. how to fix it? i already tried this fix http://www.maxcheaters.com/forum/index.php?topic=70765.0  not working, i have interlude l2j server.

Link to comment
Share on other sites

Recommended Posts

  • 0

Tested and working

 

Index: /Server/SkyLanceR's_IL_GS/java/net/sf/l2j/gameserver/model/ForceBuff.java
===================================================================
--- /Server/SkyLanceR's_IL_GS/java/net/sf/l2j/gameserver/model/ForceBuff.java (revision 281)
+++ /Server/SkyLanceR's_IL_GS/java/net/sf/l2j/gameserver/model/ForceBuff.java (revision 304)
@@ -21,104 +21,86 @@

import java.util.concurrent.Future;
+import java.util.logging.Logger;

+import net.sf.l2j.gameserver.GeoData;
import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.skills.effects.EffectForce;
+import net.sf.l2j.gameserver.util.Util;
+import net.sf.l2j.gameserver.model.L2Effect;
+import net.sf.l2j.gameserver.model.L2Skill;
+import net.sf.l2j.gameserver.model.ForceBuff;

-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+public final class ForceBuff

-/**
- * @author kombat
- *
- */
-public class ForceBuff
{
-	static final Log _log = LogFactory.getLog(ForceBuff.class.getName());
-
-	protected L2PcInstance _caster;
-	private L2PcInstance _target;
-	private L2Skill _skill;
-	private L2Skill _force;
-	@SuppressWarnings("unchecked")
-	private Future _task;
-	private boolean _applied;
-
-	public L2PcInstance getCaster() { return _caster; }
-	public L2PcInstance getTarget() { return _target; }
-	public L2Skill getSkill() { return _skill; }
-	public L2Skill getForce() { return _force; }
-	@SuppressWarnings("unchecked")
-	protected void setTask(Future task) { _task = task; }
-	protected void setApplied(boolean applied) { _applied = applied; }
-
-	public ForceBuff(L2PcInstance caster, L2PcInstance target, L2Skill skill)
-	{
-		_caster = caster;
-		_target = target;
-		_skill = skill;
-		_force = SkillTable.getInstance().getInfo(skill.getForceId(), 1);
-		_applied = false;
-
-		Runnable r = new Runnable()
+	protected static final Logger _log = Logger.getLogger(ForceBuff.class.getName());
+	
+    final int _skillCastRange;
+    final int _forceId;
+    protected int _forceLevel;
+    L2PcInstance _caster;
+    L2PcInstance _target;
+    Future<?> _geoCheckTask;
+    
+    public L2PcInstance getCaster()
+    {
+        return _caster;
+    }
+    
+    public L2PcInstance getTarget()
+    {
+        return _target;
+    }
+    
+    public ForceBuff(L2PcInstance caster, L2PcInstance target, L2Skill skill)
+    {
+        _skillCastRange = skill.getCastRange();
+        _caster = caster;
+        _target = target;
+        _forceId = skill.getTriggeredId();
+		_forceLevel = skill.getTriggeredLevel();
+        
+		L2Effect effect = _target.getFirstEffect(_forceId);
+		if (effect != null)
		{
-			public void run()
-			{
-				setApplied(true);
-				setTask(null);
-
-				int forceId = getForce().getId();
-				boolean create = true;
-				L2Effect[] effects = getTarget().getAllEffects();
-				if (effects != null)
-				{
-					for(L2Effect e : effects)
-					{
-						if (e.getSkill().getId() == forceId)
-						{
-							EffectForce ef = (EffectForce)e;
-							if(ef.forces < 3)
-								ef.increaseForce();
-							create = false;
-							break;
-						}
-					}
-				}
-				if(create)
-				{
-					getForce().getEffects(_caster, getTarget());
-				}
-			}
-		};
-		setTask(ThreadPoolManager.getInstance().scheduleGeneral(r, 2000));
+			((EffectForce)effect).increaseForce();
+		}
+		else
+		{
+			L2Skill force = SkillTable.getInstance().getInfo(_forceId, _forceLevel);
+			if (force != null)
+				force.getEffects(_caster, _target);
+			else
+				_log.warning("Triggered skill ["+_forceId+";"+_forceLevel+"] not found!");
+		}
+		_geoCheckTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new GeoCheckTask(), 1000, 1000);
	}
-
-	public void delete()
-	{
-		if (_task != null)
-		{
-			_task.cancel(false);
-			_task = null;
-		}
-
-		_caster.setForceBuff(null);
-
-		if(!_applied) return;
-
-		int toDeleteId = getForce().getId();
-
-		L2Effect[] effects = _target.getAllEffects();
-		if (effects != null)
-		{
-			for(L2Effect e : effects)
-			{
-				if (e.getSkill().getId() == toDeleteId && (e instanceof EffectForce))
-				{
-					((EffectForce)e).decreaseForce();
-					break;
-				}
-			}
-		}
-	}
+    
+    public void delete()
+    {
+        _caster.setForceBuff(null);
+        L2Effect effect = _target.getFirstEffect(_forceId);
+        if (effect != null)
+            ((EffectForce)effect).decreaseForce();
+        
+        _geoCheckTask.cancel(true);
+    }
+    
+    class GeoCheckTask implements Runnable
+    {
+        public void run()
+        {
+            try
+            {
+                if (!Util.checkIfInRange(_skillCastRange, _caster, _target, true))
+                    delete();
+                
+                if (!GeoData.getInstance().canSeeTarget(_caster, _target))
+                    delete();
+            }
+            catch (Exception e){}
+        }
+    }
}

Link to comment
Share on other sites

  • 0

Tested and working

 

Index: /Server/SkyLanceR's_IL_GS/java/net/sf/l2j/gameserver/model/ForceBuff.java
===================================================================
--- /Server/SkyLanceR's_IL_GS/java/net/sf/l2j/gameserver/model/ForceBuff.java (revision 281)
+++ /Server/SkyLanceR's_IL_GS/java/net/sf/l2j/gameserver/model/ForceBuff.java (revision 304)
@@ -21,104 +21,86 @@

import java.util.concurrent.Future;
+import java.util.logging.Logger;

+import net.sf.l2j.gameserver.GeoData;
import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.skills.effects.EffectForce;
+import net.sf.l2j.gameserver.util.Util;
+import net.sf.l2j.gameserver.model.L2Effect;
+import net.sf.l2j.gameserver.model.L2Skill;
+import net.sf.l2j.gameserver.model.ForceBuff;

-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+public final class ForceBuff

-/**
- * @author kombat
- *
- */
-public class ForceBuff
{
-	static final Log _log = LogFactory.getLog(ForceBuff.class.getName());
-
-	protected L2PcInstance _caster;
-	private L2PcInstance _target;
-	private L2Skill _skill;
-	private L2Skill _force;
-	@SuppressWarnings("unchecked")
-	private Future _task;
-	private boolean _applied;
-
-	public L2PcInstance getCaster() { return _caster; }
-	public L2PcInstance getTarget() { return _target; }
-	public L2Skill getSkill() { return _skill; }
-	public L2Skill getForce() { return _force; }
-	@SuppressWarnings("unchecked")
-	protected void setTask(Future task) { _task = task; }
-	protected void setApplied(boolean applied) { _applied = applied; }
-
-	public ForceBuff(L2PcInstance caster, L2PcInstance target, L2Skill skill)
-	{
-		_caster = caster;
-		_target = target;
-		_skill = skill;
-		_force = SkillTable.getInstance().getInfo(skill.getForceId(), 1);
-		_applied = false;
-
-		Runnable r = new Runnable()
+	protected static final Logger _log = Logger.getLogger(ForceBuff.class.getName());
+	
+    final int _skillCastRange;
+    final int _forceId;
+    protected int _forceLevel;
+    L2PcInstance _caster;
+    L2PcInstance _target;
+    Future<?> _geoCheckTask;
+    
+    public L2PcInstance getCaster()
+    {
+        return _caster;
+    }
+    
+    public L2PcInstance getTarget()
+    {
+        return _target;
+    }
+    
+    public ForceBuff(L2PcInstance caster, L2PcInstance target, L2Skill skill)
+    {
+        _skillCastRange = skill.getCastRange();
+        _caster = caster;
+        _target = target;
+        _forceId = skill.getTriggeredId();
+		_forceLevel = skill.getTriggeredLevel();
+        
+		L2Effect effect = _target.getFirstEffect(_forceId);
+		if (effect != null)
		{
-			public void run()
-			{
-				setApplied(true);
-				setTask(null);
-
-				int forceId = getForce().getId();
-				boolean create = true;
-				L2Effect[] effects = getTarget().getAllEffects();
-				if (effects != null)
-				{
-					for(L2Effect e : effects)
-					{
-						if (e.getSkill().getId() == forceId)
-						{
-							EffectForce ef = (EffectForce)e;
-							if(ef.forces < 3)
-								ef.increaseForce();
-							create = false;
-							break;
-						}
-					}
-				}
-				if(create)
-				{
-					getForce().getEffects(_caster, getTarget());
-				}
-			}
-		};
-		setTask(ThreadPoolManager.getInstance().scheduleGeneral(r, 2000));
+			((EffectForce)effect).increaseForce();
+		}
+		else
+		{
+			L2Skill force = SkillTable.getInstance().getInfo(_forceId, _forceLevel);
+			if (force != null)
+				force.getEffects(_caster, _target);
+			else
+				_log.warning("Triggered skill ["+_forceId+";"+_forceLevel+"] not found!");
+		}
+		_geoCheckTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new GeoCheckTask(), 1000, 1000);
	}
-
-	public void delete()
-	{
-		if (_task != null)
-		{
-			_task.cancel(false);
-			_task = null;
-		}
-
-		_caster.setForceBuff(null);
-
-		if(!_applied) return;
-
-		int toDeleteId = getForce().getId();
-
-		L2Effect[] effects = _target.getAllEffects();
-		if (effects != null)
-		{
-			for(L2Effect e : effects)
-			{
-				if (e.getSkill().getId() == toDeleteId && (e instanceof EffectForce))
-				{
-					((EffectForce)e).decreaseForce();
-					break;
-				}
-			}
-		}
-	}
+    
+    public void delete()
+    {
+        _caster.setForceBuff(null);
+        L2Effect effect = _target.getFirstEffect(_forceId);
+        if (effect != null)
+            ((EffectForce)effect).decreaseForce();
+        
+        _geoCheckTask.cancel(true);
+    }
+    
+    class GeoCheckTask implements Runnable
+    {
+        public void run()
+        {
+            try
+            {
+                if (!Util.checkIfInRange(_skillCastRange, _caster, _target, true))
+                    delete();
+                
+                if (!GeoData.getInstance().canSeeTarget(_caster, _target))
+                    delete();
+            }
+            catch (Exception e){}
+        }
+    }
}

with this u dont take the battle force buff at all

Link to comment
Share on other sites

  • 0

hello guys, there is a bug when you battle force another player and he make subclass and then he go back to the class the other player made battle force, battle force stays there.. how to fix it? i already tried this fix http://www.maxcheaters.com/forum/index.php?topic=70765.0  not working, i have interlude l2j server.

if that didn't work u don't know how to apply a path >.> or u got a serious problem with ur pack...

that code cant fail :/

 

Link to comment
Share on other sites

  • 0

whatever haters... i said this code completely removes battle force skill, when you use it on a party member it doesnt work... it fixed the problem but this is for noobish servers like yours probably, thx only to skylancer for helping

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


  • Posts

    • Welcome to my store : https://topestore.mysellix.io/fr/ 2015-2022 Aged Discord Account 2015 Discord Account : 60.99 $ 2016 Discord Account : 10.50 $ 2017 Discord Account :4.99 $ 2018 Discord Account : 3.99 $ 2019 Discord Account : 2.99 $ 2020 Discord Account :1.99$ 2021 Discord Account :1.50$ 2022 Discord Account :0.99$ Warranty :Lifetime Payment Methods : Crypto/ PayPal Contact Me On Discord Or Telegram Discord : @ultrasstore11 Telegram : https://t.me/ultrastore11 Whatsapp ; +212614849119 Welcome to my store : https://topestore.mysellix.io/fr/ 2015-2022 Aged Discord Account 2015 Discord Account : 60.99 $ 2016 Discord Account : 10.50 $ 2017 Discord Account :4.99 $ 2018 Discord Account : 3.99 $ 2019 Discord Account : 2.99 $ 2020 Discord Account :1.99$ 2021 Discord Account :1.50$ 2022 Discord Account :0.99$ Warranty :Lifetime Payment Methods : Crypto/ PayPal Contact Me On Discord Or Telegram Discord : @ultrasstore11 Telegram : https://t.me/ultrastore11 Whatsapp ; +212614849119 ULTRAS Store Back again For Discord Accounts With Cheap Prices    🎃 AGED OLD DISCORD ACCOUNTS [ AUTO-BUY ] 🎃   Ful Acces   INSTANT DELIVERY   2015 Discord Account : 50.99 $   2016 Discord Account : 10 $   2017 Discord Account :3.99 $   2018 Discord Account : 2.99 $   2019 Discord Account : 2.50$   2020 Discord Account :1.50$   2021 Discord Account :0.99$   2022 Discord Account :0.70$   PAYMENT METHODS : CRYPTO / paypal   You can buy here From our Store : ultrasstore11.mysellix.io   Or from my Telegram user :https://t.me/ultrastore11   Or from my Discord user : @ULTRASstore11
    • Sorry for such late reply. But extender in this build is just bad. It will give you this random error and shut down your server once a day, maybe more often. And since we don't have any source code of it, the solution is to remove it from the L2Server.exe file. You can do it yourself with CFF_Explorer app. Or download mine with already removed extender. No more random shut downs. The only downside is you gonna lose auto loot ability.  L2Server.exe without extender
    • DISCORD : utchiha_market telegram : https://t.me/utchiha_market SELLIX STORE : https://utchihamkt.mysellix.io/ Join our server for more products : https://discord.gg/hoodservices https://campsite.bio/utchihaamkt
  • Topics

×
×
  • Create New...