Autoplay target consideration and rebuff time margin.
Thanks to nasseka.
This commit is contained in:
@@ -54,6 +54,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList;
|
|||||||
public class AutoUseTaskManager implements Runnable
|
public class AutoUseTaskManager implements Runnable
|
||||||
{
|
{
|
||||||
private static final Set<PlayerInstance> PLAYERS = ConcurrentHashMap.newKeySet();
|
private static final Set<PlayerInstance> PLAYERS = ConcurrentHashMap.newKeySet();
|
||||||
|
private static final int REUSE_MARGIN_TIME = 3;
|
||||||
private static boolean _working = false;
|
private static boolean _working = false;
|
||||||
|
|
||||||
protected AutoUseTaskManager()
|
protected AutoUseTaskManager()
|
||||||
@@ -89,6 +90,11 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
{
|
{
|
||||||
ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems())
|
ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems())
|
||||||
{
|
{
|
||||||
|
if (player.isTeleporting())
|
||||||
|
{
|
||||||
|
break ITEMS;
|
||||||
|
}
|
||||||
|
|
||||||
final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue());
|
final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue());
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
@@ -194,7 +200,7 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
if (canCastBuff(player, target, skill))
|
if (canCastBuff(player, target, skill))
|
||||||
{
|
{
|
||||||
// Playable target cast.
|
// Playable target cast.
|
||||||
if ((target != null) && target.isPlayable())
|
if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
|
||||||
{
|
{
|
||||||
player.doCast(skill);
|
player.doCast(skill);
|
||||||
}
|
}
|
||||||
@@ -330,13 +336,19 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return !((target == null) || !target.isPlayable() || (skill.getTargetType() == TargetType.SELF) ? player : (Playable) target).isAffectedBySkill(skill.getId()) && canUseMagic(player, target, skill);
|
final Playable playableTarget = (target == null) || !target.isPlayable() || (skill.getTargetType() == TargetType.SELF) ? player : (Playable) target;
|
||||||
|
if (!canUseMagic(player, playableTarget, skill))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
|
||||||
|
return (buffInfo == null) || (buffInfo.getTime() <= REUSE_MARGIN_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean canUseMagic(PlayerInstance player, WorldObject target, Skill skill)
|
private boolean canUseMagic(PlayerInstance player, WorldObject target, Skill skill)
|
||||||
{
|
{
|
||||||
// TODO: Use getSkillRemainingReuseTime.
|
return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
|
||||||
return !player.hasSkillReuse(skill.getReuseHashCode()) && skill.checkCondition(player, target, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startAutoUseTask(PlayerInstance player)
|
public void startAutoUseTask(PlayerInstance player)
|
||||||
|
@@ -54,6 +54,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList;
|
|||||||
public class AutoUseTaskManager implements Runnable
|
public class AutoUseTaskManager implements Runnable
|
||||||
{
|
{
|
||||||
private static final Set<PlayerInstance> PLAYERS = ConcurrentHashMap.newKeySet();
|
private static final Set<PlayerInstance> PLAYERS = ConcurrentHashMap.newKeySet();
|
||||||
|
private static final int REUSE_MARGIN_TIME = 3;
|
||||||
private static boolean _working = false;
|
private static boolean _working = false;
|
||||||
|
|
||||||
protected AutoUseTaskManager()
|
protected AutoUseTaskManager()
|
||||||
@@ -89,6 +90,11 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
{
|
{
|
||||||
ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems())
|
ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems())
|
||||||
{
|
{
|
||||||
|
if (player.isTeleporting())
|
||||||
|
{
|
||||||
|
break ITEMS;
|
||||||
|
}
|
||||||
|
|
||||||
final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue());
|
final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue());
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
@@ -194,7 +200,7 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
if (canCastBuff(player, target, skill))
|
if (canCastBuff(player, target, skill))
|
||||||
{
|
{
|
||||||
// Playable target cast.
|
// Playable target cast.
|
||||||
if ((target != null) && target.isPlayable())
|
if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
|
||||||
{
|
{
|
||||||
player.doCast(skill);
|
player.doCast(skill);
|
||||||
}
|
}
|
||||||
@@ -330,13 +336,19 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return !((target == null) || !target.isPlayable() || (skill.getTargetType() == TargetType.SELF) ? player : (Playable) target).isAffectedBySkill(skill.getId()) && canUseMagic(player, target, skill);
|
final Playable playableTarget = (target == null) || !target.isPlayable() || (skill.getTargetType() == TargetType.SELF) ? player : (Playable) target;
|
||||||
|
if (!canUseMagic(player, playableTarget, skill))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
|
||||||
|
return (buffInfo == null) || (buffInfo.getTime() <= REUSE_MARGIN_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean canUseMagic(PlayerInstance player, WorldObject target, Skill skill)
|
private boolean canUseMagic(PlayerInstance player, WorldObject target, Skill skill)
|
||||||
{
|
{
|
||||||
// TODO: Use getSkillRemainingReuseTime.
|
return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
|
||||||
return !player.hasSkillReuse(skill.getReuseHashCode()) && skill.checkCondition(player, target, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startAutoUseTask(PlayerInstance player)
|
public void startAutoUseTask(PlayerInstance player)
|
||||||
|
@@ -54,6 +54,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList;
|
|||||||
public class AutoUseTaskManager implements Runnable
|
public class AutoUseTaskManager implements Runnable
|
||||||
{
|
{
|
||||||
private static final Set<PlayerInstance> PLAYERS = ConcurrentHashMap.newKeySet();
|
private static final Set<PlayerInstance> PLAYERS = ConcurrentHashMap.newKeySet();
|
||||||
|
private static final int REUSE_MARGIN_TIME = 3;
|
||||||
private static boolean _working = false;
|
private static boolean _working = false;
|
||||||
|
|
||||||
protected AutoUseTaskManager()
|
protected AutoUseTaskManager()
|
||||||
@@ -89,6 +90,11 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
{
|
{
|
||||||
ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems())
|
ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems())
|
||||||
{
|
{
|
||||||
|
if (player.isTeleporting())
|
||||||
|
{
|
||||||
|
break ITEMS;
|
||||||
|
}
|
||||||
|
|
||||||
final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue());
|
final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue());
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
@@ -194,7 +200,7 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
if (canCastBuff(player, target, skill))
|
if (canCastBuff(player, target, skill))
|
||||||
{
|
{
|
||||||
// Playable target cast.
|
// Playable target cast.
|
||||||
if ((target != null) && target.isPlayable())
|
if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
|
||||||
{
|
{
|
||||||
player.doCast(skill);
|
player.doCast(skill);
|
||||||
}
|
}
|
||||||
@@ -330,13 +336,19 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return !((target == null) || !target.isPlayable() || (skill.getTargetType() == TargetType.SELF) ? player : (Playable) target).isAffectedBySkill(skill.getId()) && canUseMagic(player, target, skill);
|
final Playable playableTarget = (target == null) || !target.isPlayable() || (skill.getTargetType() == TargetType.SELF) ? player : (Playable) target;
|
||||||
|
if (!canUseMagic(player, playableTarget, skill))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
|
||||||
|
return (buffInfo == null) || (buffInfo.getTime() <= REUSE_MARGIN_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean canUseMagic(PlayerInstance player, WorldObject target, Skill skill)
|
private boolean canUseMagic(PlayerInstance player, WorldObject target, Skill skill)
|
||||||
{
|
{
|
||||||
// TODO: Use getSkillRemainingReuseTime.
|
return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
|
||||||
return !player.hasSkillReuse(skill.getReuseHashCode()) && skill.checkCondition(player, target, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startAutoUseTask(PlayerInstance player)
|
public void startAutoUseTask(PlayerInstance player)
|
||||||
|
@@ -54,6 +54,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList;
|
|||||||
public class AutoUseTaskManager implements Runnable
|
public class AutoUseTaskManager implements Runnable
|
||||||
{
|
{
|
||||||
private static final Set<PlayerInstance> PLAYERS = ConcurrentHashMap.newKeySet();
|
private static final Set<PlayerInstance> PLAYERS = ConcurrentHashMap.newKeySet();
|
||||||
|
private static final int REUSE_MARGIN_TIME = 3;
|
||||||
private static boolean _working = false;
|
private static boolean _working = false;
|
||||||
|
|
||||||
protected AutoUseTaskManager()
|
protected AutoUseTaskManager()
|
||||||
@@ -89,6 +90,11 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
{
|
{
|
||||||
ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems())
|
ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems())
|
||||||
{
|
{
|
||||||
|
if (player.isTeleporting())
|
||||||
|
{
|
||||||
|
break ITEMS;
|
||||||
|
}
|
||||||
|
|
||||||
final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue());
|
final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue());
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
@@ -194,7 +200,7 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
if (canCastBuff(player, target, skill))
|
if (canCastBuff(player, target, skill))
|
||||||
{
|
{
|
||||||
// Playable target cast.
|
// Playable target cast.
|
||||||
if ((target != null) && target.isPlayable())
|
if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
|
||||||
{
|
{
|
||||||
player.doCast(skill);
|
player.doCast(skill);
|
||||||
}
|
}
|
||||||
@@ -330,13 +336,19 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return !((target == null) || !target.isPlayable() || (skill.getTargetType() == TargetType.SELF) ? player : (Playable) target).isAffectedBySkill(skill.getId()) && canUseMagic(player, target, skill);
|
final Playable playableTarget = (target == null) || !target.isPlayable() || (skill.getTargetType() == TargetType.SELF) ? player : (Playable) target;
|
||||||
|
if (!canUseMagic(player, playableTarget, skill))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
|
||||||
|
return (buffInfo == null) || (buffInfo.getTime() <= REUSE_MARGIN_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean canUseMagic(PlayerInstance player, WorldObject target, Skill skill)
|
private boolean canUseMagic(PlayerInstance player, WorldObject target, Skill skill)
|
||||||
{
|
{
|
||||||
// TODO: Use getSkillRemainingReuseTime.
|
return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
|
||||||
return !player.hasSkillReuse(skill.getReuseHashCode()) && skill.checkCondition(player, target, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startAutoUseTask(PlayerInstance player)
|
public void startAutoUseTask(PlayerInstance player)
|
||||||
|
@@ -54,6 +54,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList;
|
|||||||
public class AutoUseTaskManager implements Runnable
|
public class AutoUseTaskManager implements Runnable
|
||||||
{
|
{
|
||||||
private static final Set<PlayerInstance> PLAYERS = ConcurrentHashMap.newKeySet();
|
private static final Set<PlayerInstance> PLAYERS = ConcurrentHashMap.newKeySet();
|
||||||
|
private static final int REUSE_MARGIN_TIME = 3;
|
||||||
private static boolean _working = false;
|
private static boolean _working = false;
|
||||||
|
|
||||||
protected AutoUseTaskManager()
|
protected AutoUseTaskManager()
|
||||||
@@ -89,6 +90,11 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
{
|
{
|
||||||
ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems())
|
ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems())
|
||||||
{
|
{
|
||||||
|
if (player.isTeleporting())
|
||||||
|
{
|
||||||
|
break ITEMS;
|
||||||
|
}
|
||||||
|
|
||||||
final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue());
|
final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue());
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
@@ -194,7 +200,7 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
if (canCastBuff(player, target, skill))
|
if (canCastBuff(player, target, skill))
|
||||||
{
|
{
|
||||||
// Playable target cast.
|
// Playable target cast.
|
||||||
if ((target != null) && target.isPlayable())
|
if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
|
||||||
{
|
{
|
||||||
player.doCast(skill);
|
player.doCast(skill);
|
||||||
}
|
}
|
||||||
@@ -330,13 +336,19 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return !((target == null) || !target.isPlayable() || (skill.getTargetType() == TargetType.SELF) ? player : (Playable) target).isAffectedBySkill(skill.getId()) && canUseMagic(player, target, skill);
|
final Playable playableTarget = (target == null) || !target.isPlayable() || (skill.getTargetType() == TargetType.SELF) ? player : (Playable) target;
|
||||||
|
if (!canUseMagic(player, playableTarget, skill))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
|
||||||
|
return (buffInfo == null) || (buffInfo.getTime() <= REUSE_MARGIN_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean canUseMagic(PlayerInstance player, WorldObject target, Skill skill)
|
private boolean canUseMagic(PlayerInstance player, WorldObject target, Skill skill)
|
||||||
{
|
{
|
||||||
// TODO: Use getSkillRemainingReuseTime.
|
return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
|
||||||
return !player.hasSkillReuse(skill.getReuseHashCode()) && skill.checkCondition(player, target, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startAutoUseTask(PlayerInstance player)
|
public void startAutoUseTask(PlayerInstance player)
|
||||||
|
@@ -54,6 +54,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList;
|
|||||||
public class AutoUseTaskManager implements Runnable
|
public class AutoUseTaskManager implements Runnable
|
||||||
{
|
{
|
||||||
private static final Set<PlayerInstance> PLAYERS = ConcurrentHashMap.newKeySet();
|
private static final Set<PlayerInstance> PLAYERS = ConcurrentHashMap.newKeySet();
|
||||||
|
private static final int REUSE_MARGIN_TIME = 3;
|
||||||
private static boolean _working = false;
|
private static boolean _working = false;
|
||||||
|
|
||||||
protected AutoUseTaskManager()
|
protected AutoUseTaskManager()
|
||||||
@@ -89,6 +90,11 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
{
|
{
|
||||||
ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems())
|
ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems())
|
||||||
{
|
{
|
||||||
|
if (player.isTeleporting())
|
||||||
|
{
|
||||||
|
break ITEMS;
|
||||||
|
}
|
||||||
|
|
||||||
final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue());
|
final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue());
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
@@ -194,7 +200,7 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
if (canCastBuff(player, target, skill))
|
if (canCastBuff(player, target, skill))
|
||||||
{
|
{
|
||||||
// Playable target cast.
|
// Playable target cast.
|
||||||
if ((target != null) && target.isPlayable())
|
if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
|
||||||
{
|
{
|
||||||
player.doCast(skill);
|
player.doCast(skill);
|
||||||
}
|
}
|
||||||
@@ -330,13 +336,19 @@ public class AutoUseTaskManager implements Runnable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return !((target == null) || !target.isPlayable() || (skill.getTargetType() == TargetType.SELF) ? player : (Playable) target).isAffectedBySkill(skill.getId()) && canUseMagic(player, target, skill);
|
final Playable playableTarget = (target == null) || !target.isPlayable() || (skill.getTargetType() == TargetType.SELF) ? player : (Playable) target;
|
||||||
|
if (!canUseMagic(player, playableTarget, skill))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
|
||||||
|
return (buffInfo == null) || (buffInfo.getTime() <= REUSE_MARGIN_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean canUseMagic(PlayerInstance player, WorldObject target, Skill skill)
|
private boolean canUseMagic(PlayerInstance player, WorldObject target, Skill skill)
|
||||||
{
|
{
|
||||||
// TODO: Use getSkillRemainingReuseTime.
|
return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
|
||||||
return !player.hasSkillReuse(skill.getReuseHashCode()) && skill.checkCondition(player, target, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startAutoUseTask(PlayerInstance player)
|
public void startAutoUseTask(PlayerInstance player)
|
||||||
|
Reference in New Issue
Block a user