|
@@ -28,9 +28,11 @@ import com.l2jserver.gameserver.GeoData;
|
|
import com.l2jserver.gameserver.handler.ITargetTypeHandler;
|
|
import com.l2jserver.gameserver.handler.ITargetTypeHandler;
|
|
import com.l2jserver.gameserver.model.L2Object;
|
|
import com.l2jserver.gameserver.model.L2Object;
|
|
import com.l2jserver.gameserver.model.actor.L2Character;
|
|
import com.l2jserver.gameserver.model.actor.L2Character;
|
|
|
|
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
|
import com.l2jserver.gameserver.model.actor.instance.L2SiegeFlagInstance;
|
|
import com.l2jserver.gameserver.model.actor.instance.L2SiegeFlagInstance;
|
|
import com.l2jserver.gameserver.model.skills.Skill;
|
|
import com.l2jserver.gameserver.model.skills.Skill;
|
|
import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
|
|
import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
|
|
|
|
+import com.l2jserver.gameserver.model.zone.ZoneId;
|
|
import com.l2jserver.gameserver.network.SystemMessageId;
|
|
import com.l2jserver.gameserver.network.SystemMessageId;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -42,9 +44,11 @@ public class AreaFriendly implements ITargetTypeHandler
|
|
public L2Object[] getTargetList(Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
|
|
public L2Object[] getTargetList(Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
|
|
{
|
|
{
|
|
List<L2Character> targetList = new ArrayList<>();
|
|
List<L2Character> targetList = new ArrayList<>();
|
|
- if (!checkTarget(activeChar, target) && (skill.getCastRange() >= 0))
|
|
|
|
|
|
+ L2PcInstance player = activeChar.getActingPlayer();
|
|
|
|
+
|
|
|
|
+ if (!checkTarget(player, target) && (skill.getCastRange() >= 0))
|
|
{
|
|
{
|
|
- activeChar.sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
|
|
|
|
|
|
+ player.sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
|
|
return EMPTY_TARGET_LIST;
|
|
return EMPTY_TARGET_LIST;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -56,11 +60,11 @@ public class AreaFriendly implements ITargetTypeHandler
|
|
};
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
- if (activeChar.getActingPlayer().isInOlympiadMode())
|
|
|
|
|
|
+ if (player.getActingPlayer().isInOlympiadMode())
|
|
{
|
|
{
|
|
return new L2Character[]
|
|
return new L2Character[]
|
|
{
|
|
{
|
|
- activeChar
|
|
|
|
|
|
+ player
|
|
};
|
|
};
|
|
}
|
|
}
|
|
targetList.add(target); // Add target to target list
|
|
targetList.add(target); // Add target to target list
|
|
@@ -75,7 +79,7 @@ public class AreaFriendly implements ITargetTypeHandler
|
|
|
|
|
|
for (L2Character obj : objs)
|
|
for (L2Character obj : objs)
|
|
{
|
|
{
|
|
- if (!checkTarget(activeChar, obj) || (obj == activeChar))
|
|
|
|
|
|
+ if (!checkTarget(player, obj) || (obj == activeChar))
|
|
{
|
|
{
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
@@ -96,7 +100,7 @@ public class AreaFriendly implements ITargetTypeHandler
|
|
return targetList.toArray(new L2Character[targetList.size()]);
|
|
return targetList.toArray(new L2Character[targetList.size()]);
|
|
}
|
|
}
|
|
|
|
|
|
- private boolean checkTarget(L2Character activeChar, L2Character target)
|
|
|
|
|
|
+ private boolean checkTarget(L2PcInstance activeChar, L2Character target)
|
|
{
|
|
{
|
|
if (!GeoData.getInstance().canSeeTarget(activeChar, target))
|
|
if (!GeoData.getInstance().canSeeTarget(activeChar, target))
|
|
{
|
|
{
|
|
@@ -108,29 +112,41 @@ public class AreaFriendly implements ITargetTypeHandler
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
- if ((target.getActingPlayer() != null) && (target.getActingPlayer() != activeChar) && (target.getActingPlayer().inObserverMode() || target.getActingPlayer().isInOlympiadMode()))
|
|
|
|
- {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if (target.isPlayable())
|
|
if (target.isPlayable())
|
|
{
|
|
{
|
|
- if ((target != activeChar) && activeChar.isInParty() && target.isInParty())
|
|
|
|
|
|
+ L2PcInstance targetPlayer = target.getActingPlayer();
|
|
|
|
+
|
|
|
|
+ if (activeChar == targetPlayer)
|
|
|
|
+ {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (targetPlayer.inObserverMode() || targetPlayer.isInOlympiadMode())
|
|
{
|
|
{
|
|
- return (activeChar.getParty().getLeader() == target.getParty().getLeader());
|
|
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (activeChar.atDuelWith(target))
|
|
|
|
+ {
|
|
|
|
+ return false;
|
|
}
|
|
}
|
|
|
|
|
|
- if ((activeChar.getClanId() != 0) && (target.getClanId() != 0))
|
|
|
|
|
|
+ if (activeChar.inPartyWith(target))
|
|
{
|
|
{
|
|
- return (activeChar.getClanId() == target.getClanId());
|
|
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (target.isInsideZone(ZoneId.PVP))
|
|
|
|
+ {
|
|
|
|
+ return false;
|
|
}
|
|
}
|
|
|
|
|
|
- if ((activeChar.getAllyId() != 0) && (target.getAllyId() != 0))
|
|
|
|
|
|
+ if (activeChar.inClanWith(target) || activeChar.inAllyWith(target) || activeChar.inCommandChannelWith(target))
|
|
{
|
|
{
|
|
- return (activeChar.getAllyId() == target.getAllyId());
|
|
|
|
|
|
+ return true;
|
|
}
|
|
}
|
|
|
|
|
|
- if ((target != activeChar) && (target.getActingPlayer().getPvpFlag() > 0))
|
|
|
|
|
|
+ if ((targetPlayer.getPvpFlag() > 0) || (targetPlayer.getKarma() > 0))
|
|
{
|
|
{
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|