瀏覽代碼

Merge siege zones to L2SiegeZone.
Implementation castle/fort zones.
Fix relations - auto attackable issue (sword target was on wrong person - switched player<->target)
Oly shout for classed/nonclassed game.
Cleanup some packets.
...Require dp+sql update.

JIV 15 年之前
父節點
當前提交
9cff409d47
共有 25 個文件被更改,包括 667 次插入464 次删除
  1. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/datatables/MapRegionTable.java
  2. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/instancemanager/FortSiegeManager.java
  3. 180 29
      L2_GameServer/java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java
  4. 2 0
      L2_GameServer/java/com/l2jserver/gameserver/instancemanager/ZoneManager.java
  5. 29 18
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
  6. 29 11
      L2_GameServer/java/com/l2jserver/gameserver/model/entity/Castle.java
  7. 26 8
      L2_GameServer/java/com/l2jserver/gameserver/model/entity/Fort.java
  8. 29 1
      L2_GameServer/java/com/l2jserver/gameserver/model/entity/FortSiege.java
  9. 4 0
      L2_GameServer/java/com/l2jserver/gameserver/model/entity/Siegable.java
  10. 40 23
      L2_GameServer/java/com/l2jserver/gameserver/model/entity/Siege.java
  11. 12 1
      L2_GameServer/java/com/l2jserver/gameserver/model/olympiad/OlympiadGame.java
  12. 0 160
      L2_GameServer/java/com/l2jserver/gameserver/model/zone/type/L2CastleZone.java
  13. 6 190
      L2_GameServer/java/com/l2jserver/gameserver/model/zone/type/L2FortZone.java
  14. 287 0
      L2_GameServer/java/com/l2jserver/gameserver/model/zone/type/L2SiegeZone.java
  15. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java
  16. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestAutoSoulShot.java
  17. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestChangePartyLeader.java
  18. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkillInfo.java
  19. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestExMPCCShowPartyMembersInfo.java
  20. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPledgeMemberPowerInfo.java
  21. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPledgePowerGradeList.java
  22. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPledgeReorganizeMember.java
  23. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPledgeSetAcademyMaster.java
  24. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPledgeSetMemberPowerGrade.java
  25. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/util/Broadcast.java

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/datatables/MapRegionTable.java

@@ -395,7 +395,7 @@ public class MapRegionTable
 					}
 					}
 					
 					
 					if (castle != null && castle.getCastleId() > 0)
 					if (castle != null && castle.getCastleId() > 0)
-						return castle.getZone().getSpawnLoc();
+						return castle.getCastleZone().getSpawnLoc();
 				}
 				}
 				
 				
 				// If teleport to fortress
 				// If teleport to fortress
@@ -412,7 +412,7 @@ public class MapRegionTable
 					}
 					}
 					
 					
 					if (fort != null && fort.getFortId() > 0)
 					if (fort != null && fort.getFortId() > 0)
-						return fort.getZone().getSpawnLoc();
+						return fort.getFortZone().getSpawnLoc();
 				}
 				}
 				
 				
 				// If teleport to SiegeHQ
 				// If teleport to SiegeHQ

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/instancemanager/FortSiegeManager.java

@@ -385,9 +385,9 @@ public class FortSiegeManager
 		return true;
 		return true;
 	}
 	}
 	
 	
-	public void dropCombatFlag(L2PcInstance player)
+	public void dropCombatFlag(L2PcInstance player, int fortId)
 	{
 	{
-		Fort fort = FortManager.getInstance().getFort(player);
+		Fort fort = FortManager.getInstance().getFortById(fortId);
 		
 		
 		FastList<CombatFlag> fcf = _flagList.get(fort.getFortId());
 		FastList<CombatFlag> fcf = _flagList.get(fort.getFortId());
 		
 		

+ 180 - 29
L2_GameServer/java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java

@@ -22,6 +22,7 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.ResultSet;
 import java.util.Calendar;
 import java.util.Calendar;
 import java.util.Collection;
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.ScheduledFuture;
 import java.util.logging.Level;
 import java.util.logging.Level;
@@ -35,6 +36,7 @@ import com.l2jserver.gameserver.datatables.ClanTable;
 import com.l2jserver.gameserver.datatables.NpcTable;
 import com.l2jserver.gameserver.datatables.NpcTable;
 import com.l2jserver.gameserver.datatables.ResidentialSkillTable;
 import com.l2jserver.gameserver.datatables.ResidentialSkillTable;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.model.L2SiegeClan;
 import com.l2jserver.gameserver.model.L2Skill;
 import com.l2jserver.gameserver.model.L2Skill;
 import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.L2World;
@@ -46,6 +48,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2SiegeFlagInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2SiegeFlagInstance;
 import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.entity.Fort;
 import com.l2jserver.gameserver.model.entity.Fort;
+import com.l2jserver.gameserver.model.entity.Siegable;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CharInfo;
 import com.l2jserver.gameserver.network.serverpackets.CharInfo;
@@ -61,7 +64,7 @@ import com.l2jserver.util.L2Properties;
 import javolution.util.FastList;
 import javolution.util.FastList;
 import javolution.util.FastMap;
 import javolution.util.FastMap;
 
 
-public class TerritoryWarManager
+public class TerritoryWarManager implements Siegable
 {
 {
 	private static final Logger _log = Logger.getLogger(TerritoryWarManager.class.getName());
 	private static final Logger _log = Logger.getLogger(TerritoryWarManager.class.getName());
 	
 	
@@ -845,6 +848,7 @@ public class TerritoryWarManager
 			{
 			{
 				t.changeNPCsSpawn(2, true);
 				t.changeNPCsSpawn(2, true);
 				castle.spawnDoor(); // Spawn door
 				castle.spawnDoor(); // Spawn door
+				castle.getZone().setSiegeInstance(this);
 				castle.getZone().setIsActive(true);
 				castle.getZone().setIsActive(true);
 				castle.getZone().updateZoneStatusForCharactersInside();
 				castle.getZone().updateZoneStatusForCharactersInside();
 			}
 			}
@@ -913,6 +917,7 @@ public class TerritoryWarManager
 				t.changeNPCsSpawn(2, false);
 				t.changeNPCsSpawn(2, false);
 				castle.getZone().setIsActive(false);
 				castle.getZone().setIsActive(false);
 				castle.getZone().updateZoneStatusForCharactersInside();
 				castle.getZone().updateZoneStatusForCharactersInside();
+				castle.getZone().setSiegeInstance(null);
 			}
 			}
 			else
 			else
 				_log.warning("TerritoryWarManager: Castle missing! CastleId: " + t.getCastleId());
 				_log.warning("TerritoryWarManager: Castle missing! CastleId: " + t.getCastleId());
@@ -987,15 +992,11 @@ public class TerritoryWarManager
 					player.sendPacket(new ExBrExtraUserInfo(player));
 					player.sendPacket(new ExBrExtraUserInfo(player));
 					for (L2PcInstance knownPlayer : player.getKnownList().getKnownPlayers().values())
 					for (L2PcInstance knownPlayer : player.getKnownList().getKnownPlayers().values())
 					{
 					{
-						try
-						{
-							knownPlayer.sendPacket(new RelationChanged(player, player.getRelation(knownPlayer), player.isAutoAttackable(knownPlayer)));
-							if (player.getPet() != null)
-								knownPlayer.sendPacket(new RelationChanged(player.getPet(), player.getRelation(knownPlayer), player.isAutoAttackable(knownPlayer)));
-						}
-						catch (NullPointerException e)
-						{
-						}
+						if (knownPlayer == null)
+							continue;
+						knownPlayer.sendPacket(new RelationChanged(player, player.getRelation(knownPlayer), player.isAutoAttackable(knownPlayer)));
+						if (player.getPet() != null)
+							knownPlayer.sendPacket(new RelationChanged(player.getPet(), player.getRelation(knownPlayer), player.isAutoAttackable(knownPlayer)));
 					}
 					}
 				}
 				}
 		for(int castleId : _registeredMercenaries.keySet())
 		for(int castleId : _registeredMercenaries.keySet())
@@ -1022,15 +1023,11 @@ public class TerritoryWarManager
 				player.sendPacket(new ExBrExtraUserInfo(player));
 				player.sendPacket(new ExBrExtraUserInfo(player));
 				for (L2PcInstance knownPlayer : player.getKnownList().getKnownPlayers().values())
 				for (L2PcInstance knownPlayer : player.getKnownList().getKnownPlayers().values())
 				{
 				{
-					try
-					{
-						knownPlayer.sendPacket(new RelationChanged(player, player.getRelation(knownPlayer), player.isAutoAttackable(knownPlayer)));
-						if (player.getPet() != null)
-							knownPlayer.sendPacket(new RelationChanged(player.getPet(), player.getRelation(knownPlayer), player.isAutoAttackable(knownPlayer)));
-					}
-					catch (NullPointerException e)
-					{
-					}
+					if (knownPlayer == null)
+						continue;
+					knownPlayer.sendPacket(new RelationChanged(player, player.getRelation(knownPlayer), player.isAutoAttackable(knownPlayer)));
+					if (player.getPet() != null)
+						knownPlayer.sendPacket(new RelationChanged(player.getPet(), player.getRelation(knownPlayer), player.isAutoAttackable(knownPlayer)));
 				}
 				}
 			}
 			}
 		for(Territory terr : _territoryList.values())
 		for(Territory terr : _territoryList.values())
@@ -1059,16 +1056,12 @@ public class TerritoryWarManager
 					player.sendPacket(new ExBrExtraUserInfo(player));
 					player.sendPacket(new ExBrExtraUserInfo(player));
 					for (L2PcInstance knownPlayer : player.getKnownList().getKnownPlayers().values())
 					for (L2PcInstance knownPlayer : player.getKnownList().getKnownPlayers().values())
 					{
 					{
-						try
-						{
-							knownPlayer.sendPacket(new CharInfo(player));
-							knownPlayer.sendPacket(new RelationChanged(player, player.getRelation(knownPlayer), player.isAutoAttackable(knownPlayer)));
-							if (player.getPet() != null)
-								knownPlayer.sendPacket(new RelationChanged(player.getPet(), player.getRelation(knownPlayer), player.isAutoAttackable(knownPlayer)));
-						}
-						catch (NullPointerException e)
-						{
-						}
+						if (knownPlayer == null)
+							continue;
+						knownPlayer.sendPacket(new CharInfo(player));
+						knownPlayer.sendPacket(new RelationChanged(player, player.getRelation(knownPlayer), player.isAutoAttackable(knownPlayer)));
+						if (player.getPet() != null)
+							knownPlayer.sendPacket(new RelationChanged(player.getPet(), player.getRelation(knownPlayer), player.isAutoAttackable(knownPlayer)));
 					}
 					}
 				}
 				}
 		twQuest.setOnEnterWorld(_isTWInProgress);
 		twQuest.setOnEnterWorld(_isTWInProgress);
