Updated ExBuySellList.

Contributed by Index.
This commit is contained in:
MobiusDevelopment 2022-10-24 21:22:35 +00:00
parent 11955ae57f
commit b236848a58
16 changed files with 546 additions and 56 deletions

View File

@ -23,8 +23,8 @@ import org.l2jmobius.gameserver.data.xml.MultisellData;
import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.buylist.ProductList;
import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.BuyList;
import org.l2jmobius.gameserver.network.serverpackets.ExBuySellList;
import org.l2jmobius.gameserver.util.BuilderUtil;
@ -113,8 +113,9 @@ public class AdminShop implements IAdminCommandHandler
final ProductList buyList = BuyListData.getInstance().getBuyList(val);
if (buyList != null)
{
activeChar.sendPacket(new BuyList(buyList, activeChar, 0));
activeChar.sendPacket(new ExBuySellList(buyList, activeChar, 0));
activeChar.sendPacket(new ExBuySellList(activeChar, false));
activeChar.sendPacket(new ExBuySellList((Castle) null, false));
}
else
{

View File

@ -48,7 +48,6 @@ import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.serverpackets.BuyList;
import org.l2jmobius.gameserver.network.serverpackets.ExBuySellList;
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
import org.l2jmobius.gameserver.network.serverpackets.ShowBoard;
@ -168,7 +167,7 @@ public class HomeBoard implements IParseBoardHandler
{
final String page = command.replace("_bbssell;", "");
returnHtml = HtmCache.getInstance().getHtm(player, "data/html/CommunityBoard/Custom/" + page + ".html");
player.sendPacket(new BuyList(BuyListData.getInstance().getBuyList(423), player, 0));
player.sendPacket(new ExBuySellList(BuyListData.getInstance().getBuyList(423), player, 0));
player.sendPacket(new ExBuySellList(player, false));
}
else if (command.startsWith("_bbsteleport"))

View File

@ -24,7 +24,6 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.buylist.ProductList;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.BuyList;
import org.l2jmobius.gameserver.network.serverpackets.ExBuySellList;
/**
@ -87,7 +86,8 @@ public class Merchant extends Folk
player.setInventoryBlockingStatus(true);
player.sendPacket(new BuyList(buyList, player, (applyCastleTax) ? getCastleTaxRate(TaxType.BUY) : 0));
player.sendPacket(new ExBuySellList(buyList, player, (applyCastleTax) ? getCastleTaxRate(TaxType.BUY) : 0));
player.sendPacket(new ExBuySellList(player, false));
player.sendPacket(new ExBuySellList(getCastle(), applyCastleTax));
}
}

View File

@ -24,21 +24,62 @@ import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.buylist.Product;
import org.l2jmobius.gameserver.model.buylist.ProductList;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.network.OutgoingPackets;
import org.l2jmobius.gameserver.network.PacketLogger;
/**
* @author ShanSoft
* @author ShanSoft, Index
*/
public class ExBuySellList extends AbstractItemPacket
{
private final List<Item> _sellList = new ArrayList<>();
private Collection<Item> _refundList = null;
private final boolean _done;
public static final int BUY_SELL_LIST_BUY = 0;
public static final int BUY_SELL_LIST_SELL = 1;
public static final int BUY_SELL_LIST_UNK = 2;
public static final int BUY_SELL_LIST_TAX = 3;
public static final int UNK_SELECT_FIRST_TAB = 0;
public static final int UNK_SHOW_PURCHASE_LIST = 1;
public static final int UNK_SEND_NOT_ENOUGH_ADENA_MESSAGE = 2;
public static final int UNK_SEND_INCORRECT_ITEM_MESSAGE = 3;
private final int _inventorySlots;
private final int _type;
// buy type - BUY
private long _money;
private double _castleTaxRate;
private Collection<Product> _list;
private int _listId;
// buy type - SELL
private final List<Item> _sellList = new ArrayList<>();
private final Collection<Item> _refundList = new ArrayList<>();
private boolean _done;
// buy type = unk
private int _unkType;
// buy type - send tax
private int _nearestCastle;
private boolean _applyTax;
public ExBuySellList(ProductList list, Player player, double castleTaxRate)
{
_type = BUY_SELL_LIST_BUY;
_listId = list.getListId();
_list = list.getProducts();
_money = player.getAdena();
_inventorySlots = player.getInventory().getNonQuestSize();
_castleTaxRate = castleTaxRate;
}
public ExBuySellList(Player player, boolean done)
{
_type = BUY_SELL_LIST_SELL;
final Summon pet = player.getPet();
for (Item item : player.getInventory().getItems())
{
@ -50,18 +91,76 @@ public class ExBuySellList extends AbstractItemPacket
_inventorySlots = player.getInventory().getNonQuestSize();
if (player.hasRefund())
{
_refundList = player.getRefund().getItems();
_refundList.addAll(player.getRefund().getItems());
}
_done = done;
}
public ExBuySellList(int type)
{
_type = BUY_SELL_LIST_UNK;
_unkType = type;
_inventorySlots = 0;
}
public ExBuySellList(Castle nearestCastle, boolean applyTax)
{
_type = BUY_SELL_LIST_TAX;
_inventorySlots = 0;
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_BUY_SELL_LIST.writeId(packet);
packet.writeD(1); // Type SELL
packet.writeD(_type);
switch (_type)
{
case BUY_SELL_LIST_BUY:
{
return sendBuyList(packet);
}
case BUY_SELL_LIST_SELL:
{
return sendSellList(packet);
}
case BUY_SELL_LIST_UNK:
{
return sendUnk(packet);
}
case BUY_SELL_LIST_TAX:
{
return sendCurrentTax(packet);
}
default:
{
PacketLogger.warning(getClass().getSimpleName() + ": unknown type " + _type);
return false;
}
}
}
private boolean sendBuyList(PacketWriter packet)
{
packet.writeQ(_money); // current money
packet.writeD(_listId);
packet.writeD(_inventorySlots);
if ((_sellList != null))
packet.writeH(_list.size());
for (Product product : _list)
{
if ((product.getCount() > 0) || !product.hasLimitedStock())
{
writeItem(packet, product);
packet.writeQ((long) (product.getPrice() * (1.0 + _castleTaxRate + product.getBaseTaxRate())));
}
}
return true;
}
private boolean sendSellList(PacketWriter packet)
{
packet.writeD(_inventorySlots);
if (!_sellList.isEmpty())
{
packet.writeH(_sellList.size());
for (Item item : _sellList)
@ -74,7 +173,7 @@ public class ExBuySellList extends AbstractItemPacket
{
packet.writeH(0);
}
if ((_refundList != null) && !_refundList.isEmpty())
if (!_refundList.isEmpty())
{
packet.writeH(_refundList.size());
int i = 0;
@ -92,4 +191,21 @@ public class ExBuySellList extends AbstractItemPacket
packet.writeC(_done ? 1 : 0);
return true;
}
private boolean sendUnk(PacketWriter packet)
{
packet.writeC(_unkType);
return true;
}
private boolean sendCurrentTax(PacketWriter packet)
{
packet.writeD(_nearestCastle);
if (_nearestCastle != 0)
{
packet.writeD(_nearestCastle);
packet.writeD(_applyTax ? (int) _castleTaxRate : 0);
}
return true;
}
}

View File

@ -23,8 +23,8 @@ import org.l2jmobius.gameserver.data.xml.MultisellData;
import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.buylist.ProductList;
import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.BuyList;
import org.l2jmobius.gameserver.network.serverpackets.ExBuySellList;
import org.l2jmobius.gameserver.util.BuilderUtil;
@ -113,8 +113,9 @@ public class AdminShop implements IAdminCommandHandler
final ProductList buyList = BuyListData.getInstance().getBuyList(val);
if (buyList != null)
{
activeChar.sendPacket(new BuyList(buyList, activeChar, 0));
activeChar.sendPacket(new ExBuySellList(buyList, activeChar, 0));
activeChar.sendPacket(new ExBuySellList(activeChar, false));
activeChar.sendPacket(new ExBuySellList((Castle) null, false));
}
else
{

View File

@ -48,7 +48,6 @@ import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.serverpackets.BuyList;
import org.l2jmobius.gameserver.network.serverpackets.ExBuySellList;
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
import org.l2jmobius.gameserver.network.serverpackets.ShowBoard;
@ -168,7 +167,7 @@ public class HomeBoard implements IParseBoardHandler
{
final String page = command.replace("_bbssell;", "");
returnHtml = HtmCache.getInstance().getHtm(player, "data/html/CommunityBoard/Custom/" + page + ".html");
player.sendPacket(new BuyList(BuyListData.getInstance().getBuyList(423), player, 0));
player.sendPacket(new ExBuySellList(BuyListData.getInstance().getBuyList(423), player, 0));
player.sendPacket(new ExBuySellList(player, false));
}
else if (command.startsWith("_bbsteleport"))

View File

@ -24,7 +24,6 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.buylist.ProductList;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.BuyList;
import org.l2jmobius.gameserver.network.serverpackets.ExBuySellList;
/**
@ -87,7 +86,8 @@ public class Merchant extends Folk
player.setInventoryBlockingStatus(true);
player.sendPacket(new BuyList(buyList, player, (applyCastleTax) ? getCastleTaxRate(TaxType.BUY) : 0));
player.sendPacket(new ExBuySellList(buyList, player, (applyCastleTax) ? getCastleTaxRate(TaxType.BUY) : 0));
player.sendPacket(new ExBuySellList(player, false));
player.sendPacket(new ExBuySellList(getCastle(), applyCastleTax));
}
}

View File

@ -24,21 +24,62 @@ import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.buylist.Product;
import org.l2jmobius.gameserver.model.buylist.ProductList;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.network.OutgoingPackets;
import org.l2jmobius.gameserver.network.PacketLogger;
/**
* @author ShanSoft
* @author ShanSoft, Index
*/
public class ExBuySellList extends AbstractItemPacket
{
private final List<Item> _sellList = new ArrayList<>();
private Collection<Item> _refundList = null;
private final boolean _done;
public static final int BUY_SELL_LIST_BUY = 0;
public static final int BUY_SELL_LIST_SELL = 1;
public static final int BUY_SELL_LIST_UNK = 2;
public static final int BUY_SELL_LIST_TAX = 3;
public static final int UNK_SELECT_FIRST_TAB = 0;
public static final int UNK_SHOW_PURCHASE_LIST = 1;
public static final int UNK_SEND_NOT_ENOUGH_ADENA_MESSAGE = 2;
public static final int UNK_SEND_INCORRECT_ITEM_MESSAGE = 3;
private final int _inventorySlots;
private final int _type;
// buy type - BUY
private long _money;
private double _castleTaxRate;
private Collection<Product> _list;
private int _listId;
// buy type - SELL
private final List<Item> _sellList = new ArrayList<>();
private final Collection<Item> _refundList = new ArrayList<>();
private boolean _done;
// buy type = unk
private int _unkType;
// buy type - send tax
private int _nearestCastle;
private boolean _applyTax;
public ExBuySellList(ProductList list, Player player, double castleTaxRate)
{
_type = BUY_SELL_LIST_BUY;
_listId = list.getListId();
_list = list.getProducts();
_money = player.getAdena();
_inventorySlots = player.getInventory().getNonQuestSize();
_castleTaxRate = castleTaxRate;
}
public ExBuySellList(Player player, boolean done)
{
_type = BUY_SELL_LIST_SELL;
final Summon pet = player.getPet();
for (Item item : player.getInventory().getItems())
{
@ -50,18 +91,76 @@ public class ExBuySellList extends AbstractItemPacket
_inventorySlots = player.getInventory().getNonQuestSize();
if (player.hasRefund())
{
_refundList = player.getRefund().getItems();
_refundList.addAll(player.getRefund().getItems());
}
_done = done;
}
public ExBuySellList(int type)
{
_type = BUY_SELL_LIST_UNK;
_unkType = type;
_inventorySlots = 0;
}
public ExBuySellList(Castle nearestCastle, boolean applyTax)
{
_type = BUY_SELL_LIST_TAX;
_inventorySlots = 0;
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_BUY_SELL_LIST.writeId(packet);
packet.writeD(1); // Type SELL
packet.writeD(_type);
switch (_type)
{
case BUY_SELL_LIST_BUY:
{
return sendBuyList(packet);
}
case BUY_SELL_LIST_SELL:
{
return sendSellList(packet);
}
case BUY_SELL_LIST_UNK:
{
return sendUnk(packet);
}
case BUY_SELL_LIST_TAX:
{
return sendCurrentTax(packet);
}
default:
{
PacketLogger.warning(getClass().getSimpleName() + ": unknown type " + _type);
return false;
}
}
}
private boolean sendBuyList(PacketWriter packet)
{
packet.writeQ(_money); // current money
packet.writeD(_listId);
packet.writeD(_inventorySlots);
if ((_sellList != null))
packet.writeH(_list.size());
for (Product product : _list)
{
if ((product.getCount() > 0) || !product.hasLimitedStock())
{
writeItem(packet, product);
packet.writeQ((long) (product.getPrice() * (1.0 + _castleTaxRate + product.getBaseTaxRate())));
}
}
return true;
}
private boolean sendSellList(PacketWriter packet)
{
packet.writeD(_inventorySlots);
if (!_sellList.isEmpty())
{
packet.writeH(_sellList.size());
for (Item item : _sellList)
@ -74,7 +173,7 @@ public class ExBuySellList extends AbstractItemPacket
{
packet.writeH(0);
}
if ((_refundList != null) && !_refundList.isEmpty())
if (!_refundList.isEmpty())
{
packet.writeH(_refundList.size());
int i = 0;
@ -92,4 +191,21 @@ public class ExBuySellList extends AbstractItemPacket
packet.writeC(_done ? 1 : 0);
return true;
}
private boolean sendUnk(PacketWriter packet)
{
packet.writeC(_unkType);
return true;
}
private boolean sendCurrentTax(PacketWriter packet)
{
packet.writeD(_nearestCastle);
if (_nearestCastle != 0)
{
packet.writeD(_nearestCastle);
packet.writeD(_applyTax ? (int) _castleTaxRate : 0);
}
return true;
}
}

View File

@ -24,7 +24,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.buylist.ProductList;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.BuyList;
import org.l2jmobius.gameserver.network.serverpackets.ExBuySellList;
import org.l2jmobius.gameserver.util.BuilderUtil;
@ -113,8 +112,9 @@ public class AdminShop implements IAdminCommandHandler
final ProductList buyList = BuyListData.getInstance().getBuyList(val);
if (buyList != null)
{
activeChar.sendPacket(new BuyList(buyList, activeChar, 0));
activeChar.sendPacket(new ExBuySellList(buyList, activeChar, 0));
activeChar.sendPacket(new ExBuySellList(activeChar, false));
activeChar.sendPacket(new ExBuySellList(false));
}
else
{

View File

@ -46,7 +46,6 @@ import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.serverpackets.BuyList;
import org.l2jmobius.gameserver.network.serverpackets.ExBuySellList;
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
import org.l2jmobius.gameserver.network.serverpackets.ShowBoard;
@ -165,7 +164,7 @@ public class HomeBoard implements IParseBoardHandler
{
final String page = command.replace("_bbssell;", "");
returnHtml = HtmCache.getInstance().getHtm(player, "data/html/CommunityBoard/Custom/" + page + ".html");
player.sendPacket(new BuyList(BuyListData.getInstance().getBuyList(423), player, 0));
player.sendPacket(new ExBuySellList(BuyListData.getInstance().getBuyList(423), player, 0));
player.sendPacket(new ExBuySellList(player, false));
}
else if (command.startsWith("_bbsteleport"))

View File

@ -24,7 +24,6 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.buylist.ProductList;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.BuyList;
import org.l2jmobius.gameserver.network.serverpackets.ExBuySellList;
/**
@ -87,7 +86,8 @@ public class Merchant extends Folk
player.setInventoryBlockingStatus(true);
player.sendPacket(new BuyList(buyList, player, (applyCastleTax) ? getCastleTaxRate(TaxType.BUY) : 0));
player.sendPacket(new ExBuySellList(buyList, player, (applyCastleTax) ? getCastleTaxRate(TaxType.BUY) : 0));
player.sendPacket(new ExBuySellList(player, false));
player.sendPacket(new ExBuySellList(applyCastleTax));
}
}

View File

@ -22,23 +22,71 @@ import java.util.List;
import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.enums.TaxType;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.buylist.Product;
import org.l2jmobius.gameserver.model.buylist.ProductList;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.network.OutgoingPackets;
import org.l2jmobius.gameserver.network.PacketLogger;
/**
* @author ShanSoft
* @author ShanSoft, Index
*/
public class ExBuySellList extends AbstractItemPacket
{
private final List<Item> _sellList = new ArrayList<>();
private Collection<Item> _refundList = null;
private final boolean _done;
public static final int BUY_SELL_LIST_BUY = 0;
public static final int BUY_SELL_LIST_SELL = 1;
public static final int BUY_SELL_LIST_UNK = 2;
public static final int BUY_SELL_LIST_TAX = 3;
public static final int UNK_SELECT_FIRST_TAB = 0;
public static final int UNK_SHOW_PURCHASE_LIST = 1;
public static final int UNK_SEND_NOT_ENOUGH_ADENA_MESSAGE = 2;
public static final int UNK_SEND_INCORRECT_ITEM_MESSAGE = 3;
private static final int[] CASTLES =
{
3, // Giran
7, // Goddart
5, // Aden
};
private final int _inventorySlots;
private final int _type;
// buy type - BUY
private long _money;
private double _castleTaxRate;
private Collection<Product> _list;
private int _listId;
// buy type - SELL
private final List<Item> _sellList = new ArrayList<>();
private final Collection<Item> _refundList = new ArrayList<>();
private boolean _done;
// buy type = unk
private int _unkType;
// buy type - send tax
private boolean _applyTax;
public ExBuySellList(ProductList list, Player player, double castleTaxRate)
{
_type = BUY_SELL_LIST_BUY;
_listId = list.getListId();
_list = list.getProducts();
_money = player.getAdena();
_inventorySlots = player.getInventory().getNonQuestSize();
_castleTaxRate = castleTaxRate;
}
public ExBuySellList(Player player, boolean done)
{
_type = BUY_SELL_LIST_SELL;
final Summon pet = player.getPet();
for (Item item : player.getInventory().getItems())
{
@ -50,18 +98,76 @@ public class ExBuySellList extends AbstractItemPacket
_inventorySlots = player.getInventory().getNonQuestSize();
if (player.hasRefund())
{
_refundList = player.getRefund().getItems();
_refundList.addAll(player.getRefund().getItems());
}
_done = done;
}
public ExBuySellList(int type)
{
_type = BUY_SELL_LIST_UNK;
_unkType = type;
_inventorySlots = 0;
}
public ExBuySellList(boolean applyTax)
{
_type = BUY_SELL_LIST_TAX;
_inventorySlots = 0;
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_BUY_SELL_LIST.writeId(packet);
packet.writeD(1); // Type SELL
packet.writeD(_type);
switch (_type)
{
case BUY_SELL_LIST_BUY:
{
return sendBuyList(packet);
}
case BUY_SELL_LIST_SELL:
{
return sendSellList(packet);
}
case BUY_SELL_LIST_UNK:
{
return sendUnk(packet);
}
case BUY_SELL_LIST_TAX:
{
return sendCurrentTax(packet);
}
default:
{
PacketLogger.warning(getClass().getSimpleName() + ": unknown type " + _type);
return false;
}
}
}
private boolean sendBuyList(PacketWriter packet)
{
packet.writeQ(_money); // current money
packet.writeD(_listId);
packet.writeD(_inventorySlots);
if ((_sellList != null))
packet.writeH(_list.size());
for (Product product : _list)
{
if ((product.getCount() > 0) || !product.hasLimitedStock())
{
writeItem(packet, product);
packet.writeQ((long) (product.getPrice() * (1.0 + _castleTaxRate + product.getBaseTaxRate())));
}
}
return true;
}
private boolean sendSellList(PacketWriter packet)
{
packet.writeD(_inventorySlots);
if (!_sellList.isEmpty())
{
packet.writeH(_sellList.size());
for (Item item : _sellList)
@ -74,7 +180,7 @@ public class ExBuySellList extends AbstractItemPacket
{
packet.writeH(0);
}
if ((_refundList != null) && !_refundList.isEmpty())
if (!_refundList.isEmpty())
{
packet.writeH(_refundList.size());
int i = 0;
@ -92,4 +198,28 @@ public class ExBuySellList extends AbstractItemPacket
packet.writeC(_done ? 1 : 0);
return true;
}
private boolean sendUnk(PacketWriter packet)
{
packet.writeC(_unkType);
return true;
}
private boolean sendCurrentTax(PacketWriter packet)
{
packet.writeD(CASTLES.length);
for (int id : CASTLES)
{
packet.writeD(id); // residence id
try
{
packet.writeD(_applyTax ? CastleManager.getInstance().getCastleById(id).getTaxPercent(TaxType.BUY) : 0); // residence tax
}
catch (NullPointerException ignored)
{
packet.writeD(0);
}
}
return true;
}
}

View File

@ -24,7 +24,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.buylist.ProductList;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.BuyList;
import org.l2jmobius.gameserver.network.serverpackets.ExBuySellList;
import org.l2jmobius.gameserver.util.BuilderUtil;
@ -113,8 +112,9 @@ public class AdminShop implements IAdminCommandHandler
final ProductList buyList = BuyListData.getInstance().getBuyList(val);
if (buyList != null)
{
activeChar.sendPacket(new BuyList(buyList, activeChar, 0));
activeChar.sendPacket(new ExBuySellList(buyList, activeChar, 0));
activeChar.sendPacket(new ExBuySellList(activeChar, false));
activeChar.sendPacket(new ExBuySellList(false));
}
else
{

View File

@ -46,7 +46,6 @@ import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.serverpackets.BuyList;
import org.l2jmobius.gameserver.network.serverpackets.ExBuySellList;
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
import org.l2jmobius.gameserver.network.serverpackets.ShowBoard;
@ -165,7 +164,7 @@ public class HomeBoard implements IParseBoardHandler
{
final String page = command.replace("_bbssell;", "");
returnHtml = HtmCache.getInstance().getHtm(player, "data/html/CommunityBoard/Custom/" + page + ".html");
player.sendPacket(new BuyList(BuyListData.getInstance().getBuyList(423), player, 0));
player.sendPacket(new ExBuySellList(BuyListData.getInstance().getBuyList(423), player, 0));
player.sendPacket(new ExBuySellList(player, false));
}
else if (command.startsWith("_bbsteleport"))

View File

@ -24,7 +24,6 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.buylist.ProductList;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.BuyList;
import org.l2jmobius.gameserver.network.serverpackets.ExBuySellList;
/**
@ -87,7 +86,8 @@ public class Merchant extends Folk
player.setInventoryBlockingStatus(true);
player.sendPacket(new BuyList(buyList, player, (applyCastleTax) ? getCastleTaxRate(TaxType.BUY) : 0));
player.sendPacket(new ExBuySellList(buyList, player, (applyCastleTax) ? getCastleTaxRate(TaxType.BUY) : 0));
player.sendPacket(new ExBuySellList(player, false));
player.sendPacket(new ExBuySellList(applyCastleTax));
}
}

View File

@ -22,23 +22,71 @@ import java.util.List;
import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.enums.TaxType;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.buylist.Product;
import org.l2jmobius.gameserver.model.buylist.ProductList;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.network.OutgoingPackets;
import org.l2jmobius.gameserver.network.PacketLogger;
/**
* @author ShanSoft
* @author ShanSoft, Index
*/
public class ExBuySellList extends AbstractItemPacket
{
private final List<Item> _sellList = new ArrayList<>();
private Collection<Item> _refundList = null;
private final boolean _done;
public static final int BUY_SELL_LIST_BUY = 0;
public static final int BUY_SELL_LIST_SELL = 1;
public static final int BUY_SELL_LIST_UNK = 2;
public static final int BUY_SELL_LIST_TAX = 3;
public static final int UNK_SELECT_FIRST_TAB = 0;
public static final int UNK_SHOW_PURCHASE_LIST = 1;
public static final int UNK_SEND_NOT_ENOUGH_ADENA_MESSAGE = 2;
public static final int UNK_SEND_INCORRECT_ITEM_MESSAGE = 3;
private static final int[] CASTLES =
{
3, // Giran
7, // Goddart
5, // Aden
};
private final int _inventorySlots;
private final int _type;
// buy type - BUY
private long _money;
private double _castleTaxRate;
private Collection<Product> _list;
private int _listId;
// buy type - SELL
private final List<Item> _sellList = new ArrayList<>();
private final Collection<Item> _refundList = new ArrayList<>();
private boolean _done;
// buy type = unk
private int _unkType;
// buy type - send tax
private boolean _applyTax;
public ExBuySellList(ProductList list, Player player, double castleTaxRate)
{
_type = BUY_SELL_LIST_BUY;
_listId = list.getListId();
_list = list.getProducts();
_money = player.getAdena();
_inventorySlots = player.getInventory().getNonQuestSize();
_castleTaxRate = castleTaxRate;
}
public ExBuySellList(Player player, boolean done)
{
_type = BUY_SELL_LIST_SELL;
final Summon pet = player.getPet();
for (Item item : player.getInventory().getItems())
{
@ -50,18 +98,76 @@ public class ExBuySellList extends AbstractItemPacket
_inventorySlots = player.getInventory().getNonQuestSize();
if (player.hasRefund())
{
_refundList = player.getRefund().getItems();
_refundList.addAll(player.getRefund().getItems());
}
_done = done;
}
public ExBuySellList(int type)
{
_type = BUY_SELL_LIST_UNK;
_unkType = type;
_inventorySlots = 0;
}
public ExBuySellList(boolean applyTax)
{
_type = BUY_SELL_LIST_TAX;
_inventorySlots = 0;
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_BUY_SELL_LIST.writeId(packet);
packet.writeD(1); // Type SELL
packet.writeD(_type);
switch (_type)
{
case BUY_SELL_LIST_BUY:
{
return sendBuyList(packet);
}
case BUY_SELL_LIST_SELL:
{
return sendSellList(packet);
}
case BUY_SELL_LIST_UNK:
{
return sendUnk(packet);
}
case BUY_SELL_LIST_TAX:
{
return sendCurrentTax(packet);
}
default:
{
PacketLogger.warning(getClass().getSimpleName() + ": unknown type " + _type);
return false;
}
}
}
private boolean sendBuyList(PacketWriter packet)
{
packet.writeQ(_money); // current money
packet.writeD(_listId);
packet.writeD(_inventorySlots);
if ((_sellList != null))
packet.writeH(_list.size());
for (Product product : _list)
{
if ((product.getCount() > 0) || !product.hasLimitedStock())
{
writeItem(packet, product);
packet.writeQ((long) (product.getPrice() * (1.0 + _castleTaxRate + product.getBaseTaxRate())));
}
}
return true;
}
private boolean sendSellList(PacketWriter packet)
{
packet.writeD(_inventorySlots);
if (!_sellList.isEmpty())
{
packet.writeH(_sellList.size());
for (Item item : _sellList)
@ -74,7 +180,7 @@ public class ExBuySellList extends AbstractItemPacket
{
packet.writeH(0);
}
if ((_refundList != null) && !_refundList.isEmpty())
if (!_refundList.isEmpty())
{
packet.writeH(_refundList.size());
int i = 0;
@ -92,4 +198,28 @@ public class ExBuySellList extends AbstractItemPacket
packet.writeC(_done ? 1 : 0);
return true;
}
private boolean sendUnk(PacketWriter packet)
{
packet.writeC(_unkType);
return true;
}
private boolean sendCurrentTax(PacketWriter packet)
{
packet.writeD(CASTLES.length);
for (int id : CASTLES)
{
packet.writeD(id); // residence id
try
{
packet.writeD(_applyTax ? CastleManager.getInstance().getCastleById(id).getTaxPercent(TaxType.BUY) : 0); // residence tax
}
catch (NullPointerException ignored)
{
packet.writeD(0);
}
}
return true;
}
}