AutoUseTaskManager should take in consideration attach skills.

Thanks to Index.
This commit is contained in:
MobiusDevelopment
2022-04-09 22:29:19 +00:00
parent f762def810
commit 9501a97a6a
10 changed files with 290 additions and 40 deletions

View File

@@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.actor.instance.Guard;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; 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.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
@@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable
final WorldObject target = player.getTarget(); final WorldObject target = player.getTarget();
if (canCastBuff(player, target, skill)) 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. // 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)) if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
{ {
caster.doCast(skill); caster.doCast(skill);
@@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType());
return ((buffInfo == null) && (abnormalBuffInfo == null)) // if (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 (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) private boolean canUseMagic(Player player, WorldObject target, Skill skill)
@@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable
{ {
return false; 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); return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
} }

View File

@@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.actor.instance.Guard;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; 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.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
@@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable
final WorldObject target = player.getTarget(); final WorldObject target = player.getTarget();
if (canCastBuff(player, target, skill)) 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. // 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)) if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
{ {
caster.doCast(skill); caster.doCast(skill);
@@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType());
return ((buffInfo == null) && (abnormalBuffInfo == null)) // if (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 (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) private boolean canUseMagic(Player player, WorldObject target, Skill skill)
@@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable
{ {
return false; 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); return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
} }

View File

@@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.actor.instance.Guard;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; 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.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
@@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable
final WorldObject target = player.getTarget(); final WorldObject target = player.getTarget();
if (canCastBuff(player, target, skill)) 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. // 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)) if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
{ {
caster.doCast(skill); caster.doCast(skill);
@@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType());
return ((buffInfo == null) && (abnormalBuffInfo == null)) // if (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 (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) private boolean canUseMagic(Player player, WorldObject target, Skill skill)
@@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable
{ {
return false; 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); return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
} }

View File

@@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.actor.instance.Guard;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; 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.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
@@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable
final WorldObject target = player.getTarget(); final WorldObject target = player.getTarget();
if (canCastBuff(player, target, skill)) 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. // 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)) if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
{ {
caster.doCast(skill); caster.doCast(skill);
@@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType());
return ((buffInfo == null) && (abnormalBuffInfo == null)) // if (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 (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) private boolean canUseMagic(Player player, WorldObject target, Skill skill)
@@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable
{ {
return false; 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); return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
} }

View File

@@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.actor.instance.Guard;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; 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.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
@@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable
final WorldObject target = player.getTarget(); final WorldObject target = player.getTarget();
if (canCastBuff(player, target, skill)) 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. // 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)) if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
{ {
caster.doCast(skill); caster.doCast(skill);
@@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType());
return ((buffInfo == null) && (abnormalBuffInfo == null)) // if (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 (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) private boolean canUseMagic(Player player, WorldObject target, Skill skill)
@@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable
{ {
return false; 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); return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
} }

View File

@@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.actor.instance.Guard;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; 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.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
@@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable
final WorldObject target = player.getTarget(); final WorldObject target = player.getTarget();
if (canCastBuff(player, target, skill)) 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. // 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)) if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
{ {
caster.doCast(skill); caster.doCast(skill);
@@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType());
return ((buffInfo == null) && (abnormalBuffInfo == null)) // if (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 (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) private boolean canUseMagic(Player player, WorldObject target, Skill skill)
@@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable
{ {
return false; 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); return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
} }

View File

@@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.actor.instance.Guard;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; 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.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
@@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable
final WorldObject target = player.getTarget(); final WorldObject target = player.getTarget();
if (canCastBuff(player, target, skill)) 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. // 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)) if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
{ {
caster.doCast(skill); caster.doCast(skill);
@@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType());
return ((buffInfo == null) && (abnormalBuffInfo == null)) // if (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 (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) private boolean canUseMagic(Player player, WorldObject target, Skill skill)
@@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable
{ {
return false; 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); return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
} }

View File

@@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.actor.instance.Guard;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; 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.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
@@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable
final WorldObject target = player.getTarget(); final WorldObject target = player.getTarget();
if (canCastBuff(player, target, skill)) 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. // 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)) if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
{ {
caster.doCast(skill); caster.doCast(skill);
@@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType());
return ((buffInfo == null) && (abnormalBuffInfo == null)) // if (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 (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) private boolean canUseMagic(Player player, WorldObject target, Skill skill)
@@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable
{ {
return false; 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); return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
} }

View File

@@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.actor.instance.Guard;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; 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.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
@@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable
final WorldObject target = player.getTarget(); final WorldObject target = player.getTarget();
if (canCastBuff(player, target, skill)) 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. // 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)) if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
{ {
caster.doCast(skill); caster.doCast(skill);
@@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType());
return ((buffInfo == null) && (abnormalBuffInfo == null)) // if (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 (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) private boolean canUseMagic(Player player, WorldObject target, Skill skill)
@@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable
{ {
return false; 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); return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
} }

View File

@@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Guard; import org.l2jmobius.gameserver.model.actor.instance.Guard;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; 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.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
@@ -215,9 +216,17 @@ public class AutoUseTaskManager implements Runnable
final WorldObject target = player.getTarget(); final WorldObject target = player.getTarget();
if (canCastBuff(player, target, skill)) 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. // 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)) if ((target != null) && target.isPlayable() && !((Playable) target).isAlikeDead() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0))
{ {
caster.doCast(skill); caster.doCast(skill);
@@ -380,9 +389,15 @@ public class AutoUseTaskManager implements Runnable
final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId());
final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType());
return ((buffInfo == null) && (abnormalBuffInfo == null)) // if (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 (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) private boolean canUseMagic(Player player, WorldObject target, Skill skill)
@@ -391,6 +406,16 @@ public class AutoUseTaskManager implements Runnable
{ {
return false; 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); return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false);
} }