From 3fb20833da6c9c3553ca0e4fe87ea80aaea75001 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 12 Oct 2021 01:31:10 +0000 Subject: [PATCH] Autoplay target consideration and rebuff time margin. Thanks to nasseka. --- .../taskmanager/AutoUseTaskManager.java | 20 +++++++++++++++---- .../taskmanager/AutoUseTaskManager.java | 20 +++++++++++++++---- .../taskmanager/AutoUseTaskManager.java | 20 +++++++++++++++---- .../taskmanager/AutoUseTaskManager.java | 20 +++++++++++++++---- .../taskmanager/AutoUseTaskManager.java | 20 +++++++++++++++---- .../taskmanager/AutoUseTaskManager.java | 20 +++++++++++++++---- 6 files changed, 96 insertions(+), 24 deletions(-) diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java index 411a40a048..c832a3001c 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java @@ -54,6 +54,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList; public class AutoUseTaskManager implements Runnable { private static final Set PLAYERS = ConcurrentHashMap.newKeySet(); + private static final int REUSE_MARGIN_TIME = 3; private static boolean _working = false; protected AutoUseTaskManager() @@ -89,6 +90,11 @@ public class AutoUseTaskManager implements Runnable { ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems()) { + if (player.isTeleporting()) + { + break ITEMS; + } + final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue()); if (item == null) { @@ -194,7 +200,7 @@ public class AutoUseTaskManager implements Runnable if (canCastBuff(player, target, skill)) { // 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); } @@ -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) { - // TODO: Use getSkillRemainingReuseTime. - return !player.hasSkillReuse(skill.getReuseHashCode()) && skill.checkCondition(player, target, false); + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } public void startAutoUseTask(PlayerInstance player) diff --git a/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java b/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java index 411a40a048..c832a3001c 100644 --- a/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java +++ b/L2J_Mobius_8.2_Homunculus/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java @@ -54,6 +54,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList; public class AutoUseTaskManager implements Runnable { private static final Set PLAYERS = ConcurrentHashMap.newKeySet(); + private static final int REUSE_MARGIN_TIME = 3; private static boolean _working = false; protected AutoUseTaskManager() @@ -89,6 +90,11 @@ public class AutoUseTaskManager implements Runnable { ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems()) { + if (player.isTeleporting()) + { + break ITEMS; + } + final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue()); if (item == null) { @@ -194,7 +200,7 @@ public class AutoUseTaskManager implements Runnable if (canCastBuff(player, target, skill)) { // 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); } @@ -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) { - // TODO: Use getSkillRemainingReuseTime. - return !player.hasSkillReuse(skill.getReuseHashCode()) && skill.checkCondition(player, target, false); + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } public void startAutoUseTask(PlayerInstance player) diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java index 411a40a048..c832a3001c 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java @@ -54,6 +54,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList; public class AutoUseTaskManager implements Runnable { private static final Set PLAYERS = ConcurrentHashMap.newKeySet(); + private static final int REUSE_MARGIN_TIME = 3; private static boolean _working = false; protected AutoUseTaskManager() @@ -89,6 +90,11 @@ public class AutoUseTaskManager implements Runnable { ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems()) { + if (player.isTeleporting()) + { + break ITEMS; + } + final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue()); if (item == null) { @@ -194,7 +200,7 @@ public class AutoUseTaskManager implements Runnable if (canCastBuff(player, target, skill)) { // 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); } @@ -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) { - // TODO: Use getSkillRemainingReuseTime. - return !player.hasSkillReuse(skill.getReuseHashCode()) && skill.checkCondition(player, target, false); + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } public void startAutoUseTask(PlayerInstance player) diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java index 411a40a048..c832a3001c 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java @@ -54,6 +54,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList; public class AutoUseTaskManager implements Runnable { private static final Set PLAYERS = ConcurrentHashMap.newKeySet(); + private static final int REUSE_MARGIN_TIME = 3; private static boolean _working = false; protected AutoUseTaskManager() @@ -89,6 +90,11 @@ public class AutoUseTaskManager implements Runnable { ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems()) { + if (player.isTeleporting()) + { + break ITEMS; + } + final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue()); if (item == null) { @@ -194,7 +200,7 @@ public class AutoUseTaskManager implements Runnable if (canCastBuff(player, target, skill)) { // 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); } @@ -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) { - // TODO: Use getSkillRemainingReuseTime. - return !player.hasSkillReuse(skill.getReuseHashCode()) && skill.checkCondition(player, target, false); + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } public void startAutoUseTask(PlayerInstance player) diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java index 411a40a048..c832a3001c 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java @@ -54,6 +54,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList; public class AutoUseTaskManager implements Runnable { private static final Set PLAYERS = ConcurrentHashMap.newKeySet(); + private static final int REUSE_MARGIN_TIME = 3; private static boolean _working = false; protected AutoUseTaskManager() @@ -89,6 +90,11 @@ public class AutoUseTaskManager implements Runnable { ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems()) { + if (player.isTeleporting()) + { + break ITEMS; + } + final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue()); if (item == null) { @@ -194,7 +200,7 @@ public class AutoUseTaskManager implements Runnable if (canCastBuff(player, target, skill)) { // 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); } @@ -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) { - // TODO: Use getSkillRemainingReuseTime. - return !player.hasSkillReuse(skill.getReuseHashCode()) && skill.checkCondition(player, target, false); + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } public void startAutoUseTask(PlayerInstance player) diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java index 411a40a048..c832a3001c 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java @@ -54,6 +54,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList; public class AutoUseTaskManager implements Runnable { private static final Set PLAYERS = ConcurrentHashMap.newKeySet(); + private static final int REUSE_MARGIN_TIME = 3; private static boolean _working = false; protected AutoUseTaskManager() @@ -89,6 +90,11 @@ public class AutoUseTaskManager implements Runnable { ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems()) { + if (player.isTeleporting()) + { + break ITEMS; + } + final ItemInstance item = player.getInventory().getItemByItemId(itemId.intValue()); if (item == null) { @@ -194,7 +200,7 @@ public class AutoUseTaskManager implements Runnable if (canCastBuff(player, target, skill)) { // 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); } @@ -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) { - // TODO: Use getSkillRemainingReuseTime. - return !player.hasSkillReuse(skill.getReuseHashCode()) && skill.checkCondition(player, target, false); + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } public void startAutoUseTask(PlayerInstance player)