@@ -1486,4 +1479,162 @@ public class TerritoryWarManager
 	{
 	{
 		protected static final TerritoryWarManager _instance = new TerritoryWarManager();
 		protected static final TerritoryWarManager _instance = new TerritoryWarManager();
 	}
 	}
+
+	//TODO implement these
+	
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#startSiege()
+	 */
+	@Override
+	public void startSiege()
+	{
+		// TODO Auto-generated method stub
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#endSiege()
+	 */
+	@Override
+	public void endSiege()
+	{
+		// TODO Auto-generated method stub
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getAttackerClan(int)
+	 */
+	@Override
+	public L2SiegeClan getAttackerClan(int clanId)
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getAttackerClan(com.l2jserver.gameserver.model.L2Clan)
+	 */
+	@Override
+	public L2SiegeClan getAttackerClan(L2Clan clan)
+	{
+		// TODO Auto-generated method stub
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getAttackerClans()
+	 */
+	@Override
+	public List<L2SiegeClan> getAttackerClans()
+	{
+		// TODO Auto-generated method stub
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getAttackersInZone()
+	 */
+	@Override
+	public List<L2PcInstance> getAttackersInZone()
+	{
+		// TODO Auto-generated method stub
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#checkIsAttacker(com.l2jserver.gameserver.model.L2Clan)
+	 */
+	@Override
+	public boolean checkIsAttacker(L2Clan clan)
+	{
+		// TODO Auto-generated method stub
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getDefenderClan(int)
+	 */
+	@Override
+	public L2SiegeClan getDefenderClan(int clanId)
+	{
+		// TODO Auto-generated method stub
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getDefenderClan(com.l2jserver.gameserver.model.L2Clan)
+	 */
+	@Override
+	public L2SiegeClan getDefenderClan(L2Clan clan)
+	{
+		// TODO Auto-generated method stub
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getDefenderClans()
+	 */
+	@Override
+	public List<L2SiegeClan> getDefenderClans()
+	{
+		// TODO Auto-generated method stub
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#checkIsDefender(com.l2jserver.gameserver.model.L2Clan)
+	 */
+	@Override
+	public boolean checkIsDefender(L2Clan clan)
+	{
+		// TODO Auto-generated method stub
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getFlag(com.l2jserver.gameserver.model.L2Clan)
+	 */
+	@Override
+	public List<L2Npc> getFlag(L2Clan clan)
+	{
+		// TODO Auto-generated method stub
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getSiegeDate()
+	 */
+	@Override
+	public Calendar getSiegeDate()
+	{
+		// TODO Auto-generated method stub
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#giveFame()
+	 */
+	@Override
+	public boolean giveFame()
+	{
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getFameFrequency()
+	 */
+	@Override
+	public int getFameFrequency()
+	{
+		return Config.CASTLE_ZONE_FAME_TASK_FREQUENCY;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getFameAmount()
+	 */
+	@Override
+	public int getFameAmount()
+	{
+		return Config.CASTLE_ZONE_FAME_AQUIRE_POINTS;
+	}
 }
 }

+ 2 - 0
L2_GameServer/java/com/l2jserver/gameserver/instancemanager/ZoneManager.java

@@ -154,6 +154,8 @@ public class ZoneManager
 								temp = new L2OlympiadStadiumZone(zoneId);
 								temp = new L2OlympiadStadiumZone(zoneId);
 							else if (zoneType.equals("CastleZone"))
 							else if (zoneType.equals("CastleZone"))
 								temp = new L2CastleZone(zoneId);
 								temp = new L2CastleZone(zoneId);
+							else if (zoneType.equals("SiegeZone"))
+								temp = new L2SiegeZone(zoneId);
 							else if (zoneType.equals("CastleTeleportZone"))
 							else if (zoneType.equals("CastleTeleportZone"))
 								temp = new L2CastleTeleportZone(zoneId);
 								temp = new L2CastleTeleportZone(zoneId);
 							else if (zoneType.equals("FortZone"))
 							else if (zoneType.equals("FortZone"))

+ 29 - 18
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -4557,9 +4557,9 @@ public final class L2PcInstance extends L2Playable
 					Integer oldrelation = getKnownList().getKnownRelations().get(player.getObjectId());
 					Integer oldrelation = getKnownList().getKnownRelations().get(player.getObjectId());
 					if (oldrelation != null && oldrelation != relation)
 					if (oldrelation != null && oldrelation != relation)
 					{
 					{
-						player.sendPacket(new RelationChanged(this, relation, player.isAutoAttackable(this)));
+						player.sendPacket(new RelationChanged(this, relation, isAutoAttackable(player)));
 						if (getPet() != null)
 						if (getPet() != null)
-							player.sendPacket(new RelationChanged(getPet(), relation, player.isAutoAttackable(this)));
+							player.sendPacket(new RelationChanged(getPet(), relation, isAutoAttackable(player)));
 					}
 					}
 				}
 				}
 			}
 			}
@@ -4590,9 +4590,9 @@ public final class L2PcInstance extends L2Playable
 						Integer oldrelation = getKnownList().getKnownRelations().get(player.getObjectId());
 						Integer oldrelation = getKnownList().getKnownRelations().get(player.getObjectId());
 						if (oldrelation != null && oldrelation != relation)
 						if (oldrelation != null && oldrelation != relation)
 						{
 						{
-							player.sendPacket(new RelationChanged(this, relation, player.isAutoAttackable(this)));
+							player.sendPacket(new RelationChanged(this, relation, isAutoAttackable(player)));
 							if (getPet() != null)
 							if (getPet() != null)
-								player.sendPacket(new RelationChanged(getPet(), relation, player.isAutoAttackable(this)));
+								player.sendPacket(new RelationChanged(getPet(), relation, isAutoAttackable(player)));
 						}
 						}
 					}
 					}
 				}
 				}
@@ -5523,10 +5523,21 @@ public final class L2PcInstance extends L2Playable
 			}
 			}
 			else if (isCombatFlagEquipped())
 			else if (isCombatFlagEquipped())
 			{
 			{
+				//TODO: Fort siege during TW??
 				if (TerritoryWarManager.getInstance().isTWInProgress())
 				if (TerritoryWarManager.getInstance().isTWInProgress())
 					TerritoryWarManager.getInstance().dropCombatFlag(this, true);
 					TerritoryWarManager.getInstance().dropCombatFlag(this, true);
 				else
 				else
-					FortSiegeManager.getInstance().dropCombatFlag(this);
+				{
+					Fort fort = FortManager.getInstance().getFort(this);
+					if (fort != null)
+						FortSiegeManager.getInstance().dropCombatFlag(this, fort.getFortId());
+					else
+					{
+						int slot = getInventory().getSlotFromItem(getInventory().getItemByItemId(9819));
+						getInventory().unEquipItemInBodySlotAndRecord(slot);
+						destroyItem("CombatFlag", getInventory().getItemByItemId(9819), null, true);
+					}
+				}
 			}
 			}
 			else
 			else
 			{
 			{
@@ -11620,7 +11631,7 @@ public final class L2PcInstance extends L2Playable
 			{
 			{
 				Fort fort = FortManager.getInstance().getFort(this);
 				Fort fort = FortManager.getInstance().getFort(this);
 				if (fort != null)
 				if (fort != null)
-					FortSiegeManager.getInstance().dropCombatFlag(this);
+					FortSiegeManager.getInstance().dropCombatFlag(this, fort.getFortId());
 				else
 				else
 				{
 				{
 					int slot = getInventory().getSlotFromItem(getInventory().getItemByItemId(9819));
 					int slot = getInventory().getSlotFromItem(getInventory().getItemByItemId(9819));
@@ -14327,15 +14338,15 @@ public final class L2PcInstance extends L2Playable
         	int relation2 = activeChar.getRelation(this);
         	int relation2 = activeChar.getRelation(this);
         	if (getKnownList().getKnownRelations().get(activeChar.getObjectId()) != null && getKnownList().getKnownRelations().get(activeChar.getObjectId()) != relation1)
         	if (getKnownList().getKnownRelations().get(activeChar.getObjectId()) != null && getKnownList().getKnownRelations().get(activeChar.getObjectId()) != relation1)
         	{
         	{
-        		activeChar.sendPacket(new RelationChanged(this, relation1, activeChar.isAutoAttackable(this)));
+        		activeChar.sendPacket(new RelationChanged(this, relation1, isAutoAttackable(activeChar)));
         		if (getPet() != null)
         		if (getPet() != null)
-        			activeChar.sendPacket(new RelationChanged(getPet(), relation1, activeChar.isAutoAttackable(this)));
+        			activeChar.sendPacket(new RelationChanged(getPet(), relation1, isAutoAttackable(activeChar)));
         	}
         	}
         	if (activeChar.getKnownList().getKnownRelations().get(getObjectId()) != null && activeChar.getKnownList().getKnownRelations().get(getObjectId()) != relation2)
         	if (activeChar.getKnownList().getKnownRelations().get(getObjectId()) != null && activeChar.getKnownList().getKnownRelations().get(getObjectId()) != relation2)
         	{
         	{
-        		sendPacket(new RelationChanged(activeChar, relation2, isAutoAttackable(activeChar)));
+        		sendPacket(new RelationChanged(activeChar, relation2, activeChar.isAutoAttackable(this)));
         		if (activeChar.getPet() != null)
         		if (activeChar.getPet() != null)
-        			sendPacket(new RelationChanged(activeChar.getPet(), relation2, isAutoAttackable(activeChar)));
+        			sendPacket(new RelationChanged(activeChar.getPet(), relation2, activeChar.isAutoAttackable(this)));
         	}
         	}
         	activeChar.sendPacket(new GetOnVehicle(getObjectId(), getBoat().getObjectId(), getInVehiclePosition()));
         	activeChar.sendPacket(new GetOnVehicle(getObjectId(), getBoat().getObjectId(), getInVehiclePosition()));
         }
         }
@@ -14349,15 +14360,15 @@ public final class L2PcInstance extends L2Playable
         	int relation2 = activeChar.getRelation(this);
         	int relation2 = activeChar.getRelation(this);
         	if (getKnownList().getKnownRelations().get(activeChar.getObjectId()) != null && getKnownList().getKnownRelations().get(activeChar.getObjectId()) != relation1)
         	if (getKnownList().getKnownRelations().get(activeChar.getObjectId()) != null && getKnownList().getKnownRelations().get(activeChar.getObjectId()) != relation1)
         	{
         	{
-        		activeChar.sendPacket(new RelationChanged(this, relation1, activeChar.isAutoAttackable(this)));
+        		activeChar.sendPacket(new RelationChanged(this, relation1, isAutoAttackable(activeChar)));
         		if (getPet() != null)
         		if (getPet() != null)
-        			activeChar.sendPacket(new RelationChanged(getPet(), relation1, activeChar.isAutoAttackable(this)));
+        			activeChar.sendPacket(new RelationChanged(getPet(), relation1, isAutoAttackable(activeChar)));
         	}
         	}
         	if (activeChar.getKnownList().getKnownRelations().get(getObjectId()) != null && activeChar.getKnownList().getKnownRelations().get(getObjectId()) != relation2)
         	if (activeChar.getKnownList().getKnownRelations().get(getObjectId()) != null && activeChar.getKnownList().getKnownRelations().get(getObjectId()) != relation2)
         	{
         	{
-        		sendPacket(new RelationChanged(activeChar, relation2, isAutoAttackable(activeChar)));
+        		sendPacket(new RelationChanged(activeChar, relation2, activeChar.isAutoAttackable(this)));
         		if (activeChar.getPet() != null)
         		if (activeChar.getPet() != null)
-        			sendPacket(new RelationChanged(activeChar.getPet(), relation2, isAutoAttackable(activeChar)));
+        			sendPacket(new RelationChanged(activeChar.getPet(), relation2, activeChar.isAutoAttackable(this)));
         	}
         	}
         	activeChar.sendPacket(new ExGetOnAirShip(this, getAirShip()));
         	activeChar.sendPacket(new ExGetOnAirShip(this, getAirShip()));
         }
         }
@@ -14369,15 +14380,15 @@ public final class L2PcInstance extends L2Playable
         	int relation2 = activeChar.getRelation(this);
         	int relation2 = activeChar.getRelation(this);
         	if (getKnownList().getKnownRelations().get(activeChar.getObjectId()) != null && getKnownList().getKnownRelations().get(activeChar.getObjectId()) != relation1)
         	if (getKnownList().getKnownRelations().get(activeChar.getObjectId()) != null && getKnownList().getKnownRelations().get(activeChar.getObjectId()) != relation1)
         	{
         	{
-        		activeChar.sendPacket(new RelationChanged(this, relation1, activeChar.isAutoAttackable(this)));
+        		activeChar.sendPacket(new RelationChanged(this, relation1, isAutoAttackable(activeChar)));
         		if (getPet() != null)
         		if (getPet() != null)
-        			activeChar.sendPacket(new RelationChanged(getPet(), relation1, activeChar.isAutoAttackable(this)));
+        			activeChar.sendPacket(new RelationChanged(getPet(), relation1, isAutoAttackable(activeChar)));
         	}
         	}
         	if (activeChar.getKnownList().getKnownRelations().get(getObjectId()) != null && activeChar.getKnownList().getKnownRelations().get(getObjectId()) != relation2)
         	if (activeChar.getKnownList().getKnownRelations().get(getObjectId()) != null && activeChar.getKnownList().getKnownRelations().get(getObjectId()) != relation2)
         	{
         	{
-        		sendPacket(new RelationChanged(activeChar, relation2, isAutoAttackable(activeChar)));
+        		sendPacket(new RelationChanged(activeChar, relation2, activeChar.isAutoAttackable(this)));
         		if (activeChar.getPet() != null)
         		if (activeChar.getPet() != null)
-        			sendPacket(new RelationChanged(activeChar.getPet(), relation2, isAutoAttackable(activeChar)));
+        			sendPacket(new RelationChanged(activeChar.getPet(), relation2, activeChar.isAutoAttackable(this)));
         	}
         	}
         }
         }
         if (getMountType() == 4)
         if (getMountType() == 4)

+ 29 - 11
L2_GameServer/java/com/l2jserver/gameserver/model/entity/Castle.java

@@ -26,6 +26,9 @@ import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.logging.Logger;
 
 
+import javolution.util.FastList;
+import javolution.util.FastMap;
+
 import com.l2jserver.Config;
 import com.l2jserver.Config;
 import com.l2jserver.L2DatabaseFactory;
 import com.l2jserver.L2DatabaseFactory;
 import com.l2jserver.gameserver.CastleUpdater;
 import com.l2jserver.gameserver.CastleUpdater;
@@ -36,12 +39,12 @@ import com.l2jserver.gameserver.datatables.DoorTable;
 import com.l2jserver.gameserver.datatables.ResidentialSkillTable;
 import com.l2jserver.gameserver.datatables.ResidentialSkillTable;
 import com.l2jserver.gameserver.instancemanager.CastleManager;
 import com.l2jserver.gameserver.instancemanager.CastleManager;
 import com.l2jserver.gameserver.instancemanager.CastleManorManager;
 import com.l2jserver.gameserver.instancemanager.CastleManorManager;
-import com.l2jserver.gameserver.instancemanager.FortManager;
-import com.l2jserver.gameserver.instancemanager.TerritoryWarManager;
-import com.l2jserver.gameserver.instancemanager.ZoneManager;
 import com.l2jserver.gameserver.instancemanager.CastleManorManager.CropProcure;
 import com.l2jserver.gameserver.instancemanager.CastleManorManager.CropProcure;
 import com.l2jserver.gameserver.instancemanager.CastleManorManager.SeedProduction;
 import com.l2jserver.gameserver.instancemanager.CastleManorManager.SeedProduction;
+import com.l2jserver.gameserver.instancemanager.FortManager;
+import com.l2jserver.gameserver.instancemanager.TerritoryWarManager;
 import com.l2jserver.gameserver.instancemanager.TerritoryWarManager.Territory;
 import com.l2jserver.gameserver.instancemanager.TerritoryWarManager.Territory;
+import com.l2jserver.gameserver.instancemanager.ZoneManager;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2Manor;
 import com.l2jserver.gameserver.model.L2Manor;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2Object;
@@ -51,14 +54,12 @@ import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
 import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
 import com.l2jserver.gameserver.model.zone.L2ZoneType;
 import com.l2jserver.gameserver.model.zone.L2ZoneType;
+import com.l2jserver.gameserver.model.zone.type.L2SiegeZone;
 import com.l2jserver.gameserver.model.zone.type.L2CastleTeleportZone;
 import com.l2jserver.gameserver.model.zone.type.L2CastleTeleportZone;
 import com.l2jserver.gameserver.model.zone.type.L2CastleZone;
 import com.l2jserver.gameserver.model.zone.type.L2CastleZone;
 import com.l2jserver.gameserver.network.serverpackets.PlaySound;
 import com.l2jserver.gameserver.network.serverpackets.PlaySound;
 import com.l2jserver.gameserver.network.serverpackets.PledgeShowInfoUpdate;
 import com.l2jserver.gameserver.network.serverpackets.PledgeShowInfoUpdate;
 
 
-import javolution.util.FastList;
-import javolution.util.FastMap;
-
 public class Castle
 public class Castle
 {
 {
 	protected static final Logger _log = Logger.getLogger(Castle.class.getName());
 	protected static final Logger _log = Logger.getLogger(Castle.class.getName());
@@ -92,7 +93,8 @@ public class Castle
 	private double _taxRate = 0;
 	private double _taxRate = 0;
 	private long _treasury = 0;
 	private long _treasury = 0;
 	private boolean _showNpcCrest = false;
 	private boolean _showNpcCrest = false;
-	private L2CastleZone _zone = null;
+	private L2SiegeZone _zone = null;
+	private L2CastleZone _castleZone = null;
 	private L2CastleTeleportZone _teleZone;
 	private L2CastleTeleportZone _teleZone;
 	private L2Clan _formerOwner = null;
 	private L2Clan _formerOwner = null;
 	private List<L2ArtefactInstance> _artefacts = new ArrayList<L2ArtefactInstance>(1);
 	private List<L2ArtefactInstance> _artefacts = new ArrayList<L2ArtefactInstance>(1);
@@ -377,7 +379,7 @@ public class Castle
 	 */
 	 */
 	public void banishForeigners()
 	public void banishForeigners()
 	{
 	{
-		getZone().banishForeigners(getOwnerId());
+		getCastleZone().banishForeigners(getOwnerId());
 	}
 	}
 	
 	
 	/**
 	/**
@@ -388,15 +390,15 @@ public class Castle
 		return getZone().isInsideZone(x, y, z);
 		return getZone().isInsideZone(x, y, z);
 	}
 	}
 	
 	
-	public L2CastleZone getZone()
+	public L2SiegeZone getZone()
 	{
 	{
 		if (_zone == null)
 		if (_zone == null)
 		{
 		{
 			for (L2ZoneType zone : ZoneManager.getInstance().getAllZones())
 			for (L2ZoneType zone : ZoneManager.getInstance().getAllZones())
 			{
 			{
-				if (zone instanceof L2CastleZone && ((L2CastleZone) zone).getCastleId() == getCastleId())
+				if (zone instanceof L2SiegeZone && ((L2SiegeZone) zone).getSiegeObjectId() == getCastleId())
 				{
 				{
-					_zone = (L2CastleZone) zone;
+					_zone = (L2SiegeZone) zone;
 					break;
 					break;
 				}
 				}
 			}
 			}
@@ -404,6 +406,22 @@ public class Castle
 		return _zone;
 		return _zone;
 	}
 	}
 	
 	
+	public L2CastleZone getCastleZone()
+	{
+		if (_castleZone == null)
+		{
+			for (L2ZoneType zone : ZoneManager.getInstance().getAllZones())
+			{
+				if (zone instanceof L2CastleZone && ((L2CastleZone) zone).getCastleId() == getCastleId())
+				{
+					_castleZone = (L2CastleZone) zone;
+					break;
+				}
+			}
+		}
+		return _castleZone;
+	}
+	
 	public L2CastleTeleportZone getTeleZone()
 	public L2CastleTeleportZone getTeleZone()
 	{
 	{
 		if (_teleZone == null)
 		if (_teleZone == null)

+ 26 - 8
L2_GameServer/java/com/l2jserver/gameserver/model/entity/Fort.java

@@ -26,6 +26,9 @@ import java.util.concurrent.ScheduledFuture;
 import java.util.logging.Level;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.logging.Logger;
 
 
+import javolution.util.FastList;
+import javolution.util.FastMap;
+
 import com.l2jserver.Config;
 import com.l2jserver.Config;
 import com.l2jserver.L2DatabaseFactory;
 import com.l2jserver.L2DatabaseFactory;
 import com.l2jserver.gameserver.FortUpdater;
 import com.l2jserver.gameserver.FortUpdater;
@@ -48,15 +51,13 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2StaticObjectInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2StaticObjectInstance;
 import com.l2jserver.gameserver.model.zone.L2ZoneType;
 import com.l2jserver.gameserver.model.zone.L2ZoneType;
 import com.l2jserver.gameserver.model.zone.type.L2FortZone;
 import com.l2jserver.gameserver.model.zone.type.L2FortZone;
+import com.l2jserver.gameserver.model.zone.type.L2SiegeZone;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.PlaySound;
 import com.l2jserver.gameserver.network.serverpackets.PlaySound;
 import com.l2jserver.gameserver.network.serverpackets.PledgeShowInfoUpdate;
 import com.l2jserver.gameserver.network.serverpackets.PledgeShowInfoUpdate;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
 import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
 
 
-import javolution.util.FastList;
-import javolution.util.FastMap;
-
 
 
 public class Fort
 public class Fort
 {
 {
@@ -73,7 +74,8 @@ public class Fort
 	private FortSiege _siege = null;
 	private FortSiege _siege = null;
 	private Calendar _siegeDate;
 	private Calendar _siegeDate;
 	private Calendar _lastOwnedTime;
 	private Calendar _lastOwnedTime;
-	private L2FortZone _zone;
+	private L2FortZone _fortZone;
+	private L2SiegeZone _zone;
 	private L2Clan _fortOwner = null;
 	private L2Clan _fortOwner = null;
 	private int _fortType = 0;
 	private int _fortType = 0;
 	private int _state = 0;
 	private int _state = 0;
@@ -317,7 +319,7 @@ public class Fort
 	 */
 	 */
 	public void banishForeigners()
 	public void banishForeigners()
 	{
 	{
-		getZone().banishForeigners(getOwnerClan());
+		getFortZone().banishForeigners(getOwnerClan());
 	}
 	}
 	
 	
 	/**
 	/**
@@ -328,15 +330,15 @@ public class Fort
 		return getZone().isInsideZone(x, y, z);
 		return getZone().isInsideZone(x, y, z);
 	}
 	}
 	
 	
-	public L2FortZone getZone()
+	public L2SiegeZone getZone()
 	{
 	{
 		if (_zone == null)
 		if (_zone == null)
 		{
 		{
 			for (L2ZoneType zone : ZoneManager.getInstance().getAllZones())
 			for (L2ZoneType zone : ZoneManager.getInstance().getAllZones())
 			{
 			{
-				if (zone instanceof L2FortZone && ((L2FortZone) zone).getFortId() == getFortId())
+				if (zone instanceof L2SiegeZone && ((L2SiegeZone) zone).getSiegeObjectId() == getFortId())
 				{
 				{
-					_zone = (L2FortZone) zone;
+					_zone = (L2SiegeZone) zone;
 					break;
 					break;
 				}
 				}
 			}
 			}
@@ -344,6 +346,22 @@ public class Fort
 		return _zone;
 		return _zone;
 	}
 	}
 	
 	
+	public L2FortZone getFortZone()
+	{
+		if (_fortZone == null)
+		{
+			for (L2ZoneType zone : ZoneManager.getInstance().getAllZones())
+			{
+				if (zone instanceof L2FortZone && ((L2FortZone) zone).getFortId() == getFortId())
+				{
+					_fortZone = (L2FortZone) zone;
+					break;
+				}
+			}
+		}
+		return _fortZone;
+	}
+	
 	/**
 	/**
 	 * Get the objects distance to this fort
 	 * Get the objects distance to this fort
 	 * @param object
 	 * @param object

+ 29 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/entity/FortSiege.java

@@ -269,6 +269,7 @@ public class FortSiege implements Siegable
 			getFort().getZone().banishForeigners(getFort().getOwnerClan());
 			getFort().getZone().banishForeigners(getFort().getOwnerClan());
 			getFort().getZone().setIsActive(false);
 			getFort().getZone().setIsActive(false);
 			getFort().getZone().updateZoneStatusForCharactersInside();
 			getFort().getZone().updateZoneStatusForCharactersInside();
+			getFort().getZone().setSiegeInstance(null);
 			
 			
 			saveFortSiege(); // Save fort specific data
 			saveFortSiege(); // Save fort specific data
 			clearSiegeClan(); // Clear siege clan from db
 			clearSiegeClan(); // Clear siege clan from db
@@ -321,7 +322,7 @@ public class FortSiege implements Siegable
 			getFort().resetDoors(); // Spawn door
 			getFort().resetDoors(); // Spawn door
 			spawnSiegeGuard(); // Spawn siege guard
 			spawnSiegeGuard(); // Spawn siege guard
 			getFort().setVisibleFlag(false);
 			getFort().setVisibleFlag(false);
-			
+			getFort().getZone().setSiegeInstance(this);
 			getFort().getZone().setIsActive(true);
 			getFort().getZone().setIsActive(true);
 			getFort().getZone().updateZoneStatusForCharactersInside();
 			getFort().getZone().updateZoneStatusForCharactersInside();
 			
 			
@@ -1232,4 +1233,31 @@ public class FortSiege implements Siegable
 	{
 	{
 		return null;
 		return null;
 	}
 	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#giveFame()
+	 */
+	@Override
+	public boolean giveFame()
+	{
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getFameFrequency()
+	 */
+	@Override
+	public int getFameFrequency()
+	{
+		return Config.FORTRESS_ZONE_FAME_TASK_FREQUENCY;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getFameAmount()
+	 */
+	@Override
+	public int getFameAmount()
+	{
+		return Config.FORTRESS_ZONE_FAME_AQUIRE_POINTS;
+	}
 }
 }

+ 4 - 0
L2_GameServer/java/com/l2jserver/gameserver/model/entity/Siegable.java

@@ -53,4 +53,8 @@ public interface Siegable
 	public List<L2Npc> getFlag(L2Clan clan);
 	public List<L2Npc> getFlag(L2Clan clan);
 	
 	
 	public Calendar getSiegeDate();
 	public Calendar getSiegeDate();
+	
+	public boolean giveFame();
+	public int getFameFrequency();
+	public int getFameAmount();
 }
 }

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

@@ -306,6 +306,7 @@ public class Siege implements Siegable
 			getCastle().spawnDoor(); // Respawn door to castle
 			getCastle().spawnDoor(); // Respawn door to castle
 			getCastle().getZone().setIsActive(false);
 			getCastle().getZone().setIsActive(false);
 			getCastle().getZone().updateZoneStatusForCharactersInside();
 			getCastle().getZone().updateZoneStatusForCharactersInside();
+			getCastle().getZone().setSiegeInstance(null);
 		}
 		}
 	}
 	}
 
 
