Force use for summon skills.

This commit is contained in:
MobiusDev
2019-01-27 14:37:37 +00:00
parent 0a2dbf9de3
commit dac640e17c
20 changed files with 960 additions and 860 deletions

View File

@@ -45,92 +45,89 @@ public class NotFriend implements IAffectObjectHandler
final L2PcInstance player = activeChar.getActingPlayer();
final L2PcInstance targetPlayer = target.getActingPlayer();
if (player != null)
if ((player != null) && (targetPlayer != null))
{
if (targetPlayer != null)
// Same player.
if (player == targetPlayer)
{
// Same player.
if (player == targetPlayer)
{
return false;
}
// Peace Zone.
if (target.isInsidePeaceZone(player) && !player.getAccessLevel().allowPeaceAttack())
{
return false;
}
// Party (command channel doesn't make you friends).
final L2Party party = player.getParty();
final L2Party targetParty = targetPlayer.getParty();
if ((party != null) && (targetParty != null) && (party.getLeaderObjectId() == targetParty.getLeaderObjectId()))
{
return false;
}
// Arena.
if (activeChar.isInsideZone(ZoneId.PVP) && target.isInsideZone(ZoneId.PVP))
{
return true;
}
// Duel.
if (player.isInDuel() && targetPlayer.isInDuel() && (player.getDuelId() == targetPlayer.getDuelId()))
{
return true;
}
// Olympiad.
if (player.isInOlympiadMode() && targetPlayer.isInOlympiadMode() && (player.getOlympiadGameId() == targetPlayer.getOlympiadGameId()))
{
return true;
}
// Clan.
final L2Clan clan = player.getClan();
final L2Clan targetClan = targetPlayer.getClan();
if (clan != null)
{
if (clan == targetClan)
{
return false;
}
// War
if ((targetClan != null) && clan.isAtWarWith(targetClan) && targetClan.isAtWarWith(clan))
{
return true;
}
}
// Alliance.
if ((player.getAllyId() != 0) && (player.getAllyId() == targetPlayer.getAllyId()))
{
return false;
}
// Siege.
if (target.isInsideZone(ZoneId.SIEGE))
{
// Players in the same siege side at the same castle are considered friends.
if ((player.getSiegeState() > 0) && (player.getSiegeState() == targetPlayer.getSiegeState()) && (player.getSiegeSide() == targetPlayer.getSiegeSide()))
{
return false;
}
return true;
}
// At this point summon should be prevented from attacking friendly targets.
if (activeChar.isSummon() && (target == activeChar.getTarget()))
{
return true;
}
// By default any flagged/PK player is considered enemy.
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
return false;
}
// Peace Zone.
if (target.isInsidePeaceZone(player) && !player.getAccessLevel().allowPeaceAttack())
{
return false;
}
// Party (command channel doesn't make you friends).
final L2Party party = player.getParty();
final L2Party targetParty = targetPlayer.getParty();
if ((party != null) && (targetParty != null) && (party.getLeaderObjectId() == targetParty.getLeaderObjectId()))
{
return false;
}
// Arena.
if (activeChar.isInsideZone(ZoneId.PVP) && target.isInsideZone(ZoneId.PVP))
{
return true;
}
// Duel.
if (player.isInDuel() && targetPlayer.isInDuel() && (player.getDuelId() == targetPlayer.getDuelId()))
{
return true;
}
// Olympiad.
if (player.isInOlympiadMode() && targetPlayer.isInOlympiadMode() && (player.getOlympiadGameId() == targetPlayer.getOlympiadGameId()))
{
return true;
}
// Clan.
final L2Clan clan = player.getClan();
final L2Clan targetClan = targetPlayer.getClan();
if (clan != null)
{
if (clan == targetClan)
{
return false;
}
// War
if ((targetClan != null) && clan.isAtWarWith(targetClan) && targetClan.isAtWarWith(clan))
{
return true;
}
}
// Alliance.
if ((player.getAllyId() != 0) && (player.getAllyId() == targetPlayer.getAllyId()))
{
return false;
}
// Siege.
if (target.isInsideZone(ZoneId.SIEGE))
{
// Players in the same siege side at the same castle are considered friends.
if ((player.getSiegeState() > 0) && (player.getSiegeState() == targetPlayer.getSiegeState()) && (player.getSiegeSide() == targetPlayer.getSiegeSide()))
{
return false;
}
return true;
}
// At this point summon should be prevented from attacking friendly targets.
if (activeChar.isSummon() && (target == activeChar.getTarget()))
{
return true;
}
// By default any flagged/PK player is considered enemy.
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
}
return target.isAutoAttackable(activeChar);