Browse Source

BETA: Code refactoring:
* Implemented getClanAllies(int allianceId).
* Some JavaDoc fixes.
* Using TradeItem now.
* TradeList cleanup, more refactoring required.
* Minor fix for Community Board when clan leader is null, thanks JIV.

Zoey76 13 năm trước cách đây
mục cha
commit
2eccaec1e6
20 tập tin đã thay đổi với 207 bổ sung282 xóa
  1. 18 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/ClanTable.java
  2. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/OfflineTradersTable.java
  3. 9 25
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Clan.java
  4. 9 14
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Object.java
  5. 102 29
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/TradeItem.java
  6. 4 148
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/TradeList.java
  7. 5 13
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Siege.java
  8. 6 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/itemcontainer/PcInventory.java
  9. 2 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/AddTradeItem.java
  10. 3 8
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAllyInfo.java
  11. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAnswerJoinAlly.java
  12. 22 11
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/communityserver/writepackets/InitWorldInfo.java
  13. 4 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/communityserver/writepackets/WorldInfo.java
  14. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreListBuy.java
  15. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreListSell.java
  16. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreManageListBuy.java
  17. 5 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreManageListSell.java
  18. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/TradeOtherAdd.java
  19. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/TradeOwnAdd.java
  20. 1 1
      L2J_Server_BETA/java/com/l2jserver/status/GameStatusThread.java

+ 18 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/ClanTable.java

@@ -17,6 +17,8 @@ package com.l2jserver.gameserver.datatables;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -137,7 +139,6 @@ public class ClanTable
 			}
 			
 		}
-		
 		return null;
 	}
 	
@@ -524,6 +525,22 @@ public class ClanTable
 		}
 	}
 	
+	public List<L2Clan> getClanAllies(int allianceId)
+	{
+		final List<L2Clan> clanAllies = new ArrayList<>();
+		if (allianceId != 0)
+		{
+			for (L2Clan clan : _clans.values())
+			{
+				if ((clan != null) && (clan.getAllyId() == allianceId))
+				{
+					clanAllies.add(clan);
+				}
+			}
+		}
+		return clanAllies;
+	}
+	
 	public void storeClanScore()
 	{
 		for (L2Clan clan : _clans.values())

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/OfflineTradersTable.java

@@ -27,7 +27,7 @@ import com.l2jserver.gameserver.LoginServerThread;
 import com.l2jserver.gameserver.model.L2ManufactureItem;
 import com.l2jserver.gameserver.model.L2ManufactureList;
 import com.l2jserver.gameserver.model.L2World;
-import com.l2jserver.gameserver.model.TradeList.TradeItem;
+import com.l2jserver.gameserver.model.TradeItem;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.L2GameClient;
 import com.l2jserver.gameserver.network.L2GameClient.GameClientState;

+ 9 - 25
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Clan.java

@@ -1387,16 +1387,9 @@ public class L2Clan
 	
 	public void broadcastToOnlineAllyMembers(L2GameServerPacket packet)
 	{
-		if (getAllyId() == 0)
+		for (L2Clan clan : ClanTable.getInstance().getClanAllies(getAllyId()))
 		{
-			return;
-		}
-		for (L2Clan clan : ClanTable.getInstance().getClans())
-		{
-			if (clan.getAllyId() == getAllyId())
-			{
-				clan.broadcastToOnlineMembers(packet);
-			}
+			clan.broadcastToOnlineMembers(packet);
 		}
 	}
 	
@@ -2232,15 +2225,7 @@ public class L2Clan
 			return false;
 		}
 		
-		int numOfClansInAlly = 0;
-		for (L2Clan clan : ClanTable.getInstance().getClans())
-		{
-			if (clan.getAllyId() == activeChar.getAllyId())
-			{
-				++numOfClansInAlly;
-			}
-		}
-		if (numOfClansInAlly >= Config.ALT_MAX_NUM_OF_CLANS_IN_ALLY)
+		if (ClanTable.getInstance().getClanAllies(activeChar.getAllyId()).size() >= Config.ALT_MAX_NUM_OF_CLANS_IN_ALLY)
 		{
 			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EXCEEDED_THE_LIMIT));
 			return false;