@@ -472,6 +473,7 @@ public class Siege implements Siegable
 			getCastle().spawnDoor(); // Spawn door
 			getCastle().spawnDoor(); // Spawn door
 			spawnSiegeGuard(); // Spawn siege guard
 			spawnSiegeGuard(); // Spawn siege guard
 			MercTicketManager.getInstance().deleteTickets(getCastle().getCastleId()); // remove the tickets from the ground
 			MercTicketManager.getInstance().deleteTickets(getCastle().getCastleId()); // remove the tickets from the ground
+			getCastle().getZone().setSiegeInstance(this);
 			getCastle().getZone().setIsActive(true);
 			getCastle().getZone().setIsActive(true);
 			getCastle().getZone().updateZoneStatusForCharactersInside();
 			getCastle().getZone().updateZoneStatusForCharactersInside();
 
 
@@ -554,15 +556,12 @@ public class Siege implements Siegable
 				{
 				{
 					for (L2PcInstance player : member.getKnownList().getKnownPlayers().values())
 					for (L2PcInstance player : member.getKnownList().getKnownPlayers().values())
 					{
 					{
-						try
-						{
-							player.sendPacket(new RelationChanged(member, member.getRelation(player), member.isAutoAttackable(player)));
-							if (member.getPet() != null)
-								player.sendPacket(new RelationChanged(member.getPet(), member.getRelation(player), member.isAutoAttackable(player)));
-						}
-						catch (NullPointerException e)
-						{
-						}
+						if (player == null)
+							continue;
+						
+						player.sendPacket(new RelationChanged(member, member.getRelation(player), member.isAutoAttackable(player)));
+						if (member.getPet() != null)
+							player.sendPacket(new RelationChanged(member.getPet(), member.getRelation(player), member.isAutoAttackable(player)));
 					}
 					}
 				}
 				}
 			}
 			}
