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.


×
×
  • Create New...