Explorar o código

BETA: Adding abstraction layer to Castle and Fort.
* First parts were moved, more still has to come.
* Reviewed by: Zoey76

xban1x %!s(int64=11) %!d(string=hai) anos
pai
achega
ad0547287e
Modificáronse 49 ficheiros con 473 adicións e 496 borrados
  1. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2FortSiegeGuardAI.java
  2. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/CastleManager.java
  3. 8 8
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/CastleManorManager.java
  4. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/FortManager.java
  5. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/FortSiegeGuardManager.java
  6. 8 8
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/FortSiegeManager.java
  7. 9 9
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/MapRegionManager.java
  8. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/MercTicketManager.java
  9. 4 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/SiegeGuardManager.java
  10. 5 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/SiegeManager.java
  11. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Npc.java
  12. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Tower.java
  13. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2AuctioneerInstance.java
  14. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2CastleMagicianInstance.java
  15. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2DefenderInstance.java
  16. 8 8
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2DoorInstance.java
  17. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2FortCommanderInstance.java
  18. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2FortEnvoyInstance.java
  19. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2FortManagerInstance.java
  20. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2ManorManagerInstance.java
  21. 5 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
  22. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2TerritoryWardInstance.java
  23. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2VillageMasterInstance.java
  24. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/knownlist/DefenderKnownList.java
  25. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanPossessHolything.java
  26. 6 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionSiegeZone.java
  27. 126 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/AbstractResidence.java
  28. 68 106
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Castle.java
  29. 46 106
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Fort.java
  30. 16 16
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/FortSiege.java
  31. 23 23
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Siege.java
  32. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/l2skills/L2SkillSiegeFlag.java
  33. 6 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Formulas.java
  34. 5 54
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2CastleZone.java
  35. 6 41
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2ClanHallZone.java
  36. 3 39
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2FortZone.java
  37. 69 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2ResidenceZone.java
  38. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2SiegeZone.java
  39. 5 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java
  40. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestProcureCropList.java
  41. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/communityserver/writepackets/InitWorldInfo.java
  42. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ExShowCastleInfo.java
  43. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ExShowFortressInfo.java
  44. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ExShowFortressMapInfo.java
  45. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ExShowFortressSiegeInfo.java
  46. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ExShowProcureCropDetail.java
  47. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/SiegeAttackerList.java
  48. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/SiegeDefenderList.java
  49. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/SiegeInfo.java

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2FortSiegeGuardAI.java

@@ -138,7 +138,7 @@ public class L2FortSiegeGuardAI extends L2CharacterAI implements Runnable
 			{
 				player = ((L2Summon) target).getOwner();
 			}
-			if ((player == null) || ((player.getClan() != null) && (player.getClan().getFortId() == ((L2Npc) _actor).getFort().getFortId())))
+			if ((player == null) || ((player.getClan() != null) && (player.getClan().getFortId() == ((L2Npc) _actor).getFort().getResidenceId())))
 			{
 				return false;
 			}

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/CastleManager.java