@@ -601,15 +600,11 @@ public class Siege implements Siegable
 				{
 				{
 					for (L2PcInstance player : member.getKnownList().getKnownPlayers().values())
 					for (L2PcInstance player : member.getKnownList().getKnownPlayers().values())
 					{
 					{
-						try
-						{
-							player.sendPacket(new RelationChanged(member, member.getRelation(player), member.isAutoAttackable(player)));
-							if (member.getPet() != null)
-								player.sendPacket(new RelationChanged(member.getPet(), member.getRelation(player), member.isAutoAttackable(player)));
-						}
-						catch (NullPointerException e)
-						{
-						}
+						if (player == null)
+							continue;
+						player.sendPacket(new RelationChanged(member, member.getRelation(player), member.isAutoAttackable(player)));
+						if (member.getPet() != null)
+							player.sendPacket(new RelationChanged(member.getPet(), member.getRelation(player), member.isAutoAttackable(player)));
 					}
 					}
 				}
 				}
 			}
 			}
@@ -1375,11 +1370,6 @@ public class Siege implements Siegable
 
 
 			L2NpcTemplate template = NpcTable.getInstance().getTemplate(_sp.getNpcId());
 			L2NpcTemplate template = NpcTable.getInstance().getTemplate(_sp.getNpcId());
 
 
