From 9501a97a6af89bbdb85b04c03b7efc4e8fa2f0d8 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 9 Apr 2022 22:29:19 +0000 Subject: [PATCH] AutoUseTaskManager should take in consideration attach skills. Thanks to Index. --- .../taskmanager/AutoUseTaskManager.java | 33 ++++++++++++++++--- .../taskmanager/AutoUseTaskManager.java | 33 ++++++++++++++++--- .../taskmanager/AutoUseTaskManager.java | 33 ++++++++++++++++--- .../taskmanager/AutoUseTaskManager.java | 33 ++++++++++++++++--- .../taskmanager/AutoUseTaskManager.java | 33 ++++++++++++++++--- .../taskmanager/AutoUseTaskManager.java | 33 ++++++++++++++++--- .../taskmanager/AutoUseTaskManager.java | 33 ++++++++++++++++--- .../taskmanager/AutoUseTaskManager.java | 33 ++++++++++++++++--- .../taskmanager/AutoUseTaskManager.java | 33 ++++++++++++++++--- .../taskmanager/AutoUseTaskManager.java | 33 ++++++++++++++++--- 10 files changed, 290 insertions(+), 40 deletions(-) diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java index d2955c203b..ce07fa032a 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java @@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.AttachSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.ItemTemplate; @@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable final WorldObject target = player.getTarget(); if (canCastBuff(player, target, skill)) { - final Playable caster = pet != null ? pet : player; + ATTACH_SEARCH: for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId())) + { + skill = holder.getSkill(); + break ATTACH_SEARCH; + } + } // Playable target cast. + final Playable caster = pet != null ? pet : player; if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0)) { caster.doCast(skill); @@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); - return ((buffInfo == null) && (abnormalBuffInfo == null)) // - || ((buffInfo != null) && (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel()))) // - || (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()); + if (abnormalBuffInfo != null) + { + if (buffInfo != null) + { + return (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel())); + } + return (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()) || abnormalBuffInfo.isAbnormalType(AbnormalType.NONE); + } + return buffInfo == null; } private boolean canUseMagic(Player player, WorldObject target, Skill skill) @@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable { return false; } + + for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId()) // + && (player.hasSkillReuse(holder.getSkill().getReuseHashCode()) || player.isAffectedBySkill(holder))) + { + return false; + } + } + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java index d2955c203b..ce07fa032a 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java @@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.AttachSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.ItemTemplate; @@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable final WorldObject target = player.getTarget(); if (canCastBuff(player, target, skill)) { - final Playable caster = pet != null ? pet : player; + ATTACH_SEARCH: for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId())) + { + skill = holder.getSkill(); + break ATTACH_SEARCH; + } + } // Playable target cast. + final Playable caster = pet != null ? pet : player; if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0)) { caster.doCast(skill); @@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); - return ((buffInfo == null) && (abnormalBuffInfo == null)) // - || ((buffInfo != null) && (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel()))) // - || (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()); + if (abnormalBuffInfo != null) + { + if (buffInfo != null) + { + return (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel())); + } + return (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()) || abnormalBuffInfo.isAbnormalType(AbnormalType.NONE); + } + return buffInfo == null; } private boolean canUseMagic(Player player, WorldObject target, Skill skill) @@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable { return false; } + + for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId()) // + && (player.hasSkillReuse(holder.getSkill().getReuseHashCode()) || player.isAffectedBySkill(holder))) + { + return false; + } + } + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java index d2955c203b..ce07fa032a 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java @@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.AttachSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.ItemTemplate; @@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable final WorldObject target = player.getTarget(); if (canCastBuff(player, target, skill)) { - final Playable caster = pet != null ? pet : player; + ATTACH_SEARCH: for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId())) + { + skill = holder.getSkill(); + break ATTACH_SEARCH; + } + } // Playable target cast. + final Playable caster = pet != null ? pet : player; if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0)) { caster.doCast(skill); @@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); - return ((buffInfo == null) && (abnormalBuffInfo == null)) // - || ((buffInfo != null) && (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel()))) // - || (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()); + if (abnormalBuffInfo != null) + { + if (buffInfo != null) + { + return (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel())); + } + return (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()) || abnormalBuffInfo.isAbnormalType(AbnormalType.NONE); + } + return buffInfo == null; } private boolean canUseMagic(Player player, WorldObject target, Skill skill) @@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable { return false; } + + for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId()) // + && (player.hasSkillReuse(holder.getSkill().getReuseHashCode()) || player.isAffectedBySkill(holder))) + { + return false; + } + } + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java index d2955c203b..ce07fa032a 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java @@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.AttachSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.ItemTemplate; @@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable final WorldObject target = player.getTarget(); if (canCastBuff(player, target, skill)) { - final Playable caster = pet != null ? pet : player; + ATTACH_SEARCH: for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId())) + { + skill = holder.getSkill(); + break ATTACH_SEARCH; + } + } // Playable target cast. + final Playable caster = pet != null ? pet : player; if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0)) { caster.doCast(skill); @@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); - return ((buffInfo == null) && (abnormalBuffInfo == null)) // - || ((buffInfo != null) && (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel()))) // - || (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()); + if (abnormalBuffInfo != null) + { + if (buffInfo != null) + { + return (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel())); + } + return (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()) || abnormalBuffInfo.isAbnormalType(AbnormalType.NONE); + } + return buffInfo == null; } private boolean canUseMagic(Player player, WorldObject target, Skill skill) @@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable { return false; } + + for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId()) // + && (player.hasSkillReuse(holder.getSkill().getReuseHashCode()) || player.isAffectedBySkill(holder))) + { + return false; + } + } + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java index d2955c203b..ce07fa032a 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java @@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.AttachSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.ItemTemplate; @@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable final WorldObject target = player.getTarget(); if (canCastBuff(player, target, skill)) { - final Playable caster = pet != null ? pet : player; + ATTACH_SEARCH: for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId())) + { + skill = holder.getSkill(); + break ATTACH_SEARCH; + } + } // Playable target cast. + final Playable caster = pet != null ? pet : player; if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0)) { caster.doCast(skill); @@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); - return ((buffInfo == null) && (abnormalBuffInfo == null)) // - || ((buffInfo != null) && (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel()))) // - || (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()); + if (abnormalBuffInfo != null) + { + if (buffInfo != null) + { + return (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel())); + } + return (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()) || abnormalBuffInfo.isAbnormalType(AbnormalType.NONE); + } + return buffInfo == null; } private boolean canUseMagic(Player player, WorldObject target, Skill skill) @@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable { return false; } + + for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId()) // + && (player.hasSkillReuse(holder.getSkill().getReuseHashCode()) || player.isAffectedBySkill(holder))) + { + return false; + } + } + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } 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 d2955c203b..ce07fa032a 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 @@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.AttachSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.ItemTemplate; @@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable final WorldObject target = player.getTarget(); if (canCastBuff(player, target, skill)) { - final Playable caster = pet != null ? pet : player; + ATTACH_SEARCH: for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId())) + { + skill = holder.getSkill(); + break ATTACH_SEARCH; + } + } // Playable target cast. + final Playable caster = pet != null ? pet : player; if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0)) { caster.doCast(skill); @@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); - return ((buffInfo == null) && (abnormalBuffInfo == null)) // - || ((buffInfo != null) && (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel()))) // - || (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()); + if (abnormalBuffInfo != null) + { + if (buffInfo != null) + { + return (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel())); + } + return (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()) || abnormalBuffInfo.isAbnormalType(AbnormalType.NONE); + } + return buffInfo == null; } private boolean canUseMagic(Player player, WorldObject target, Skill skill) @@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable { return false; } + + for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId()) // + && (player.hasSkillReuse(holder.getSkill().getReuseHashCode()) || player.isAffectedBySkill(holder))) + { + return false; + } + } + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } 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 d2955c203b..ce07fa032a 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 @@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.AttachSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.ItemTemplate; @@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable final WorldObject target = player.getTarget(); if (canCastBuff(player, target, skill)) { - final Playable caster = pet != null ? pet : player; + ATTACH_SEARCH: for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId())) + { + skill = holder.getSkill(); + break ATTACH_SEARCH; + } + } // Playable target cast. + final Playable caster = pet != null ? pet : player; if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0)) { caster.doCast(skill); @@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); - return ((buffInfo == null) && (abnormalBuffInfo == null)) // - || ((buffInfo != null) && (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel()))) // - || (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()); + if (abnormalBuffInfo != null) + { + if (buffInfo != null) + { + return (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel())); + } + return (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()) || abnormalBuffInfo.isAbnormalType(AbnormalType.NONE); + } + return buffInfo == null; } private boolean canUseMagic(Player player, WorldObject target, Skill skill) @@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable { return false; } + + for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId()) // + && (player.hasSkillReuse(holder.getSkill().getReuseHashCode()) || player.isAffectedBySkill(holder))) + { + return false; + } + } + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } 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 d2955c203b..ce07fa032a 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 @@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.AttachSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.ItemTemplate; @@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable final WorldObject target = player.getTarget(); if (canCastBuff(player, target, skill)) { - final Playable caster = pet != null ? pet : player; + ATTACH_SEARCH: for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId())) + { + skill = holder.getSkill(); + break ATTACH_SEARCH; + } + } // Playable target cast. + final Playable caster = pet != null ? pet : player; if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0)) { caster.doCast(skill); @@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); - return ((buffInfo == null) && (abnormalBuffInfo == null)) // - || ((buffInfo != null) && (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel()))) // - || (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()); + if (abnormalBuffInfo != null) + { + if (buffInfo != null) + { + return (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel())); + } + return (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()) || abnormalBuffInfo.isAbnormalType(AbnormalType.NONE); + } + return buffInfo == null; } private boolean canUseMagic(Player player, WorldObject target, Skill skill) @@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable { return false; } + + for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId()) // + && (player.hasSkillReuse(holder.getSkill().getReuseHashCode()) || player.isAffectedBySkill(holder))) + { + return false; + } + } + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java index d2955c203b..ce07fa032a 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java @@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.AttachSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.ItemTemplate; @@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable final WorldObject target = player.getTarget(); if (canCastBuff(player, target, skill)) { - final Playable caster = pet != null ? pet : player; + ATTACH_SEARCH: for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId())) + { + skill = holder.getSkill(); + break ATTACH_SEARCH; + } + } // Playable target cast. + final Playable caster = pet != null ? pet : player; if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0)) { caster.doCast(skill); @@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); - return ((buffInfo == null) && (abnormalBuffInfo == null)) // - || ((buffInfo != null) && (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel()))) // - || (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()); + if (abnormalBuffInfo != null) + { + if (buffInfo != null) + { + return (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel())); + } + return (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()) || abnormalBuffInfo.isAbnormalType(AbnormalType.NONE); + } + return buffInfo == null; } private boolean canUseMagic(Player player, WorldObject target, Skill skill) @@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable { return false; } + + for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId()) // + && (player.hasSkillReuse(holder.getSkill().getReuseHashCode()) || player.isAffectedBySkill(holder))) + { + return false; + } + } + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); } diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java index d2955c203b..ce07fa032a 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java @@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.AttachSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.ItemTemplate; @@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable final WorldObject target = player.getTarget(); if (canCastBuff(player, target, skill)) { - final Playable caster = pet != null ? pet : player; + ATTACH_SEARCH: for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId())) + { + skill = holder.getSkill(); + break ATTACH_SEARCH; + } + } // Playable target cast. + final Playable caster = pet != null ? pet : player; if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0)) { caster.doCast(skill); @@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); - return ((buffInfo == null) && (abnormalBuffInfo == null)) // - || ((buffInfo != null) && (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel()))) // - || (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()); + if (abnormalBuffInfo != null) + { + if (buffInfo != null) + { + return (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel())); + } + return (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()) || abnormalBuffInfo.isAbnormalType(AbnormalType.NONE); + } + return buffInfo == null; } private boolean canUseMagic(Player player, WorldObject target, Skill skill) @@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable { return false; } + + for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId()) // + && (player.hasSkillReuse(holder.getSkill().getReuseHashCode()) || player.isAffectedBySkill(holder))) + { + return false; + } + } + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); }