@@ -2372,9 +2357,9 @@ public class L2Clan
 		broadcastToOnlineAllyMembers(SystemMessage.getSystemMessage(SystemMessageId.ALLIANCE_DISOLVED));
 		
 		long currentTime = System.currentTimeMillis();
-		for (L2Clan clan : ClanTable.getInstance().getClans())
+		for (L2Clan clan : ClanTable.getInstance().getClanAllies(getAllyId()))
 		{
-			if (clan.getAllyId() == getAllyId() && clan.getClanId() != getClanId())
+			if (clan.getClanId() != getClanId())
 			{
 				clan.setAllyId(0);
 				clan.setAllyName(null);
@@ -2769,13 +2754,12 @@ public class L2Clan
 		}
 		else
 		{
-			for (L2Clan clan : ClanTable.getInstance().getClans())
+			for (L2Clan clan : ClanTable.getInstance().getClanAllies(getAllyId()))
 			{
-				if (clan.getAllyId() == getAllyId())
+				clan.setAllyCrestId(crestId);
+				for (L2PcInstance member : clan.getOnlineMembers(0))
 				{
-					clan.setAllyCrestId(crestId);
-					for (L2PcInstance member : clan.getOnlineMembers(0))
-						member.broadcastUserInfo();
+					member.broadcastUserInfo();
 				}
 			}
 		}

+ 9 - 14
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Object.java

@@ -29,18 +29,14 @@ import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.ExSendUIEvent;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
 
-
 /**
- * Mother class of all objects in the world wich ones is it possible
+ * Mother class of all objects in the world which ones is it possible
  * to interact (PC, NPC, Item...)<BR><BR>
  *
  * L2Object :<BR><BR>
  * <li>L2Character</li>
  * <li>L2ItemInstance</li>
- * <li>L2Potion</li>
- *
  */
-
 public abstract class L2Object
 {
 	// =========================================================
@@ -388,7 +384,7 @@ public abstract class L2Object
 		
 		_instanceId = instanceId;
 		
-		// If we change it for visible objects, me must clear & revalidate knownlists
+		// If we change it for visible objects, me must clear & revalidates knownlists
 		if (_isVisible && _knownList != null)
 		{
 			if (this instanceof L2PcInstance)
@@ -448,7 +444,7 @@ public abstract class L2Object
 			getPosition().setWorldRegion(null);
 		}
 		
-		// this can synchronize on others instancies, so it's out of
+		// this can synchronize on others instances, so it's out of
 		// synchronized, to avoid deadlocks
 		// Remove the L2Object from the world
 		L2World.getInstance().removeVisibleObject(this, reg);
@@ -496,7 +492,7 @@ public abstract class L2Object
 			getPosition().getWorldRegion().addVisibleObject(this);
 		}
 		
-		// this can synchronize on others instancies, so it's out of
+		// this can synchronize on others instances, so it's out of
 		// synchronized, to avoid deadlocks
 		// Add the L2Object spawn in the world as a visible object
 		L2World.getInstance().addVisibleObject(this, getPosition().getWorldRegion());
@@ -526,7 +522,7 @@ public abstract class L2Object
 		
 		L2World.getInstance().storeObject(this);
 		
-		// these can synchronize on others instancies, so they're out of
+		// these can synchronize on others instances, so they're out of
 		// synchronized, to avoid deadlocks
 		
 		// Add the L2Object spawn to _visibleObjects and if necessary to _allplayers of its L2WorldRegion
@@ -564,10 +560,9 @@ public abstract class L2Object
 	}
 	
 	/**
-	 * Return the visibilty state of the L2Object. <BR><BR>
-	 *
+	 * Return the visibility state of the L2Object.
 	 * <B><U> Concept</U> :</B><BR><BR>
-	 * A L2Object is visble if <B>__IsVisible</B>=true and <B>_worldregion</B>!=null <BR><BR>
+	 * A L2Object is visible if <B>__IsVisible</B>=true and <B>_worldregion</B>!=null <BR><BR>
 	 * @return 
 	 */
 	public final boolean isVisible()