-			// TODO: Check/confirm if control towers have any special weapon resistances/vulnerabilities
-			// template.addVulnerability(Stats.BOW_WPN_VULN,0);
-			// template.addVulnerability(Stats.BLUNT_WPN_VULN,0);
-			// template.addVulnerability(Stats.DAGGER_WPN_VULN,0);
-
 			ct = new L2ControlTowerInstance(IdFactory.getInstance().getNextId(), template);
 			ct = new L2ControlTowerInstance(IdFactory.getInstance().getNextId(), template);
 
 
 			ct.setCurrentHpMp(_sp.getHp(), ct.getMaxMp());
 			ct.setCurrentHpMp(_sp.getHp(), ct.getMaxMp());
@@ -1612,4 +1602,31 @@ public class Siege implements Siegable
 		//return true;
 		//return true;
 		return _flameTowerCount > 0;
 		return _flameTowerCount > 0;
 	}
 	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#giveFame()
+	 */
+	@Override
+	public boolean giveFame()
+	{
+		return true;
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getFameFrequency()
+	 */
+	@Override
+	public int getFameFrequency()
+	{
+		return Config.CASTLE_ZONE_FAME_TASK_FREQUENCY;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.entity.Siegable#getFameAmount()
+	 */
+	@Override
+	public int getFameAmount()
+	{
+		return Config.CASTLE_ZONE_FAME_AQUIRE_POINTS;
+	}
 }
 }

+ 12 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/olympiad/OlympiadGame.java

@@ -963,13 +963,24 @@ class OlympiadGame
  	{
  	{
 		int objId;
 		int objId;
 		String npcName;
 		String npcName;
+		String gameType = null;
+		switch (_type)
+		{
+			case NON_CLASSED:
+				gameType = "class-free individual match";
+				break;
+			default:
+				gameType = "class-specific individual match";
+				break;
+		}
+		
 		for (L2Spawn manager : SpawnTable.getInstance().getSpawnTable().values())
 		for (L2Spawn manager : SpawnTable.getInstance().getSpawnTable().values())
 		{
 		{
 			if (manager != null && manager.getNpcid() == OLY_MANAGER)
 			if (manager != null && manager.getNpcid() == OLY_MANAGER)
 			{
 			{
 				objId = manager.getLastSpawn().getObjectId();
 				objId = manager.getLastSpawn().getObjectId();
 				npcName = manager.getLastSpawn().getName();
 				npcName = manager.getLastSpawn().getName();
-				manager.getLastSpawn().broadcastPacket(new CreatureSay(objId, Say2.SHOUT, npcName, "Olympiad is going to begin in Arena " + (_stadiumID + 1) + " in a moment."));
+				manager.getLastSpawn().broadcastPacket(new CreatureSay(objId, Say2.SHOUT, npcName, "Olympiad " + gameType + " is going to begin in Arena " + (_stadiumID + 1) + " in a moment."));
 			}
 			}
 		}
 		}
 	}
 	}

+ 0 - 160
L2_GameServer/java/com/l2jserver/gameserver/model/zone/type/L2CastleZone.java

@@ -14,21 +14,12 @@
  */
  */
 package com.l2jserver.gameserver.model.zone.type;
 package com.l2jserver.gameserver.model.zone.type;
 
 
-import com.l2jserver.Config;
 import com.l2jserver.gameserver.datatables.MapRegionTable;
 import com.l2jserver.gameserver.datatables.MapRegionTable;
-import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.instancemanager.CastleManager;
 import com.l2jserver.gameserver.instancemanager.CastleManager;
-import com.l2jserver.gameserver.model.L2Effect;
-import com.l2jserver.gameserver.model.L2Skill;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2SiegeSummonInstance;
 import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.zone.L2SpawnZone;
 import com.l2jserver.gameserver.model.zone.L2SpawnZone;
-import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
-
-import javolution.util.FastList;
 
 
 /**
 /**
  * A castle zone
  * A castle zone
@@ -39,8 +30,6 @@ public class L2CastleZone extends L2SpawnZone
 {
 {
 	private int _castleId;
 	private int _castleId;
 	private Castle _castle = null;
 	private Castle _castle = null;
-	private boolean _isActiveSiege = false;
-	private static final int DISMOUNT_DELAY = 5;
 	
 	
 	public L2CastleZone(int id)
 	public L2CastleZone(int id)
 	{
 	{
@@ -63,27 +52,6 @@ public class L2CastleZone extends L2SpawnZone
 	{
 	{
 		if (getCastle() != null)
 		if (getCastle() != null)
 		{
 		{
-			if (_isActiveSiege)
-			{
-				character.setInsideZone(L2Character.ZONE_PVP, true);
-				character.setInsideZone(L2Character.ZONE_SIEGE, true);
-				character.setInsideZone(L2Character.ZONE_NOSUMMONFRIEND, true);
-				
-				if (character instanceof L2PcInstance)
-				{
-					if (((L2PcInstance) character).isRegisteredOnThisSiegeField(getCastle().getCastleId()))
-					{
-						((L2PcInstance) character).setIsInSiege(true);
-						((L2PcInstance) character).startFameTask(Config.CASTLE_ZONE_FAME_TASK_FREQUENCY * 1000, Config.CASTLE_ZONE_FAME_AQUIRE_POINTS);
-					}
-					((L2PcInstance) character).sendPacket(new SystemMessage(SystemMessageId.ENTERED_COMBAT_ZONE));
-					if (!Config.ALLOW_WYVERN_DURING_SIEGE && ((L2PcInstance) character).getMountType() == 2)
-					{
-						character.sendPacket(new SystemMessage(SystemMessageId.AREA_CANNOT_BE_ENTERED_WHILE_MOUNTED_WYVERN));
-						((L2PcInstance) character).enteredNoLanding(DISMOUNT_DELAY);
-					}
-				}
-			}
 			character.setInsideZone(L2Character.ZONE_CASTLE, true);
 			character.setInsideZone(L2Character.ZONE_CASTLE, true);
 		}
 		}
 	}
 	}
@@ -93,55 +61,13 @@ public class L2CastleZone extends L2SpawnZone
 	{
 	{
 		if (getCastle() != null)
 		if (getCastle() != null)
 		{
 		{
-			if (_isActiveSiege)
-			{
-				
-				if (character instanceof L2PcInstance)
-				{
-					((L2PcInstance) character).sendPacket(new SystemMessage(SystemMessageId.LEFT_COMBAT_ZONE));
-					if (((L2PcInstance) character).getMountType() == 2)
-					{
-						((L2PcInstance) character).exitedNoLanding();
-					}
-					// Set pvp flag
-					if (((L2PcInstance) character).getPvpFlag() == 0)
-						((L2PcInstance) character).startPvPFlag();
-				}
-			}
-			if (character instanceof L2PcInstance)
-			{
-				((L2PcInstance) character).stopFameTask();
-				((L2PcInstance) character).setIsInSiege(false);
-			}
-			character.setInsideZone(L2Character.ZONE_PVP, false);
-			character.setInsideZone(L2Character.ZONE_SIEGE, false);
 			character.setInsideZone(L2Character.ZONE_CASTLE, false);
 			character.setInsideZone(L2Character.ZONE_CASTLE, false);
-			character.setInsideZone(L2Character.ZONE_NOSUMMONFRIEND, false);
-		}
-		if (character instanceof L2SiegeSummonInstance)
-		{
-			((L2SiegeSummonInstance) character).unSummon(((L2SiegeSummonInstance) character).getOwner());
 		}
 		}
 	}
 	}
 	
 	
 	@Override
 	@Override
 	public void onDieInside(L2Character character)
 	public void onDieInside(L2Character character)
 	{
 	{
-		if (getCastle() != null && _isActiveSiege)
-		{
-			// debuff participants only if they die inside siege zone
-			if (character instanceof L2PcInstance && ((L2PcInstance) character).isRegisteredOnThisSiegeField(getCastle().getCastleId()))
-			{
-				int lvl = 1;
-				final L2Effect e = character.getFirstEffect(5660);
-				if (e != null)
-					lvl = Math.min(lvl + e.getLevel(), 5);
-
-				final L2Skill skill = SkillTable.getInstance().getInfo(5660, lvl);
-				if (skill != null)
-					skill.getEffects(character, character);
-			}
-		}
 	}
 	}
 	
 	
 	@Override
 	@Override
@@ -149,52 +75,6 @@ public class L2CastleZone extends L2SpawnZone
 	{
 	{
 	}
 	}
 	
 	
-	public void updateZoneStatusForCharactersInside()
-	{
-		if (getCastle() != null && _isActiveSiege)
-		{
-			for (L2Character character : _characterList.values())
-			{
-				try
-				{
-					onEnter(character);
-				}
-				catch (NullPointerException e)
-				{
-				}
-			}
-		}
-		else
-		{
-			for (L2Character character : _characterList.values())
-			{
-				try
-				{
-					character.setInsideZone(L2Character.ZONE_PVP, false);
-					character.setInsideZone(L2Character.ZONE_SIEGE, false);
-					character.setInsideZone(L2Character.ZONE_NOSUMMONFRIEND, false);
-					
-					if (character instanceof L2PcInstance)
-					{
-						((L2PcInstance) character).sendPacket(new SystemMessage(SystemMessageId.LEFT_COMBAT_ZONE));
-						((L2PcInstance) character).stopFameTask();
-						if (((L2PcInstance) character).getMountType() == 2)
-						{
-							((L2PcInstance) character).exitedNoLanding();
-						}
-					}
-					if (character instanceof L2SiegeSummonInstance)
-					{
-						((L2SiegeSummonInstance) character).unSummon(((L2SiegeSummonInstance) character).getOwner());
-					}
-				}
-				catch (NullPointerException e)
-				{
-				}
-			}
-		}
-	}
-	
 	/**
 	/**
 	 * Removes all foreigners from the castle
 	 * Removes all foreigners from the castle
 	 * @param owningClanId
 	 * @param owningClanId
@@ -212,51 +92,11 @@ public class L2CastleZone extends L2SpawnZone
 		}
 		}
 	}
 	}
 	
 	
-	/**
-	 * Sends a message to all players in this zone
-	 * @param message
-	 */
-	public void announceToPlayers(String message)
-	{
-		for (L2Character temp : _characterList.values())
-		{
-			if (temp instanceof L2PcInstance)
-				((L2PcInstance) temp).sendMessage(message);
-		}
-	}
-	
-	/**
-	 * Returns all players within this zone
-	 * @return
-	 */
-	public FastList<L2PcInstance> getAllPlayers()
-	{
-		FastList<L2PcInstance> players = new FastList<L2PcInstance>();
-		
-		for (L2Character temp : _characterList.values())
-		{
-			if (temp instanceof L2PcInstance)
-				players.add((L2PcInstance) temp);
-		}
-		
-		return players;
-	}
-	
 	public int getCastleId()
 	public int getCastleId()
 	{
 	{
 		return _castleId;
 		return _castleId;
 	}
 	}
 	
 	
