From 6e64ab3dfd18a570ab640af457874aed7714e537 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Fri, 8 Nov 2019 10:52:40 +0000 Subject: [PATCH] Addition of isSiegeFriend method. Contributed by Sahar. --- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 5 +- .../model/actor/instance/PlayerInstance.java | 51 ++++++++++++++----- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 5 +- .../model/actor/instance/PlayerInstance.java | 51 ++++++++++++++----- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- .../handlers/targethandlers/Enemy.java | 3 +- .../handlers/targethandlers/EnemyOnly.java | 3 +- .../targethandlers/affectobject/Friend.java | 2 +- .../targethandlers/affectobject/FriendPc.java | 2 +- .../affectobject/NotFriend.java | 2 +- .../affectobject/NotFriendPc.java | 2 +- .../gameserver/model/actor/Creature.java | 2 +- .../gameserver/model/actor/Summon.java | 2 +- .../model/actor/instance/PlayerInstance.java | 37 +++++++++++++- 141 files changed, 744 insertions(+), 197 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/Enemy.java index 136bdec0ef..7c427d20f2 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index d4a70e4339..f55e4c18bd 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java index 2f52301944..0f158b41fa 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -950,7 +950,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Summon.java index 5767e53bce..8a394f7822 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 0ea8c7d4ee..39c1189614 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1655,6 +1655,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5190,7 +5225,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null)) diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/Enemy.java index 136bdec0ef..7c427d20f2 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index d4a70e4339..f55e4c18bd 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java index 2f52301944..0f158b41fa 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -950,7 +950,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Summon.java index 5767e53bce..8a394f7822 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index a623437f93..fe90b33c5a 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1661,6 +1661,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5196,7 +5231,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null)) diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/Enemy.java index 136bdec0ef..7c427d20f2 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index d4a70e4339..f55e4c18bd 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java index 7a92b99d7b..0de4b34460 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -950,7 +950,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Summon.java index 0661915359..8afab88e3b 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 3ed81002ff..8635098a93 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1663,6 +1663,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5198,7 +5233,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null)) diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/Enemy.java index b049e08d89..44ccb41934 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index 078677cfeb..2bbbb7e9e9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java index 7a92b99d7b..0de4b34460 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -950,7 +950,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Summon.java index 0661915359..8afab88e3b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index cc622c76ef..ce64319859 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1674,6 +1674,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5193,7 +5228,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null)) diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/Enemy.java index b049e08d89..44ccb41934 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index 078677cfeb..2bbbb7e9e9 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java index 7a92b99d7b..0de4b34460 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -950,7 +950,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Summon.java index 0661915359..8afab88e3b 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 34771ea869..cddc6ec1f7 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1667,6 +1667,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5172,7 +5207,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null)) diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/Enemy.java index b049e08d89..44ccb41934 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index 078677cfeb..2bbbb7e9e9 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java index 7a92b99d7b..0de4b34460 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -950,7 +950,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Summon.java index 0661915359..8afab88e3b 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index e80eff5980..ab600dfb64 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1667,6 +1667,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5172,7 +5207,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null)) diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/Enemy.java index b049e08d89..44ccb41934 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index 078677cfeb..2bbbb7e9e9 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java index 7a92b99d7b..0de4b34460 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -950,7 +950,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Summon.java index 0661915359..8afab88e3b 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 4046dc44e0..8fb091d240 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1667,6 +1667,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5173,7 +5208,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null)) diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/Enemy.java index b049e08d89..44ccb41934 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index 078677cfeb..2bbbb7e9e9 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java index 00f7201f95..0d7859bf54 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -950,7 +950,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Summon.java index 0661915359..8afab88e3b 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 9519f8d863..42315b30bf 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1672,6 +1672,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5093,7 +5128,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null)) diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Creature.java index 8d1fc0a1f8..64c62f3836 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -935,7 +935,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { if (TerritoryWarManager.getInstance().isTWInProgress()) { diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Summon.java index 8076579469..848f24feb7 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -53,7 +53,6 @@ import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.olympiad.Olympiad; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.model.zone.ZoneRegion; import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.serverpackets.AbstractNpcInfo.SummonInfo; @@ -680,7 +679,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == _owner.getSiegeState()) && (target.getActingPlayer() != _owner) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { if (TerritoryWarManager.getInstance().isTWInProgress()) { @@ -1019,7 +1018,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { if (TerritoryWarManager.getInstance().isTWInProgress()) { diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index bf6afbae8a..356ce559b6 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1618,6 +1618,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -8928,7 +8963,7 @@ public class PlayerInstance extends Playable return false; } - if ((target.getActingPlayer() != null) && (getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getSiegeSide())) + if (isSiegeFriend(target)) { if (TerritoryWarManager.getInstance().isTWInProgress()) { @@ -9151,18 +9186,10 @@ public class PlayerInstance extends Playable } // Siege - if ((getSiegeState() != 0) && (targetPlayer.getSiegeState() != 0)) + if (isSiegeFriend(targetPlayer)) { - // Register for same siege - if (getSiegeSide() == targetPlayer.getSiegeSide()) - { - // Same side - if (getSiegeState() == targetPlayer.getSiegeState()) - { - sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); - return false; - } - } + sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); + return false; } // Party diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Creature.java index 4b6962973b..f35a7c8c84 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -936,7 +936,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { if (TerritoryWarManager.getInstance().isTWInProgress()) { diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Summon.java index 98671fb968..9b91ba4814 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -53,7 +53,6 @@ import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.olympiad.OlympiadGameManager; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.model.zone.ZoneRegion; import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.serverpackets.AbstractNpcInfo.SummonInfo; @@ -680,7 +679,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == _owner.getSiegeState()) && (target.getActingPlayer() != _owner) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { if (TerritoryWarManager.getInstance().isTWInProgress()) { @@ -1019,7 +1018,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { if (TerritoryWarManager.getInstance().isTWInProgress()) { diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 61c7caf2d9..b207783960 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1641,6 +1641,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -8807,7 +8842,7 @@ public class PlayerInstance extends Playable return false; } - if ((target.getActingPlayer() != null) && (getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getSiegeSide())) + if (isSiegeFriend(target)) { if (TerritoryWarManager.getInstance().isTWInProgress()) { @@ -9030,18 +9065,10 @@ public class PlayerInstance extends Playable } // Siege - if ((getSiegeState() != 0) && (targetPlayer.getSiegeState() != 0)) + if (isSiegeFriend(targetPlayer)) { - // Register for same siege - if (getSiegeSide() == targetPlayer.getSiegeSide()) - { - // Same side - if (getSiegeState() == targetPlayer.getSiegeState()) - { - sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); - return false; - } - } + sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); + return false; } // Party diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/Enemy.java index 3dcc7f275f..320943f705 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index cd15ab4858..dd7cb8ed64 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java index fc9609776e..a37e41550d 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -949,7 +949,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Summon.java index cd4a702247..c7a6a38c1b 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 3aee98a13f..bb3142863e 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1636,6 +1636,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5161,7 +5196,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null)) diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/Enemy.java index 54a740694e..1a2b162d07 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index 1aba6e6a41..15f303895c 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java index fc9609776e..a37e41550d 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -949,7 +949,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Summon.java index cd4a702247..c7a6a38c1b 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 2e163a14d5..55ae79f04c 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1637,6 +1637,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5162,7 +5197,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null)) diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/Enemy.java index 54a740694e..1a2b162d07 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index 1aba6e6a41..15f303895c 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java index fc9609776e..a37e41550d 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -949,7 +949,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Summon.java index cd4a702247..c7a6a38c1b 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 0f2223d854..b251050c2b 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1635,6 +1635,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5146,7 +5181,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null)) diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/Enemy.java index 54a740694e..1a2b162d07 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index 1aba6e6a41..15f303895c 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java index e199d1b3bd..33b05e7ee5 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -950,7 +950,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Summon.java index c9383f36c5..8d7046f92a 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 3ec1802b4b..16f8d9f5a8 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1645,6 +1645,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5157,7 +5192,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null)) diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/Enemy.java index 54a740694e..1a2b162d07 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index 1aba6e6a41..15f303895c 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java index e199d1b3bd..33b05e7ee5 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -950,7 +950,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Summon.java index c9383f36c5..8d7046f92a 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 5b0fa3a5dc..232e09a375 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1645,6 +1645,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5157,7 +5192,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null)) diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/Enemy.java index 54a740694e..1a2b162d07 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index 1aba6e6a41..15f303895c 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java index 1dcc9c94ea..25d7dcb916 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -950,7 +950,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Summon.java index c9383f36c5..8d7046f92a 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 3896b3ed12..1ebc264c28 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1647,6 +1647,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5060,7 +5095,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null)) diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/Enemy.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/Enemy.java index 54a740694e..1a2b162d07 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/Enemy.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/Enemy.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class Enemy implements ITargetTypeHandler // Is this check still actual? if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java index 1aba6e6a41..15f303895c 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/EnemyOnly.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.targets.TargetType; -import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.SystemMessageId; /** @@ -127,7 +126,7 @@ public class EnemyOnly implements ITargetTypeHandler // Is this check still actual? if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) { - if ((creature.getActingPlayer().getSiegeState() > 0) && creature.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == creature.getActingPlayer().getSiegeState()) && (target.getActingPlayer() != creature.getActingPlayer()) && (target.getActingPlayer().getSiegeSide() == creature.getActingPlayer().getSiegeSide())) + if (creature.getActingPlayer().isSiegeFriend(target)) { if (sendMessage) { diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java index dae1e113ad..c578792742 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/Friend.java @@ -103,7 +103,7 @@ public class Friend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java index 72b723d00b..3de015040e 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/FriendPc.java @@ -101,7 +101,7 @@ public class FriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return true; } diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java index bcdc22c6f8..b32325a230 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriend.java @@ -112,7 +112,7 @@ public class NotFriend implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java index c0c3d7c9e6..6541b40796 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/targethandlers/affectobject/NotFriendPc.java @@ -112,7 +112,7 @@ public class NotFriendPc implements IAffectObjectHandler 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())) + if (player.isSiegeFriend(targetPlayer)) { return false; } diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java index fc9609776e..a37e41550d 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -949,7 +949,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe sendPacket(ActionFailed.STATIC_PACKET); return; } - else if ((target.getActingPlayer() != null) && (getActingPlayer().getSiegeState() > 0) && isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getActingPlayer().getSiegeState()) && (target.getActingPlayer() != this) && (target.getActingPlayer().getSiegeSide() == getActingPlayer().getSiegeSide())) + else if (getActingPlayer().isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Summon.java index cd4a702247..c7a6a38c1b 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -1004,7 +1004,7 @@ public abstract class Summon extends Playable return false; } - if ((target.getActingPlayer() != null) && (_owner.getSiegeState() > 0) && _owner.isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == _owner.getSiegeSide())) + if (_owner.isSiegeFriend(target)) { sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 5b6cc7612a..6ccf7ef0d2 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1637,6 +1637,41 @@ public class PlayerInstance extends Playable return _siegeSide; } + public boolean isSiegeFriend(WorldObject target) + { + // If i'm natural or not in siege zone, not friends. + if ((_siegeState == 0) || !isInsideZone(ZoneId.SIEGE)) + { + return false; + } + + // If target isn't a player, is self, isn't on same siege or not on same state, not friends. + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState())) + { + return false; + } + + // Attackers are considered friends only if castle has no owner. + if (_siegeState == 1) + { + final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide); + if (castle == null) + { + return false; + } + if (castle.getOwner() == null) + { + return true; + } + + return false; + } + + // Both are defenders, friends. + return true; + } + /** * Set the PvP Flag of the PlayerInstance. * @param pvpFlag @@ -5162,7 +5197,7 @@ public class PlayerInstance extends Playable // If both players are in SIEGE zone just increase siege kills/deaths if (isInsideZone(ZoneId.SIEGE) && killedPlayer.isInsideZone(ZoneId.SIEGE)) { - if ((getSiegeState() > 0) && (killedPlayer.getSiegeState() > 0) && (getSiegeState() != killedPlayer.getSiegeState())) + if (!isSiegeFriend(killedPlayer)) { final Clan targetClan = killedPlayer.getClan(); if ((_clan != null) && (targetClan != null))