@@ -637,14 +632,14 @@ public abstract class L2Object
 	{
 		_position = new ObjectPosition(this);
 	}
+	
 	public final void setObjectPosition(ObjectPosition value)
 	{
 		_position = value;
 	}
 	
 	/**
-	 * returns reference to region this object is in
-	 * @return 
+	 * @return reference to region this object is in.
 	 */
 	public L2WorldRegion getWorldRegion()
 	{

+ 102 - 29
L2J_Server_BETA/java/com/l2jserver/gameserver/model/TradeItem.java

@@ -14,27 +14,81 @@
  */
 package com.l2jserver.gameserver.model;
 
-/**
- * This class ...
- *
- * @version $Revision: 1.2.4.1 $ $Date: 2005/03/27 15:29:32 $
- */
-public final class TradeItem
+import com.l2jserver.gameserver.templates.item.L2Item;
+
+public class TradeItem
 {
 	private int _objectId;
-	private int _itemId;
-	private long _price;
-	private long _storePrice;
+	private final L2Item _item;
+	private final int _location;
+	private int _enchant;
+	private final int _type1;
+	private final int _type2;
 	private long _count;
-	private int _enchantLevel;
+	private long _storeCount;
+	private long _price;
+	private final byte _elemAtkType;
+	private final int _elemAtkPower;
+	private final int[] _elemDefAttr =
+	{
+		0, 0, 0, 0, 0, 0
+	};
+	
+	public TradeItem(L2ItemInstance item, long count, long price)
+	{
+		_objectId = item.getObjectId();
+		_item = item.getItem();
+		_location = item.getLocationSlot();
+		_enchant = item.getEnchantLevel();
+		_type1 = item.getCustomType1();
+		_type2 = item.getCustomType2();
+		_count = count;
+		_price = price;
+		_elemAtkType = item.getAttackElementType();
+		_elemAtkPower = item.getAttackElementPower();
+		for (byte i = 0; i < 6; i++)
+		{
+			_elemDefAttr[i] = item.getElementDefAttr(i);
+		}
+	}
+	
+	public TradeItem(L2Item item, long count, long price)
+	{
+		_objectId = 0;
+		_item = item;
+		_location = 0;
+		_enchant = 0;
+		_type1 = 0;
+		_type2 = 0;
+		_count = count;
+		_storeCount = count;
+		_price = price;
+		_elemAtkType = Elementals.NONE;
+		_elemAtkPower = 0;
+	}
 	
-	public TradeItem()
+	public TradeItem(TradeItem item, long count, long price)
 	{
+		_objectId = item.getObjectId();
+		_item = item.getItem();
+		_location = item.getLocationSlot();
+		_enchant = item.getEnchant();
+		_type1 = item.getCustomType1();
+		_type2 = item.getCustomType2();
+		_count = count;
+		_storeCount = count;
+		_price = price;
+		_elemAtkType = item.getAttackElementType();
+		_elemAtkPower = item.getAttackElementPower();
+		for (byte i = 0; i < 6; i++)
+		{
+			_elemDefAttr[i] = item.getElementDefAttr(i);
+		}
 	}
 	
-	public void setObjectId(int id)
+	public void setObjectId(int objectId)
 	{
-		_objectId = id;
+		_objectId = objectId;
 	}
 	
 	public int getObjectId()
@@ -42,34 +96,34 @@ public final class TradeItem
 		return _objectId;
 	}
 	
-	public void setItemId(int id)
+	public L2Item getItem()
 	{
-		_itemId = id;
+		return _item;
 	}
 	
-	public int getItemId()
+	public int getLocationSlot()
 	{
-		return _itemId;
+		return _location;
 	}
 	
-	public void setOwnersPrice(long price)
+	public void setEnchant(int enchant)
 	{
-		_price = price;
+		_enchant = enchant;
 	}
 	
-	public long getOwnersPrice()
+	public int getEnchant()
 	{
-		return _price;
+		return _enchant;
 	}
 	
-	public void setstorePrice(long price)
+	public int getCustomType1()
 	{
-		_storePrice = price;
+		return _type1;
 	}
 	
-	public long getStorePrice()
+	public int getCustomType2()
 	{
-		return _storePrice;
+		return _type2;
 	}
 	
 	public void setCount(long count)
@@ -82,14 +136,33 @@ public final class TradeItem
 		return _count;
 	}
 	