-	public boolean isActive()
-	{
-		return _isActiveSiege;
-	}
-	
-	public void setIsActive(boolean val)
-	{
-		_isActiveSiege = val;
-	}
-	
 	private final Castle getCastle()
 	private final Castle getCastle()
 	{
 	{
 		if (_castle == null)
 		if (_castle == null)

+ 6 - 190
L2_GameServer/java/com/l2jserver/gameserver/model/zone/type/L2FortZone.java

@@ -14,25 +14,11 @@
  */
  */
 package com.l2jserver.gameserver.model.zone.type;
 package com.l2jserver.gameserver.model.zone.type;
 
 
-import java.util.logging.Level;
-
-import com.l2jserver.Config;
 import com.l2jserver.gameserver.datatables.MapRegionTable;
 import com.l2jserver.gameserver.datatables.MapRegionTable;
-import com.l2jserver.gameserver.datatables.SkillTable;
-import com.l2jserver.gameserver.instancemanager.FortManager;
-import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2Clan;
-import com.l2jserver.gameserver.model.L2Effect;
-import com.l2jserver.gameserver.model.L2Skill;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2SiegeSummonInstance;
-import com.l2jserver.gameserver.model.entity.Fort;
 import com.l2jserver.gameserver.model.zone.L2SpawnZone;
 import com.l2jserver.gameserver.model.zone.L2SpawnZone;
-import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
-
-import javolution.util.FastList;
 
 
 /**
 /**
  * A castle zone
  * A castle zone
@@ -42,9 +28,6 @@ import javolution.util.FastList;
 public class L2FortZone extends L2SpawnZone
 public class L2FortZone extends L2SpawnZone
 {
 {
 	private int _fortId;
 	private int _fortId;
-	private Fort _fort = null;
-	private boolean _isActiveSiege = false;
-	private static final int DISMOUNT_DELAY = 5;
 	
 	
 	public L2FortZone(int id)
 	public L2FortZone(int id)
 	{
 	{
@@ -66,148 +49,27 @@ public class L2FortZone extends L2SpawnZone
 	protected void onEnter(L2Character character)
 	protected void onEnter(L2Character character)
 	{
 	{
 		character.setInsideZone(L2Character.ZONE_FORT, true);
 		character.setInsideZone(L2Character.ZONE_FORT, true);
-		if (getFort() != null && _isActiveSiege)
-		{
-			character.setInsideZone(L2Character.ZONE_PVP, true);
-			character.setInsideZone(L2Character.ZONE_SIEGE, true);
-			character.setInsideZone(L2Character.ZONE_NOSUMMONFRIEND, true);
-			
-			if (character instanceof L2PcInstance)
-			{
-				((L2PcInstance) character).sendPacket(new SystemMessage(SystemMessageId.ENTERED_COMBAT_ZONE));
-				if (((L2PcInstance) character).isRegisteredOnThisSiegeField(getFort().getFortId()))
-				{
-					((L2PcInstance) character).startFameTask(Config.FORTRESS_ZONE_FAME_TASK_FREQUENCY * 1000, Config.FORTRESS_ZONE_FAME_AQUIRE_POINTS);
-					((L2PcInstance) character).setIsInSiege(true);
-				}
-				if (!Config.ALLOW_WYVERN_DURING_SIEGE && ((L2PcInstance) character).getMountType() == 2)
-				{
-					character.sendPacket(new SystemMessage(SystemMessageId.AREA_CANNOT_BE_ENTERED_WHILE_MOUNTED_WYVERN));
-					((L2PcInstance) character).enteredNoLanding(DISMOUNT_DELAY);
-				}
-			}
-		}
 	}
 	}
 	
 	
 	@Override
 	@Override
 	protected void onExit(L2Character character)
 	protected void onExit(L2Character character)
 	{
 	{
 		character.setInsideZone(L2Character.ZONE_FORT, false);
 		character.setInsideZone(L2Character.ZONE_FORT, false);
-		character.setInsideZone(L2Character.ZONE_PVP, false);
-		character.setInsideZone(L2Character.ZONE_SIEGE, false);
-		character.setInsideZone(L2Character.ZONE_NOSUMMONFRIEND, false);
-		if (getFort() != null && _isActiveSiege)
-		{
-			if (character instanceof L2PcInstance)
-			{
-				((L2PcInstance) character).sendPacket(new SystemMessage(SystemMessageId.LEFT_COMBAT_ZONE));
-
-				if (((L2PcInstance) character).getMountType() == 2)
-				{
-					((L2PcInstance) character).exitedNoLanding();
-				}
-				// Set pvp flag
-				if (((L2PcInstance) character).getPvpFlag() == 0)
-					((L2PcInstance) character).startPvPFlag();
-			}
-		}
-		if (character instanceof L2SiegeSummonInstance)
-		{
-			((L2SiegeSummonInstance) character).unSummon(((L2SiegeSummonInstance) character).getOwner());
-		}
-		if (character instanceof L2PcInstance)
-		{
-			L2PcInstance activeChar = ((L2PcInstance)character);
-			
-			activeChar.stopFameTask();
-			activeChar.setIsInSiege(false);
-			
-			if (activeChar.getInventory().getItemByItemId(9819) != null)
-			{
-				Fort fort = FortManager.getInstance().getFort(activeChar);
-				if (fort != null)
-				{
-					FortSiegeManager.getInstance().dropCombatFlag(activeChar);
-				}
-				else
-				{
-					int slot = activeChar.getInventory().getSlotFromItem(activeChar.getInventory().getItemByItemId(9819));
-					activeChar.getInventory().unEquipItemInBodySlotAndRecord(slot);
-					activeChar.destroyItem("CombatFlag", activeChar.getInventory().getItemByItemId(9819), null, true);
-				}
-			}
-		}
 	}
 	}
 	
 	
 	@Override
 	@Override
 	public void onDieInside(L2Character character)
 	public void onDieInside(L2Character character)
 	{
 	{
-		if (getFort() != null && _isActiveSiege)
-		{
-			// debuff participants only if they die inside siege zone
-			if (character instanceof L2PcInstance && ((L2PcInstance)character).isRegisteredOnThisSiegeField(getFort().getFortId()))
-			{
-				int lvl = 1;
-				final L2Effect e = character.getFirstEffect(5660);
-				if (e != null)
-					lvl = Math.min(lvl + e.getLevel(), 5);
-
-				final L2Skill skill = SkillTable.getInstance().getInfo(5660, lvl);
-				if (skill != null)
-					skill.getEffects(character, character);
-			}
-		}
+		
 	}
 	}
-
+	
 	@Override
 	@Override
-	public void onReviveInside(L2Character character) {}
-
+	public void onReviveInside(L2Character character)
+	{
+	}
+	
 	public void updateZoneStatusForCharactersInside()
 	public void updateZoneStatusForCharactersInside()
 	{
 	{
-		if (getFort() != null && _isActiveSiege)
-		{
-			for (L2Character character : _characterList.values())
-			{
-				try
-				{
-					onEnter(character);
-				}
-				catch (NullPointerException e)
-				{
-					_log.log(Level.WARNING, "Exception on onEnter(): " + e.getMessage(), e);
-				}
-			}
-		}
-		else
-		{
-			for (L2Character character : _characterList.values())
-			{
-				try
-				{
-					character.setInsideZone(L2Character.ZONE_PVP, false);
-					character.setInsideZone(L2Character.ZONE_SIEGE, false);
-					character.setInsideZone(L2Character.ZONE_NOSUMMONFRIEND, false);
-					
-					if (character instanceof L2PcInstance)
-					{
-						((L2PcInstance) character).sendPacket(new SystemMessage(SystemMessageId.LEFT_COMBAT_ZONE));
-						((L2PcInstance) character).stopFameTask();
-						if (((L2PcInstance) character).getMountType() == 2)
-						{
-							((L2PcInstance) character).exitedNoLanding();
-						}
-					}
-					if (character instanceof L2SiegeSummonInstance)
-					{
-						((L2SiegeSummonInstance) character).unSummon(((L2SiegeSummonInstance) character).getOwner());
-					}
-				}
-				catch (NullPointerException e)
-				{
-					_log.log(Level.WARNING, "Exception on updateZoneStatusForCharactersInside(): " + e.getMessage(), e);
-				}
-			}
-		}
 	}
 	}
 	
 	
 	/**
 	/**
@@ -227,55 +89,9 @@ public class L2FortZone extends L2SpawnZone
 		}
 		}
 	}
 	}
 	
 	
-	/**
-	 * Sends a message to all players in this zone
-	 * @param message
-	 */
-	public void announceToPlayers(String message)
-	{
-		for (L2Character temp : _characterList.values())
-		{
-			if (temp instanceof L2PcInstance)
-				((L2PcInstance) temp).sendMessage(message);
-		}
-	}
-	
-	/**
-	 * Returns all players within this zone
-	 * @return
-	 */
-	public FastList<L2PcInstance> getAllPlayers()
-	{
-		FastList<L2PcInstance> players = new FastList<L2PcInstance>();
-		
-		for (L2Character temp : _characterList.values())
-		{
-			if (temp instanceof L2PcInstance)
-				players.add((L2PcInstance) temp);
-		}
-		
-		return players;
-	}
-	
 	public int getFortId()
 	public int getFortId()
 	{
 	{
 		return _fortId;
 		return _fortId;
 	}
 	}
 	
 	
-	private final Fort getFort()
-	{
-		if (_fort == null)
-			_fort = FortManager.getInstance().getFortById(_fortId);
-		return _fort;
-	}
-	
-	public boolean isActive()
-	{
-		return _isActiveSiege;
-	}
-	
-	public void setIsActive(boolean val)
-	{
-		_isActiveSiege = val;
-	}
 }
 }

