Jump to content
  • 0

Battle force bug fix


Question

Posted

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.

Recommended Posts

  • 0
Posted

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){}
+        }
+    }
}

  • 0
Posted

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

  • 0
Posted

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 :/

 

  • 0
Posted

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 :/

that's what i thought in the first place..

  • 0
Posted

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

Guest
This topic is now closed to further replies.


×
×
  • Create New...