-	public void setEnchantLevel(int enchant)
+	public long getStoreCount()
+	{
+		return _storeCount;
+	}
+	
+	public void setPrice(long price)
+	{
+		_price = price;
+	}
+	
+	public long getPrice()
+	{
+		return _price;
+	}
+	
+	public byte getAttackElementType()
 	{
-		_enchantLevel = enchant;
+		return _elemAtkType;
 	}
 	
-	public int getEnchantLevel()
+	public int getAttackElementPower()
 	{
-		return _enchantLevel;
+		return _elemAtkPower;
 	}
 	
+	public int getElementDefAttr(byte i)
+	{
+		return _elemDefAttr[i];
+	}
 }

+ 4 - 148
L2J_Server_BETA/java/com/l2jserver/gameserver/model/TradeList.java

@@ -39,150 +39,6 @@ import com.l2jserver.gameserver.util.Util;
  */
 public class TradeList
 {
-	public static class TradeItem
-	{
-		private int _objectId;
-		private final L2Item _item;
-		private int _location;
-		private int _enchant;
-		private int _type1;
-		private int _type2;
-		private long _count;
-		private long _storeCount;
-		private long _price;
-		private final byte _elemAtkType;
-		private final int _elemAtkPower;
-		private int[] _elemDefAttr = { 0, 0, 0, 0, 0, 0 };
-		
-		public TradeItem(L2ItemInstance item, long count, long price)
-		{
-			_objectId = item.getObjectId();
-			_item = item.getItem();
-			_location = item.getLocationSlot();
-			_enchant = item.getEnchantLevel();
-			_type1 = item.getCustomType1();
-			_type2 = item.getCustomType2();
-			_count = count;
-			_price = price;
-			_elemAtkType = item.getAttackElementType();
-			_elemAtkPower = item.getAttackElementPower();
-			for (byte i = 0; i < 6; i++)
-				_elemDefAttr[i] = item.getElementDefAttr(i);
-		}
-		
-		public TradeItem(L2Item item, long count, long price)
-		{
-			_objectId = 0;
-			_item = item;
-			_location = 0;
-			_enchant = 0;
-			_type1 = 0;
-			_type2 = 0;
-			_count = count;
-			_storeCount = count;
-			_price = price;
-			_elemAtkType = Elementals.NONE;
-			_elemAtkPower = 0;
-		}
-		
-		public TradeItem(TradeItem item, long count, long price)
-		{
-			_objectId = item.getObjectId();
-			_item = item.getItem();
-			_location = item.getLocationSlot();
-			_enchant = item.getEnchant();
-			_type1 = item.getCustomType1();
-			_type2 = item.getCustomType2();
-			_count = count;
-			_storeCount = count;
-			_price = price;
-			_elemAtkType = item.getAttackElementType();
-			_elemAtkPower = item.getAttackElementPower();
-			for (byte i = 0; i < 6; i++)
-				_elemDefAttr[i] = item.getElementDefAttr(i);
-		}
-		
-		public void setObjectId(int objectId)
-		{
-			_objectId = objectId;
-		}
-		
-		public int getObjectId()
-		{
-			return _objectId;
-		}
-		
-		public L2Item getItem()
-		{
-			return _item;
-		}
-		
-		public int getLocationSlot()
-		{
-			return _location;
-		}
-		
-		public void setEnchant(int enchant)
-		{
-			_enchant = enchant;
-		}
-		
-		public int getEnchant()
-		{
-			return _enchant;
-		}
-		
-		public int getCustomType1()
-		{
-			return _type1;
-		}
-		
-		public int getCustomType2()
-		{
-			return _type2;
-		}
-		
-		public void setCount(long count)
-		{
-			_count = count;
-		}
-		
-		public long getCount()
-		{
-			return _count;
-		}
-		
-		public long getStoreCount()
-		{
-			return _storeCount;
-		}
-		
-		public void setPrice(long price)
-		{
-			_price = price;
-		}
-		
-		public long getPrice()
-		{
-			return _price;
-		}
-		
-		public byte getAttackElementType()
-		{
-			return _elemAtkType;
-		}
-		
-		public int getAttackElementPower()
-		{
-			return _elemAtkPower;
-		}
-		
-		public int getElementDefAttr(byte i)
-		{
-			return _elemDefAttr[i];
-		}
-	}
-	
 	private static final Logger _log = Logger.getLogger(TradeList.class.getName());
 	
 	private final L2PcInstance _owner;
@@ -258,16 +114,16 @@ public class TradeList
 	 * @param inventory 
 	 * @return L2ItemInstance : items in inventory
 	 */
-	public TradeList.TradeItem[] getAvailableItems(PcInventory inventory)
+	public TradeItem[] getAvailableItems(PcInventory inventory)
 	{
-		FastList<TradeList.TradeItem> list = FastList.newInstance();
-		for (TradeList.TradeItem item : _items)
+		FastList<TradeItem> list = FastList.newInstance();
+		for (TradeItem item : _items)
 		{
 			item = new TradeItem(item, item.getCount(), item.getPrice());
 			inventory.adjustAvailableItem(item);
 			list.add(item);
 		}
-		TradeList.TradeItem[] result = list.toArray(new TradeList.TradeItem[list.size()]);
+		TradeItem[] result = list.toArray(new TradeItem[list.size()]);
 		FastList.recycle(list);
 		return result;
 	}

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

@@ -396,21 +396,13 @@ public class Siege implements Siegable
 				addDefender(sc_newowner, SiegeClanType.OWNER);
 				
 				// The player's clan is in an alliance
-				if (allyId != 0)
+				for (L2Clan clan : ClanTable.getInstance().getClanAllies(allyId))
 				{
-					L2Clan[] clanList = ClanTable.getInstance().getClans();
-					
-					for (L2Clan clan : clanList)
+					final L2SiegeClan sc = getAttackerClan(clan.getClanId());
+					if (sc != null)
 					{
-						if (clan.getAllyId() == allyId)
-						{
-							L2SiegeClan sc = getAttackerClan(clan.getClanId());
-							if (sc != null)
-							{
-								removeAttacker(sc);
-								addDefender(sc, SiegeClanType.DEFENDER);
-							}
-						}
+						removeAttacker(sc);
+						addDefender(sc, SiegeClanType.DEFENDER);
 					}
 				}
 				teleportPlayer(Siege.TeleportWhoType.Attacker, MapRegionManager.TeleportWhereType.SiegeFlag); // Teleport to the second closest town

+ 6 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/model/itemcontainer/PcInventory.java

@@ -26,8 +26,8 @@ import com.l2jserver.L2DatabaseFactory;
 import com.l2jserver.gameserver.datatables.ItemTable;
 import com.l2jserver.gameserver.model.L2ItemInstance;
 import com.l2jserver.gameserver.model.L2ItemInstance.ItemLocation;
+import com.l2jserver.gameserver.model.TradeItem;
 import com.l2jserver.gameserver.model.TradeList;
-import com.l2jserver.gameserver.model.TradeList.TradeItem;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
@@ -333,20 +333,20 @@ public class PcInventory extends Inventory
 	 * @param tradeList 
 	 * @return L2ItemInstance : items in inventory
 	 */
-	public TradeList.TradeItem[] getAvailableItems(TradeList tradeList)
+	public TradeItem[] getAvailableItems(TradeList tradeList)
 	{
-		FastList<TradeList.TradeItem> list = FastList.newInstance();
+		FastList<TradeItem> list = FastList.newInstance();
 		for (L2ItemInstance item : _items)
 		{
 			if (item != null && item.isAvailable(getOwner(), false, false))
 			{
-				TradeList.TradeItem adjItem = tradeList.adjustAvailableItem(item);
+				TradeItem adjItem = tradeList.adjustAvailableItem(item);
 				if (adjItem != null)
 					list.add(adjItem);
 			}
 		}
 		
-		TradeList.TradeItem[] result = list.toArray(new TradeList.TradeItem[list.size()]);
+		TradeItem[] result = list.toArray(new TradeItem[list.size()]);
 		FastList.recycle(list);
 		
 		return result;
@@ -354,7 +354,7 @@ public class PcInventory extends Inventory
 	
 	/**
 	 * Adjust TradeItem according his status in inventory
-	 * @param item : L2ItemInstance to be adjusten
+	 * @param item : L2ItemInstance to be adjusted
 	 */
 	public void adjustAvailableItem(TradeItem item)
 	{

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

@@ -17,6 +17,7 @@ package com.l2jserver.gameserver.network.clientpackets;
 import java.util.logging.Logger;
 
 import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.TradeItem;
 import com.l2jserver.gameserver.model.TradeList;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -93,7 +94,7 @@ public final class AddTradeItem extends L2GameClientPacket
 			return;
 		}
 		
-		final TradeList.TradeItem item = trade.addItem(_objectId, _count);
+		final TradeItem item = trade.addItem(_objectId, _count);
 		if (item != null)
 		{
 			player.sendPacket(new TradeOwnAdd(item));

+ 3 - 8
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAllyInfo.java

@@ -60,11 +60,8 @@ public final class RequestAllyInfo extends L2GameClientPacket
 		int clanCount = 0;
 		int totalMembers = 0;
 		int onlineMembers = 0;
-		for (L2Clan clan : ClanTable.getInstance().getClans())
+		for (L2Clan clan : ClanTable.getInstance().getClanAllies(activeChar.getAllyId()))
 		{
-			if (clan.getAllyId() != activeChar.getAllyId())
-				continue;
-			
 			clanCount++;
 			totalMembers += clan.getMembersCount();
 			onlineMembers += clan.getOnlineMembersCount();
@@ -85,11 +82,8 @@ public final class RequestAllyInfo extends L2GameClientPacket
 		sendPacket(sm);
 		
 		sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_INFO_HEAD);
-		for (L2Clan clan : ClanTable.getInstance().getClans())
+		for (L2Clan clan : ClanTable.getInstance().getClanAllies(activeChar.getAllyId()))
 		{
-			if (clan.getAllyId() != activeChar.getAllyId())
-				continue;
-			
 			sendPacket(sm); // send head or separator
 			sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_INFO_NAME_S1);
 			sm.addString(clan.getName());
@@ -102,6 +96,7 @@ public final class RequestAllyInfo extends L2GameClientPacket
 			sendPacket(sm);
 			sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_INFO_SEPARATOR);
 		}
+		
 		sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_INFO_FOOT);
 		sendPacket(sm);
 	}

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

