Addition of Castle first mid victory methods.

Contributed by nasseka.
This commit is contained in:
MobiusDevelopment
2022-02-09 09:13:32 +00:00
parent a87d2c3e8d
commit 413c709bca
111 changed files with 912 additions and 456 deletions

View File

@@ -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();
}
}

View File

@@ -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()
{

View File

@@ -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