@@ -92,7 +92,7 @@ public final class CastleManager implements InstanceListManager
 	{
 		for (Castle temp : getCastles())
 		{
-			if (temp.getCastleId() == castleId)
+			if (temp.getResidenceId() == castleId)
 			{
 				return temp;
 			}
@@ -147,7 +147,7 @@ public final class CastleManager implements InstanceListManager
 		for (int i = 0; i < getCastles().size(); i++)
 		{
 			castle = getCastles().get(i);
-			if ((castle != null) && (castle.getCastleId() == castleId))
+			if ((castle != null) && (castle.getResidenceId() == castleId))
 			{
 				return i;
 			}

+ 8 - 8
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/CastleManorManager.java

@@ -114,7 +114,7 @@ public final class CastleManorManager
 				FastList<CropProcure> procureNext = new FastList<>();
 				
 				// restore seed production info
-				statementProduction.setInt(1, castle.getCastleId());
+				statementProduction.setInt(1, castle.getResidenceId());
 				try (ResultSet rs = statementProduction.executeQuery())
 				{
 					statementProduction.clearParameters();
@@ -141,7 +141,7 @@ public final class CastleManorManager
 				
 				// restore procure info
 				
-				statementProcure.setInt(1, castle.getCastleId());
+				statementProcure.setInt(1, castle.getResidenceId());
 				try (ResultSet rs = statementProcure.executeQuery())
 				{
 					statementProcure.clearParameters();
@@ -350,8 +350,8 @@ public final class CastleManorManager
 			
 			if (c.getTreasury() < c.getManorCost(PERIOD_CURRENT))
 			{
-				c.setSeedProduction(getNewSeedsList(c.getCastleId()), PERIOD_NEXT);
-				c.setCropProcure(getNewCropsList(c.getCastleId()), PERIOD_NEXT);
+				c.setSeedProduction(getNewSeedsList(c.getResidenceId()), PERIOD_NEXT);
+				c.setCropProcure(getNewCropsList(c.getResidenceId()), PERIOD_NEXT);
 			}
 			else
 			{
@@ -404,8 +404,8 @@ public final class CastleManorManager
 			{
 				notFunc = true;
 				_log.info("Manor for castle " + c.getName() + " disabled, not enough adena in treasury: " + c.getTreasury() + ", " + c.getManorCost(PERIOD_NEXT) + " required.");
-				c.setSeedProduction(getNewSeedsList(c.getCastleId()), PERIOD_NEXT);
-				c.setCropProcure(getNewCropsList(c.getCastleId()), PERIOD_NEXT);
+				c.setSeedProduction(getNewSeedsList(c.getResidenceId()), PERIOD_NEXT);
+				c.setCropProcure(getNewCropsList(c.getResidenceId()), PERIOD_NEXT);
 			}
 			else
 			{
@@ -430,8 +430,8 @@ public final class CastleManorManager
 				{
 					notFunc = true;
 					_log.info("Manor for castle " + c.getName() + " disabled, not enough free slots in clan warehouse: " + (Config.WAREHOUSE_SLOTS_CLAN - cwh.getSize()) + ", but " + slots + " required.");
-					c.setSeedProduction(getNewSeedsList(c.getCastleId()), PERIOD_NEXT);
-					c.setCropProcure(getNewCropsList(c.getCastleId()), PERIOD_NEXT);
+					c.setSeedProduction(getNewSeedsList(c.getResidenceId()), PERIOD_NEXT);
+					c.setCropProcure(getNewCropsList(c.getResidenceId()), PERIOD_NEXT);
 				}
 			}
 			c.setNextPeriodApproved(true);

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/FortManager.java

@@ -73,7 +73,7 @@ public final class FortManager implements InstanceListManager
 	{
 		for (Fort f : getForts())
 		{
-			if (f.getFortId() == fortId)
+			if (f.getResidenceId() == fortId)
 			{
 				return f;
 			}
@@ -128,7 +128,7 @@ public final class FortManager implements InstanceListManager
 		for (int i = 0; i < getForts().size(); i++)
 		{
 			fort = getForts().get(i);
-			if ((fort != null) && (fort.getFortId() == fortId))
+			if ((fort != null) && (fort.getResidenceId() == fortId))
 			{
 				return i;
 			}

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/FortSiegeGuardManager.java

@@ -54,7 +54,7 @@ public final class FortSiegeGuardManager
 	{
 		try
 		{
-			final FastList<L2Spawn> monsterList = getSiegeGuardSpawn().get(getFort().getFortId());
+			final FastList<L2Spawn> monsterList = getSiegeGuardSpawn().get(getFort().getResidenceId());
 			if (monsterList != null)
 			{
 				for (L2Spawn spawnDat : monsterList)
@@ -84,7 +84,7 @@ public final class FortSiegeGuardManager
 	{
 		try
 		{
-			final FastList<L2Spawn> monsterList = getSiegeGuardSpawn().get(getFort().getFortId());
+			final FastList<L2Spawn> monsterList = getSiegeGuardSpawn().get(getFort().getResidenceId());
 			
 			if (monsterList != null)
 			{
@@ -113,7 +113,7 @@ public final class FortSiegeGuardManager
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("SELECT * FROM fort_siege_guards Where fortId = ? "))
 		{
-			ps.setInt(1, getFort().getFortId());
+			ps.setInt(1, getFort().getResidenceId());
 			try (ResultSet rs = ps.executeQuery())
 			{
 				L2Spawn spawn1;

+ 8 - 8
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/FortSiegeManager.java

@@ -91,7 +91,7 @@ public final class FortSiegeManager
 		final L2PcInstance player = (L2PcInstance) activeChar;
 		final Fort fort = FortManager.getInstance().getFort(player);
 		
-		if ((fort == null) || (fort.getFortId() <= 0))
+		if ((fort == null) || (fort.getResidenceId() <= 0))
 		{
 			text = "You must be on fort ground to summon this";
 		}
@@ -201,7 +201,7 @@ public final class FortSiegeManager
 					int heading = Integer.parseInt(st.nextToken());
 					int npc_id = Integer.parseInt(st.nextToken());
 					
-					_commanderSpawns.add(new FortSiegeSpawn(fort.getFortId(), x, y, z, heading, npc_id, i));
+					_commanderSpawns.add(new FortSiegeSpawn(fort.getResidenceId(), x, y, z, heading, npc_id, i));
 				}
 				catch (Exception e)
 				{
@@ -209,7 +209,7 @@ public final class FortSiegeManager
 				}
 			}
 			
-			_commanderSpawnList.put(fort.getFortId(), _commanderSpawns);
+			_commanderSpawnList.put(fort.getResidenceId(), _commanderSpawns);
 			
 			for (int i = 1; i < 4; i++)
 			{
@@ -227,14 +227,14 @@ public final class FortSiegeManager
 					int z = Integer.parseInt(st.nextToken());
 					int flag_id = Integer.parseInt(st.nextToken());
 					
-					_flagSpawns.add(new CombatFlag(fort.getFortId(), x, y, z, 0, flag_id));
+					_flagSpawns.add(new CombatFlag(fort.getResidenceId(), x, y, z, 0, flag_id));
 				}
 				catch (Exception e)
 				{
 					_log.warning("Error while loading flag(s) for " + fort.getName() + " fort.");
 				}
 			}
-			_flagList.put(fort.getFortId(), _flagSpawns);
+			_flagList.put(fort.getResidenceId(), _flagSpawns);
 		}
 	}
 	
@@ -335,7 +335,7 @@ public final class FortSiegeManager
 		
 		final Fort fort = FortManager.getInstance().getFort(player);
 		
-		final FastList<CombatFlag> fcf = _flagList.get(fort.getFortId());
+		final FastList<CombatFlag> fcf = _flagList.get(fort.getResidenceId());
 		for (CombatFlag cf : fcf)
 		{
 			if (cf.getCombatFlagInstance() == item)
@@ -361,7 +361,7 @@ public final class FortSiegeManager
 		// here check if is siege is attacker
 		final Fort fort = FortManager.getInstance().getFort(player);
 		
-		if ((fort == null) || (fort.getFortId() <= 0))
+		if ((fort == null) || (fort.getResidenceId() <= 0))
 		{
 			player.sendPacket(sm);
 			return false;
@@ -383,7 +383,7 @@ public final class FortSiegeManager
 	{
 		final Fort fort = FortManager.getInstance().getFortById(fortId);
 		
-		final FastList<CombatFlag> fcf = _flagList.get(fort.getFortId());
+		final FastList<CombatFlag> fcf = _flagList.get(fort.getResidenceId());
 		
 		for (CombatFlag cf : fcf)
 		{

+ 9 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/MapRegionManager.java

@@ -289,13 +289,13 @@ public final class MapRegionManager extends DocumentParser
 						}
 					}
 					
-					if ((castle != null) && (castle.getCastleId() > 0))
+					if ((castle != null) && (castle.getResidenceId() > 0))
 					{
 						if (player.getKarma() > 0)
 						{
-							return castle.getCastleZone().getChaoticSpawnLoc();
+							return castle.getResidenceZone().getChaoticSpawnLoc();
 						}
-						return castle.getCastleZone().getSpawnLoc();
+						return castle.getResidenceZone().getSpawnLoc();
 					}
 				}
 				
@@ -314,13 +314,13 @@ public final class MapRegionManager extends DocumentParser
 						}
 					}
 					
-					if ((fort != null) && (fort.getFortId() > 0))
+					if ((fort != null) && (fort.getResidenceId() > 0))
 					{
 						if (player.getKarma() > 0)
 						{
-							return fort.getFortZone().getChaoticSpawnLoc();
+							return fort.getResidenceZone().getChaoticSpawnLoc();
 						}
-						return fort.getFortZone().getSpawnLoc();
+						return fort.getResidenceZone().getSpawnLoc();
 					}
 				}
 				
@@ -379,7 +379,7 @@ public final class MapRegionManager extends DocumentParser
 				castle = CastleManager.getInstance().getCastle(player);
 				if (castle != null)
 				{
-					return castle.getCastleZone().getBanishSpawnLoc();
+					return castle.getResidenceZone().getBanishSpawnLoc();
 				}
 			}
 			else if (teleportWhere == TeleportWhereType.FORTRESS_BANISH)
@@ -387,7 +387,7 @@ public final class MapRegionManager extends DocumentParser
 				fort = FortManager.getInstance().getFort(activeChar);
 				if (fort != null)
 				{
-					return fort.getFortZone().getBanishSpawnLoc();
+					return fort.getResidenceZone().getBanishSpawnLoc();
 				}
 			}
 			else if (teleportWhere == TeleportWhereType.CLANHALL_BANISH)
@@ -430,7 +430,7 @@ public final class MapRegionManager extends DocumentParser
 					// Check if player's clan is participating
 					if ((castle.getSiege().checkIsDefender(player.getClan()) || castle.getSiege().checkIsAttacker(player.getClan())) && (SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_STRIFE) == SevenSigns.CABAL_DAWN))
 					{
-						return castle.getCastleZone().getOtherSpawnLoc();
+						return castle.getResidenceZone().getOtherSpawnLoc();
 					}
 				}
 			}

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/MercTicketManager.java

@@ -173,12 +173,12 @@ public final class MercTicketManager
 				Castle castle = CastleManager.getInstance().getCastle(x, y, z);
 				if (castle != null)
 				{
-					if (mercPlaced[castle.getCastleId() - 1] >= MERCS_MAX_PER_CASTLE[castle.getCastleId() - 1])
+					if (mercPlaced[castle.getResidenceId() - 1] >= MERCS_MAX_PER_CASTLE[castle.getResidenceId() - 1])
 					{
 						continue;
 					}
-					startindex = GUARDIAN_TYPES_COUNT * (castle.getCastleId() - 1);
-					mercPlaced[castle.getCastleId() - 1] += 1;
+					startindex = GUARDIAN_TYPES_COUNT * (castle.getResidenceId() - 1);
+					mercPlaced[castle.getResidenceId() - 1] += 1;
 				}
 				
 				// find the FIRST ticket itemId with spawns the saved NPC in the saved location

+ 4 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/SiegeGuardManager.java

@@ -132,7 +132,7 @@ public final class SiegeGuardManager
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("Delete From castle_siege_guards Where castleId = ? And isHired = 1"))
 		{
-			ps.setInt(1, getCastle().getCastleId());
+			ps.setInt(1, getCastle().getResidenceId());
 			ps.execute();
 		}
 		catch (Exception e)
@@ -148,7 +148,7 @@ public final class SiegeGuardManager
 	{
 		try
 		{
-			int hiredCount = 0, hiredMax = MercTicketManager.getInstance().getMaxAllowedMerc(_castle.getCastleId());
+			int hiredCount = 0, hiredMax = MercTicketManager.getInstance().getMaxAllowedMerc(_castle.getResidenceId());
 			boolean isHired = (getCastle().getOwnerId() > 0) ? true : false;
 			loadSiegeGuard();
 			for (L2Spawn spawn : getSiegeGuardSpawn())
@@ -198,7 +198,7 @@ public final class SiegeGuardManager
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("SELECT * FROM castle_siege_guards Where castleId = ? And isHired = ?"))
 		{
-			ps.setInt(1, getCastle().getCastleId());
+			ps.setInt(1, getCastle().getResidenceId());
 			if (getCastle().getOwnerId() > 0)
 			{
 				ps.setInt(2, 1);
@@ -254,7 +254,7 @@ public final class SiegeGuardManager
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement statement = con.prepareStatement("Insert Into castle_siege_guards (castleId, npcId, x, y, z, heading, respawnDelay, isHired) Values (?, ?, ?, ?, ?, ?, ?, ?)"))
 		{
-			statement.setInt(1, getCastle().getCastleId());
+			statement.setInt(1, getCastle().getResidenceId());
 			statement.setInt(2, npcId);
 			statement.setInt(3, x);
 			statement.setInt(4, y);

+ 5 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/SiegeManager.java

@@ -90,7 +90,7 @@ public final class SiegeManager
 		L2PcInstance player = (L2PcInstance) activeChar;
 		Castle castle = CastleManager.getInstance().getCastle(player);
 		
-		if ((castle == null) || (castle.getCastleId() <= 0))
+		if ((castle == null) || (castle.getResidenceId() <= 0))
 		{
 			text = "You must be on castle ground to summon this";
 		}
@@ -231,13 +231,13 @@ public final class SiegeManager
 					_log.warning(getClass().getSimpleName() + ": Error while loading flame tower(s) for " + castle.getName() + " castle.");
 				}
 			}
-			_controlTowers.put(castle.getCastleId(), controlTowers);
-			_flameTowers.put(castle.getCastleId(), flameTowers);
-			MercTicketManager.MERCS_MAX_PER_CASTLE[castle.getCastleId() - 1] = siegeSettings.getInt(castle.getName() + "MaxMercenaries", MercTicketManager.MERCS_MAX_PER_CASTLE[castle.getCastleId() - 1]);
+			_controlTowers.put(castle.getResidenceId(), controlTowers);
+			_flameTowers.put(castle.getResidenceId(), flameTowers);
+			MercTicketManager.MERCS_MAX_PER_CASTLE[castle.getResidenceId() - 1] = siegeSettings.getInt(castle.getName() + "MaxMercenaries", MercTicketManager.MERCS_MAX_PER_CASTLE[castle.getResidenceId() - 1]);
 			
 			if (castle.getOwnerId() != 0)
 			{
-				loadTrapUpgrade(castle.getCastleId());
+				loadTrapUpgrade(castle.getResidenceId());
 			}
 		}
 	}

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Npc.java

@@ -844,8 +844,8 @@ public class L2Npc extends L2Character
 	{
 		if (player.isClanLeader())
 		{
-			final int castleId = getCastle() != null ? getCastle().getCastleId() : -1;
-			final int fortId = getFort() != null ? getFort().getFortId() : -1;
+			final int castleId = getCastle() != null ? getCastle().getResidenceId() : -1;
+			final int fortId = getFort() != null ? getFort().getResidenceId() : -1;
 			return (player.getClan().getCastleId() == castleId) || (player.getClan().getFortId() == fortId);
 		}
 		return false;
@@ -884,7 +884,7 @@ public class L2Npc extends L2Character
 			Fort fort = FortManager.getInstance().getFort(getX(), getY(), getZ());
 			if (fort != null)
 			{
-				_fortIndex = FortManager.getInstance().getFortIndex(fort.getFortId());
+				_fortIndex = FortManager.getInstance().getFortIndex(fort.getResidenceId());
 			}
 			
 			if (_fortIndex < 0)

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Tower.java

@@ -40,14 +40,14 @@ public abstract class L2Tower extends L2Npc
 	public boolean isAttackable()
 	{
 		// Attackable during siege by attacker only
-		return ((getCastle() != null) && (getCastle().getCastleId() > 0) && getCastle().getSiege().getIsInProgress());
+		return ((getCastle() != null) && (getCastle().getResidenceId() > 0) && getCastle().getSiege().getIsInProgress());
 	}
 	
 	@Override
 	public boolean isAutoAttackable(L2Character attacker)
 	{
 		// Attackable during siege by attacker only
-		return ((attacker != null) && attacker.isPlayer() && (getCastle() != null) && (getCastle().getCastleId() > 0) && getCastle().getSiege().getIsInProgress() && getCastle().getSiege().checkIsAttacker(((L2PcInstance) attacker).getClan()));
+		return ((attacker != null) && attacker.isPlayer() && (getCastle() != null) && (getCastle().getResidenceId() > 0) && getCastle().getSiege().getIsInProgress() && getCastle().getSiege().checkIsAttacker(((L2PcInstance) attacker).getClan()));
 	}
 	
 	@Override

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2AuctioneerInstance.java

@@ -678,7 +678,7 @@ public final class L2AuctioneerInstance extends L2Npc
 	
 	private int validateCondition(L2PcInstance player)
 	{
-		if ((getCastle() != null) && (getCastle().getCastleId() > 0))
+		if ((getCastle() != null) && (getCastle().getResidenceId() > 0))
 		{
 			if (getCastle().getSiege().getIsInProgress())
 			{

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2CastleMagicianInstance.java

@@ -403,7 +403,7 @@ public class L2CastleMagicianInstance extends L2NpcInstance implements L2SquadTr
 		{
 			return COND_OWNER;
 		}
-		if ((getCastle() != null) && (getCastle().getCastleId() > 0))
+		if ((getCastle() != null) && (getCastle().getResidenceId() > 0))
 		{
 			if (player.getClan() != null)
 			{

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2DefenderInstance.java

@@ -109,7 +109,7 @@ public class L2DefenderInstance extends L2Attackable
 		// Check if siege is in progress
 		if (((_fort != null) && _fort.getZone().isActive()) || ((_castle != null) && _castle.getZone().isActive()) || ((_hall != null) && _hall.getSiegeZone().isActive()))
 		{
-			int activeSiegeId = (_fort != null ? _fort.getFortId() : (_castle != null ? _castle.getCastleId() : (_hall != null ? _hall.getId() : 0)));
+			int activeSiegeId = (_fort != null ? _fort.getResidenceId() : (_castle != null ? _castle.getResidenceId() : (_hall != null ? _hall.getId() : 0)));
 			
 			// Check if player is an enemy of this defender npc
 			if ((player != null) && (((player.getSiegeState() == 2) && !player.isRegisteredOnThisSiegeField(activeSiegeId)) || ((player.getSiegeState() == 1) && !TerritoryWarManager.getInstance().isAllyField(player, activeSiegeId)) || (player.getSiegeState() == 0)))
@@ -231,7 +231,7 @@ public class L2DefenderInstance extends L2Attackable
 				// Check if siege is in progress
 				if (((_fort != null) && _fort.getZone().isActive()) || ((_castle != null) && _castle.getZone().isActive()) || ((_hall != null) && _hall.getSiegeZone().isActive()))
 				{
-					int activeSiegeId = (_fort != null ? _fort.getFortId() : (_castle != null ? _castle.getCastleId() : (_hall != null ? _hall.getId() : 0)));
+					int activeSiegeId = (_fort != null ? _fort.getResidenceId() : (_castle != null ? _castle.getResidenceId() : (_hall != null ? _hall.getId() : 0)));
 					if ((player != null) && (((player.getSiegeState() == 2) && player.isRegisteredOnThisSiegeField(activeSiegeId)) || ((player.getSiegeState() == 1) && TerritoryWarManager.getInstance().isAllyField(player, activeSiegeId))))
 					{
 						return;

+ 8 - 8
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2DoorInstance.java

@@ -374,11 +374,11 @@ public class L2DoorInstance extends L2Character
 	
 	public boolean isEnemy()
 	{
-		if ((getCastle() != null) && (getCastle().getCastleId() > 0) && getCastle().getZone().isActive() && getIsShowHp())
+		if ((getCastle() != null) && (getCastle().getResidenceId() > 0) && getCastle().getZone().isActive() && getIsShowHp())
 		{
 			return true;
 		}
-		if ((getFort() != null) && (getFort().getFortId() > 0) && getFort().getZone().isActive() && getIsShowHp())
+		if ((getFort() != null) && (getFort().getResidenceId() > 0) && getFort().getZone().isActive() && getIsShowHp())
 		{
 			return true;
 		}
@@ -419,9 +419,9 @@ public class L2DoorInstance extends L2Character
 			return hall.isInSiege() && hall.getSiege().doorIsAutoAttackable() && hall.getSiege().checkIsAttacker(actingPlayer.getClan());
 		}
 		// Attackable only during siege by everyone (not owner)
-		boolean isCastle = ((getCastle() != null) && (getCastle().getCastleId() > 0) && getCastle().getZone().isActive());
-		boolean isFort = ((getFort() != null) && (getFort().getFortId() > 0) && getFort().getZone().isActive());
-		int activeSiegeId = (getFort() != null ? getFort().getFortId() : (getCastle() != null ? getCastle().getCastleId() : 0));
+		boolean isCastle = ((getCastle() != null) && (getCastle().getResidenceId() > 0) && getCastle().getZone().isActive());
+		boolean isFort = ((getFort() != null) && (getFort().getResidenceId() > 0) && getFort().getZone().isActive());
+		int activeSiegeId = (getFort() != null ? getFort().getResidenceId() : (getCastle() != null ? getCastle().getResidenceId() : 0));
 		
 		if (TerritoryWarManager.getInstance().isTWInProgress())
 		{
@@ -503,7 +503,7 @@ public class L2DoorInstance extends L2Character
 				continue;
 			}
 			
-			if (player.isGM() || (((getCastle() != null) && (getCastle().getCastleId() > 0)) || ((getFort() != null) && (getFort().getFortId() > 0))))
+			if (player.isGM() || (((getCastle() != null) && (getCastle().getResidenceId() > 0)) || ((getFort() != null) && (getFort().getResidenceId() > 0))))
 			{
 				player.sendPacket(targetableSu);
 			}
@@ -698,8 +698,8 @@ public class L2DoorInstance extends L2Character
 			return false;
 		}
 		
-		boolean isFort = ((getFort() != null) && (getFort().getFortId() > 0) && getFort().getSiege().getIsInProgress());
-		boolean isCastle = ((getCastle() != null) && (getCastle().getCastleId() > 0) && getCastle().getSiege().getIsInProgress());
+		boolean isFort = ((getFort() != null) && (getFort().getResidenceId() > 0) && getFort().getSiege().getIsInProgress());
+		boolean isCastle = ((getCastle() != null) && (getCastle().getResidenceId() > 0) && getCastle().getSiege().getIsInProgress());
 		boolean isHall = ((getClanHall() != null) && getClanHall().isSiegableHall() && ((SiegableHall) getClanHall()).isInSiege());
 		
 		if (isFort || isCastle || isHall)

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2FortCommanderInstance.java

@@ -59,7 +59,7 @@ public class L2FortCommanderInstance extends L2DefenderInstance
 			return false;
 		}
 		
-		boolean isFort = ((getFort() != null) && (getFort().getFortId() > 0) && getFort().getSiege().getIsInProgress() && !getFort().getSiege().checkIsDefender(((L2PcInstance) attacker).getClan()));
+		boolean isFort = ((getFort() != null) && (getFort().getResidenceId() > 0) && getFort().getSiege().getIsInProgress() && !getFort().getSiege().checkIsDefender(((L2PcInstance) attacker).getClan()));
 		
 		// Attackable during siege by all except defenders
 		return (isFort);
@@ -124,7 +124,7 @@ public class L2FortCommanderInstance extends L2DefenderInstance
 		L2Spawn spawn = getSpawn();
 		if ((spawn != null) && canTalk())
 		{
-			FastList<FortSiegeSpawn> commanders = FortSiegeManager.getInstance().getCommanderSpawnList(getFort().getFortId());
+			FastList<FortSiegeSpawn> commanders = FortSiegeManager.getInstance().getCommanderSpawnList(getFort().getResidenceId());
 			for (FortSiegeSpawn spawn2 : commanders)
 			{
 				if (spawn2.getId() == spawn.getId())

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2FortEnvoyInstance.java

@@ -40,7 +40,7 @@ public class L2FortEnvoyInstance extends L2Npc
 	{
 		String filePath;
 		final Fort fortress = getFort();
-		if (!player.isClanLeader() || (fortress.getFortId() != player.getClan().getFortId()))
+		if (!player.isClanLeader() || (fortress.getResidenceId() != player.getClan().getFortId()))
 		{
 			filePath = "data/html/fortress/ambassador-not-leader.htm";
 		}
@@ -88,7 +88,7 @@ public class L2FortEnvoyInstance extends L2Npc
 			else
 			{
 				int choice = Util.isDigit(param) ? Integer.parseInt(param) : 0;
-				fortress.setFortState(choice, castle.getCastleId());
+				fortress.setFortState(choice, castle.getResidenceId());
 				filePath = (choice == 1) ? "data/html/fortress/ambassador-independent.htm" : "data/html/fortress/ambassador-signed.htm";
 			}
 			

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2FortManagerInstance.java

@@ -995,7 +995,7 @@ public class L2FortManagerInstance extends L2MerchantInstance
 	
 	protected int validateCondition(L2PcInstance player)
 	{
-		if ((getFort() != null) && (getFort().getFortId() > 0))
+		if ((getFort() != null) && (getFort().getResidenceId() > 0))
 		{
 			if (player.getClan() != null)
 			{

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2ManorManagerInstance.java

@@ -46,7 +46,7 @@ public class L2ManorManagerInstance extends L2MerchantInstance
 			return;
 		}
 		
-		if (!player.canOverrideCond(PcCondOverride.CASTLE_CONDITIONS) && (getCastle() != null) && (getCastle().getCastleId() > 0) && player.isClanLeader() && (getCastle().getOwnerId() == player.getClanId()))
+		if (!player.canOverrideCond(PcCondOverride.CASTLE_CONDITIONS) && (getCastle() != null) && (getCastle().getResidenceId() > 0) && player.isClanLeader() && (getCastle().getOwnerId() == player.getClanId()))
 		{
 			showChatWindow(player, "data/html/manormanager/manager-lord.htm");
 		}

+ 5 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -5514,7 +5514,7 @@ public final class L2PcInstance extends L2Playable
 					Fort fort = FortManager.getInstance().getFort(this);
 					if (fort != null)
 					{
-						FortSiegeManager.getInstance().dropCombatFlag(this, fort.getFortId());
+						FortSiegeManager.getInstance().dropCombatFlag(this, fort.getResidenceId());
 					}
 					else
 					{
@@ -8902,14 +8902,14 @@ public final class L2PcInstance extends L2Playable
 		// skills can be used on Walls and Doors only during siege
 		if (target.isDoor())
 		{
-			if ((((L2DoorInstance) target).getCastle() != null) && (((L2DoorInstance) target).getCastle().getCastleId() > 0)) // If its castle door
+			if ((((L2DoorInstance) target).getCastle() != null) && (((L2DoorInstance) target).getCastle().getResidenceId() > 0)) // If its castle door
 			{
 				if (!((L2DoorInstance) target).getCastle().getSiege().getIsInProgress())
 				{
 					return false;
 				}
 			}
-			else if ((((L2DoorInstance) target).getFort() != null) && (((L2DoorInstance) target).getFort().getFortId() > 0) && !((L2DoorInstance) target).getIsShowHp()) // If its fort door
+			else if ((((L2DoorInstance) target).getFort() != null) && (((L2DoorInstance) target).getFort().getResidenceId() > 0) && !((L2DoorInstance) target).getIsShowHp()) // If its fort door
 			{
 				if (!((L2DoorInstance) target).getFort().getSiege().getIsInProgress())
 				{
@@ -9195,7 +9195,7 @@ public final class L2PcInstance extends L2Playable
 	{
 		SystemMessage sm;
 		
-		if ((fort == null) || (fort.getFortId() <= 0))
+		if ((fort == null) || (fort.getResidenceId() <= 0))
 		{
 			sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
 			sm.addSkillName(skill);
@@ -11564,7 +11564,7 @@ public final class L2PcInstance extends L2Playable
 				Fort fort = FortManager.getInstance().getFort(this);
 				if (fort != null)
 				{
-					FortSiegeManager.getInstance().dropCombatFlag(this, fort.getFortId());
+					FortSiegeManager.getInstance().dropCombatFlag(this, fort.getResidenceId());
 				}
 				else
 				{

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2TerritoryWardInstance.java

@@ -58,7 +58,7 @@ public final class L2TerritoryWardInstance extends L2Attackable
 		{
 			return false;
 		}
-		if (TerritoryWarManager.getInstance().isAllyField(actingPlayer, getCastle().getCastleId()))
+		if (TerritoryWarManager.getInstance().isAllyField(actingPlayer, getCastle().getResidenceId()))
 		{
 			return false;
 		}
@@ -108,7 +108,7 @@ public final class L2TerritoryWardInstance extends L2Attackable
 		{
 			return;
 		}
-		if (TerritoryWarManager.getInstance().isAllyField(actingPlayer, getCastle().getCastleId()))
+		if (TerritoryWarManager.getInstance().isAllyField(actingPlayer, getCastle().getResidenceId()))
 		{
 			return;
 		}

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2VillageMasterInstance.java

@@ -914,7 +914,7 @@ public class L2VillageMasterInstance extends L2NpcInstance
 		
 		for (Castle castle : CastleManager.getInstance().getCastles())
 		{
-			if (SiegeManager.getInstance().checkIsRegistered(clan, castle.getCastleId()))
+			if (SiegeManager.getInstance().checkIsRegistered(clan, castle.getResidenceId()))
 			{
 				player.sendPacket(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_SIEGE);
 				return;
@@ -922,7 +922,7 @@ public class L2VillageMasterInstance extends L2NpcInstance
 		}
 		for (Fort fort : FortManager.getInstance().getForts())
 		{
-			if (FortSiegeManager.getInstance().checkIsRegistered(clan, fort.getFortId()))
+			if (FortSiegeManager.getInstance().checkIsRegistered(clan, fort.getResidenceId()))
 			{
 				player.sendPacket(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_SIEGE);
 				return;

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/knownlist/DefenderKnownList.java

@@ -53,7 +53,7 @@ public class DefenderKnownList extends AttackableKnownList
 			{
 				player = object.getActingPlayer();
 			}
-			int activeSiegeId = (fortress != null ? fortress.getFortId() : (castle != null ? castle.getCastleId() : hall != null ? hall.getId() : 0));
+			int activeSiegeId = (fortress != null ? fortress.getResidenceId() : (castle != null ? castle.getResidenceId() : hall != null ? hall.getId() : 0));
 			
 			// Check if player is an enemy of this defender npc
 			if ((player != null) && (((player.getSiegeState() == 2) && !player.isRegisteredOnThisSiegeField(activeSiegeId)) || ((player.getSiegeState() == 1) && !TerritoryWarManager.getInstance().isAllyField(player, activeSiegeId)) || (player.getSiegeState() == 0)))

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanPossessHolything.java

@@ -53,7 +53,7 @@ public class ConditionPlayerCanPossessHolything extends Condition
 		
 		Castle castle = CastleManager.getInstance().getCastle(env.getPlayer());
 		SystemMessage sm;
-		if ((castle == null) || (castle.getCastleId() <= 0) || !castle.getSiege().getIsInProgress() || (castle.getSiege().getAttackerClan(env.getPlayer().getClan()) == null))
+		if ((castle == null) || (castle.getResidenceId() <= 0) || !castle.getSiege().getIsInProgress() || (castle.getSiege().getAttackerClan(env.getPlayer().getClan()) == null))
 		{
 			sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
 			sm.addSkillName(env.getSkill());

+ 6 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionSiegeZone.java

@@ -100,7 +100,7 @@ public final class ConditionSiegeZone extends Condition
 		
 		L2PcInstance player = (L2PcInstance) activeChar;
 		
-		if (((castle == null) || (castle.getCastleId() <= 0)))
+		if (((castle == null) || (castle.getResidenceId() <= 0)))
 		{
 			if ((value & COND_NOT_ZONE) != 0)
 			{
@@ -114,11 +114,11 @@ public final class ConditionSiegeZone extends Condition
 				return true;
 			}
 		}
-		else if (((value & COND_CAST_ATTACK) != 0) && player.isRegisteredOnThisSiegeField(castle.getCastleId()) && (player.getSiegeState() == 1))
+		else if (((value & COND_CAST_ATTACK) != 0) && player.isRegisteredOnThisSiegeField(castle.getResidenceId()) && (player.getSiegeState() == 1))
 		{
 			return true;
 		}
-		else if (((value & COND_CAST_DEFEND) != 0) && player.isRegisteredOnThisSiegeField(castle.getCastleId()) && (player.getSiegeState() == 2))
+		else if (((value & COND_CAST_DEFEND) != 0) && player.isRegisteredOnThisSiegeField(castle.getResidenceId()) && (player.getSiegeState() == 2))
 		{
 			return true;
 		}
@@ -146,7 +146,7 @@ public final class ConditionSiegeZone extends Condition
 		
 		L2PcInstance player = (L2PcInstance) activeChar;
 		
-		if (((fort == null) || (fort.getFortId() <= 0)))
+		if (((fort == null) || (fort.getResidenceId() <= 0)))
 		{
 			if ((value & COND_NOT_ZONE) != 0)
 			{
@@ -160,11 +160,11 @@ public final class ConditionSiegeZone extends Condition
 				return true;
 			}
 		}
-		else if (((value & COND_FORT_ATTACK) != 0) && player.isRegisteredOnThisSiegeField(fort.getFortId()) && (player.getSiegeState() == 1))
+		else if (((value & COND_FORT_ATTACK) != 0) && player.isRegisteredOnThisSiegeField(fort.getResidenceId()) && (player.getSiegeState() == 1))
 		{
 			return true;
 		}
-		else if (((value & COND_FORT_DEFEND) != 0) && player.isRegisteredOnThisSiegeField(fort.getFortId()) && (player.getSiegeState() == 2))
+		else if (((value & COND_FORT_DEFEND) != 0) && player.isRegisteredOnThisSiegeField(fort.getResidenceId()) && (player.getSiegeState() == 2))
 		{
 			return true;
 		}

+ 126 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/AbstractResidence.java

@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2004-2013 L2J Server
+ * 
+ * This file is part of L2J Server.
+ * 
+ * L2J Server is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J Server is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.model.entity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.l2jserver.gameserver.datatables.SkillTreesData;
+import com.l2jserver.gameserver.model.L2SkillLearn;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
+import com.l2jserver.gameserver.model.interfaces.INamable;
+import com.l2jserver.gameserver.model.zone.type.L2ResidenceZone;
+
+/**
+ * @author xban1x
+ */
+public abstract class AbstractResidence implements INamable
+{
+	private final int _residenceId;
+	private String _name;
+	
+	private L2ResidenceZone _zone = null;
+	private final List<SkillHolder> _residentialSkills = new ArrayList<>();
+	
+	public AbstractResidence(int residenceId)
+	{
+		_residenceId = residenceId;
+		load();
+	}
+	
+	protected abstract void load();
+	
+	protected abstract void initResidenceZone();
+	
+	protected void initResidentialSkills()
+	{
+		final List<L2SkillLearn> residentialSkills = SkillTreesData.getInstance().getAvailableResidentialSkills(getResidenceId());
+		for (L2SkillLearn s : residentialSkills)
+		{
+			_residentialSkills.add(new SkillHolder(s.getSkillId(), s.getSkillLevel()));
+		}
+	}
+	
+	public final int getResidenceId()
+	{
+		return _residenceId;
+	}
+	
+	@Override
+	public final String getName()
+	{
+		return _name;
+	}
+	
+	// TODO: Remove it later when both castles and forts are loaded from same table.
+	public final void setName(String name)
+	{
+		_name = name;
+	}
+	
+	public L2ResidenceZone getResidenceZone()
+	{
+		return _zone;
+	}
+	
+	protected void setResidenceZone(L2ResidenceZone zone)
+	{
+		_zone = zone;
+	}
+	
+	public final List<SkillHolder> getResidentialSkills()
+	{
+		return _residentialSkills;
+	}
+	
+	public void giveResidentialSkills(L2PcInstance player)
+	{
+		if ((_residentialSkills != null) && !_residentialSkills.isEmpty())
+		{
+			for (SkillHolder sh : _residentialSkills)
+			{
+				player.addSkill(sh.getSkill(), false);
+			}
+		}
+	}
+	
+	public void removeResidentialSkills(L2PcInstance player)
+	{
+		if ((_residentialSkills != null) && !_residentialSkills.isEmpty())
+		{
+			for (SkillHolder sh : _residentialSkills)
+			{
+				player.removeSkill(sh.getSkill(), false);
+			}
+		}
+	}
+	
+	@Override
+	public boolean equals(Object obj)
+	{
+		return (obj instanceof AbstractResidence) && (((AbstractResidence) obj).getResidenceId() == getResidenceId());
+	}
+	
+	@Override
+	public String toString()
+	{
+		return getName() + "(" + getResidenceId() + ")";
+	}
+}

+ 68 - 106
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Castle.java

@@ -66,7 +66,7 @@ import com.l2jserver.gameserver.network.serverpackets.PledgeShowInfoUpdate;
 
 import gnu.trove.map.hash.TIntIntHashMap;
 
-public class Castle
+public final class Castle extends AbstractResidence
 {
 	protected static final Logger _log = Logger.getLogger(Castle.class.getName());
 	
@@ -77,9 +77,7 @@ public class Castle
 	private static final String CASTLE_UPDATE_CROP = "UPDATE castle_manor_procure SET can_buy=? WHERE crop_id=? AND castle_id=? AND period=?";
 	private static final String CASTLE_UPDATE_SEED = "UPDATE castle_manor_production SET can_produce=? WHERE seed_id=? AND castle_id=? AND period=?";
 	
-	private int _castleId = 0;
 	private final List<L2DoorInstance> _doors = new ArrayList<>();
-	private String _name = "";
 	private int _ownerId = 0;
 	private Siege _siege = null;
 	private Calendar _siegeDate;
@@ -90,13 +88,11 @@ public class Castle
 	private long _treasury = 0;
 	private boolean _showNpcCrest = false;
 	private L2SiegeZone _zone = null;
-	private L2CastleZone _castleZone = null;
 	private L2ResidenceTeleportZone _teleZone;
 	private L2Clan _formerOwner = null;
 	private final List<L2ArtefactInstance> _artefacts = new ArrayList<>(1);
 	private final TIntIntHashMap _engrave = new TIntIntHashMap(1);
 	private final Map<Integer, CastleFunction> _function;
-	private final List<L2Skill> _residentialSkills = new ArrayList<>();
 	private int _ticketBuyCount = 0;
 	
 	private List<CropProcure> _procure = new ArrayList<>();
@@ -240,7 +236,7 @@ public class Castle
 			try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 				PreparedStatement ps = con.prepareStatement("REPLACE INTO castle_functions (castle_id, type, lvl, lease, rate, endTime) VALUES (?,?,?,?,?,?)"))
 			{
-				ps.setInt(1, getCastleId());
+				ps.setInt(1, getResidenceId());
 				ps.setInt(2, getType());
 				ps.setInt(3, getLvl());
 				ps.setInt(4, getLease());
@@ -257,25 +253,12 @@ public class Castle
 	
 	public Castle(int castleId)
 	{
-		_castleId = castleId;
+		super(castleId);
 		/*
-		 * if (_castleId == 7 || castleId == 9) // Goddard and Schuttgart _nbArtifact = 2;
+		 * if (getResidenceId() == 7 || castleId == 9) // Goddard and Schuttgart _nbArtifact = 2;
 		 */
-		load();
 		_function = new FastMap<>();
-		final List<L2SkillLearn> residentialSkills = SkillTreesData.getInstance().getAvailableResidentialSkills(castleId);
-		for (L2SkillLearn s : residentialSkills)
-		{
-			final L2Skill sk = SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel());
-			if (sk != null)
-			{
-				_residentialSkills.add(sk);
-			}
-			else
-			{
-				_log.warning("Castle Id: " + castleId + " has a null residential skill Id: " + s.getSkillId() + " level: " + s.getSkillLevel() + "!");
-			}
-		}
+		initResidenceZone();
 		if (getOwnerId() != 0)
 		{
 			loadFunctions();
@@ -331,7 +314,7 @@ public class Castle
 			return;
 		}
 		
-		if (_name.equalsIgnoreCase("Schuttgart") || _name.equalsIgnoreCase("Goddard"))
+		if (getName().equalsIgnoreCase("Schuttgart") || getName().equalsIgnoreCase("Goddard"))
 		{
 			Castle rune = CastleManager.getInstance().getCastle("rune");
 			if (rune != null)
@@ -344,7 +327,7 @@ public class Castle
 				amount -= runeTax;
 			}
 		}
-		if (!_name.equalsIgnoreCase("aden") && !_name.equalsIgnoreCase("Rune") && !_name.equalsIgnoreCase("Schuttgart") && !_name.equalsIgnoreCase("Goddard")) // If current castle instance is not Aden, Rune, Goddard or Schuttgart.
+		if (!getName().equalsIgnoreCase("aden") && !getName().equalsIgnoreCase("Rune") && !getName().equalsIgnoreCase("Schuttgart") && !getName().equalsIgnoreCase("Goddard")) // If current castle instance is not Aden, Rune, Goddard or Schuttgart.
 		{
 			Castle aden = CastleManager.getInstance().getCastle("aden");
 			if (aden != null)
@@ -399,7 +382,7 @@ public class Castle
 			PreparedStatement ps = con.prepareStatement("UPDATE castle SET treasury = ? WHERE id = ?"))
 		{
 			ps.setLong(1, getTreasury());
-			ps.setInt(2, getCastleId());
+			ps.setInt(2, getResidenceId());
 			ps.execute();
 		}
 		catch (Exception e)
@@ -414,7 +397,7 @@ public class Castle
 	 */
 	public void banishForeigners()
 	{
-		getCastleZone().banishForeigners(getOwnerId());
+		getResidenceZone().banishForeigners(getOwnerId());
 	}
 	
 	/**
@@ -435,7 +418,7 @@ public class Castle
 		{
 			for (L2SiegeZone zone : ZoneManager.getInstance().getAllZones(L2SiegeZone.class))
 			{
-				if (zone.getSiegeObjectId() == getCastleId())
+				if (zone.getSiegeObjectId() == getResidenceId())
 				{
 					_zone = zone;
 					break;
@@ -445,20 +428,10 @@ public class Castle
 		return _zone;
 	}
 	
-	public L2CastleZone getCastleZone()
+	@Override
+	public L2CastleZone getResidenceZone()
 	{
-		if (_castleZone == null)
-		{
-			for (L2CastleZone zone : ZoneManager.getInstance().getAllZones(L2CastleZone.class))
-			{
-				if (zone.getCastleId() == getCastleId())
-				{
-					_castleZone = zone;
-					break;
-				}
-			}
-		}
-		return _castleZone;
+		return (L2CastleZone) super.getResidenceZone();
 	}
 	
 	public L2ResidenceTeleportZone getTeleZone()
@@ -467,7 +440,7 @@ public class Castle
 		{
 			for (L2ResidenceTeleportZone zone : ZoneManager.getInstance().getAllZones(L2ResidenceTeleportZone.class))
 			{
-				if (zone.getResidenceId() == getCastleId())
+				if (zone.getResidenceId() == getResidenceId())
 				{
 					_teleZone = zone;
 					break;
@@ -549,7 +522,7 @@ public class Castle
 					_formerOwner = oldOwner;
 					if (Config.REMOVE_CASTLE_CIRCLETS)
 					{
-						CastleManager.getInstance().removeCirclet(_formerOwner, getCastleId());
+						CastleManager.getInstance().removeCirclet(_formerOwner, getResidenceId());
 					}
 				}
 				try
@@ -590,7 +563,7 @@ public class Castle
 			getSiege().midVictory(); // Mid victory phase of siege
 		}
 		
-		TerritoryWarManager.getInstance().getTerritory(_castleId).setOwnerClan(clan);
+		TerritoryWarManager.getInstance().getTerritory(getResidenceId()).setOwnerClan(clan);
 		
 		if (clan != null)
 		{
@@ -609,7 +582,7 @@ public class Castle
 			_formerOwner = clan;
 			if (Config.REMOVE_CASTLE_CIRCLETS)
 			{
-				CastleManager.getInstance().removeCirclet(_formerOwner, getCastleId());
+				CastleManager.getInstance().removeCirclet(_formerOwner, getResidenceId());
 			}
 			for (L2PcInstance member : clan.getOnlineMembers(0))
 			{
@@ -642,7 +615,7 @@ public class Castle
 			PreparedStatement ps = con.prepareStatement("UPDATE castle SET taxPercent = ? WHERE id = ?"))
 		{
 			ps.setInt(1, taxPercent);
-			ps.setInt(2, getCastleId());
+			ps.setInt(2, getResidenceId());
 			ps.execute();
 		}
 		catch (Exception e)
@@ -682,18 +655,19 @@ public class Castle
 	}
 	
 	// This method loads castle
-	private void load()
+	@Override
+	protected void load()
 	{
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps1 = con.prepareStatement("SELECT * FROM castle WHERE id = ?");
 			PreparedStatement ps2 = con.prepareStatement("SELECT clan_id FROM clan_data WHERE hasCastle = ?"))
 		{
-			ps1.setInt(1, getCastleId());
+			ps1.setInt(1, getResidenceId());
 			try (ResultSet rs = ps1.executeQuery())
 			{
 				while (rs.next())
 				{
-					_name = rs.getString("name");
+					setName(rs.getString("name"));
 					// _OwnerId = rs.getInt("ownerId");
 					
 					_siegeDate = Calendar.getInstance();
@@ -712,7 +686,7 @@ public class Castle
 			}
 			_taxRate = _taxPercent / 100.0;
 			
-			ps2.setInt(1, getCastleId());
+			ps2.setInt(1, getResidenceId());
 			try (ResultSet rs = ps2.executeQuery())
 			{
 				while (rs.next())
@@ -739,7 +713,7 @@ public class Castle
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("SELECT * FROM castle_functions WHERE castle_id = ?"))
 		{
-			ps.setInt(1, getCastleId());
+			ps.setInt(1, getResidenceId());
 			try (ResultSet rs = ps.executeQuery())
 			{
 				while (rs.next())
@@ -764,7 +738,7 @@ public class Castle
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("DELETE FROM castle_functions WHERE castle_id=? AND type=?"))
 		{
-			ps.setInt(1, getCastleId());
+			ps.setInt(1, getResidenceId());
 			ps.setInt(2, functionType);
 			ps.execute();
 		}
@@ -826,7 +800,7 @@ public class Castle
 	{
 		for (L2DoorInstance door : DoorTable.getInstance().getDoors())
 		{
-			if ((door.getCastle() != null) && (door.getCastle().getCastleId() == getCastleId()))
+			if ((door.getCastle() != null) && (door.getCastle().getResidenceId() == getResidenceId()))
 			{
 				_doors.add(door);
 			}
@@ -839,7 +813,7 @@ public class Castle
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("SELECT * FROM castle_doorupgrade WHERE castleId=?"))
 		{
-			ps.setInt(1, getCastleId());
+			ps.setInt(1, getResidenceId());
 			try (ResultSet rs = ps.executeQuery())
 			{
 				while (rs.next())
@@ -865,7 +839,7 @@ public class Castle
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("DELETE FROM castle_doorupgrade WHERE castleId=?"))
 		{
-			ps.setInt(1, getCastleId());
+			ps.setInt(1, getResidenceId());
 			ps.execute();
 		}
 		catch (Exception e)
@@ -892,7 +866,7 @@ public class Castle
 			{
 				ps.setInt(1, doorId);
 				ps.setInt(2, ratio);
-				ps.setInt(3, getCastleId());
+				ps.setInt(3, getResidenceId());
 				ps.execute();
 			}
 			catch (Exception e)
@@ -919,13 +893,13 @@ public class Castle
 			// Need to remove has castle flag from clan_data, should be checked from castle table.
 			try (PreparedStatement ps = con.prepareStatement("UPDATE clan_data SET hasCastle = 0 WHERE hasCastle = ?"))
 			{
-				ps.setInt(1, getCastleId());
+				ps.setInt(1, getResidenceId());
 				ps.execute();
 			}
 			
 			try (PreparedStatement ps = con.prepareStatement("UPDATE clan_data SET hasCastle = ? WHERE clan_id = ?"))
 			{
-				ps.setInt(1, getCastleId());
+				ps.setInt(1, getResidenceId());
 				ps.setInt(2, getOwnerId());
 				ps.execute();
 			}
@@ -933,7 +907,7 @@ public class Castle
 			// Announce to clan members
 			if (clan != null)
 			{
-				clan.setCastleId(getCastleId()); // Set has castle flag for new owner
+				clan.setCastleId(getResidenceId()); // Set has castle flag for new owner
 				clan.broadcastToOnlineMembers(new PledgeShowInfoUpdate(clan));
 				clan.broadcastToOnlineMembers(new PlaySound(1, "Siege_Victory", 0, 0, 0, 0, 0));
 				ThreadPoolManager.getInstance().scheduleGeneral(new CastleUpdater(clan, 1), 3600000); // Schedule owner tasks to start running
@@ -945,11 +919,6 @@ public class Castle
 		}
 	}
 	
-	public final int getCastleId()
-	{
-		return _castleId;
-	}
-	
 	public final L2DoorInstance getDoor(int doorId)
 	{
 		if (doorId <= 0)
@@ -972,11 +941,6 @@ public class Castle
 		return _doors;
 	}
 	
-	public final String getName()
-	{
-		return _name;
-	}
-	
 	public final int getOwnerId()
 	{
 		return _ownerId;
@@ -1143,7 +1107,7 @@ public class Castle
 		{
 			try (PreparedStatement ps1 = con.prepareStatement(CASTLE_MANOR_DELETE_PRODUCTION))
 			{
-				ps1.setInt(1, getCastleId());
+				ps1.setInt(1, getResidenceId());
 				ps1.execute();
 			}
 			
@@ -1155,7 +1119,7 @@ public class Castle
 				String values[] = new String[_production.size()];
 				for (SeedProduction s : _production)
 				{
-					values[count++] = "(" + getCastleId() + "," + s.getId() + "," + s.getCanProduce() + "," + s.getStartProduce() + "," + s.getPrice() + "," + CastleManorManager.PERIOD_CURRENT + ")";
+					values[count++] = "(" + getResidenceId() + "," + s.getId() + "," + s.getCanProduce() + "," + s.getStartProduce() + "," + s.getPrice() + "," + CastleManorManager.PERIOD_CURRENT + ")";
 				}
 				if (values.length > 0)
 				{
@@ -1179,7 +1143,7 @@ public class Castle
 				String values[] = new String[_productionNext.size()];
 				for (SeedProduction s : _productionNext)
 				{
-					values[count++] = "(" + getCastleId() + "," + s.getId() + "," + s.getCanProduce() + "," + s.getStartProduce() + "," + s.getPrice() + "," + CastleManorManager.PERIOD_NEXT + ")";
+					values[count++] = "(" + getResidenceId() + "," + s.getId() + "," + s.getCanProduce() + "," + s.getStartProduce() + "," + s.getPrice() + "," + CastleManorManager.PERIOD_NEXT + ")";
 				}
 				if (values.length > 0)
 				{
@@ -1207,7 +1171,7 @@ public class Castle
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement(CASTLE_MANOR_DELETE_PRODUCTION_PERIOD))
 		{
-			ps.setInt(1, getCastleId());
+			ps.setInt(1, getResidenceId());
 			ps.setInt(2, period);
 			ps.execute();
 			
@@ -1222,7 +1186,7 @@ public class Castle
 				String values[] = new String[prod.size()];
 				for (SeedProduction s : prod)
 				{
-					values[count++] = "(" + getCastleId() + "," + s.getId() + "," + s.getCanProduce() + "," + s.getStartProduce() + "," + s.getPrice() + "," + period + ")";
+					values[count++] = "(" + getResidenceId() + "," + s.getId() + "," + s.getCanProduce() + "," + s.getStartProduce() + "," + s.getPrice() + "," + period + ")";
 				}
 				if (values.length > 0)
 				{
@@ -1251,7 +1215,7 @@ public class Castle
 		{
 			try (PreparedStatement ps1 = con.prepareStatement(CASTLE_MANOR_DELETE_PROCURE))
 			{
-				ps1.setInt(1, getCastleId());
+				ps1.setInt(1, getResidenceId());
 				ps1.execute();
 			}
 			
@@ -1263,7 +1227,7 @@ public class Castle
 				String values[] = new String[_procure.size()];
 				for (CropProcure cp : _procure)
 				{
-					values[count++] = "(" + getCastleId() + "," + cp.getId() + "," + cp.getAmount() + "," + cp.getStartAmount() + "," + cp.getPrice() + "," + cp.getReward() + "," + CastleManorManager.PERIOD_CURRENT + ")";
+					values[count++] = "(" + getResidenceId() + "," + cp.getId() + "," + cp.getAmount() + "," + cp.getStartAmount() + "," + cp.getPrice() + "," + cp.getReward() + "," + CastleManorManager.PERIOD_CURRENT + ")";
 				}
 				if (values.length > 0)
 				{
@@ -1286,7 +1250,7 @@ public class Castle
 				String values[] = new String[_procureNext.size()];
 				for (CropProcure cp : _procureNext)
 				{
-					values[count++] = "(" + getCastleId() + "," + cp.getId() + "," + cp.getAmount() + "," + cp.getStartAmount() + "," + cp.getPrice() + "," + cp.getReward() + "," + CastleManorManager.PERIOD_NEXT + ")";
+					values[count++] = "(" + getResidenceId() + "," + cp.getId() + "," + cp.getAmount() + "," + cp.getStartAmount() + "," + cp.getPrice() + "," + cp.getReward() + "," + CastleManorManager.PERIOD_NEXT + ")";
 				}
 				if (values.length > 0)
 				{
@@ -1314,7 +1278,7 @@ public class Castle
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement(CASTLE_MANOR_DELETE_PROCURE_PERIOD))
 		{
-			ps.setInt(1, getCastleId());
+			ps.setInt(1, getResidenceId());
 			ps.setInt(2, period);
 			ps.execute();
 			
@@ -1330,7 +1294,7 @@ public class Castle
 				
 				for (CropProcure cp : proc)
 				{
-					values[count++] = "(" + getCastleId() + "," + cp.getId() + "," + cp.getAmount() + "," + cp.getStartAmount() + "," + cp.getPrice() + "," + cp.getReward() + "," + period + ")";
+					values[count++] = "(" + getResidenceId() + "," + cp.getId() + "," + cp.getAmount() + "," + cp.getStartAmount() + "," + cp.getPrice() + "," + cp.getReward() + "," + period + ")";
 				}
 				if (values.length > 0)
 				{
@@ -1360,7 +1324,7 @@ public class Castle
 		{
 			ps.setLong(1, amount);
 			ps.setInt(2, cropId);
-			ps.setInt(3, getCastleId());
+			ps.setInt(3, getResidenceId());
 			ps.setInt(4, period);
 			ps.execute();
 		}
@@ -1377,7 +1341,7 @@ public class Castle
 		{
 			ps.setLong(1, amount);
 			ps.setInt(2, seedId);
-			ps.setInt(3, getCastleId());
+			ps.setInt(3, getResidenceId());
 			ps.setInt(4, period);
 			ps.execute();
 		}
@@ -1432,7 +1396,7 @@ public class Castle
 			PreparedStatement ps = con.prepareStatement("UPDATE castle SET showNpcCrest = ? WHERE id = ?"))
 		{
 			ps.setString(1, String.valueOf(getShowNpcCrest()));
-			ps.setInt(2, getCastleId());
+			ps.setInt(2, getResidenceId());
 			ps.execute();
 		}
 		catch (Exception e)
@@ -1441,19 +1405,11 @@ public class Castle
 		}
 	}
 	
-	public List<L2Skill> getResidentialSkills()
-	{
-		return _residentialSkills;
-	}
-	
+	@Override
 	public void giveResidentialSkills(L2PcInstance player)
 	{
-		for (L2Skill sk : _residentialSkills)
-		{
-			player.addSkill(sk, false);
-		}
-		Territory territory = TerritoryWarManager.getInstance().getTerritory(getCastleId());
-		if ((territory != null) && territory.getOwnedWardIds().contains(getCastleId() + 80))
+		Territory territory = TerritoryWarManager.getInstance().getTerritory(getResidenceId());
+		if ((territory != null) && territory.getOwnedWardIds().contains(getResidenceId() + 80))
 		{
 			for (int wardId : territory.getOwnedWardIds())
 			{
@@ -1472,17 +1428,15 @@ public class Castle
 				}
 			}
 		}
+		super.giveResidentialSkills(player);
 	}
 	
+	@Override
 	public void removeResidentialSkills(L2PcInstance player)
 	{
-		for (L2Skill sk : _residentialSkills)
-		{
-			player.removeSkill(sk, false, true);
-		}
-		if (TerritoryWarManager.getInstance().getTerritory(getCastleId()) != null)
+		if (TerritoryWarManager.getInstance().getTerritory(getResidenceId()) != null)
 		{
-			for (int wardId : TerritoryWarManager.getInstance().getTerritory(getCastleId()).getOwnedWardIds())
+			for (int wardId : TerritoryWarManager.getInstance().getTerritory(getResidenceId()).getOwnedWardIds())
 			{
 				final List<L2SkillLearn> territorySkills = SkillTreesData.getInstance().getAvailableResidentialSkills(wardId);
 				for (L2SkillLearn s : territorySkills)
@@ -1499,6 +1453,7 @@ public class Castle
 				}
 			}
 		}
+		super.removeResidentialSkills(player);
 	}
 	
 	/**
@@ -1549,7 +1504,7 @@ public class Castle
 			PreparedStatement ps = con.prepareStatement("UPDATE castle SET ticketBuyCount = ? WHERE id = ?"))
 		{
 			ps.setInt(1, _ticketBuyCount);
-			ps.setInt(2, _castleId);
+			ps.setInt(2, getResidenceId());
 			ps.execute();
 		}
 		catch (Exception e)
@@ -1560,7 +1515,7 @@ public class Castle
 	
 	public int getTrapUpgradeLevel(int towerIndex)
 	{
-		final TowerSpawn spawn = SiegeManager.getInstance().getFlameTowers(_castleId).get(towerIndex);
+		final TowerSpawn spawn = SiegeManager.getInstance().getFlameTowers(getResidenceId()).get(towerIndex);
 		return (spawn != null) ? spawn.getUpgradeLevel() : 0;
 	}
 	
@@ -1571,7 +1526,7 @@ public class Castle
 			try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 				PreparedStatement ps = con.prepareStatement("REPLACE INTO castle_trapupgrade (castleId, towerIndex, level) values (?,?,?)"))
 			{
-				ps.setInt(1, getCastleId());
+				ps.setInt(1, getResidenceId());
 				ps.setInt(2, towerIndex);
 				ps.setInt(3, level);
 				ps.execute();
@@ -1581,7 +1536,7 @@ public class Castle
 				_log.log(Level.WARNING, "Exception: setTrapUpgradeLevel(int towerIndex, int level, int castleId): " + e.getMessage(), e);
 			}
 		}
-		final TowerSpawn spawn = SiegeManager.getInstance().getFlameTowers(_castleId).get(towerIndex);
+		final TowerSpawn spawn = SiegeManager.getInstance().getFlameTowers(getResidenceId()).get(towerIndex);
 		if (spawn != null)
 		{
 			spawn.setUpgradeLevel(level);
@@ -1590,7 +1545,7 @@ public class Castle
 	
 	private void removeTrapUpgrade()
 	{
-		for (TowerSpawn ts : SiegeManager.getInstance().getFlameTowers(_castleId))
+		for (TowerSpawn ts : SiegeManager.getInstance().getFlameTowers(getResidenceId()))
 		{
 			ts.setUpgradeLevel(0);
 		}
@@ -1598,7 +1553,7 @@ public class Castle
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("DELETE FROM castle_trapupgrade WHERE castleId=?"))
 		{
-			ps.setInt(1, getCastleId());
+			ps.setInt(1, getResidenceId());
 			ps.execute();
 		}
 		catch (Exception e)
@@ -1608,8 +1563,15 @@ public class Castle
 	}
 	
 	@Override
-	public String toString()
+	protected void initResidenceZone()
 	{
-		return _name + "(" + _castleId + ")";
+		for (L2CastleZone zone : ZoneManager.getInstance().getAllZones(L2CastleZone.class))
+		{
+			if (zone.getResidenceId() == getResidenceId())
+			{
+				setResidenceZone(zone);
+				break;
+			}
+		}
 	}
 }

+ 46 - 106
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Fort.java

@@ -42,8 +42,6 @@ import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.datatables.ClanTable;
 import com.l2jserver.gameserver.datatables.DoorTable;
 import com.l2jserver.gameserver.datatables.NpcTable;
-import com.l2jserver.gameserver.datatables.SkillTable;
-import com.l2jserver.gameserver.datatables.SkillTreesData;
 import com.l2jserver.gameserver.datatables.SpawnTable;
 import com.l2jserver.gameserver.datatables.StaticObjects;
 import com.l2jserver.gameserver.enums.MountType;
@@ -52,7 +50,6 @@ import com.l2jserver.gameserver.instancemanager.FortManager;
 import com.l2jserver.gameserver.instancemanager.ZoneManager;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.L2SkillLearn;
 import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
@@ -61,7 +58,6 @@ import com.l2jserver.gameserver.model.actor.instance.L2StaticObjectInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
-import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.zone.type.L2FortZone;
 import com.l2jserver.gameserver.model.zone.type.L2SiegeZone;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -71,18 +67,15 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
 import gnu.trove.map.hash.TIntIntHashMap;
 
-public class Fort
+public final class Fort extends AbstractResidence
 {
 	protected static final Logger _log = Logger.getLogger(Fort.class.getName());
 	
-	private int _fortId = 0;
 	private final List<L2DoorInstance> _doors = new ArrayList<>();
 	private L2StaticObjectInstance _flagPole = null;
-	private String _name = "";
 	private FortSiege _siege = null;
 	private Calendar _siegeDate;
 	private Calendar _lastOwnedTime;
-	private L2FortZone _fortZone;
 	private L2SiegeZone _zone;
 	private L2Clan _fortOwner = null;
 	private int _fortType = 0;
@@ -90,7 +83,6 @@ public class Fort
 	private int _castleId = 0;
 	private int _supplyLvL = 0;
 	private final FastMap<Integer, FortFunction> _function;
-	private final FastList<L2Skill> _residentialSkills = new FastList<>();
 	private final ScheduledFuture<?>[] _FortUpdater = new ScheduledFuture<?>[2];
 	
 	// Spawn Data
@@ -236,7 +228,7 @@ public class Fort
 			try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 				PreparedStatement ps = con.prepareStatement("REPLACE INTO fort_functions (fort_id, type, lvl, lease, rate, endTime) VALUES (?,?,?,?,?,?)"))
 			{
-				ps.setInt(1, getFortId());
+				ps.setInt(1, getResidenceId());
 				ps.setInt(2, getType());
 				ps.setInt(3, getLvl());
 				ps.setInt(4, getLease());
@@ -253,28 +245,15 @@ public class Fort
 	
 	public Fort(int fortId)
 	{
-		_fortId = fortId;
-		load();
+		super(fortId);
 		loadFlagPoles();
 		_function = new FastMap<>();
-		final List<L2SkillLearn> residentialSkills = SkillTreesData.getInstance().getAvailableResidentialSkills(fortId);
-		for (L2SkillLearn s : residentialSkills)
-		{
-			L2Skill sk = SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel());
-			if (sk != null)
-			{
-				_residentialSkills.add(sk);
-			}
-			else
-			{
-				_log.warning("Fort Id: " + fortId + " has a null residential skill Id: " + s.getSkillId() + " level: " + s.getSkillLevel() + "!");
-			}
-		}
 		if (getOwnerClan() != null)
 		{
 			setVisibleFlag(true);
 			loadFunctions();
 		}
+		initResidenceZone();
 		initNpcs(); // load and spawn npcs (Always spawned)
 		initSiegeNpcs(); // load suspicious merchants (Despawned 10mins before siege)
 		// spawnSuspiciousMerchant();// spawn suspicious merchants
@@ -346,7 +325,7 @@ public class Fort
 	 */
 	public void banishForeigners()
 	{
-		getFortZone().banishForeigners(getOwnerClan().getId());
+		getResidenceZone().banishForeigners(getOwnerClan().getId());
 	}
 	
 	/**
@@ -366,7 +345,7 @@ public class Fort
 		{
 			for (L2SiegeZone zone : ZoneManager.getInstance().getAllZones(L2SiegeZone.class))
 			{
-				if (zone.getSiegeObjectId() == getFortId())
+				if (zone.getSiegeObjectId() == getResidenceId())
 				{
 					_zone = zone;
 					break;
@@ -376,20 +355,10 @@ public class Fort
 		return _zone;
 	}
 	
-	public L2FortZone getFortZone()
+	@Override
+	public L2FortZone getResidenceZone()
 	{
-		if (_fortZone == null)
-		{
-			for (L2FortZone zone : ZoneManager.getInstance().getAllZones(L2FortZone.class))
-			{
-				if (zone.getFortId() == getFortId())
-				{
-					_fortZone = zone;
-					break;
-				}
-			}
-		}
-		return _fortZone;
+		return (L2FortZone) super.getResidenceZone();
 	}
 	
 	/**
@@ -566,7 +535,7 @@ public class Fort
 			PreparedStatement ps = con.prepareStatement("UPDATE fort SET supplyLvL=? WHERE id = ?"))
 		{
 			ps.setInt(1, _supplyLvL);
-			ps.setInt(2, getFortId());
+			ps.setInt(2, getResidenceId());
 			ps.execute();
 		}
 		catch (Exception e)
@@ -626,18 +595,19 @@ public class Fort
 	}
 	
 	// This method loads fort
-	private void load()
+	@Override
+	protected void load()
 	{
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("SELECT * FROM fort WHERE id = ?"))
 		{
-			ps.setInt(1, getFortId());
+			ps.setInt(1, getResidenceId());
 			int ownerId = 0;
 			try (ResultSet rs = ps.executeQuery())
 			{
 				while (rs.next())
 				{
-					_name = rs.getString("name");
+					setName(rs.getString("name"));
 					
 					_siegeDate = Calendar.getInstance();
 					_lastOwnedTime = Calendar.getInstance();
@@ -653,7 +623,7 @@ public class Fort
 			if (ownerId > 0)
 			{
 				L2Clan clan = ClanTable.getInstance().getClan(ownerId); // Try to find clan instance
-				clan.setFortId(getFortId());
+				clan.setFortId(getResidenceId());
 				setOwnerClan(clan);
 				int runCount = getOwnedTime() / (Config.FS_UPDATE_FRQ * 60);
 				long initial = System.currentTimeMillis() - _lastOwnedTime.getTimeInMillis();
@@ -693,7 +663,7 @@ public class Fort
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("SELECT * FROM fort_functions WHERE fort_id = ?"))
 		{
-			ps.setInt(1, getFortId());
+			ps.setInt(1, getResidenceId());
 			try (ResultSet rs = ps.executeQuery())
 			{
 				while (rs.next())
@@ -718,7 +688,7 @@ public class Fort
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("DELETE FROM fort_functions WHERE fort_id=? AND type=?"))
 		{
-			ps.setInt(1, getFortId());
+			ps.setInt(1, getResidenceId());
 			ps.setInt(2, functionType);
 			ps.execute();
 		}
@@ -791,7 +761,7 @@ public class Fort
 	{
 		for (L2DoorInstance door : DoorTable.getInstance().getDoors())
 		{
-			if ((door.getFort() != null) && (door.getFort().getFortId() == getFortId()))
+			if ((door.getFort() != null) && (door.getFort().getResidenceId() == getResidenceId()))
 			{
 				_doors.add(door);
 			}
@@ -802,7 +772,7 @@ public class Fort
 	{
 		for (L2StaticObjectInstance obj : StaticObjects.getInstance().getStaticObjects())
 		{
-			if ((obj.getType() == 3) && obj.getName().startsWith(_name))
+			if ((obj.getType() == 3) && obj.getName().startsWith(getName()))
 			{
 				_flagPole = obj;
 				break;
@@ -820,7 +790,7 @@ public class Fort
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("SELECT * FROM fort_doorupgrade WHERE fortId = ?"))
 		{
-			ps.setInt(1, getFortId());
+			ps.setInt(1, getResidenceId());
 			try (ResultSet rs = ps.executeQuery())
 			{
 				while (rs.next())
@@ -840,7 +810,7 @@ public class Fort
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("DELETE FROM fort_doorupgrade WHERE WHERE fortId = ?"))
 		{
-			ps.setInt(1, getFortId());
+			ps.setInt(1, getResidenceId());
 			ps.execute();
 		}
 		catch (Exception e)
@@ -887,17 +857,17 @@ public class Fort
 			ps.setLong(2, _lastOwnedTime.getTimeInMillis());
 			ps.setInt(3, 0);
 			ps.setInt(4, 0);
-			ps.setInt(5, getFortId());
+			ps.setInt(5, getResidenceId());
 			ps.execute();
 			
 			// Announce to clan members
 			if (clan != null)
 			{
-				clan.setFortId(getFortId()); // Set has fort flag for new owner
+				clan.setFortId(getResidenceId()); // Set has fort flag for new owner
 				SystemMessage sm;
 				sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CLAN_IS_VICTORIOUS_IN_THE_FORTRESS_BATTLE_OF_S2);
 				sm.addString(clan.getName());
-				sm.addCastleId(getFortId());
+				sm.addCastleId(getResidenceId());
 				L2World.getInstance().forEachPlayer(new ForEachPlayerSendMessage(sm));
 				clan.broadcastToOnlineMembers(new PledgeShowInfoUpdate(clan));
 				clan.broadcastToOnlineMembers(new PlaySound(1, "Siege_Victory", 0, 0, 0, 0, 0));
@@ -935,11 +905,6 @@ public class Fort
 		}
 	}
 	
-	public final int getFortId()
-	{
-		return _fortId;
-	}
-	
 	public final L2Clan getOwnerClan()
 	{
 		return _fortOwner;
@@ -1026,11 +991,6 @@ public class Fort
 		return _FortUpdater[0].getDelay(TimeUnit.SECONDS);
 	}
 	
-	public final String getName()
-	{
-		return _name;
-	}
-	
 	public void updateClansReputation(L2Clan owner, boolean removePoints)
 	{
 		if (owner != null)
@@ -1101,7 +1061,7 @@ public class Fort
 		{
 			ps.setInt(1, getFortState());
 			ps.setInt(2, getContractedCastleId());
-			ps.setInt(3, getFortId());
+			ps.setInt(3, getResidenceId());
 			ps.execute();
 		}
 		catch (Exception e)
@@ -1240,7 +1200,7 @@ public class Fort
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("SELECT * FROM fort_spawnlist WHERE fortId = ? AND spawnType = ?"))
 		{
-			ps.setInt(1, getFortId());
+			ps.setInt(1, getResidenceId());
 			ps.setInt(2, 0);
 			try (ResultSet rs = ps.executeQuery())
 			{
@@ -1264,14 +1224,14 @@ public class Fort
 					}
 					else
 					{
-						_log.warning("Fort " + getFortId() + " initNpcs: Data missing in NPC table for ID: " + rs.getInt("npcId") + ".");
+						_log.warning("Fort " + getResidenceId() + " initNpcs: Data missing in NPC table for ID: " + rs.getInt("npcId") + ".");
 					}
 				}
 			}
 		}
 		catch (Exception e)
 		{
-			_log.log(Level.WARNING, "Fort " + getFortId() + " initNpcs: Spawn could not be initialized: " + e.getMessage(), e);
+			_log.log(Level.WARNING, "Fort " + getResidenceId() + " initNpcs: Spawn could not be initialized: " + e.getMessage(), e);
 		}
 	}
 	
@@ -1281,7 +1241,7 @@ public class Fort
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("SELECT id, npcId, x, y, z, heading FROM fort_spawnlist WHERE fortId = ? AND spawnType = ? ORDER BY id"))
 		{
-			ps.setInt(1, getFortId());
+			ps.setInt(1, getResidenceId());
 			ps.setInt(2, 2);
 			try (ResultSet rs = ps.executeQuery())
 			{
@@ -1303,14 +1263,14 @@ public class Fort
 					}
 					else
 					{
-						_log.warning("Fort " + getFortId() + " initSiegeNpcs: Data missing in NPC table for ID: " + rs.getInt("npcId") + ".");
+						_log.warning("Fort " + getResidenceId() + " initSiegeNpcs: Data missing in NPC table for ID: " + rs.getInt("npcId") + ".");
 					}
 				}
 			}
 		}
 		catch (Exception e)
 		{
-			_log.log(Level.WARNING, "Fort " + getFortId() + " initSiegeNpcs: Spawn could not be initialized: " + e.getMessage(), e);
+			_log.log(Level.WARNING, "Fort " + getResidenceId() + " initSiegeNpcs: Spawn could not be initialized: " + e.getMessage(), e);
 		}
 	}
 	
@@ -1320,7 +1280,7 @@ public class Fort
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("SELECT id, npcId, x, y, z, heading FROM fort_spawnlist WHERE fortId = ? AND spawnType = ? ORDER BY id"))
 		{
-			ps.setInt(1, getFortId());
+			ps.setInt(1, getResidenceId());
 			ps.setInt(2, 1);
 			try (ResultSet rs = ps.executeQuery())
 			{
@@ -1342,7 +1302,7 @@ public class Fort
 					}
 					else
 					{
-						_log.warning("Fort " + getFortId() + " initNpcCommanders: Data missing in NPC table for ID: " + rs.getInt("npcId") + ".");
+						_log.warning("Fort " + getResidenceId() + " initNpcCommanders: Data missing in NPC table for ID: " + rs.getInt("npcId") + ".");
 					}
 				}
 			}
@@ -1350,7 +1310,7 @@ public class Fort
 		catch (Exception e)
 		{
 			// problem with initializing spawn, go to next one
-			_log.log(Level.WARNING, "Fort " + getFortId() + " initNpcCommanders: Spawn could not be initialized: " + e.getMessage(), e);
+			_log.log(Level.WARNING, "Fort " + getResidenceId() + " initNpcCommanders: Spawn could not be initialized: " + e.getMessage(), e);
 		}
 	}
 	
@@ -1362,7 +1322,7 @@ public class Fort
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("SELECT id, npcId, x, y, z, heading, castleId FROM fort_spawnlist WHERE fortId = ? AND spawnType = ? ORDER BY id"))
 		{
-			ps.setInt(1, getFortId());
+			ps.setInt(1, getResidenceId());
 			ps.setInt(2, 3);
 			try (ResultSet rs = ps.executeQuery())
 			{
@@ -1388,7 +1348,7 @@ public class Fort
 					}
 					else
 					{
-						_log.warning("Fort " + getFortId() + " initSpecialEnvoys: Data missing in NPC table for ID: " + rs.getInt("npcId") + ".");
+						_log.warning("Fort " + getResidenceId() + " initSpecialEnvoys: Data missing in NPC table for ID: " + rs.getInt("npcId") + ".");
 					}
 				}
 			}
@@ -1396,34 +1356,7 @@ public class Fort
 		catch (Exception e)
 		{
 			// problem with initializing spawn, go to next one
-			_log.log(Level.WARNING, "Fort " + getFortId() + " initSpecialEnvoys: Spawn could not be initialized: " + e.getMessage(), e);
-		}
-	}
-	
-	public FastList<L2Skill> getResidentialSkills()
-	{
-		return _residentialSkills;
-	}
-	
-	public void giveResidentialSkills(L2PcInstance player)
-	{
-		if ((_residentialSkills != null) && !_residentialSkills.isEmpty())
-		{
-			for (L2Skill sk : _residentialSkills)
-			{
-				player.addSkill(sk, false);
-			}
-		}
-	}
-	
-	public void removeResidentialSkills(L2PcInstance player)
-	{
-		if ((_residentialSkills != null) && !_residentialSkills.isEmpty())
-		{
-			for (L2Skill sk : _residentialSkills)
-			{
-				player.removeSkill(sk, false, true);
-			}
+			_log.log(Level.WARNING, "Fort " + getResidenceId() + " initSpecialEnvoys: Spawn could not be initialized: " + e.getMessage(), e);
 		}
 	}
 	
@@ -1445,8 +1378,15 @@ public class Fort
 	}
 	
 	@Override
-	public String toString()
+	protected void initResidenceZone()
 	{
-		return _name + "(" + _fortId + ")";
+		for (L2FortZone zone : ZoneManager.getInstance().getAllZones(L2FortZone.class))
+		{
+			if (zone.getResidenceId() == getResidenceId())
+			{
+				setResidenceZone(zone);
+				break;
+			}
+		}
 	}
 }

+ 16 - 16
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/FortSiege.java

@@ -259,7 +259,7 @@ public class FortSiege implements Siegable
 		{
 			_isInProgress = false; // Flag so that siege instance can be started
 			final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_FORTRESS_BATTLE_OF_S1_HAS_FINISHED);
-			sm.addCastleId(getFort().getFortId());
+			sm.addCastleId(getFort().getResidenceId());
 			announceToPlayer(sm);
 			
 			removeFlags(); // Removes all flags. Note: Remove flag before teleporting players
@@ -353,7 +353,7 @@ public class FortSiege implements Siegable
 			_siegeEnd = ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleEndSiegeTask(), FortSiegeManager.getInstance().getSiegeLength() * 60 * 1000L); // Prepare auto end task
 			
 			final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_FORTRESS_BATTLE_S1_HAS_BEGUN);
-			sm.addCastleId(getFort().getFortId());
+			sm.addCastleId(getFort().getResidenceId());
 			announceToPlayer(sm);
 			saveFortSiege();
 			
@@ -423,7 +423,7 @@ public class FortSiege implements Siegable
 				else
 				{
 					member.setSiegeState((byte) 1);
-					member.setSiegeSide(getFort().getFortId());
+					member.setSiegeSide(getFort().getResidenceId());
 					if (checkIfInZone(member))
 					{
 						member.setIsInSiege(true);
@@ -453,7 +453,7 @@ public class FortSiege implements Siegable
 				else
 				{
 					member.setSiegeState((byte) 2);
-					member.setSiegeSide(getFort().getFortId());
+					member.setSiegeSide(getFort().getResidenceId());
 					if (checkIfInZone(member))
 					{
 						member.setIsInSiege(true);
@@ -516,7 +516,7 @@ public class FortSiege implements Siegable
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("DELETE FROM fortsiege_clans WHERE fort_id=?"))
 		{
-			ps.setInt(1, getFort().getFortId());
+			ps.setInt(1, getFort().getResidenceId());
 			ps.execute();
 			
 			if (getFort().getOwnerClan() != null)
@@ -632,7 +632,7 @@ public class FortSiege implements Siegable
 			L2Spawn spawn = instance.getSpawn();
 			if (spawn != null)
 			{
-				FastList<FortSiegeSpawn> commanders = FortSiegeManager.getInstance().getCommanderSpawnList(getFort().getFortId());
+				FastList<FortSiegeSpawn> commanders = FortSiegeManager.getInstance().getCommanderSpawnList(getFort().getResidenceId());
 				for (FortSiegeSpawn spawn2 : commanders)
 				{
 					if (spawn2.getId() == spawn.getId())
@@ -663,7 +663,7 @@ public class FortSiege implements Siegable
 				if (_commanders.isEmpty())
 				{
 					// spawn fort flags
-					spawnFlag(getFort().getFortId());
+					spawnFlag(getFort().getResidenceId());
 					// cancel door/commanders respawn
 					if (_siegeRestore != null)
 					{
@@ -695,7 +695,7 @@ public class FortSiege implements Siegable
 			}
 			else
 			{
-				_log.warning("FortSiege.killedCommander(): killed commander, but commander not registered for fortress. NpcId: " + instance.getId() + " FortId: " + getFort().getFortId());
+				_log.warning("FortSiege.killedCommander(): killed commander, but commander not registered for fortress. NpcId: " + instance.getId() + " FortId: " + getFort().getResidenceId());
 			}
 		}
 	}
@@ -763,7 +763,7 @@ public class FortSiege implements Siegable
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement statement = con.prepareStatement(query))
 		{
-			statement.setInt(1, getFort().getFortId());
+			statement.setInt(1, getFort().getResidenceId());
 			if (clanId != 0)
 			{
 				statement.setInt(2, clanId);
@@ -802,7 +802,7 @@ public class FortSiege implements Siegable
 	 */
 	public void removeSiegeClan(L2Clan clan)
 	{
-		if ((clan == null) || (clan.getFortId() == getFort().getFortId()) || !FortSiegeManager.getInstance().checkIsRegistered(clan, getFort().getFortId()))
+		if ((clan == null) || (clan.getFortId() == getFort().getResidenceId()) || !FortSiegeManager.getInstance().checkIsRegistered(clan, getFort().getResidenceId()))
 		{
 			return;
 		}
@@ -1047,7 +1047,7 @@ public class FortSiege implements Siegable
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps = con.prepareStatement("SELECT clan_id FROM fortsiege_clans WHERE fort_id=?"))
 		{
-			ps.setInt(1, getFort().getFortId());
+			ps.setInt(1, getFort().getResidenceId());
 			try (ResultSet rs = ps.executeQuery())
 			{
 				while (rs.next())
@@ -1109,7 +1109,7 @@ public class FortSiege implements Siegable
 			PreparedStatement ps = con.prepareStatement("UPDATE fort SET siegeDate = ? WHERE id = ?"))
 		{
 			ps.setLong(1, getSiegeDate().getTimeInMillis());
-			ps.setInt(2, getFort().getFortId());
+			ps.setInt(2, getFort().getResidenceId());
 			ps.execute();
 		}
 		catch (Exception e)
@@ -1134,7 +1134,7 @@ public class FortSiege implements Siegable
 			PreparedStatement statement = con.prepareStatement("INSERT INTO fortsiege_clans (clan_id,fort_id) values (?,?)"))
 		{
 			statement.setInt(1, clan.getId());
-			statement.setInt(2, getFort().getFortId());
+			statement.setInt(2, getFort().getResidenceId());
 			statement.execute();
 			
 			addAttacker(clan.getId());
@@ -1154,7 +1154,7 @@ public class FortSiege implements Siegable
 			_commanders.clear();
 			L2Spawn spawnDat;
 			L2NpcTemplate template1;
-			for (FortSiegeSpawn _sp : FortSiegeManager.getInstance().getCommanderSpawnList(getFort().getFortId()))
+			for (FortSiegeSpawn _sp : FortSiegeManager.getInstance().getCommanderSpawnList(getFort().getResidenceId()))
 			{
 				template1 = NpcTable.getInstance().getTemplate(_sp.getId());
 				if (template1 != null)
@@ -1193,12 +1193,12 @@ public class FortSiege implements Siegable
 	
 	private void unSpawnFlags()
 	{
-		if (FortSiegeManager.getInstance().getFlagList(getFort().getFortId()) == null)
+		if (FortSiegeManager.getInstance().getFlagList(getFort().getResidenceId()) == null)
 		{
 			return;
 		}
 		
-		for (CombatFlag cf : FortSiegeManager.getInstance().getFlagList(getFort().getFortId()))
+		for (CombatFlag cf : FortSiegeManager.getInstance().getFlagList(getFort().getResidenceId()))
 		{
 			cf.unSpawnMe();
 		}

+ 23 - 23
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Siege.java

@@ -186,7 +186,7 @@ public class Siege implements Siegable
 				else if ((timeRemaining <= 86400000) && (timeRemaining > 13600000))
 				{
 					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.REGISTRATION_TERM_FOR_S1_ENDED);
-					sm.addCastleId(getCastle().getCastleId());
+					sm.addCastleId(getCastle().getResidenceId());
 					Announcements.getInstance().announceToAll(sm);
 					_isRegistrationOver = true;
 					clearSiegeWaitingClan();
@@ -251,7 +251,7 @@ public class Siege implements Siegable
 		if (getIsInProgress())
 		{
 			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SIEGE_OF_S1_HAS_ENDED);
-			sm.addCastleId(getCastle().getCastleId());
+			sm.addCastleId(getCastle().getResidenceId());
 			Announcements.getInstance().announceToAll(sm);
 			
 			if (getCastle().getOwnerId() > 0)
@@ -259,7 +259,7 @@ public class Siege implements Siegable
 				L2Clan clan = ClanTable.getInstance().getClan(getCastle().getOwnerId());
 				sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_S1_VICTORIOUS_OVER_S2_S_SIEGE);
 				sm.addString(clan.getName());
-				sm.addCastleId(getCastle().getCastleId());
+				sm.addCastleId(getCastle().getResidenceId());
 				Announcements.getInstance().announceToAll(sm);
 				
 				if (clan.getId() == _firstOwnerClanId)
@@ -277,7 +277,7 @@ public class Siege implements Siegable
 							L2PcInstance player = member.getPlayerInstance();
 							if ((player != null) && player.isNoble())
 							{
-								Hero.getInstance().setCastleTaken(player.getObjectId(), getCastle().getCastleId());
+								Hero.getInstance().setCastleTaken(player.getObjectId(), getCastle().getResidenceId());
 							}
 						}
 					}
@@ -286,7 +286,7 @@ public class Siege implements Siegable
 			else
 			{
 				sm = SystemMessage.getSystemMessage(SystemMessageId.SIEGE_S1_DRAW);
-				sm.addCastleId(getCastle().getCastleId());
+				sm.addCastleId(getCastle().getResidenceId());
 				Announcements.getInstance().announceToAll(sm);
 			}
 			
@@ -492,7 +492,7 @@ public class Siege implements Siegable
 					final L2Clan ownerClan = ClanTable.getInstance().getClan(_firstOwnerClanId);
 					ownerClan.increaseBloodAllianceCount();
 				}
-				sm.addCastleId(getCastle().getCastleId());
+				sm.addCastleId(getCastle().getResidenceId());
 				Announcements.getInstance().announceToAll(sm);
 				saveCastleSiege();
 				return;
@@ -509,7 +509,7 @@ public class Siege implements Siegable
 			spawnFlameTower(); // Spawn control tower
 			getCastle().spawnDoor(); // Spawn door
 			spawnSiegeGuard(); // Spawn siege guard
-			MercTicketManager.getInstance().deleteTickets(getCastle().getCastleId()); // remove the tickets from the ground
+			MercTicketManager.getInstance().deleteTickets(getCastle().getResidenceId()); // remove the tickets from the ground
 			getCastle().getZone().setSiegeInstance(this);
 			getCastle().getZone().setIsActive(true);
 			getCastle().getZone().updateZoneStatusForCharactersInside();
@@ -520,7 +520,7 @@ public class Siege implements Siegable
 			ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleEndSiegeTask(getCastle()), 1000); // Prepare auto end task
 			
 			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SIEGE_OF_S1_HAS_STARTED);
-			sm.addCastleId(getCastle().getCastleId());
+			sm.addCastleId(getCastle().getResidenceId());
 			Announcements.getInstance().announceToAll(sm);
 		}
 	}
@@ -589,7 +589,7 @@ public class Siege implements Siegable
 				else
 				{
 					member.setSiegeState((byte) 1);
-					member.setSiegeSide(getCastle().getCastleId());
+					member.setSiegeSide(getCastle().getResidenceId());
 					if (checkIfInZone(member))
 					{
 						member.setIsInSiege(true);
@@ -638,7 +638,7 @@ public class Siege implements Siegable
 				else
 				{
 					member.setSiegeState((byte) 2);
-					member.setSiegeSide(getCastle().getCastleId());
+					member.setSiegeSide(getCastle().getResidenceId());
 					if (checkIfInZone(member))
 					{
 						member.setIsInSiege(true);
@@ -736,7 +736,7 @@ public class Siege implements Siegable
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement statement = con.prepareStatement("DELETE FROM siege_clans WHERE castle_id=?"))
 		{
-			statement.setInt(1, getCastle().getCastleId());
+			statement.setInt(1, getCastle().getResidenceId());
 			statement.execute();
 			
 			if (getCastle().getOwnerId() > 0)
@@ -764,7 +764,7 @@ public class Siege implements Siegable
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement statement = con.prepareStatement("DELETE FROM siege_clans WHERE castle_id=? and type = 2"))
 		{
-			statement.setInt(1, getCastle().getCastleId());
+			statement.setInt(1, getCastle().getResidenceId());
 			statement.execute();
 			
 			getDefenderWaitingClans().clear();
@@ -973,7 +973,7 @@ public class Siege implements Siegable
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement statement = con.prepareStatement("DELETE FROM siege_clans WHERE castle_id=? and clan_id=?"))
 		{
-			statement.setInt(1, getCastle().getCastleId());
+			statement.setInt(1, getCastle().getResidenceId());
 			statement.setInt(2, clanId);
 			statement.execute();
 			
@@ -992,7 +992,7 @@ public class Siege implements Siegable
 	 */
 	public void removeSiegeClan(L2Clan clan)
 	{
-		if ((clan == null) || (clan.getCastleId() == getCastle().getCastleId()) || !SiegeManager.getInstance().checkIsRegistered(clan, getCastle().getCastleId()))
+		if ((clan == null) || (clan.getCastleId() == getCastle().getResidenceId()) || !SiegeManager.getInstance().checkIsRegistered(clan, getCastle().getResidenceId()))
 		{
 			return;
 		}
@@ -1136,7 +1136,7 @@ public class Siege implements Siegable
 		if (getIsRegistrationOver())
 		{
 			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.DEADLINE_FOR_SIEGE_S1_PASSED);
-			sm.addCastleId(getCastle().getCastleId());
+			sm.addCastleId(getCastle().getResidenceId());
 			player.sendPacket(sm);
 		}
 		else if (getIsInProgress())
@@ -1155,7 +1155,7 @@ public class Siege implements Siegable
 		{
 			player.sendPacket(SystemMessageId.CLAN_THAT_OWNS_CASTLE_CANNOT_PARTICIPATE_OTHER_SIEGE);
 		}
-		else if (SiegeManager.getInstance().checkIsRegistered(player.getClan(), getCastle().getCastleId()))
+		else if (SiegeManager.getInstance().checkIsRegistered(player.getClan(), getCastle().getResidenceId()))
 		{
 			player.sendPacket(SystemMessageId.ALREADY_REQUESTED_SIEGE_BATTLE);
 		}
@@ -1257,7 +1257,7 @@ public class Siege implements Siegable
 				addDefender(getCastle().getOwnerId(), SiegeClanType.OWNER);
 			}
 			
-			statement.setInt(1, getCastle().getCastleId());
+			statement.setInt(1, getCastle().getResidenceId());
 			try (ResultSet rs = statement.executeQuery())
 			{
 				int typeId;
@@ -1361,7 +1361,7 @@ public class Siege implements Siegable
 			statement.setLong(1, getSiegeDate().getTimeInMillis());
 			statement.setLong(2, getTimeRegistrationOverDate().getTimeInMillis());
 			statement.setString(3, String.valueOf(getIsTimeRegistrationOver()));
-			statement.setInt(4, getCastle().getCastleId());
+			statement.setInt(4, getCastle().getResidenceId());
 			statement.execute();
 		}
 		catch (Exception e)
@@ -1406,7 +1406,7 @@ public class Siege implements Siegable
 				try (PreparedStatement statement = con.prepareStatement("INSERT INTO siege_clans (clan_id,castle_id,type,castle_owner) values (?,?,?,0)"))
 				{
 					statement.setInt(1, clan.getId());
-					statement.setInt(2, getCastle().getCastleId());
+					statement.setInt(2, getCastle().getResidenceId());
 					statement.setInt(3, typeId);
 					statement.execute();
 				}
@@ -1416,7 +1416,7 @@ public class Siege implements Siegable
 				try (PreparedStatement statement = con.prepareStatement("UPDATE siege_clans SET type = ? WHERE castle_id = ? AND clan_id = ?"))
 				{
 					statement.setInt(1, typeId);
-					statement.setInt(2, getCastle().getCastleId());
+					statement.setInt(2, getCastle().getResidenceId());
 					statement.setInt(3, clan.getId());
 					statement.execute();
 				}
@@ -1466,7 +1466,7 @@ public class Siege implements Siegable
 		}
 		
 		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_ANNOUNCED_SIEGE_TIME);
-		sm.addCastleId(getCastle().getCastleId());
+		sm.addCastleId(getCastle().getResidenceId());
 		Announcements.getInstance().announceToAll(sm);
 		
 		_isRegistrationOver = false; // Allow registration for next siege
@@ -1477,7 +1477,7 @@ public class Siege implements Siegable
 	 */
 	private void spawnControlTower()
 	{
-		for (TowerSpawn ts : SiegeManager.getInstance().getControlTowers(getCastle().getCastleId()))
+		for (TowerSpawn ts : SiegeManager.getInstance().getControlTowers(getCastle().getResidenceId()))
 		{
 			try
 			{
@@ -1498,7 +1498,7 @@ public class Siege implements Siegable
 	 */
 	private void spawnFlameTower()
 	{
-		for (TowerSpawn ts : SiegeManager.getInstance().getFlameTowers(getCastle().getCastleId()))
+		for (TowerSpawn ts : SiegeManager.getInstance().getFlameTowers(getCastle().getResidenceId()))
 		{
 			try
 			{

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/l2skills/L2SkillSiegeFlag.java

@@ -184,7 +184,7 @@ public class L2SkillSiegeFlag extends L2Skill
 		String text = "";
 		L2PcInstance player = activeChar.getActingPlayer();
 		
-		if ((castle == null) || (castle.getCastleId() <= 0))
+		if ((castle == null) || (castle.getResidenceId() <= 0))
 		{
 			text = "You must be on castle ground to place a flag.";
 		}
@@ -236,7 +236,7 @@ public class L2SkillSiegeFlag extends L2Skill
 		String text = "";
 		L2PcInstance player = activeChar.getActingPlayer();
 		
-		if ((fort == null) || (fort.getFortId() <= 0))
+		if ((fort == null) || (fort.getResidenceId() <= 0))
 		{
 			text = "You must be on fort ground to place a flag.";
 		}
@@ -349,7 +349,7 @@ public class L2SkillSiegeFlag extends L2Skill
 		String text = "";
 		L2PcInstance player = activeChar.getActingPlayer();
 		
-		if (((fort != null) && (fort.getFortId() == 0)) || ((castle != null) && (castle.getCastleId() == 0)))
+		if (((fort != null) && (fort.getResidenceId() == 0)) || ((castle != null) && (castle.getResidenceId() == 0)))
 		{
 			text = "You must be on fort or castle ground to construct an outpost or flag.";
 		}

+ 6 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Formulas.java

@@ -288,7 +288,7 @@ public final class Formulas
 			if (player.isInsideZone(ZoneId.CLAN_HALL) && (player.getClan() != null) && (player.getClan().getHideoutId() > 0))
 			{
 				L2ClanHallZone zone = ZoneManager.getInstance().getZone(player, L2ClanHallZone.class);
-				int posChIndex = zone == null ? -1 : zone.getClanHallId();
+				int posChIndex = zone == null ? -1 : zone.getResidenceId();
 				int clanHallIndex = player.getClan().getHideoutId();
 				if ((clanHallIndex > 0) && (clanHallIndex == posChIndex))
 				{
@@ -306,7 +306,7 @@ public final class Formulas
 			if (player.isInsideZone(ZoneId.CASTLE) && (player.getClan() != null) && (player.getClan().getCastleId() > 0))
 			{
 				L2CastleZone zone = ZoneManager.getInstance().getZone(player, L2CastleZone.class);
-				int posCastleIndex = zone == null ? -1 : zone.getCastleId();
+				int posCastleIndex = zone == null ? -1 : zone.getResidenceId();
 				int castleIndex = player.getClan().getCastleId();
 				if ((castleIndex > 0) && (castleIndex == posCastleIndex))
 				{
@@ -324,7 +324,7 @@ public final class Formulas
 			if (player.isInsideZone(ZoneId.FORT) && (player.getClan() != null) && (player.getClan().getFortId() > 0))
 			{
 				L2FortZone zone = ZoneManager.getInstance().getZone(player, L2FortZone.class);
-				int posFortIndex = zone == null ? -1 : zone.getFortId();
+				int posFortIndex = zone == null ? -1 : zone.getResidenceId();
 				int fortIndex = player.getClan().getFortId();
 				if ((fortIndex > 0) && (fortIndex == posFortIndex))
 				{
@@ -404,7 +404,7 @@ public final class Formulas
 			if (player.isInsideZone(ZoneId.CLAN_HALL) && (player.getClan() != null) && (player.getClan().getHideoutId() > 0))
 			{
 				L2ClanHallZone zone = ZoneManager.getInstance().getZone(player, L2ClanHallZone.class);
-				int posChIndex = zone == null ? -1 : zone.getClanHallId();
+				int posChIndex = zone == null ? -1 : zone.getResidenceId();
 				int clanHallIndex = player.getClan().getHideoutId();
 				if ((clanHallIndex > 0) && (clanHallIndex == posChIndex))
 				{
@@ -422,7 +422,7 @@ public final class Formulas
 			if (player.isInsideZone(ZoneId.CASTLE) && (player.getClan() != null) && (player.getClan().getCastleId() > 0))
 			{
 				L2CastleZone zone = ZoneManager.getInstance().getZone(player, L2CastleZone.class);
-				int posCastleIndex = zone == null ? -1 : zone.getCastleId();
+				int posCastleIndex = zone == null ? -1 : zone.getResidenceId();
 				int castleIndex = player.getClan().getCastleId();
 				if ((castleIndex > 0) && (castleIndex == posCastleIndex))
 				{
@@ -440,7 +440,7 @@ public final class Formulas
 			if (player.isInsideZone(ZoneId.FORT) && (player.getClan() != null) && (player.getClan().getFortId() > 0))
 			{
 				L2FortZone zone = ZoneManager.getInstance().getZone(player, L2FortZone.class);
-				int posFortIndex = zone == null ? -1 : zone.getFortId();
+				int posFortIndex = zone == null ? -1 : zone.getResidenceId();
 				int fortIndex = player.getClan().getFortId();
 				if ((fortIndex > 0) && (fortIndex == posFortIndex))
 				{

+ 5 - 54
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2CastleZone.java

@@ -18,22 +18,16 @@
  */
 package com.l2jserver.gameserver.model.zone.type;
 
-import com.l2jserver.gameserver.instancemanager.CastleManager;
 import com.l2jserver.gameserver.model.TeleportWhereType;
 import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.entity.Castle;
-import com.l2jserver.gameserver.model.zone.L2ZoneRespawn;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 
 /**
  * A castle zone
  * @author durgus
  */
-public class L2CastleZone extends L2ZoneRespawn
+public final class L2CastleZone extends L2ResidenceZone
 {
-	private int _castleId;
-	private Castle _castle = null;
 	
 	public L2CastleZone(int id)
 	{
@@ -45,7 +39,7 @@ public class L2CastleZone extends L2ZoneRespawn
 	{
 		if (name.equals("castleId"))
 		{
-			_castleId = Integer.parseInt(value);
+			setResidenceId(Integer.parseInt(value));
 		}
 		else
 		{
@@ -56,60 +50,17 @@ public class L2CastleZone extends L2ZoneRespawn
 	@Override
 	protected void onEnter(L2Character character)
 	{
-		if (getCastle() != null)
-		{
-			character.setInsideZone(ZoneId.CASTLE, true);
-		}
+		character.setInsideZone(ZoneId.CASTLE, true);
 	}
 	
 	@Override
 	protected void onExit(L2Character character)
 	{
-		if (getCastle() != null)
-		{
-			character.setInsideZone(ZoneId.CASTLE, false);
-		}
-	}
-	
-	@Override
-	public void onDieInside(L2Character character)
-	{
-	}
-	
-	@Override
-	public void onReviveInside(L2Character character)
-	{
+		character.setInsideZone(ZoneId.CASTLE, false);
 	}
 	
-	/**
-	 * Removes all foreigners from the castle
-	 * @param owningClanId
-	 */
 	public void banishForeigners(int owningClanId)
 	{
-		TeleportWhereType type = TeleportWhereType.TOWN;
-		for (L2PcInstance temp : getPlayersInside())
-		{
-			if ((temp.getClanId() == owningClanId) && (owningClanId != 0))
-			{
-				continue;
-			}
-			
-			temp.teleToLocation(type);
-		}
-	}
-	
-	public int getCastleId()
-	{
-		return _castleId;
-	}
-	
-	private final Castle getCastle()
-	{
-		if (_castle == null)
-		{
-			_castle = CastleManager.getInstance().getCastleById(_castleId);
-		}
-		return _castle;
+		super.banishForeigners(owningClanId, TeleportWhereType.CASTLE_BANISH);
 	}
 }

+ 6 - 41
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2ClanHallZone.java

@@ -21,10 +21,8 @@ package com.l2jserver.gameserver.model.zone.type;
 import com.l2jserver.gameserver.instancemanager.ClanHallManager;
 import com.l2jserver.gameserver.model.TeleportWhereType;
 import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.ClanHall;
 import com.l2jserver.gameserver.model.entity.clanhall.AuctionableHall;
-import com.l2jserver.gameserver.model.zone.L2ZoneRespawn;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.network.serverpackets.AgitDecoInfo;
 
@@ -32,10 +30,8 @@ import com.l2jserver.gameserver.network.serverpackets.AgitDecoInfo;
  * A clan hall zone
  * @author durgus
  */
-public class L2ClanHallZone extends L2ZoneRespawn
+public class L2ClanHallZone extends L2ResidenceZone
 {
-	private int _clanHallId;
-	
 	public L2ClanHallZone(int id)
 	{
 		super(id);
@@ -46,12 +42,12 @@ public class L2ClanHallZone extends L2ZoneRespawn
 	{
 		if (name.equals("clanHallId"))
 		{
-			_clanHallId = Integer.parseInt(value);
+			setResidenceId(Integer.parseInt(value));
 			// Register self to the correct clan hall
-			ClanHall hall = ClanHallManager.getInstance().getClanHallById(_clanHallId);
+			ClanHall hall = ClanHallManager.getInstance().getClanHallById(getResidenceId());
 			if (hall == null)
 			{
-				_log.warning("L2ClanHallZone: Clan hall with id " + _clanHallId + " does not exist!");
+				_log.warning("L2ClanHallZone: Clan hall with id " + getResidenceId() + " does not exist!");
 			}
 			else
 			{
@@ -72,7 +68,7 @@ public class L2ClanHallZone extends L2ZoneRespawn
 			// Set as in clan hall
 			character.setInsideZone(ZoneId.CLAN_HALL, true);
 			
-			AuctionableHall clanHall = ClanHallManager.getInstance().getAuctionableHallById(_clanHallId);
+			AuctionableHall clanHall = ClanHallManager.getInstance().getAuctionableHallById(getResidenceId());
 			if (clanHall == null)
 			{
 				return;
@@ -94,39 +90,8 @@ public class L2ClanHallZone extends L2ZoneRespawn
 		}
 	}
 	
-	@Override
-	public void onDieInside(L2Character character)
-	{
-	}
-	
-	@Override
-	public void onReviveInside(L2Character character)
-	{
-	}
-	
-	/**
-	 * Removes all foreigners from the clan hall
-	 * @param owningClanId
-	 */
 	public void banishForeigners(int owningClanId)
 	{
-		TeleportWhereType type = TeleportWhereType.CLANHALL_BANISH;
-		for (L2PcInstance temp : getPlayersInside())
-		{
-			if ((temp.getClanId() == owningClanId) && (owningClanId != 0))
-			{
-				continue;
-			}
-			
-			temp.teleToLocation(type);
-		}
-	}
-	
-	/**
-	 * @return the clanHallId
-	 */
-	public int getClanHallId()
-	{
-		return _clanHallId;
+		super.banishForeigners(owningClanId, TeleportWhereType.CLANHALL_BANISH);
 	}
 }

+ 3 - 39
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2FortZone.java

@@ -20,18 +20,14 @@ package com.l2jserver.gameserver.model.zone.type;
 
 import com.l2jserver.gameserver.model.TeleportWhereType;
 import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.zone.L2ZoneRespawn;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 
 /**
  * A castle zone
  * @author durgus
  */
-public class L2FortZone extends L2ZoneRespawn
+public final class L2FortZone extends L2ResidenceZone
 {
-	private int _fortId;
-	
 	public L2FortZone(int id)
 	{
 		super(id);
@@ -42,7 +38,7 @@ public class L2FortZone extends L2ZoneRespawn
 	{
 		if (name.equals("fortId"))
 		{
-			_fortId = Integer.parseInt(value);
+			setResidenceId(Integer.parseInt(value));
 		}
 		else
 		{
@@ -62,40 +58,8 @@ public class L2FortZone extends L2ZoneRespawn
 		character.setInsideZone(ZoneId.FORT, false);
 	}
 	
-	@Override
-	public void onDieInside(L2Character character)
-	{
-	}
-	
-	@Override
-	public void onReviveInside(L2Character character)
-	{
-	}
-	
-	public void updateZoneStatusForCharactersInside()
-	{
-	}
-	
-	/**
-	 * Removes all foreigners from the fort
-	 * @param owningClanId
-	 */
 	public void banishForeigners(int owningClanId)
 	{
-		TeleportWhereType type = TeleportWhereType.FORTRESS_BANISH;
-		for (L2PcInstance temp : getPlayersInside())
-		{
-			if ((temp.getClanId() == owningClanId) && (owningClanId != 0))
-			{
-				continue;
-			}
-			
-			temp.teleToLocation(type);
-		}
-	}
-	
-	public int getFortId()
-	{
-		return _fortId;
+		super.banishForeigners(owningClanId, TeleportWhereType.FORTRESS_BANISH);
 	}
 }

+ 69 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2ResidenceZone.java

@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2004-2013 L2J Server
+ * 
+ * This file is part of L2J Server.
+ * 
+ * L2J Server is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J Server is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.model.zone.type;
+
+import com.l2jserver.gameserver.model.TeleportWhereType;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.zone.L2ZoneRespawn;
+
+/**
+ * @author xban1x
+ */
+public abstract class L2ResidenceZone extends L2ZoneRespawn
+{
+	private int _residenceId;
+	
+	protected L2ResidenceZone(int id)
+	{
+		super(id);
+	}
+	
+	@Override
+	public void onDieInside(L2Character character)
+	{
+	}
+	
+	@Override
+	public void onReviveInside(L2Character character)
+	{
+	}
+	
+	protected void banishForeigners(int owningClanId, TeleportWhereType type)
+	{
+		for (L2PcInstance temp : getPlayersInside())
+		{
+			if ((temp.getClanId() == owningClanId) && (owningClanId != 0))
+			{
+				continue;
+			}
+			temp.teleToLocation(type);
+		}
+	}
+	
+	protected void setResidenceId(int residenceId)
+	{
+		_residenceId = residenceId;
+	}
+	
+	public int getResidenceId()
+	{
+		return _residenceId;
+	}
+}

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2SiegeZone.java

@@ -222,7 +222,7 @@ public class L2SiegeZone extends L2ZoneType
 				Fort fort = FortManager.getInstance().getFortById(getSettings().getSiegeableId());
 				if (fort != null)
 				{
-					FortSiegeManager.getInstance().dropCombatFlag(activeChar, fort.getFortId());
+					FortSiegeManager.getInstance().dropCombatFlag(activeChar, fort.getResidenceId());
 				}
 				else
 				{

+ 5 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java

@@ -253,13 +253,13 @@ public class EnterWorld extends L2GameClientPacket
 				if (siege.checkIsAttacker(activeChar.getClan()))
 				{
 					activeChar.setSiegeState((byte) 1);
-					activeChar.setSiegeSide(siege.getCastle().getCastleId());
+					activeChar.setSiegeSide(siege.getCastle().getResidenceId());
 				}
 				
 				else if (siege.checkIsDefender(activeChar.getClan()))
 				{
 					activeChar.setSiegeState((byte) 2);
-					activeChar.setSiegeSide(siege.getCastle().getCastleId());
+					activeChar.setSiegeSide(siege.getCastle().getResidenceId());
 				}
 			}
 			
@@ -273,13 +273,13 @@ public class EnterWorld extends L2GameClientPacket
 				if (siege.checkIsAttacker(activeChar.getClan()))
 				{
 					activeChar.setSiegeState((byte) 1);
-					activeChar.setSiegeSide(siege.getFort().getFortId());
+					activeChar.setSiegeSide(siege.getFort().getResidenceId());
 				}
 				
 				else if (siege.checkIsDefender(activeChar.getClan()))
 				{
 					activeChar.setSiegeState((byte) 2);
-					activeChar.setSiegeSide(siege.getFort().getFortId());
+					activeChar.setSiegeSide(siege.getFort().getResidenceId());
 				}
 			}
 			
@@ -541,7 +541,7 @@ public class EnterWorld extends L2GameClientPacket
 			
 			if (fort != null)
 			{
-				FortSiegeManager.getInstance().dropCombatFlag(activeChar, fort.getFortId());
+				FortSiegeManager.getInstance().dropCombatFlag(activeChar, fort.getResidenceId());
 			}
 			else
 			{

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestProcureCropList.java

@@ -103,7 +103,7 @@ public class RequestProcureCropList extends L2GameClientPacket
 			return;
 		}
 		
-		int castleId = ((L2ManorManagerInstance) manager).getCastle().getCastleId();
+		int castleId = ((L2ManorManagerInstance) manager).getCastle().getResidenceId();
 		
 		// Calculate summary values
 		int slots = 0;

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/communityserver/writepackets/InitWorldInfo.java

@@ -145,7 +145,7 @@ public final class InitWorldInfo extends BaseWritePacket
 				_log.info("Transfering " + castles.size() + " castles data to CB server.");
 				for (Castle castle : castles)
 				{
-					writeD(castle.getCastleId());
+					writeD(castle.getResidenceId());
 					writeS(castle.getName());
 					writeD(castle.getOwnerId());
 					writeD(castle.getTaxPercent());

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ExShowCastleInfo.java

@@ -43,7 +43,7 @@ public class ExShowCastleInfo extends L2GameServerPacket
 		writeD(castles.size());
 		for (Castle castle : castles)
 		{
-			writeD(castle.getCastleId());
+			writeD(castle.getResidenceId());
 			if (castle.getOwnerId() > 0)
 			{
 				if (ClanTable.getInstance().getClan(castle.getOwnerId()) != null)

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ExShowFortressInfo.java

@@ -46,7 +46,7 @@ public class ExShowFortressInfo extends L2GameServerPacket
 		for (Fort fort : forts)
 		{
 			L2Clan clan = fort.getOwnerClan();
-			writeD(fort.getFortId());
+			writeD(fort.getResidenceId());
 			writeS(clan != null ? clan.getName() : "");
 			writeD(fort.getSiege().getIsInProgress() ? 0x01 : 0x00);
 			// Time of possession

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ExShowFortressMapInfo.java

@@ -43,11 +43,11 @@ public class ExShowFortressMapInfo extends L2GameServerPacket
 		writeC(0xFE);
 		writeH(0x7D);
 		
-		writeD(_fortress.getFortId());
+		writeD(_fortress.getResidenceId());
 		writeD(_fortress.getSiege().getIsInProgress() ? 1 : 0); // fortress siege status
 		writeD(_fortress.getFortSize()); // barracks count
 		
-		FastList<FortSiegeSpawn> commanders = FortSiegeManager.getInstance().getCommanderSpawnList(_fortress.getFortId());
+		FastList<FortSiegeSpawn> commanders = FortSiegeManager.getInstance().getCommanderSpawnList(_fortress.getResidenceId());
 		if ((commanders != null) && (commanders.size() != 0) && _fortress.getSiege().getIsInProgress())
 		{
 			switch (commanders.size())

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ExShowFortressSiegeInfo.java

@@ -41,7 +41,7 @@ public class ExShowFortressSiegeInfo extends L2GameServerPacket
 	public ExShowFortressSiegeInfo(Fort fort)
 	{
 		_fort = fort;
-		_fortId = fort.getFortId();
+		_fortId = fort.getResidenceId();
 		_size = fort.getFortSize();
 		FastList<FortSiegeSpawn> commanders = FortSiegeManager.getInstance().getCommanderSpawnList(_fortId);
 		if (commanders != null)

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ExShowProcureCropDetail.java

@@ -45,7 +45,7 @@ public class ExShowProcureCropDetail extends L2GameServerPacket
 			CropProcure cropItem = c.getCrop(_cropId, CastleManorManager.PERIOD_CURRENT);
 			if ((cropItem != null) && (cropItem.getAmount() > 0))
 			{
-				_castleCrops.put(c.getCastleId(), cropItem);
+				_castleCrops.put(c.getResidenceId(), cropItem);
 			}
 		}
 	}

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/SiegeAttackerList.java

@@ -70,7 +70,7 @@ public final class SiegeAttackerList extends L2GameServerPacket
 		
 		if (_castle != null)
 		{
-			writeD(_castle.getCastleId());
+			writeD(_castle.getResidenceId());
 			writeD(0x00); // 0
 			writeD(0x01); // 1
 			writeD(0x00); // 0

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/SiegeDefenderList.java

@@ -59,7 +59,7 @@ public final class SiegeDefenderList extends L2GameServerPacket
 	protected final void writeImpl()
 	{
 		writeC(0xcb);
-		writeD(_castle.getCastleId());
+		writeD(_castle.getResidenceId());
 		writeD(0x00); // 0
 		writeD(0x01); // 1
 		writeD(0x00); // 0

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/SiegeInfo.java

@@ -70,7 +70,7 @@ public class SiegeInfo extends L2GameServerPacket
 		writeC(0xc9);
 		if (_castle != null)
 		{
-			writeD(_castle.getCastleId());
+			writeD(_castle.getResidenceId());
 			
 			final int ownerId = _castle.getOwnerId();