Addition of Castle first mid victory methods.
Contributed by nasseka.
This commit is contained in:
parent
a87d2c3e8d
commit
413c709bca
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1677,6 +1677,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1687,7 +1694,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8260,16 +8266,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -915,6 +916,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -85,6 +85,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -126,13 +133,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -85,6 +85,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -126,13 +133,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1679,6 +1679,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1689,7 +1696,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8263,16 +8269,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -915,6 +916,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -85,6 +85,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -126,13 +133,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -85,6 +85,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -126,13 +133,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1681,6 +1681,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1691,7 +1698,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8265,16 +8271,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -915,6 +916,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1691,6 +1691,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1701,7 +1708,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8260,16 +8266,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -915,6 +916,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1687,6 +1687,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1697,7 +1704,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8276,16 +8282,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -915,6 +916,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1687,6 +1687,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1697,7 +1704,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8276,16 +8282,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -915,6 +916,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1687,6 +1687,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1697,7 +1704,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8277,16 +8283,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -915,6 +916,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1705,6 +1705,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1715,7 +1722,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8292,16 +8298,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -915,6 +916,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -340,6 +340,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -454,6 +455,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1707,6 +1707,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1717,7 +1724,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8394,16 +8400,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -915,6 +916,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1724,6 +1724,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1734,7 +1741,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8420,16 +8426,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -915,6 +916,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1726,6 +1726,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1736,7 +1743,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8457,16 +8463,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -915,6 +916,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -1634,6 +1634,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1644,7 +1651,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8474,16 +8480,16 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerPlayer.getClan()) && siege.checkIsDefender(getClan()))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerPlayer.getClan()) && siege.checkIsAttacker(getClan()))
|
||||
{
|
||||
return false;
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -81,6 +81,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function;
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -397,6 +398,16 @@ public class Castle extends AbstractResidence
|
||||
return _zone;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CastleZone getResidenceZone()
|
||||
{
|
||||
|
@ -252,15 +252,15 @@ public class Siege implements Siegable
|
||||
if (_isInProgress)
|
||||
{
|
||||
SystemMessage sm = new SystemMessage(SystemMessageId.THE_S1_SIEGE_HAS_FINISHED);
|
||||
sm.addCastleId(getCastle().getResidenceId());
|
||||
sm.addCastleId(_castle.getResidenceId());
|
||||
Broadcast.toAllOnlinePlayers(sm);
|
||||
Broadcast.toAllOnlinePlayers(new PlaySound("systemmsg_e.18"));
|
||||
if (getCastle().getOwnerId() > 0)
|
||||
if (_castle.getOwnerId() > 0)
|
||||
{
|
||||
final Clan clan = ClanTable.getInstance().getClan(getCastle().getOwnerId());
|
||||
final Clan clan = ClanTable.getInstance().getClan(_castle.getOwnerId());
|
||||
sm = new SystemMessage(SystemMessageId.CLAN_S1_IS_VICTORIOUS_OVER_S2_S_CASTLE_SIEGE);
|
||||
sm.addString(clan.getName());
|
||||
sm.addCastleId(getCastle().getResidenceId());
|
||||
sm.addCastleId(_castle.getResidenceId());
|
||||
Broadcast.toAllOnlinePlayers(sm);
|
||||
|
||||
if (clan.getId() == _firstOwnerClanId)
|
||||
@ -270,7 +270,7 @@ public class Siege implements Siegable
|
||||
}
|
||||
else
|
||||
{
|
||||
getCastle().setTicketBuyCount(0);
|
||||
_castle.setTicketBuyCount(0);
|
||||
for (ClanMember member : clan.getMembers())
|
||||
{
|
||||
if (member != null)
|
||||
@ -278,7 +278,7 @@ public class Siege implements Siegable
|
||||
final Player player = member.getPlayer();
|
||||
if ((player != null) && player.isNoble())
|
||||
{
|
||||
Hero.getInstance().setCastleTaken(player.getObjectId(), getCastle().getResidenceId());
|
||||
Hero.getInstance().setCastleTaken(player.getObjectId(), _castle.getResidenceId());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -287,7 +287,7 @@ public class Siege implements Siegable
|
||||
else
|
||||
{
|
||||
sm = new SystemMessage(SystemMessageId.THE_SIEGE_OF_S1_HAS_ENDED_IN_A_DRAW);
|
||||
sm.addCastleId(getCastle().getResidenceId());
|
||||
sm.addCastleId(_castle.getResidenceId());
|
||||
Broadcast.toAllOnlinePlayers(sm);
|
||||
}
|
||||
|
||||
@ -315,7 +315,7 @@ public class Siege implements Siegable
|
||||
clan.clearSiegeDeaths();
|
||||
}
|
||||
|
||||
getCastle().updateClansReputation();
|
||||
_castle.updateClansReputation();
|
||||
removeFlags(); // Removes all flags. Note: Remove flag before teleporting players
|
||||
teleportPlayer(SiegeTeleportWhoType.NotOwner, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
_isInProgress = false; // Flag so that siege instance can be started
|
||||
@ -324,17 +324,18 @@ public class Siege implements Siegable
|
||||
clearSiegeClan(); // Clear siege clan from db
|
||||
removeTowers(); // Remove all towers from this castle
|
||||
_siegeGuardManager.unspawnSiegeGuard(); // Remove all spawned siege guard from this castle
|
||||
if (getCastle().getOwnerId() > 0)
|
||||
if (_castle.getOwnerId() > 0)
|
||||
{
|
||||
_siegeGuardManager.removeMercs();
|
||||
}
|
||||
getCastle().spawnDoor(); // Respawn door to castle
|
||||
getCastle().getZone().setActive(false);
|
||||
getCastle().getZone().updateZoneStatusForCharactersInside();
|
||||
getCastle().getZone().setSiegeInstance(null);
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
|
||||
// Notify to scripts.
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeFinish(this), getCastle());
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeFinish(this), _castle);
|
||||
}
|
||||
}
|
||||
|
||||
@ -381,24 +382,23 @@ public class Siege implements Siegable
|
||||
{
|
||||
if (_isInProgress) // Siege still in progress
|
||||
{
|
||||
if (getCastle().getOwnerId() > 0)
|
||||
if (_castle.getOwnerId() > 0)
|
||||
{
|
||||
_siegeGuardManager.removeMercs(); // Remove all merc entry from db
|
||||
}
|
||||
|
||||
if (getDefenderClans().isEmpty() && // If defender doesn't exist (Pc vs Npc)
|
||||
(getAttackerClans().size() == 1 // Only 1 attacker
|
||||
))
|
||||
(getAttackerClans().size() == 1)) // Only 1 attacker
|
||||
{
|
||||
final SiegeClan scNewOwner = getAttackerClan(getCastle().getOwnerId());
|
||||
final SiegeClan scNewOwner = getAttackerClan(_castle.getOwnerId());
|
||||
removeAttacker(scNewOwner);
|
||||
addDefender(scNewOwner, SiegeClanType.OWNER);
|
||||
endSiege();
|
||||
return;
|
||||
}
|
||||
if (getCastle().getOwnerId() > 0)
|
||||
if (_castle.getOwnerId() > 0)
|
||||
{
|
||||
final int allyId = ClanTable.getInstance().getClan(getCastle().getOwnerId()).getAllyId();
|
||||
final int allyId = ClanTable.getInstance().getClan(_castle.getOwnerId()).getAllyId();
|
||||
// If defender doesn't exist (Pc vs Npc) and only an alliance attacks and the player's clan is in an alliance
|
||||
if (getDefenderClans().isEmpty() && (allyId != 0))
|
||||
{
|
||||
@ -412,7 +412,7 @@ public class Siege implements Siegable
|
||||
}
|
||||
if (allinsamealliance)
|
||||
{
|
||||
final SiegeClan scNewOwner = getAttackerClan(getCastle().getOwnerId());
|
||||
final SiegeClan scNewOwner = getAttackerClan(_castle.getOwnerId());
|
||||
removeAttacker(scNewOwner);
|
||||
addDefender(scNewOwner, SiegeClanType.OWNER);
|
||||
endSiege();
|
||||
@ -429,7 +429,7 @@ public class Siege implements Siegable
|
||||
}
|
||||
}
|
||||
|
||||
final SiegeClan scNewOwner = getAttackerClan(getCastle().getOwnerId());
|
||||
final SiegeClan scNewOwner = getAttackerClan(_castle.getOwnerId());
|
||||
removeAttacker(scNewOwner);
|
||||
addDefender(scNewOwner, SiegeClanType.OWNER);
|
||||
|
||||
@ -443,11 +443,12 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
getCastle().removeUpgrade(); // Remove all castle upgrade
|
||||
getCastle().spawnDoor(true); // Respawn door to castle but make them weaker (50% hp)
|
||||
_castle.removeUpgrade(); // Remove all castle upgrade
|
||||
_castle.spawnDoor(true); // Respawn door to castle but make them weaker (50% hp)
|
||||
removeTowers(); // Remove all towers from this castle
|
||||
_controlTowerCount = 0; // Each new siege midvictory CT are completely respawned.
|
||||
spawnControlTower();
|
||||
@ -455,7 +456,7 @@ public class Siege implements Siegable
|
||||
updatePlayerSiegeStateFlags(false);
|
||||
|
||||
// Notify to scripts.
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeOwnerChange(this), getCastle());
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeOwnerChange(this), _castle);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -468,7 +469,7 @@ public class Siege implements Siegable
|
||||
{
|
||||
if (!_isInProgress)
|
||||
{
|
||||
_firstOwnerClanId = getCastle().getOwnerId();
|
||||
_firstOwnerClanId = _castle.getOwnerId();
|
||||
if (getAttackerClans().isEmpty())
|
||||
{
|
||||
SystemMessage sm;
|
||||
@ -482,7 +483,7 @@ public class Siege implements Siegable
|
||||
final Clan ownerClan = ClanTable.getInstance().getClan(_firstOwnerClanId);
|
||||
ownerClan.increaseBloodAllianceCount();
|
||||
}
|
||||
sm.addCastleId(getCastle().getResidenceId());
|
||||
sm.addCastleId(_castle.getResidenceId());
|
||||
Broadcast.toAllOnlinePlayers(sm);
|
||||
saveCastleSiege();
|
||||
return;
|
||||
@ -496,25 +497,25 @@ public class Siege implements Siegable
|
||||
_controlTowerCount = 0;
|
||||
spawnControlTower(); // Spawn control tower
|
||||
spawnFlameTower(); // Spawn control tower
|
||||
getCastle().spawnDoor(); // Spawn door
|
||||
_castle.spawnDoor(); // Spawn door
|
||||
spawnSiegeGuard(); // Spawn siege guard
|
||||
MercTicketManager.getInstance().deleteTickets(getCastle().getResidenceId()); // remove the tickets from the ground
|
||||
getCastle().getZone().setSiegeInstance(this);
|
||||
getCastle().getZone().setActive(true);
|
||||
getCastle().getZone().updateZoneStatusForCharactersInside();
|
||||
MercTicketManager.getInstance().deleteTickets(_castle.getResidenceId()); // remove the tickets from the ground
|
||||
_castle.getZone().setSiegeInstance(this);
|
||||
_castle.getZone().setActive(true);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
|
||||
// Schedule a task to prepare auto siege end
|
||||
_siegeEndDate = Calendar.getInstance();
|
||||
_siegeEndDate.add(Calendar.MINUTE, SiegeManager.getInstance().getSiegeLength());
|
||||
ThreadPool.schedule(new ScheduleEndSiegeTask(getCastle()), 1000); // Prepare auto end task
|
||||
ThreadPool.schedule(new ScheduleEndSiegeTask(_castle), 1000); // Prepare auto end task
|
||||
|
||||
final SystemMessage sm = new SystemMessage(SystemMessageId.THE_S1_SIEGE_HAS_STARTED);
|
||||
sm.addCastleId(getCastle().getResidenceId());
|
||||
sm.addCastleId(_castle.getResidenceId());
|
||||
Broadcast.toAllOnlinePlayers(sm);
|
||||
Broadcast.toAllOnlinePlayers(new PlaySound("systemmsg_e.17"));
|
||||
|
||||
// Notify to scripts.
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeStart(this), getCastle());
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeStart(this), _castle);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1655,6 +1655,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1665,7 +1672,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8358,16 +8364,16 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerPlayer.getClan()) && siege.checkIsDefender(getClan()))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerPlayer.getClan()) && siege.checkIsAttacker(getClan()))
|
||||
{
|
||||
return false;
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -81,6 +81,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function;
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -397,6 +398,16 @@ public class Castle extends AbstractResidence
|
||||
return _zone;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CastleZone getResidenceZone()
|
||||
{
|
||||
|
@ -252,15 +252,15 @@ public class Siege implements Siegable
|
||||
if (_isInProgress)
|
||||
{
|
||||
SystemMessage sm = new SystemMessage(SystemMessageId.THE_S1_SIEGE_HAS_FINISHED);
|
||||
sm.addCastleId(getCastle().getResidenceId());
|
||||
sm.addCastleId(_castle.getResidenceId());
|
||||
Broadcast.toAllOnlinePlayers(sm);
|
||||
Broadcast.toAllOnlinePlayers(new PlaySound("systemmsg_e.18"));
|
||||
if (getCastle().getOwnerId() > 0)
|
||||
if (_castle.getOwnerId() > 0)
|
||||
{
|
||||
final Clan clan = ClanTable.getInstance().getClan(getCastle().getOwnerId());
|
||||
final Clan clan = ClanTable.getInstance().getClan(_castle.getOwnerId());
|
||||
sm = new SystemMessage(SystemMessageId.CLAN_S1_IS_VICTORIOUS_OVER_S2_S_CASTLE_SIEGE);
|
||||
sm.addString(clan.getName());
|
||||
sm.addCastleId(getCastle().getResidenceId());
|
||||
sm.addCastleId(_castle.getResidenceId());
|
||||
Broadcast.toAllOnlinePlayers(sm);
|
||||
|
||||
if (clan.getId() == _firstOwnerClanId)
|
||||
@ -270,7 +270,7 @@ public class Siege implements Siegable
|
||||
}
|
||||
else
|
||||
{
|
||||
getCastle().setTicketBuyCount(0);
|
||||
_castle.setTicketBuyCount(0);
|
||||
for (ClanMember member : clan.getMembers())
|
||||
{
|
||||
if (member != null)
|
||||
@ -278,7 +278,7 @@ public class Siege implements Siegable
|
||||
final Player player = member.getPlayer();
|
||||
if ((player != null) && player.isNoble())
|
||||
{
|
||||
Hero.getInstance().setCastleTaken(player.getObjectId(), getCastle().getResidenceId());
|
||||
Hero.getInstance().setCastleTaken(player.getObjectId(), _castle.getResidenceId());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -287,7 +287,7 @@ public class Siege implements Siegable
|
||||
else
|
||||
{
|
||||
sm = new SystemMessage(SystemMessageId.THE_SIEGE_OF_S1_HAS_ENDED_IN_A_DRAW);
|
||||
sm.addCastleId(getCastle().getResidenceId());
|
||||
sm.addCastleId(_castle.getResidenceId());
|
||||
Broadcast.toAllOnlinePlayers(sm);
|
||||
}
|
||||
|
||||
@ -315,7 +315,7 @@ public class Siege implements Siegable
|
||||
clan.clearSiegeDeaths();
|
||||
}
|
||||
|
||||
getCastle().updateClansReputation();
|
||||
_castle.updateClansReputation();
|
||||
removeFlags(); // Removes all flags. Note: Remove flag before teleporting players
|
||||
teleportPlayer(SiegeTeleportWhoType.NotOwner, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
_isInProgress = false; // Flag so that siege instance can be started
|
||||
@ -324,17 +324,18 @@ public class Siege implements Siegable
|
||||
clearSiegeClan(); // Clear siege clan from db
|
||||
removeTowers(); // Remove all towers from this castle
|
||||
_siegeGuardManager.unspawnSiegeGuard(); // Remove all spawned siege guard from this castle
|
||||
if (getCastle().getOwnerId() > 0)
|
||||
if (_castle.getOwnerId() > 0)
|
||||
{
|
||||
_siegeGuardManager.removeMercs();
|
||||
}
|
||||
getCastle().spawnDoor(); // Respawn door to castle
|
||||
getCastle().getZone().setActive(false);
|
||||
getCastle().getZone().updateZoneStatusForCharactersInside();
|
||||
getCastle().getZone().setSiegeInstance(null);
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
|
||||
// Notify to scripts.
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeFinish(this), getCastle());
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeFinish(this), _castle);
|
||||
}
|
||||
}
|
||||
|
||||
@ -381,24 +382,23 @@ public class Siege implements Siegable
|
||||
{
|
||||
if (_isInProgress) // Siege still in progress
|
||||
{
|
||||
if (getCastle().getOwnerId() > 0)
|
||||
if (_castle.getOwnerId() > 0)
|
||||
{
|
||||
_siegeGuardManager.removeMercs(); // Remove all merc entry from db
|
||||
}
|
||||
|
||||
if (getDefenderClans().isEmpty() && // If defender doesn't exist (Pc vs Npc)
|
||||
(getAttackerClans().size() == 1 // Only 1 attacker
|
||||
))
|
||||
(getAttackerClans().size() == 1)) // Only 1 attacker
|
||||
{
|
||||
final SiegeClan scNewOwner = getAttackerClan(getCastle().getOwnerId());
|
||||
final SiegeClan scNewOwner = getAttackerClan(_castle.getOwnerId());
|
||||
removeAttacker(scNewOwner);
|
||||
addDefender(scNewOwner, SiegeClanType.OWNER);
|
||||
endSiege();
|
||||
return;
|
||||
}
|
||||
if (getCastle().getOwnerId() > 0)
|
||||
if (_castle.getOwnerId() > 0)
|
||||
{
|
||||
final int allyId = ClanTable.getInstance().getClan(getCastle().getOwnerId()).getAllyId();
|
||||
final int allyId = ClanTable.getInstance().getClan(_castle.getOwnerId()).getAllyId();
|
||||
// If defender doesn't exist (Pc vs Npc) and only an alliance attacks and the player's clan is in an alliance
|
||||
if (getDefenderClans().isEmpty() && (allyId != 0))
|
||||
{
|
||||
@ -412,7 +412,7 @@ public class Siege implements Siegable
|
||||
}
|
||||
if (allinsamealliance)
|
||||
{
|
||||
final SiegeClan scNewOwner = getAttackerClan(getCastle().getOwnerId());
|
||||
final SiegeClan scNewOwner = getAttackerClan(_castle.getOwnerId());
|
||||
removeAttacker(scNewOwner);
|
||||
addDefender(scNewOwner, SiegeClanType.OWNER);
|
||||
endSiege();
|
||||
@ -429,7 +429,7 @@ public class Siege implements Siegable
|
||||
}
|
||||
}
|
||||
|
||||
final SiegeClan scNewOwner = getAttackerClan(getCastle().getOwnerId());
|
||||
final SiegeClan scNewOwner = getAttackerClan(_castle.getOwnerId());
|
||||
removeAttacker(scNewOwner);
|
||||
addDefender(scNewOwner, SiegeClanType.OWNER);
|
||||
|
||||
@ -443,11 +443,12 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
getCastle().removeUpgrade(); // Remove all castle upgrade
|
||||
getCastle().spawnDoor(true); // Respawn door to castle but make them weaker (50% hp)
|
||||
_castle.removeUpgrade(); // Remove all castle upgrade
|
||||
_castle.spawnDoor(true); // Respawn door to castle but make them weaker (50% hp)
|
||||
removeTowers(); // Remove all towers from this castle
|
||||
_controlTowerCount = 0; // Each new siege midvictory CT are completely respawned.
|
||||
spawnControlTower();
|
||||
@ -455,7 +456,7 @@ public class Siege implements Siegable
|
||||
updatePlayerSiegeStateFlags(false);
|
||||
|
||||
// Notify to scripts.
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeOwnerChange(this), getCastle());
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeOwnerChange(this), _castle);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -468,7 +469,7 @@ public class Siege implements Siegable
|
||||
{
|
||||
if (!_isInProgress)
|
||||
{
|
||||
_firstOwnerClanId = getCastle().getOwnerId();
|
||||
_firstOwnerClanId = _castle.getOwnerId();
|
||||
if (getAttackerClans().isEmpty())
|
||||
{
|
||||
SystemMessage sm;
|
||||
@ -482,7 +483,7 @@ public class Siege implements Siegable
|
||||
final Clan ownerClan = ClanTable.getInstance().getClan(_firstOwnerClanId);
|
||||
ownerClan.increaseBloodAllianceCount();
|
||||
}
|
||||
sm.addCastleId(getCastle().getResidenceId());
|
||||
sm.addCastleId(_castle.getResidenceId());
|
||||
Broadcast.toAllOnlinePlayers(sm);
|
||||
saveCastleSiege();
|
||||
return;
|
||||
@ -496,25 +497,25 @@ public class Siege implements Siegable
|
||||
_controlTowerCount = 0;
|
||||
spawnControlTower(); // Spawn control tower
|
||||
spawnFlameTower(); // Spawn control tower
|
||||
getCastle().spawnDoor(); // Spawn door
|
||||
_castle.spawnDoor(); // Spawn door
|
||||
spawnSiegeGuard(); // Spawn siege guard
|
||||
MercTicketManager.getInstance().deleteTickets(getCastle().getResidenceId()); // remove the tickets from the ground
|
||||
getCastle().getZone().setSiegeInstance(this);
|
||||
getCastle().getZone().setActive(true);
|
||||
getCastle().getZone().updateZoneStatusForCharactersInside();
|
||||
MercTicketManager.getInstance().deleteTickets(_castle.getResidenceId()); // remove the tickets from the ground
|
||||
_castle.getZone().setSiegeInstance(this);
|
||||
_castle.getZone().setActive(true);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
|
||||
// Schedule a task to prepare auto siege end
|
||||
_siegeEndDate = Calendar.getInstance();
|
||||
_siegeEndDate.add(Calendar.MINUTE, SiegeManager.getInstance().getSiegeLength());
|
||||
ThreadPool.schedule(new ScheduleEndSiegeTask(getCastle()), 1000); // Prepare auto end task
|
||||
ThreadPool.schedule(new ScheduleEndSiegeTask(_castle), 1000); // Prepare auto end task
|
||||
|
||||
final SystemMessage sm = new SystemMessage(SystemMessageId.THE_S1_SIEGE_HAS_STARTED);
|
||||
sm.addCastleId(getCastle().getResidenceId());
|
||||
sm.addCastleId(_castle.getResidenceId());
|
||||
Broadcast.toAllOnlinePlayers(sm);
|
||||
Broadcast.toAllOnlinePlayers(new PlaySound("systemmsg_e.17"));
|
||||
|
||||
// Notify to scripts.
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeStart(this), getCastle());
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeStart(this), _castle);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1644,6 +1644,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1654,7 +1661,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8168,16 +8174,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,6 +86,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -916,6 +917,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1644,6 +1644,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1654,7 +1661,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8168,16 +8174,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,6 +86,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -916,6 +917,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1642,6 +1642,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1652,7 +1659,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8154,16 +8160,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,6 +86,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -916,6 +917,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1655,6 +1655,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1665,7 +1672,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8181,16 +8187,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,6 +86,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -916,6 +917,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1655,6 +1655,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1665,7 +1672,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8181,16 +8187,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,6 +86,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -916,6 +917,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1675,6 +1675,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1685,7 +1692,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8135,16 +8141,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,6 +86,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -916,6 +917,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1641,6 +1641,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1651,7 +1658,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8146,16 +8152,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,6 +86,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -916,6 +917,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
@ -338,6 +338,7 @@ public class Siege implements Siegable
|
||||
SiegeGuardManager.getInstance().removeSiegeGuards(getCastle());
|
||||
}
|
||||
_castle.spawnDoor(); // Respawn door to castle
|
||||
_castle.setFirstMidVictory(false);
|
||||
_castle.getZone().setActive(false);
|
||||
_castle.getZone().updateZoneStatusForCharactersInside();
|
||||
_castle.getZone().setSiegeInstance(null);
|
||||
@ -452,6 +453,7 @@ public class Siege implements Siegable
|
||||
addDefender(sc, SiegeClanType.DEFENDER);
|
||||
}
|
||||
}
|
||||
_castle.setFirstMidVictory(true);
|
||||
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
|
||||
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
|
||||
removeDefenderFlags(); // Removes defenders' flags
|
||||
|
@ -84,6 +84,13 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriend implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// At this point summon should be prevented from attacking friendly targets.
|
||||
if (creature.isSummon() && (target == creature.getTarget()))
|
||||
{
|
||||
|
@ -84,6 +84,13 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// Arena.
|
||||
if (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE) && target.isInsideZone(ZoneId.PVP) && !target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
@ -125,13 +132,6 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
// Siege.
|
||||
if (target.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
// Players in the same siege side at the same castle are considered friends.
|
||||
return !player.isSiegeFriend(targetPlayer);
|
||||
}
|
||||
|
||||
// By default any flagged/PK player is considered enemy.
|
||||
return (target.getActingPlayer().getPvpFlag() > 0) || (target.getActingPlayer().getReputation() < 0);
|
||||
}
|
||||
|
@ -1732,6 +1732,13 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check first castle mid victory.
|
||||
final Castle castle = CastleManager.getInstance().getCastleById(_siegeSide);
|
||||
if ((castle != null) && !castle.isFirstMidVictory())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If target isn't a player, is self, isn't on same siege or not on same state, not friends.
|
||||
final Player targetPlayer = target.getActingPlayer();
|
||||
if ((targetPlayer == null) || (targetPlayer == this) || (targetPlayer.getSiegeSide() != _siegeSide) || (_siegeState != targetPlayer.getSiegeState()))
|
||||
@ -1742,7 +1749,6 @@ public class Player extends Playable
|
||||
// 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;
|
||||
@ -8287,16 +8293,17 @@ public class Player extends Playable
|
||||
final Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
|
||||
if (siege != null)
|
||||
{
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Defender clan.
|
||||
if (siege.checkIsDefender(attackerClan) && siege.checkIsDefender(clan))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan
|
||||
// Check if a siege is in progress and if attacker and the Player aren't in the Attacker clan.
|
||||
if (siege.checkIsAttacker(attackerClan) && siege.checkIsAttacker(clan))
|
||||
{
|
||||
return false;
|
||||
// If first mid victory is achieved, attackers can attack attackers.
|
||||
return CastleManager.getInstance().getCastleById(_siegeSide).isFirstMidVictory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,6 +86,7 @@ public class Castle extends AbstractResidence
|
||||
private final List<Artefact> _artefacts = new ArrayList<>(1);
|
||||
private final Map<Integer, CastleFunction> _function = new ConcurrentHashMap<>();
|
||||
private int _ticketBuyCount = 0;
|
||||
private boolean _isFirstMidVictory = false;
|
||||
|
||||
/** Castle Functions */
|
||||
public static final int FUNC_TELEPORT = 1;
|
||||
@ -916,6 +917,16 @@ public class Castle extends AbstractResidence
|
||||
return _doors;
|
||||
}
|
||||
|
||||
public boolean isFirstMidVictory()
|
||||
{
|
||||
return _isFirstMidVictory;
|
||||
}
|
||||
|
||||
public void setFirstMidVictory(boolean value)
|
||||
{
|
||||
_isFirstMidVictory = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOwnerId()
|
||||
{
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user