Răsfoiți Sursa

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 ani în urmă
părinte
comite
2eccaec1e6
20 a modificat fișierele cu 207 adăugiri și 282 ștergeri
  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;