+ 287 - 0
L2_GameServer/java/com/l2jserver/gameserver/model/zone/type/L2SiegeZone.java

@@ -0,0 +1,287 @@
+/*
+ * This program 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.
+ * 
+ * This program 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 javolution.util.FastList;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.datatables.MapRegionTable;
+import com.l2jserver.gameserver.datatables.SkillTable;
+import com.l2jserver.gameserver.instancemanager.FortManager;
+import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
+import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.model.L2Effect;
+import com.l2jserver.gameserver.model.L2Skill;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2SiegeSummonInstance;
+import com.l2jserver.gameserver.model.entity.Fort;
+import com.l2jserver.gameserver.model.entity.FortSiege;
+import com.l2jserver.gameserver.model.entity.Siegable;
+import com.l2jserver.gameserver.model.zone.L2ZoneType;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+
+/**
+ * A  siege zone
+ *
+ * @author  durgus
+ */
+public class L2SiegeZone extends L2ZoneType
+{
+	private int _siegableId = -1;
+	private Siegable _siege = null;
+	private boolean _isActiveSiege = false;
+	private static final int DISMOUNT_DELAY = 5;
+	
+	public L2SiegeZone(int id)
+	{
+		super(id);
+	}
+	
+	@Override
+	public void setParameter(String name, String value)
+	{
+		if (name.equals("castleId"))
+		{
+			if (_siegableId != -1)
+				throw new IllegalArgumentException("Siege object already defined!");
+			_siegableId = Integer.parseInt(value);
+		}
+		else if (name.equals("fortId"))
+		{
+			if (_siegableId != -1)
+				throw new IllegalArgumentException("Siege object already defined!");
+			_siegableId = Integer.parseInt(value);
+		}
+		else if (name.equals("clanHallId"))
+		{
+			if (_siegableId != -1)
+				throw new IllegalArgumentException("Siege object already defined!");
+			_siegableId = Integer.parseInt(value);
+			//TODO clan hall siege
+		}
+		else
+			super.setParameter(name, value);
+	}
+	
+	@Override
+	protected void onEnter(L2Character character)
+	{
+		if (_isActiveSiege)
+		{
+			character.setInsideZone(L2Character.ZONE_PVP, true);
+			character.setInsideZone(L2Character.ZONE_SIEGE, true);
+			character.setInsideZone(L2Character.ZONE_NOSUMMONFRIEND, true);
+			
+			if (character instanceof L2PcInstance)
+			{
+				
+				if (((L2PcInstance) character).isRegisteredOnThisSiegeField(_siegableId))
+				{
+					((L2PcInstance) character).setIsInSiege(true); // in siege
+					if (_siege.giveFame())
+						((L2PcInstance) character).startFameTask(_siege.getFameFrequency() * 1000, _siege.getFameAmount());
+				}
+				((L2PcInstance) character).sendPacket(new SystemMessage(SystemMessageId.ENTERED_COMBAT_ZONE));
+				if (!Config.ALLOW_WYVERN_DURING_SIEGE && ((L2PcInstance) character).getMountType() == 2)
+				{
+					character.sendPacket(new SystemMessage(SystemMessageId.AREA_CANNOT_BE_ENTERED_WHILE_MOUNTED_WYVERN));
+					((L2PcInstance) character).enteredNoLanding(DISMOUNT_DELAY);
+				}
+			}
+		}
+	}
+	
+	@Override
+	protected void onExit(L2Character character)
+	{
+		character.setInsideZone(L2Character.ZONE_PVP, false);
+		character.setInsideZone(L2Character.ZONE_SIEGE, false);
+		character.setInsideZone(L2Character.ZONE_NOSUMMONFRIEND, false);
+		if (_isActiveSiege)
+		{
+			if (character instanceof L2PcInstance)
+			{
+				((L2PcInstance) character).sendPacket(new SystemMessage(SystemMessageId.LEFT_COMBAT_ZONE));
+				if (((L2PcInstance) character).getMountType() == 2)
+				{
+					((L2PcInstance) character).exitedNoLanding();
+				}
+				// Set pvp flag
+				if (((L2PcInstance) character).getPvpFlag() == 0)
+					((L2PcInstance) character).startPvPFlag();
+			}
+		}
+		if (character instanceof L2PcInstance)
+		{
+			L2PcInstance activeChar = (L2PcInstance) character;
+			activeChar.stopFameTask();
+			activeChar.setIsInSiege(false);
+			
+			if (_siege instanceof FortSiege && activeChar.getInventory().getItemByItemId(9819) != null)
+			{
+				// drop combat flag
+				Fort fort = FortManager.getInstance().getFortById(_siegableId);
+				if (fort != null)
+				{
+					FortSiegeManager.getInstance().dropCombatFlag(activeChar, fort.getFortId());
+				}
+				else
+				{
+					int slot = activeChar.getInventory().getSlotFromItem(activeChar.getInventory().getItemByItemId(9819));
+					activeChar.getInventory().unEquipItemInBodySlotAndRecord(slot);
+					activeChar.destroyItem("CombatFlag", activeChar.getInventory().getItemByItemId(9819), null, true);
+				}
+			}
+		}
+
+		if (character instanceof L2SiegeSummonInstance)
+		{
+			((L2SiegeSummonInstance) character).unSummon(((L2SiegeSummonInstance) character).getOwner());
+		}
+	}
+	
+	@Override
+	public void onDieInside(L2Character character)
+	{
+		if (_isActiveSiege)
+		{
+			// debuff participants only if they die inside siege zone
+			if (character instanceof L2PcInstance && ((L2PcInstance) character).isRegisteredOnThisSiegeField(_siegableId))
+			{
+				int lvl = 1;
+				final L2Effect e = character.getFirstEffect(5660);
+				if (e != null)
+					lvl = Math.min(lvl + e.getLevel(), 5);
+
+				final L2Skill skill = SkillTable.getInstance().getInfo(5660, lvl);
+				if (skill != null)
+					skill.getEffects(character, character);
+			}
+		}
+	}
+	
+	@Override
+	public void onReviveInside(L2Character character)
+	{
+	}
+	
+	public void updateZoneStatusForCharactersInside()
+	{
+		if (_isActiveSiege)
+		{
+			for (L2Character character : _characterList.values())
+			{
+				if (character != null)
+					onEnter(character);
+			}
+		}
+		else
+		{
+			for (L2Character character : _characterList.values())
+			{
+				if (character == null)
+					continue;
+				character.setInsideZone(L2Character.ZONE_PVP, false);
+				character.setInsideZone(L2Character.ZONE_SIEGE, false);
+				character.setInsideZone(L2Character.ZONE_NOSUMMONFRIEND, false);
+				
+				if (character instanceof L2PcInstance)
+				{
+					((L2PcInstance) character).sendPacket(new SystemMessage(SystemMessageId.LEFT_COMBAT_ZONE));
+					((L2PcInstance) character).stopFameTask();
+					if (((L2PcInstance) character).getMountType() == 2)
+					{
+						((L2PcInstance) character).exitedNoLanding();
+					}
+				}
+				if (character instanceof L2SiegeSummonInstance)
+				{
+					((L2SiegeSummonInstance) character).unSummon(((L2SiegeSummonInstance) character).getOwner());
+				}
+				
+			}
+		}
+	}
+
+	
+	/**
+	 * Sends a message to all players in this zone
+	 * @param message
+	 */
+	public void announceToPlayers(String message)
+	{
+		for (L2Character temp : _characterList.values())
+		{
+			if (temp instanceof L2PcInstance)
+				((L2PcInstance) temp).sendMessage(message);
+		}
+	}
+	
+	/**
+	 * Returns all players within this zone
+	 * @return
+	 */
+	public FastList<L2PcInstance> getAllPlayers()
+	{
+		FastList<L2PcInstance> players = new FastList<L2PcInstance>();
+		
+		for (L2Character temp : _characterList.values())
+		{
+			if (temp instanceof L2PcInstance)
+				players.add((L2PcInstance) temp);
+		}
+		
+		return players;
+	}
+	
+	public int getSiegeObjectId()
+	{
+		return _siegableId;
+	}
+	
+	public boolean isActive()
+	{
+		return _isActiveSiege;
+	}
+	
+	public void setIsActive(boolean val)
+	{
+		_isActiveSiege = val;
+	}
+	
+	public void setSiegeInstance(Siegable siege)
+	{
+		_siege = siege;
+	}
+	
+	/**
+	 * Removes all foreigners from the zone
+	 * @param owningClan
+	 */
+	public void banishForeigners(L2Clan owningClan)
+	{
+		for (L2Character temp : _characterList.values())
+		{
+			if (!(temp instanceof L2PcInstance))
+				continue;
+			if (((L2PcInstance) temp).getClan() == owningClan || ((L2PcInstance) temp).isGM())
+				continue;
+			
+			((L2PcInstance) temp).teleToLocation(MapRegionTable.TeleportWhereType.Town);
+		}
+	}
+}

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java

@@ -448,7 +448,7 @@ public class EnterWorld extends L2GameClientPacket
 			Fort fort = FortManager.getInstance().getFort(activeChar);
 			Fort fort = FortManager.getInstance().getFort(activeChar);
 
 
 			if (fort != null)
 			if (fort != null)