@@ -76,7 +76,7 @@ public final class RequestAnswerJoinAlly extends L2GameClientPacket
 				activeChar.getClan().setAllyPenaltyExpiryTime(0, 0);
 				activeChar.getClan().changeAllyCrest(clan.getAllyCrestId(), true);
 				activeChar.getClan().updateClanInDB();
-				for (L2Clan c : ClanTable.getInstance().getClans())
+				for (L2Clan c : ClanTable.getInstance().getClanAllies(clan.getAllyId()))
 				{
 					if (c.getAllyId() == clan.getAllyId())
 					{

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

@@ -60,25 +60,36 @@ public final class InitWorldInfo extends BaseWritePacket
 				i = 0;
 				for (L2Clan c : clans)
 				{
+					if (c == null)
+					{
+						continue;
+					}
 					if (i++ == info)
 						break;
 					super.writeD(c.getClanId());
 					super.writeS(c.getName());
 					super.writeD(c.getLevel());
-					super.writeD(c.getLeader().getObjectId());
-					super.writeS(c.getLeader().getName());
+					if (c.getLeader() == null)
+					{
+						writeD(0);
+						writeS("");
+						_log.info("Clan Id: " + c.getClanId() + " has null clan leader!"); 
+					}
+					else
+					{
+						super.writeD(c.getLeader().getObjectId());
+						super.writeS(c.getLeader().getName());
+					}
 					super.writeD(c.getMembersCount());
 					super.writeC((c.isNoticeEnabled() ? 1:0));
+					// Alliance info:
 					super.writeS(c.getAllyName());
-					FastList<Integer> allyClanIdList = FastList.newInstance();
-					if (c.getAllyId() != 0)
-						for (L2Clan clan : ClanTable.getInstance().getClans())
-							if (clan.getAllyId() == c.getAllyId() && c != clan)
-								allyClanIdList.add(clan.getClanId());
-					super.writeD(allyClanIdList.size());
-					for (int k : allyClanIdList)
-						super.writeD(k);
-					FastList.recycle(allyClanIdList);
+					final List<L2Clan> clanAllies = ClanTable.getInstance().getClanAllies(c.getAllyId());
+					super.writeD(clanAllies.size());
+					for (L2Clan allies : clanAllies)
+					{
+						super.writeD(allies.getClanId());
+					}
 				}
 				break;
 			case TYPE_PLAYER:

+ 4 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/network/communityserver/writepackets/WorldInfo.java

@@ -91,9 +91,10 @@ public final class WorldInfo extends BaseWritePacket
 				super.writeS(clan.getAllyName());
 				FastList<Integer> allyClanIdList = FastList.newInstance();
 				if (clan.getAllyId() != 0)
-					for (L2Clan c : ClanTable.getInstance().getClans())
-						if (clan.getAllyId() == c.getAllyId() && c != clan)
-							allyClanIdList.add(c.getClanId());
+					for (L2Clan c : ClanTable.getInstance().getClanAllies(clan.getAllyId()))
+					{
+						allyClanIdList.add(c.getClanId());
+					}
 				super.writeD(allyClanIdList.size());
 				for (int k : allyClanIdList)
 					super.writeD(k);

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreListBuy.java

@@ -14,7 +14,7 @@
  */
 package com.l2jserver.gameserver.network.serverpackets;
 
-import com.l2jserver.gameserver.model.TradeList;
+import com.l2jserver.gameserver.model.TradeItem;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
 /**
@@ -28,7 +28,7 @@ public class PrivateStoreListBuy extends L2GameServerPacket
 	private static final String _S__D1_PRIVATESTORELISTBUY = "[S] be PrivateStoreListBuy";
 	private int _objId;
 	private long _playerAdena;
-	private TradeList.TradeItem[] _items;
+	private TradeItem[] _items;
 	
 	public PrivateStoreListBuy(L2PcInstance player, L2PcInstance storePlayer)
 	{
@@ -47,7 +47,7 @@ public class PrivateStoreListBuy extends L2GameServerPacket
 		
 		writeD(_items.length);
 		
-		for (TradeList.TradeItem item : _items)
+		for (TradeItem item : _items)
 		{
 			writeD(item.getObjectId());
 			writeD(item.getItem().getItemId());

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreListSell.java

@@ -14,7 +14,7 @@
  */
 package com.l2jserver.gameserver.network.serverpackets;
 
-import com.l2jserver.gameserver.model.TradeList;
+import com.l2jserver.gameserver.model.TradeItem;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
 /**
@@ -28,7 +28,7 @@ public class PrivateStoreListSell extends L2GameServerPacket
 	private int _objId;
 	private long _playerAdena;
 	private boolean _packageSale;
-	private TradeList.TradeItem[] _items;
+	private TradeItem[] _items;
 	
 	// player's private shop
 	public PrivateStoreListSell(L2PcInstance player, L2PcInstance storePlayer)
@@ -47,7 +47,7 @@ public class PrivateStoreListSell extends L2GameServerPacket
 		writeD(_packageSale ? 1 : 0);
 		writeQ(_playerAdena);
 		writeD(_items.length);
-		for (TradeList.TradeItem item : _items)
+		for (TradeItem item : _items)
 		{
 			writeD(item.getObjectId());
 			writeD(item.getItem().getItemId());

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreManageListBuy.java

@@ -15,7 +15,7 @@
 package com.l2jserver.gameserver.network.serverpackets;
 
 import com.l2jserver.gameserver.model.L2ItemInstance;
-import com.l2jserver.gameserver.model.TradeList;
+import com.l2jserver.gameserver.model.TradeItem;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
 /**
@@ -29,7 +29,7 @@ public class PrivateStoreManageListBuy extends L2GameServerPacket
 	private int _objId;
 	private long _playerAdena;
 	private L2ItemInstance[] _itemList;
-	private TradeList.TradeItem[] _buyList;
+	private TradeItem[] _buyList;
 	
 	public PrivateStoreManageListBuy(L2PcInstance player)
 	{
@@ -81,7 +81,7 @@ public class PrivateStoreManageListBuy extends L2GameServerPacket
 		
 		//section 3
 		writeD(_buyList.length); //count for all items already added for buy
-		for (TradeList.TradeItem item : _buyList)
+		for (TradeItem item : _buyList)
 		{
 			writeD(item.getObjectId());
 			writeD(item.getItem().getItemId());

+ 5 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreManageListSell.java

@@ -14,7 +14,7 @@
  */
 package com.l2jserver.gameserver.network.serverpackets;
 
-import com.l2jserver.gameserver.model.TradeList;
+import com.l2jserver.gameserver.model.TradeItem;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
 /**
@@ -36,8 +36,8 @@ public class PrivateStoreManageListSell extends L2GameServerPacket
 	private int _objId;
 	private long _playerAdena;
 	private boolean _packageSale;
-	private TradeList.TradeItem[] _itemList;
-	private TradeList.TradeItem[] _sellList;
+	private TradeItem[] _itemList;
+	private TradeItem[] _sellList;
 	
 	public PrivateStoreManageListSell(L2PcInstance player, boolean isPackageSale)
 	{
@@ -60,7 +60,7 @@ public class PrivateStoreManageListSell extends L2GameServerPacket
 		
 		//section2
 		writeD(_itemList.length); //for potential sells
-		for (TradeList.TradeItem item : _itemList)
+		for (TradeItem item : _itemList)
 		{
 			writeD(item.getObjectId());
 			writeD(item.getItem().getItemId());
@@ -91,7 +91,7 @@ public class PrivateStoreManageListSell extends L2GameServerPacket
 		}
 		//section 3
 		writeD(_sellList.length); //count for any items already added for sell
-		for (TradeList.TradeItem item : _sellList)
+		for (TradeItem item : _sellList)
 		{
 			writeD(item.getObjectId());
 			writeD(item.getItem().getItemId());

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/TradeOtherAdd.java

@@ -14,7 +14,7 @@
  */
 package com.l2jserver.gameserver.network.serverpackets;
 
-import com.l2jserver.gameserver.model.TradeList;
+import com.l2jserver.gameserver.model.TradeItem;
 
 /**
  * This class ...
@@ -25,9 +25,9 @@ import com.l2jserver.gameserver.model.TradeList;
 public final class TradeOtherAdd extends L2GameServerPacket
 {
 	private static final String _S__31_TRADEOTHERADD = "[S] 1b TradeOtherAdd";
-	private TradeList.TradeItem _item;
+	private TradeItem _item;
 	
-	public TradeOtherAdd(TradeList.TradeItem item)
+	public TradeOtherAdd(TradeItem item)
 	{
 		_item = item;
 	}

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/TradeOwnAdd.java

@@ -14,7 +14,7 @@
  */
 package com.l2jserver.gameserver.network.serverpackets;
 
-import com.l2jserver.gameserver.model.TradeList;
+import com.l2jserver.gameserver.model.TradeItem;
 
 /**
  * This class ...
@@ -25,9 +25,9 @@ import com.l2jserver.gameserver.model.TradeList;
 public final class TradeOwnAdd extends L2GameServerPacket
 {
 	private static final String _S__30_TRADEOWNADD = "[S] 1a TradeOwnAdd";
-	private TradeList.TradeItem _item;
+	private TradeItem _item;
 	
-	public TradeOwnAdd(TradeList.TradeItem item)
+	public TradeOwnAdd(TradeItem item)
 	{
 		_item = item;
 	}

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/status/GameStatusThread.java

@@ -66,8 +66,8 @@ import com.l2jserver.gameserver.instancemanager.ZoneManager;
 import com.l2jserver.gameserver.model.L2ItemInstance;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.TradeItem;
 import com.l2jserver.gameserver.model.TradeList;
-import com.l2jserver.gameserver.model.TradeList.TradeItem;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.L2Summon;