diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/instancemanager/WorldExchangeManager.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/instancemanager/WorldExchangeManager.java
index 577cf29ea3..9e6bf7e7b5 100644
--- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/instancemanager/WorldExchangeManager.java
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/instancemanager/WorldExchangeManager.java
@@ -842,6 +842,16 @@ public class WorldExchangeManager implements IXmlReader
Collections.reverse(sortedList);
break;
}
+ case PRICE_PER_PIECE_ASCE:
+ {
+ sortedList = sortedList.stream().sorted(Comparator.comparingLong(WorldExchangeHolder::getPrice)).collect(Collectors.toList());
+ break;
+ }
+ case PRICE_PER_PIECE_DESC:
+ {
+ sortedList = sortedList.stream().sorted(Comparator.comparingLong(WorldExchangeHolder::getPrice).reversed()).collect(Collectors.toList());
+ break;
+ }
}
if (sortedList.size() > 399)
@@ -1023,6 +1033,28 @@ public class WorldExchangeManager implements IXmlReader
}
}
+ /**
+ * Returns the average price of the specified item.
+ * @param itemId the ID of the item
+ * @return the average price, or 0 if there are no items with the specified ID
+ */
+ public long getAveragePriceOfItem(int itemId)
+ {
+ long totalPrice = 0;
+ long totalItemCount = 0;
+ for (WorldExchangeHolder holder : _itemBids.values())
+ {
+ if (holder.getItemInstance().getTemplate().getId() != itemId)
+ {
+ continue;
+ }
+
+ totalItemCount++;
+ totalPrice += holder.getPrice();
+ }
+ return totalItemCount == 0 ? 0 : totalPrice / totalItemCount;
+ }
+
public static WorldExchangeManager getInstance()
{
return WorldExchangeManager.SingletonHolder.INSTANCE;
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/ExClientPackets.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/ExClientPackets.java
index 6b1b51b025..5427635bb6 100644
--- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/ExClientPackets.java
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/ExClientPackets.java
@@ -191,11 +191,13 @@ import org.l2jmobius.gameserver.network.clientpackets.variation.ExVariationClose
import org.l2jmobius.gameserver.network.clientpackets.variation.ExVariationOpenUi;
import org.l2jmobius.gameserver.network.clientpackets.variation.RequestConfirmGemStone;
import org.l2jmobius.gameserver.network.clientpackets.variation.RequestRefine;
+import org.l2jmobius.gameserver.network.clientpackets.worldexchange.ExWorldExchangeAveragePrice;
import org.l2jmobius.gameserver.network.clientpackets.worldexchange.ExWorldExchangeBuyItem;
import org.l2jmobius.gameserver.network.clientpackets.worldexchange.ExWorldExchangeItemList;
import org.l2jmobius.gameserver.network.clientpackets.worldexchange.ExWorldExchangeRegisterItem;
import org.l2jmobius.gameserver.network.clientpackets.worldexchange.ExWorldExchangeSettleList;
import org.l2jmobius.gameserver.network.clientpackets.worldexchange.ExWorldExchangeSettleRecvResult;
+import org.l2jmobius.gameserver.network.clientpackets.worldexchange.ExWorldExchangeTotalList;
/**
* @author Mobius
@@ -809,8 +811,8 @@ public enum ExClientPackets
EX_GOODS_GIFT_LIST_INFO(0x256, null, ConnectionState.IN_GAME),
EX_GOODS_GIFT_ACCEPT(0x257, null, ConnectionState.IN_GAME),
EX_GOODS_GIFT_REFUSE(0x258, null, ConnectionState.IN_GAME),
- EX_WORLD_EXCHANGE_AVERAGE_PRICE(0x259, null, ConnectionState.IN_GAME),
- EX_WORLD_EXCHANGE_TOTAL_LIST(0x25A, null, ConnectionState.IN_GAME),
+ EX_WORLD_EXCHANGE_AVERAGE_PRICE(0x259, ExWorldExchangeAveragePrice::new, ConnectionState.IN_GAME),
+ EX_WORLD_EXCHANGE_TOTAL_LIST(0x25A, ExWorldExchangeTotalList::new, ConnectionState.IN_GAME),
EX_PRISON_USER_INFO(0x25B, null, ConnectionState.IN_GAME),
EX_PRISON_USER_DONATION(0x25C, null, ConnectionState.IN_GAME),
EX_MAX(0x25D, null, ConnectionState.IN_GAME);
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeAveragePrice.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeAveragePrice.java
new file mode 100644
index 0000000000..4bf9fe480c
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeAveragePrice.java
@@ -0,0 +1,49 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * 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 .
+ */
+package org.l2jmobius.gameserver.network.clientpackets.worldexchange;
+
+import org.l2jmobius.commons.network.ReadablePacket;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.network.GameClient;
+import org.l2jmobius.gameserver.network.clientpackets.ClientPacket;
+import org.l2jmobius.gameserver.network.serverpackets.worldexchange.WorldExchangeAveragePrice;
+
+/**
+ * @author Mobius
+ */
+public class ExWorldExchangeAveragePrice implements ClientPacket
+{
+ private int _itemId;
+
+ @Override
+ public void read(ReadablePacket packet)
+ {
+ _itemId = packet.readInt();
+ }
+
+ @Override
+ public void run(GameClient client)
+ {
+ final Player player = client.getPlayer();
+ if (player == null)
+ {
+ return;
+ }
+
+ player.sendPacket(new WorldExchangeAveragePrice(_itemId));
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeItemList.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeItemList.java
index fba344b68c..43fbd3c09a 100644
--- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeItemList.java
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeItemList.java
@@ -33,7 +33,6 @@ import org.l2jmobius.gameserver.network.serverpackets.worldexchange.WorldExchang
/**
* @author Index
*/
-
public class ExWorldExchangeItemList implements ClientPacket
{
private int _category;
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeTotalList.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeTotalList.java
new file mode 100644
index 0000000000..427fa09b4a
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeTotalList.java
@@ -0,0 +1,56 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * 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 .
+ */
+package org.l2jmobius.gameserver.network.clientpackets.worldexchange;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.l2jmobius.commons.network.ReadablePacket;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.network.GameClient;
+import org.l2jmobius.gameserver.network.clientpackets.ClientPacket;
+import org.l2jmobius.gameserver.network.serverpackets.worldexchange.WorldExchangeTotalList;
+
+/**
+ * @author Index
+ */
+public class ExWorldExchangeTotalList implements ClientPacket
+{
+ private final List itemIds = new LinkedList<>();
+
+ @Override
+ public void read(ReadablePacket packet)
+ {
+ final int size = packet.readInt();
+ for (int index = 0; index < size; index++)
+ {
+ itemIds.add(packet.readInt());
+ }
+ }
+
+ @Override
+ public void run(GameClient client)
+ {
+ final Player player = client.getPlayer();
+ if (player == null)
+ {
+ return;
+ }
+
+ player.sendPacket(new WorldExchangeTotalList(itemIds));
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/worldexchange/WorldExchangeAveragePrice.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/worldexchange/WorldExchangeAveragePrice.java
new file mode 100644
index 0000000000..80ee6a66fb
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/worldexchange/WorldExchangeAveragePrice.java
@@ -0,0 +1,44 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * 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 .
+ */
+package org.l2jmobius.gameserver.network.serverpackets.worldexchange;
+
+import org.l2jmobius.gameserver.instancemanager.WorldExchangeManager;
+import org.l2jmobius.gameserver.network.ServerPackets;
+import org.l2jmobius.gameserver.network.serverpackets.ServerPacket;
+
+/**
+ * @author Mobius
+ */
+public class WorldExchangeAveragePrice extends ServerPacket
+{
+ private final int _itemId;
+ private final long _averagePrice;
+
+ public WorldExchangeAveragePrice(int itemId)
+ {
+ _itemId = itemId;
+ _averagePrice = WorldExchangeManager.getInstance().getAveragePriceOfItem(itemId);
+ }
+
+ @Override
+ public void write()
+ {
+ ServerPackets.EX_WORLD_EXCHANGE_AVERAGE_PRICE.writeId(this);
+ writeInt(_itemId);
+ writeLong(_averagePrice);
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/worldexchange/WorldExchangeTotalList.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/worldexchange/WorldExchangeTotalList.java
new file mode 100644
index 0000000000..d7e17b2831
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/worldexchange/WorldExchangeTotalList.java
@@ -0,0 +1,49 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * 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 .
+ */
+package org.l2jmobius.gameserver.network.serverpackets.worldexchange;
+
+import java.util.Collection;
+
+import org.l2jmobius.gameserver.network.ServerPackets;
+import org.l2jmobius.gameserver.network.serverpackets.ServerPacket;
+
+/**
+ * @author Mobius
+ */
+public class WorldExchangeTotalList extends ServerPacket
+{
+ private final Collection _itemIds;
+
+ public WorldExchangeTotalList(Collection itemIds)
+ {
+ _itemIds = itemIds;
+ }
+
+ @Override
+ public void write()
+ {
+ ServerPackets.EX_WORLD_EXCHANGE_TOTAL_LIST.writeId(this);
+ writeInt(_itemIds.size());
+ for (int id : _itemIds)
+ {
+ writeInt(id); // ItemClassID
+ writeLong(0); // MinPricePerPiece
+ writeLong(0); // Price
+ writeLong(1); // Amount
+ }
+ }
+}
diff --git a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/instancemanager/WorldExchangeManager.java b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/instancemanager/WorldExchangeManager.java
index 7ed78242a2..76412fb2e5 100644
--- a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/instancemanager/WorldExchangeManager.java
+++ b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/instancemanager/WorldExchangeManager.java
@@ -848,6 +848,16 @@ public class WorldExchangeManager implements IXmlReader
Collections.reverse(sortedList);
break;
}
+ case PRICE_PER_PIECE_ASCE:
+ {
+ sortedList = sortedList.stream().sorted(Comparator.comparingLong(WorldExchangeHolder::getPrice)).collect(Collectors.toList());
+ break;
+ }
+ case PRICE_PER_PIECE_DESC:
+ {
+ sortedList = sortedList.stream().sorted(Comparator.comparingLong(WorldExchangeHolder::getPrice).reversed()).collect(Collectors.toList());
+ break;
+ }
}
if (sortedList.size() > 399)
@@ -1034,6 +1044,28 @@ public class WorldExchangeManager implements IXmlReader
}
}
+ /**
+ * Returns the average price of the specified item.
+ * @param itemId the ID of the item
+ * @return the average price, or 0 if there are no items with the specified ID
+ */
+ public long getAveragePriceOfItem(int itemId)
+ {
+ long totalPrice = 0;
+ long totalItemCount = 0;
+ for (WorldExchangeHolder holder : _itemBids.values())
+ {
+ if (holder.getItemInstance().getTemplate().getId() != itemId)
+ {
+ continue;
+ }
+
+ totalItemCount++;
+ totalPrice += holder.getPrice();
+ }
+ return totalItemCount == 0 ? 0 : totalPrice / totalItemCount;
+ }
+
public static WorldExchangeManager getInstance()
{
return WorldExchangeManager.SingletonHolder.INSTANCE;
diff --git a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/ExClientPackets.java b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/ExClientPackets.java
index 2f4a18895a..f52175af60 100644
--- a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/ExClientPackets.java
+++ b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/ExClientPackets.java
@@ -213,11 +213,13 @@ import org.l2jmobius.gameserver.network.clientpackets.variation.RequestConfirmGe
import org.l2jmobius.gameserver.network.clientpackets.variation.RequestRefine;
import org.l2jmobius.gameserver.network.clientpackets.vip.ExRequestVipInfo;
import org.l2jmobius.gameserver.network.clientpackets.vip.RequestVipLuckGameInfo;
+import org.l2jmobius.gameserver.network.clientpackets.worldexchange.ExWorldExchangeAveragePrice;
import org.l2jmobius.gameserver.network.clientpackets.worldexchange.ExWorldExchangeBuyItem;
import org.l2jmobius.gameserver.network.clientpackets.worldexchange.ExWorldExchangeItemList;
import org.l2jmobius.gameserver.network.clientpackets.worldexchange.ExWorldExchangeRegisterItem;
import org.l2jmobius.gameserver.network.clientpackets.worldexchange.ExWorldExchangeSettleList;
import org.l2jmobius.gameserver.network.clientpackets.worldexchange.ExWorldExchangeSettleRecvResult;
+import org.l2jmobius.gameserver.network.clientpackets.worldexchange.ExWorldExchangeTotalList;
/**
* @author Mobius
@@ -831,8 +833,8 @@ public enum ExClientPackets
EX_GOODS_GIFT_LIST_INFO(0x256, null, ConnectionState.IN_GAME),
EX_GOODS_GIFT_ACCEPT(0x257, null, ConnectionState.IN_GAME),
EX_GOODS_GIFT_REFUSE(0x258, null, ConnectionState.IN_GAME),
- EX_WORLD_EXCHANGE_AVERAGE_PRICE(0x259, null, ConnectionState.IN_GAME),
- EX_WORLD_EXCHANGE_TOTAL_LIST(0x25A, null, ConnectionState.IN_GAME),
+ EX_WORLD_EXCHANGE_AVERAGE_PRICE(0x259, ExWorldExchangeAveragePrice::new, ConnectionState.IN_GAME),
+ EX_WORLD_EXCHANGE_TOTAL_LIST(0x25A, ExWorldExchangeTotalList::new, ConnectionState.IN_GAME),
EX_PRISON_USER_INFO(0x25B, null, ConnectionState.IN_GAME),
EX_PRISON_USER_DONATION(0x25C, null, ConnectionState.IN_GAME),
EX_MAX(0x25D, null, ConnectionState.IN_GAME);
diff --git a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeAveragePrice.java b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeAveragePrice.java
new file mode 100644
index 0000000000..4bf9fe480c
--- /dev/null
+++ b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeAveragePrice.java
@@ -0,0 +1,49 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * 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 .
+ */
+package org.l2jmobius.gameserver.network.clientpackets.worldexchange;
+
+import org.l2jmobius.commons.network.ReadablePacket;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.network.GameClient;
+import org.l2jmobius.gameserver.network.clientpackets.ClientPacket;
+import org.l2jmobius.gameserver.network.serverpackets.worldexchange.WorldExchangeAveragePrice;
+
+/**
+ * @author Mobius
+ */
+public class ExWorldExchangeAveragePrice implements ClientPacket
+{
+ private int _itemId;
+
+ @Override
+ public void read(ReadablePacket packet)
+ {
+ _itemId = packet.readInt();
+ }
+
+ @Override
+ public void run(GameClient client)
+ {
+ final Player player = client.getPlayer();
+ if (player == null)
+ {
+ return;
+ }
+
+ player.sendPacket(new WorldExchangeAveragePrice(_itemId));
+ }
+}
diff --git a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeItemList.java b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeItemList.java
index fba344b68c..43fbd3c09a 100644
--- a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeItemList.java
+++ b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeItemList.java
@@ -33,7 +33,6 @@ import org.l2jmobius.gameserver.network.serverpackets.worldexchange.WorldExchang
/**
* @author Index
*/
-
public class ExWorldExchangeItemList implements ClientPacket
{
private int _category;
diff --git a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeTotalList.java b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeTotalList.java
new file mode 100644
index 0000000000..427fa09b4a
--- /dev/null
+++ b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/clientpackets/worldexchange/ExWorldExchangeTotalList.java
@@ -0,0 +1,56 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * 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 .
+ */
+package org.l2jmobius.gameserver.network.clientpackets.worldexchange;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.l2jmobius.commons.network.ReadablePacket;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.network.GameClient;
+import org.l2jmobius.gameserver.network.clientpackets.ClientPacket;
+import org.l2jmobius.gameserver.network.serverpackets.worldexchange.WorldExchangeTotalList;
+
+/**
+ * @author Index
+ */
+public class ExWorldExchangeTotalList implements ClientPacket
+{
+ private final List itemIds = new LinkedList<>();
+
+ @Override
+ public void read(ReadablePacket packet)
+ {
+ final int size = packet.readInt();
+ for (int index = 0; index < size; index++)
+ {
+ itemIds.add(packet.readInt());
+ }
+ }
+
+ @Override
+ public void run(GameClient client)
+ {
+ final Player player = client.getPlayer();
+ if (player == null)
+ {
+ return;
+ }
+
+ player.sendPacket(new WorldExchangeTotalList(itemIds));
+ }
+}
diff --git a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/serverpackets/worldexchange/WorldExchangeAveragePrice.java b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/serverpackets/worldexchange/WorldExchangeAveragePrice.java
new file mode 100644
index 0000000000..80ee6a66fb
--- /dev/null
+++ b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/serverpackets/worldexchange/WorldExchangeAveragePrice.java
@@ -0,0 +1,44 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * 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 .
+ */
+package org.l2jmobius.gameserver.network.serverpackets.worldexchange;
+
+import org.l2jmobius.gameserver.instancemanager.WorldExchangeManager;
+import org.l2jmobius.gameserver.network.ServerPackets;
+import org.l2jmobius.gameserver.network.serverpackets.ServerPacket;
+
+/**
+ * @author Mobius
+ */
+public class WorldExchangeAveragePrice extends ServerPacket
+{
+ private final int _itemId;
+ private final long _averagePrice;
+
+ public WorldExchangeAveragePrice(int itemId)
+ {
+ _itemId = itemId;
+ _averagePrice = WorldExchangeManager.getInstance().getAveragePriceOfItem(itemId);
+ }
+
+ @Override
+ public void write()
+ {
+ ServerPackets.EX_WORLD_EXCHANGE_AVERAGE_PRICE.writeId(this);
+ writeInt(_itemId);
+ writeLong(_averagePrice);
+ }
+}
diff --git a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/serverpackets/worldexchange/WorldExchangeTotalList.java b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/serverpackets/worldexchange/WorldExchangeTotalList.java
new file mode 100644
index 0000000000..d7e17b2831
--- /dev/null
+++ b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/serverpackets/worldexchange/WorldExchangeTotalList.java
@@ -0,0 +1,49 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * 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 .
+ */
+package org.l2jmobius.gameserver.network.serverpackets.worldexchange;
+
+import java.util.Collection;
+
+import org.l2jmobius.gameserver.network.ServerPackets;
+import org.l2jmobius.gameserver.network.serverpackets.ServerPacket;
+
+/**
+ * @author Mobius
+ */
+public class WorldExchangeTotalList extends ServerPacket
+{
+ private final Collection _itemIds;
+
+ public WorldExchangeTotalList(Collection itemIds)
+ {
+ _itemIds = itemIds;
+ }
+
+ @Override
+ public void write()
+ {
+ ServerPackets.EX_WORLD_EXCHANGE_TOTAL_LIST.writeId(this);
+ writeInt(_itemIds.size());
+ for (int id : _itemIds)
+ {
+ writeInt(id); // ItemClassID
+ writeLong(0); // MinPricePerPiece
+ writeLong(0); // Price
+ writeLong(1); // Amount
+ }
+ }
+}