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 _ControlTowers = new FastList();; 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 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 getDefenderClans() { - if (_IsNormalSide) return _Defender_Clans; - return _Attacker_Clans; + return _Defender_Clans; } public final L2SiegeClan getDefenderWaitingClan(L2Clan clan)