-				FortSiegeManager.getInstance().dropCombatFlag(activeChar);
+				FortSiegeManager.getInstance().dropCombatFlag(activeChar, fort.getFortId());
 			else
 			else
 			{
 			{
 				int slot = activeChar.getInventory().getSlotFromItem(activeChar.getInventory().getItemByItemId(9819));
 				int slot = activeChar.getInventory().getSlotFromItem(activeChar.getInventory().getItemByItemId(9819));

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestAutoSoulShot.java

@@ -30,7 +30,7 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  */
  */
 public final class RequestAutoSoulShot extends L2GameClientPacket
 public final class RequestAutoSoulShot extends L2GameClientPacket
 {
 {
-	private static final String _C__CF_REQUESTAUTOSOULSHOT = "[C] CF RequestAutoSoulShot";
+	private static final String _C__CF_REQUESTAUTOSOULSHOT = "[C] D0:0D RequestAutoSoulShot";
 	private static Logger _log = Logger.getLogger(RequestAutoSoulShot.class.getName());
 	private static Logger _log = Logger.getLogger(RequestAutoSoulShot.class.getName());
 
 
 	// format cd
 	// format cd

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestChangePartyLeader.java

@@ -23,7 +23,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  */
  */
 public final class RequestChangePartyLeader extends L2GameClientPacket{
 public final class RequestChangePartyLeader extends L2GameClientPacket{
 
 
-	private static final String _C__EE_REQUESTCHANGEPARTYLEADER = "[C] EE RequestChangePartyLeader";
+	private static final String _C__EE_REQUESTCHANGEPARTYLEADER = "[C] D0:0C RequestChangePartyLeader";
 	//private static Logger _log = Logger.getLogger(RequestJoinParty.class.getName());
 	//private static Logger _log = Logger.getLogger(RequestJoinParty.class.getName());
 
 
 	private String _name;
 	private String _name;

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkillInfo.java

@@ -31,7 +31,7 @@ import com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillInfo;
  */
  */
 public final class RequestExEnchantSkillInfo extends L2GameClientPacket
 public final class RequestExEnchantSkillInfo extends L2GameClientPacket
 {
 {
-	private static final String _C__D0_06_REQUESTEXENCHANTSKILLINFO = "[C] D0:06 RequestExEnchantSkillInfo";
+	private static final String _C__D0_0E_REQUESTEXENCHANTSKILLINFO = "[C] D0:0E RequestExEnchantSkillInfo";
 
 
     private int _skillId;
     private int _skillId;
 	private int _skillLvl;
 	private int _skillLvl;
@@ -87,7 +87,7 @@ public final class RequestExEnchantSkillInfo extends L2GameClientPacket
 	@Override
 	@Override
 	public String getType()
 	public String getType()
 	{
 	{
-		return _C__D0_06_REQUESTEXENCHANTSKILLINFO;
+		return _C__D0_0E_REQUESTEXENCHANTSKILLINFO;
 	}
 	}
 
 
 }
 }

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestExMPCCShowPartyMembersInfo.java

@@ -24,7 +24,7 @@ import com.l2jserver.gameserver.network.serverpackets.ExMPCCShowPartyMemberInfo;
  */
  */
 public final class RequestExMPCCShowPartyMembersInfo extends L2GameClientPacket
 public final class RequestExMPCCShowPartyMembersInfo extends L2GameClientPacket
 {
 {
-	private static final String _C__D0_26_REQUESTMPCCSHOWPARTYMEMBERINFO = "[C] D0:26 RequestExMPCCShowPartyMembersInfo";
+	private static final String _C__D0_2D_REQUESTMPCCSHOWPARTYMEMBERINFO = "[C] D0:2D RequestExMPCCShowPartyMembersInfo";
 	private int _partyLeaderId;
 	private int _partyLeaderId;
 
 
 
 
@@ -54,7 +54,7 @@ public final class RequestExMPCCShowPartyMembersInfo extends L2GameClientPacket
 	@Override
 	@Override
 	public String getType()
 	public String getType()
 	{
 	{
-		return _C__D0_26_REQUESTMPCCSHOWPARTYMEMBERINFO;
+		return _C__D0_2D_REQUESTMPCCSHOWPARTYMEMBERINFO;
 	}
 	}
 
 
 }
 }

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPledgeMemberPowerInfo.java

@@ -30,7 +30,7 @@ import com.l2jserver.gameserver.network.serverpackets.PledgeReceivePowerInfo;
 public final class RequestPledgeMemberPowerInfo extends L2GameClientPacket
 public final class RequestPledgeMemberPowerInfo extends L2GameClientPacket
 {
 {
     protected static final Logger _log = Logger.getLogger(RequestPledgeMemberPowerInfo.class.getName());
     protected static final Logger _log = Logger.getLogger(RequestPledgeMemberPowerInfo.class.getName());
-    private static final String _C__D0_1B_REQUESTPLEDGEMEMBERPOWERINFO = "[C] D0:1B RequestPledgeMemberPowerInfo";
+    private static final String _C__D0_14_REQUESTPLEDGEMEMBERPOWERINFO = "[C] D0:14 RequestPledgeMemberPowerInfo";
     @SuppressWarnings("unused")
     @SuppressWarnings("unused")
     private int _unk1;
     private int _unk1;
     private String _player;
     private String _player;
@@ -70,7 +70,7 @@ public final class RequestPledgeMemberPowerInfo extends L2GameClientPacket
     @Override
     @Override
     public String getType()
     public String getType()
     {
     {
-        return _C__D0_1B_REQUESTPLEDGEMEMBERPOWERINFO;
+        return _C__D0_14_REQUESTPLEDGEMEMBERPOWERINFO;
     }
     }
 
 
 }
 }

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPledgePowerGradeList.java

@@ -26,7 +26,7 @@ import com.l2jserver.gameserver.network.serverpackets.PledgePowerGradeList;
  */
  */
 public final class RequestPledgePowerGradeList extends L2GameClientPacket
 public final class RequestPledgePowerGradeList extends L2GameClientPacket
 {
 {
-    private static final String _C__D0_1A_REQUESTPLEDGEPOWERGRADELIST = "[C] D0:1A RequestPledgePowerGradeList";
+    private static final String _C__D0_13_REQUESTPLEDGEPOWERGRADELIST = "[C] D0:13 RequestPledgePowerGradeList";
 
 
 
 
     @Override
     @Override
@@ -57,7 +57,7 @@ public final class RequestPledgePowerGradeList extends L2GameClientPacket
     @Override
     @Override
     public String getType()
     public String getType()
     {
     {
-        return _C__D0_1A_REQUESTPLEDGEPOWERGRADELIST;
+        return _C__D0_13_REQUESTPLEDGEPOWERGRADELIST;
     }
     }
 
 
 }
 }

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPledgeReorganizeMember.java

@@ -25,7 +25,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  */
  */
 public final class RequestPledgeReorganizeMember extends L2GameClientPacket
 public final class RequestPledgeReorganizeMember extends L2GameClientPacket
 {
 {
-	private static final String _C__D0_24_REQUESTPLEDGEREORGANIZEMEMBER = "[C] D0:24 RequestPledgeReorganizeMember";
+	private static final String _C__D0_2C_REQUESTPLEDGEREORGANIZEMEMBER = "[C] D0:2C RequestPledgeReorganizeMember";
 
 
 	private int _isMemberSelected;
 	private int _isMemberSelected;
 	private String _memberName;
 	private String _memberName;
@@ -84,6 +84,6 @@ public final class RequestPledgeReorganizeMember extends L2GameClientPacket
 	@Override
 	@Override
 	public String getType()
 	public String getType()
 	{
 	{
-		return _C__D0_24_REQUESTPLEDGEREORGANIZEMEMBER;
+		return _C__D0_2C_REQUESTPLEDGEREORGANIZEMEMBER;
 	}
 	}
 }
 }

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPledgeSetAcademyMaster.java

@@ -27,7 +27,7 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  */
  */
 public final class RequestPledgeSetAcademyMaster extends L2GameClientPacket
 public final class RequestPledgeSetAcademyMaster extends L2GameClientPacket
 {
 {
-    private static final String _C__D0_19_REQUESTSETPLEADGEACADEMYMASTER = "[C] D0:19 RequestPledgeSetAcademyMaster";
+    private static final String _C__D0_12_REQUESTSETPLEADGEACADEMYMASTER = "[C] D0:12 RequestPledgeSetAcademyMaster";
     private String _currPlayerName;
     private String _currPlayerName;
     private int _set; // 1 set, 0 delete
     private int _set; // 1 set, 0 delete
     private String _targetPlayerName;
     private String _targetPlayerName;
@@ -129,7 +129,7 @@ public final class RequestPledgeSetAcademyMaster extends L2GameClientPacket
     @Override
     @Override
     public String getType()
     public String getType()
     {
     {
-        return _C__D0_19_REQUESTSETPLEADGEACADEMYMASTER;
+        return _C__D0_12_REQUESTSETPLEADGEACADEMYMASTER;
     }
     }
 
 
 
 

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPledgeSetMemberPowerGrade.java

@@ -25,7 +25,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  */
  */
 public final class RequestPledgeSetMemberPowerGrade extends L2GameClientPacket
 public final class RequestPledgeSetMemberPowerGrade extends L2GameClientPacket
 {
 {
-	private static final String _C__D0_1C_REQUESTPLEDGESETMEMBERPOWERGRADE = "[C] D0:1C RequestPledgeSetMemberPowerGrade";
+	private static final String _C__D0_15_REQUESTPLEDGESETMEMBERPOWERGRADE = "[C] D0:15 RequestPledgeSetMemberPowerGrade";
 	private String _member;
 	private String _member;
 	private int _powerGrade;
 	private int _powerGrade;
 
 
@@ -77,6 +77,6 @@ public final class RequestPledgeSetMemberPowerGrade extends L2GameClientPacket
 	@Override
 	@Override
 	public String getType()
 	public String getType()
 	{
 	{
-		return _C__D0_1C_REQUESTPLEDGESETMEMBERPOWERGRADE;
+		return _C__D0_15_REQUESTPLEDGESETMEMBERPOWERGRADE;
 	}
 	}
 }
 }

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/util/Broadcast.java

@@ -117,9 +117,9 @@ public final class Broadcast
 						Integer oldrelation = character.getKnownList().getKnownRelations().get(player.getObjectId());
 						Integer oldrelation = character.getKnownList().getKnownRelations().get(player.getObjectId());
 						if (oldrelation != null && oldrelation != relation)
 						if (oldrelation != null && oldrelation != relation)
 						{
 						{
-							player.sendPacket(new RelationChanged((L2PcInstance) character, relation, player.isAutoAttackable(character)));
+							player.sendPacket(new RelationChanged((L2PcInstance) character, relation, character.isAutoAttackable(player)));
 							if (((L2PcInstance) character).getPet() != null)
 							if (((L2PcInstance) character).getPet() != null)
-								player.sendPacket(new RelationChanged(((L2PcInstance) character).getPet(), relation, player.isAutoAttackable(character)));
+								player.sendPacket(new RelationChanged(((L2PcInstance) character).getPet(), relation, character.isAutoAttackable(player)));
 						}
 						}
 					}
 					}
 				}
 				}