Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/actor/instance/L2SiegeGuardInstance.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/actor/instance/L2SiegeGuardInstance.java (revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/actor/instance/L2SiegeGuardInstance.java (working copy)
@@ -77,13 +77,13 @@
*/
public boolean isAutoAttackable(L2Character attacker)
{
- // Attackable during siege by attacker only
+ // Attackable during siege by all except defenders
return (attacker != null
&& attacker instanceof L2PcInstance
&& getCastle() != null
&& getCastle().getCastleId() > 0
&& getCastle().getSiege().getIsInProgress()
- && getCastle().getSiege().checkIsAttacker(((L2PcInstance)attacker).getClan()));
+ && (!getCastle().getSiege().checkIsDefender(((L2PcInstance)attacker).getClan())) || getCastle().getSiege().checkIsAttacker(((L2PcInstance)attacker).getClan()));
}
/**
Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/entity/Siege.java
===================================================================
--- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/entity/Siege.java (revision 218)
+++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/model/entity/Siege.java (working copy)
@@ -227,7 +227,6 @@
private List<L2ControlTowerInstance> _ControlTowers = new FastList<L2ControlTowerInstance>();;
private int[][] _ControlTowerSpawnList;
private boolean _IsInProgress = false;
- private boolean _IsNormalSide = true; // true = Atk is Atk, false = Atk is Def
protected boolean _IsRegistrationOver = false;
private Calendar _SiegeDate;
protected Calendar _SiegeEndDate;
@@ -292,15 +291,20 @@
}
else if (getDefenderClans().size() > 0) // If defender does exist (Pc vs Pc)
{
- if (_IsNormalSide)
- _IsNormalSide = false; // Atk is now def
- else
- _IsNormalSide = true; // Atk is now atk
+ int ownerId = getCastle().getOwnerId();
+
+ getAttackerClans().addAll(_Defender_Clans);
+ getDefenderClans().clear();
+ getAttackerClans().remove(ownerId);
+ addDefender(ownerId);
- teleportPlayer(Siege.TeleportWhoType.Attacker, MapRegionTable.TeleportWhereType.Town); // Teleport to the second closest town
- teleportPlayer(Siege.TeleportWhoType.Spectator, MapRegionTable.TeleportWhereType.Town); // Teleport to the second closest town
-
- removeFlags(); // Removes all flags
+ //should be teleported to flag ?
+ //teleportPlayer(Siege.TeleportWhoType.Attacker, MapRegionTable.TeleportWhereType.SiegeFlag); // Teleport to the flag
+ //teleportPlayer(Siege.TeleportWhoType.Attacker, MapRegionTable.TeleportWhereType.Town); // Teleport to the second closest town
+
+ //teleportPlayer(Siege.TeleportWhoType.Spectator, MapRegionTable.TeleportWhereType.Town); // Teleport to the second closest town
+ //teleportPlayer(Siege.TeleportWhoType.Defender, MapRegionTable.TeleportWhereType.Castle); // Teleport to the Castle
+
getCastle().removeUpgrade(); // Remove all castle upgrade
getCastle().spawnDoor(true); // Respawn door to castle but make them weaker (50% hp)
}
@@ -323,7 +327,6 @@
return;
}
- _IsNormalSide = true; // Atk is now atk
_IsInProgress = true; // Flag so that same siege instance cannot be started again
loadCastleSiege(); // Load castle specific data
loadSiegeClan(); // Load siege clan from db
@@ -1103,8 +1106,7 @@
public final List<L2SiegeClan> getAttackerClans()
{
- if (_IsNormalSide) return _Attacker_Clans;
- return _Defender_Clans;
+ return _Attacker_Clans;
}
public final int getAttackerRespawnDelay() { return (SiegeManager.getInstance().getAttackerRespawnDelay()); }
@@ -1130,8 +1132,7 @@
public final List<L2SiegeClan> getDefenderClans()
{
- if (_IsNormalSide) return _Defender_Clans;
- return _Attacker_Clans;
+ return _Defender_Clans;
}
public final L2SiegeClan getDefenderWaitingClan(L2Clan clan)